int r;
char *t;
uid_t loginuid = 0, realuid = 0;
+ uid_t journal_uid;
+ bool loginuid_valid = false;
assert(s);
assert(iovec);
IOVEC_SET_STRING(iovec[n++], exe);
}
- r = get_process_cmdline(ucred->pid, LINE_MAX, false, &t);
+ r = get_process_cmdline(ucred->pid, 0, false, &t);
if (r >= 0) {
cmdline = strappend("_CMDLINE=", t);
free(t);
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) {
if (cg_pid_get_unit(ucred->pid, &t) >= 0) {
unit = strappend("_SYSTEMD_UNIT=", t);
free(t);
- } else if (unit_id)
- unit = strappend("_SYSTEMD_UNIT=", unit_id);
+ } else if (cg_pid_get_user_unit(ucred->pid, &t) >= 0) {
+ unit = strappend("_SYSTEMD_USER_UNIT=", t);
+ free(t);
+ } else if (unit_id) {
+ if (session)
+ unit = strappend("_SYSTEMD_USER_UNIT=", unit_id);
+ else
+ unit = strappend("_SYSTEMD_UNIT=", unit_id);
+ }
if (unit)
IOVEC_SET_STRING(iovec[n++], unit);
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, ...) {