#include <systemd/sd-login.h>
#endif
+#include "fileio.h"
#include "mkdir.h"
#include "hashmap.h"
#include "journal-file.h"
sd_id128_t id;
int r;
char *t;
- uid_t loginuid = 0, realuid = 0;
+ uid_t loginuid = 0, realuid = 0, owner = 0, journal_uid;
+ bool loginuid_valid = false, owner_valid = false;
assert(s);
assert(iovec);
if (ucred) {
uint32_t audit;
-#ifdef HAVE_LOGIND
- uid_t owner;
-#endif
realuid = ucred->uid;
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) {
IOVEC_SET_STRING(iovec[n++], session);
}
- if (sd_pid_get_owner_uid(ucred->uid, &owner) >= 0)
+ if (sd_pid_get_owner_uid(ucred->uid, &owner) >= 0) {
+ owner_valid = true;
if (asprintf(&owner_uid, "_SYSTEMD_OWNER_UID=%lu", (unsigned long) owner) >= 0)
IOVEC_SET_STRING(iovec[n++], owner_uid);
+ }
#endif
if (cg_pid_get_unit(ucred->pid, &t) >= 0) {
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_UID && realuid > 0)
+ journal_uid = realuid;
+ else if (s->split_mode == SPLIT_LOGIN && owner_valid && owner > 0)
+ journal_uid = owner;
+ else if (s->split_mode == SPLIT_LOGIN && loginuid_valid && loginuid > 0)
+ journal_uid = loginuid;
+ else
+ journal_uid = 0;
+
+ write_to_journal(s, journal_uid, iovec, n);
}
void server_driver_message(Server *s, sd_id128_t message_id, const char *format, ...) {
server_parse_config_file(s);
server_parse_proc_cmdline(s);
+ if (!!s->rate_limit_interval ^ !!s->rate_limit_burst) {
+ log_debug("Setting both rate limit interval and burst from %llu,%u to 0,0",
+ (long long unsigned) s->rate_limit_interval,
+ s->rate_limit_burst);
+ s->rate_limit_interval = s->rate_limit_burst = 0;
+ }
mkdir_p("/run/systemd/journal", 0755);
if (!s->udev)
return -ENOMEM;
- s->rate_limit = journal_rate_limit_new(s->rate_limit_interval, s->rate_limit_burst);
+ s->rate_limit = journal_rate_limit_new(s->rate_limit_interval,
+ s->rate_limit_burst);
if (!s->rate_limit)
return -ENOMEM;