1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-23 21:35:11 +03:00

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).
This commit is contained in:
Colin Walters 2013-02-12 12:24:30 -05:00 committed by Lennart Poettering
parent b43d1d01ea
commit 759c945a43

View File

@ -515,6 +515,8 @@ static void dispatch_message_real(
int r; int r;
char *t; char *t;
uid_t loginuid = 0, realuid = 0; uid_t loginuid = 0, realuid = 0;
uid_t journal_uid;
bool loginuid_valid = false;
assert(s); assert(s);
assert(iovec); assert(iovec);
@ -571,9 +573,11 @@ static void dispatch_message_real(
IOVEC_SET_STRING(iovec[n++], audit_session); IOVEC_SET_STRING(iovec[n++], audit_session);
r = audit_loginuid_from_pid(ucred->pid, &loginuid); 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) if (asprintf(&audit_loginuid, "_AUDIT_LOGINUID=%lu", (unsigned long) loginuid) >= 0)
IOVEC_SET_STRING(iovec[n++], audit_loginuid); IOVEC_SET_STRING(iovec[n++], audit_loginuid);
}
t = shortened_cgroup_path(ucred->pid); t = shortened_cgroup_path(ucred->pid);
if (t) { if (t) {
@ -666,10 +670,14 @@ static void dispatch_message_real(
assert(n <= m); assert(n <= m);
write_to_journal(s, if (s->split_mode == SPLIT_NONE)
s->split_mode == SPLIT_NONE ? 0 : journal_uid = 0;
(s->split_mode == SPLIT_UID ? realuid : else if (s->split_mode == SPLIT_UID || realuid == 0 || !loginuid_valid)
(realuid == 0 ? 0 : loginuid)), iovec, n); 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, ...) { void server_driver_message(Server *s, sd_id128_t message_id, const char *format, ...) {