X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fjournal%2Fcoredump.c;h=88d720f6517c8c82e4b73cecfbe4771f570bf95d;hp=fee0a909dc5f804394aace750a66c16d991e26d8;hb=b26c631ac99ac7f4f5cfa5b9b933f0bb22cace97;hpb=7de80bfe2e61d5818601ccfddbadad3b7703ed70 diff --git a/src/journal/coredump.c b/src/journal/coredump.c index fee0a909d..88d720f65 100644 --- a/src/journal/coredump.c +++ b/src/journal/coredump.c @@ -26,8 +26,13 @@ #include #include -#include -#include +#ifdef HAVE_ELFUTILS +# include +# include +#endif + +#include "systemd/sd-journal.h" +#include "systemd/sd-login.h" #include "log.h" #include "util.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)); }