X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjournal%2Fcoredump.c;h=88d720f6517c8c82e4b73cecfbe4771f570bf95d;hb=455971c1493fc6dc3125d235cf4ea6102cac626d;hp=db51098d9cfbb97927d66ef46a7d2042eb4d8ff0;hpb=73f860db9893deab6aebceb53dd7d0deb662e832;p=elogind.git diff --git a/src/journal/coredump.c b/src/journal/coredump.c index db51098d9..88d720f65 100644 --- a/src/journal/coredump.c +++ b/src/journal/coredump.c @@ -26,6 +26,11 @@ #include #include +#ifdef HAVE_ELFUTILS +# include +# include +#endif + #include "systemd/sd-journal.h" #include "systemd/sd-login.h" @@ -668,9 +673,9 @@ int main(int argc, char* argv[]) { /* Now, let's drop privileges to become the user who owns the * segfaulted process and allocate the coredump memory under - * his uid. This also ensures that the credentials journald - * will see are the ones of the coredumping user, thus making - * sure the user himself gets access to the core dump. */ + * the user's uid. This also ensures that the credentials + * journald will see are the ones of the coredumping user, + * thus making sure the user gets access to the core dump. */ if (setresgid(gid, gid, gid) < 0 || setresuid(uid, uid, uid) < 0) { log_error("Failed to drop privileges: %m"); @@ -686,6 +691,8 @@ int main(int argc, char* argv[]) { r = coredump_make_stack_trace(coredump_fd, exe, &stacktrace); if (r >= 0) core_message = strjoin("MESSAGE=Process ", info[INFO_PID], " (", comm, ") of user ", info[INFO_UID], " dumped core.\n\n", stacktrace, NULL); + else if (r == -EINVAL) + log_warning("Failed to generate stack trace: %s", dwfl_errmsg(dwfl_errno())); else log_warning("Failed to generate stack trace: %s", strerror(-r)); }