chiark / gitweb /
journal: split journal uid only when audit uid data is valid
[elogind.git] / src / journal / journald-server.c
index 1375d7a98e2c6e2d1a7f8a8a4c19fbfa4811fa12..545760726e0d47cab0002e5463a2cff3c23b09de 100644 (file)
@@ -34,6 +34,7 @@
 #include <systemd/sd-login.h>
 #endif
 
+#include "fileio.h"
 #include "mkdir.h"
 #include "hashmap.h"
 #include "journal-file.h"
@@ -670,12 +671,12 @@ static void dispatch_message_real(
 
         assert(n <= m);
 
-        if (s->split_mode == SPLIT_NONE)
-                journal_uid = 0;
-        else if (s->split_mode == SPLIT_UID || realuid == 0 || !loginuid_valid)
+        if (s->split_mode == SPLIT_UID && realuid > 0)
                 journal_uid = realuid;
-        else
+        else if (s->split_mode == SPLIT_LOGIN && loginuid > 0 && loginuid_valid)
                 journal_uid = loginuid;
+        else
+                journal_uid = 0;
 
         write_to_journal(s, journal_uid, iovec, n);
 }
@@ -1309,6 +1310,12 @@ int server_init(Server *s) {
 
         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);
 
@@ -1395,7 +1402,8 @@ int server_init(Server *s) {
         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;