[systemd-commits] src/journal

Lennart Poettering lennart at kemper.freedesktop.org
Tue Feb 12 16:02:36 PST 2013


 src/journal/journald-server.c |   18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

New commits:
commit 759c945a43577d56e85a927f15e7d9aaa94a4e4a
Author: Colin Walters <walters at verbum.org>
Date:   Tue Feb 12 12:24:30 2013 -0500

    journal: Don't use loginuid if it's not valid
    
    Code above this attempted to load loginuid, if this failed for
    whatever reason, we'd still end up using that value (0) in place of
    realuid.  Fix this by setting a bool when we know the loginuid is
    valid.
    
    This fixes journal messages showing up in per-user journals in
    gnome-ostree (not configured with loginuid, but I'll shortly fix
    that).

diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
index 12a46e6..1375d7a 100644
--- a/src/journal/journald-server.c
+++ b/src/journal/journald-server.c
@@ -515,6 +515,8 @@ static void dispatch_message_real(
         int r;
         char *t;
         uid_t loginuid = 0, realuid = 0;
+        uid_t journal_uid;
+        bool loginuid_valid = false;
 
         assert(s);
         assert(iovec);
@@ -571,9 +573,11 @@ static void dispatch_message_real(
                                 IOVEC_SET_STRING(iovec[n++], audit_session);
 
                 r = audit_loginuid_from_pid(ucred->pid, &loginuid);
-                if (r >= 0)
+                if (r >= 0) {
+                        loginuid_valid = true;
                         if (asprintf(&audit_loginuid, "_AUDIT_LOGINUID=%lu", (unsigned long) loginuid) >= 0)
                                 IOVEC_SET_STRING(iovec[n++], audit_loginuid);
+                }
 
                 t = shortened_cgroup_path(ucred->pid);
                 if (t) {
@@ -666,10 +670,14 @@ static void dispatch_message_real(
 
         assert(n <= m);
 
-        write_to_journal(s,
-                         s->split_mode == SPLIT_NONE ? 0 :
-                         (s->split_mode == SPLIT_UID ? realuid :
-                          (realuid == 0 ? 0 : loginuid)), iovec, n);
+        if (s->split_mode == SPLIT_NONE)
+                journal_uid = 0;
+        else if (s->split_mode == SPLIT_UID || realuid == 0 || !loginuid_valid)
+                journal_uid = realuid;
+        else
+                journal_uid = loginuid;
+
+        write_to_journal(s, journal_uid, iovec, n);
 }
 
 void server_driver_message(Server *s, sd_id128_t message_id, const char *format, ...) {



More information about the systemd-commits mailing list