chiark / gitweb /
journal: log user units for coredumps and show them in systemctl status
authorMirco Tischler <mt-ml@gmx.de>
Mon, 4 Feb 2013 14:13:23 +0000 (15:13 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 7 Feb 2013 06:02:34 +0000 (01:02 -0500)
src/journal/coredump.c
src/shared/logs-show.c

index c989be9..91528d3 100644 (file)
@@ -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);
index 034fde6..7dacccf 100644 (file)
@@ -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;
 
@@ -996,9 +997,20 @@ int show_journal_by_user_unit(
         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;
 
         r = show_journal(f, j, mode, n_columns, not_before, how_many, flags);
         if (r < 0)