From f9045468945cd06fad84f9fbf44019c6813fc50a Mon Sep 17 00:00:00 2001 From: Mirco Tischler Date: Mon, 4 Feb 2013 15:13:23 +0100 Subject: [PATCH] journal: log user units for coredumps and show them in systemctl status --- src/journal/coredump.c | 9 ++++++--- src/shared/logs-show.c | 18 +++++++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/journal/coredump.c b/src/journal/coredump.c index c989be9b8..91528d3c8 100644 --- a/src/journal/coredump.c +++ b/src/journal/coredump.c @@ -144,11 +144,14 @@ int main(int argc, char* argv[]) { core_unit = strappend("COREDUMP_UNIT=", t); free(t); - - if (core_unit) - IOVEC_SET_STRING(iovec[j++], core_unit); + } else if (cg_pid_get_user_unit(pid, &t) >= 0) { + core_unit = strappend("COREDUMP_USER_UNIT=", t); + free(t); } + if (core_unit) + IOVEC_SET_STRING(iovec[j++], core_unit); + /* OK, now we know it's not the journal, hence make use of * it */ log_set_target(LOG_TARGET_JOURNAL_OR_KMSG); diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index 034fde662..7dacccf6a 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -954,7 +954,7 @@ int show_journal_by_user_unit( uid_t uid, OutputFlags flags) { - _cleanup_free_ char *m1 = NULL, *m2 = NULL, *m3 = NULL; + _cleanup_free_ char *m1 = NULL, *m2 = NULL, *m3 = NULL, *m4 = NULL; sd_journal *j = NULL; int r; @@ -972,7 +972,8 @@ int show_journal_by_user_unit( if (asprintf(&m1, "_SYSTEMD_USER_UNIT=%s", unit) < 0 || asprintf(&m2, "USER_UNIT=%s", unit) < 0 || - asprintf(&m3, "_UID=%d", uid) < 0) { + asprintf(&m3, "COREDUMP_USER_UNIT=%s", unit) < 0 || + asprintf(&m4, "_UID=%d", uid) < 0) { r = -ENOMEM; goto finish; } @@ -985,7 +986,7 @@ int show_journal_by_user_unit( r = sd_journal_add_match(j, m1, 0); if (r < 0) goto finish; - r = sd_journal_add_match(j, m3, 0); + r = sd_journal_add_match(j, m4, 0); if (r < 0) goto finish; @@ -994,9 +995,20 @@ int show_journal_by_user_unit( if (r < 0) goto finish; r = sd_journal_add_match(j, m2, 0); + if (r < 0) + goto finish; + r = sd_journal_add_match(j, m4, 0); + if (r < 0) + goto finish; + + /* Look for coredumps of the service */ + r = sd_journal_add_disjunction(j); if (r < 0) goto finish; r = sd_journal_add_match(j, m3, 0); + if (r < 0) + goto finish; + r = sd_journal_add_match(j, m4, 0); if (r < 0) goto finish; -- 2.30.2