X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fjournal%2Fjournald-server.c;h=1375d7a98e2c6e2d1a7f8a8a4c19fbfa4811fa12;hp=12a46e6bd0d3a4fd50be651fecf409e3576d4f3b;hb=759c945a43577d56e85a927f15e7d9aaa94a4e4a;hpb=b43d1d01eabe2cbbf393e8f56b76e182c6069c4c diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 12a46e6bd..1375d7a98 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, ...) {