chiark / gitweb /
mkdir: append _label to all mkdir() calls that explicitly set the selinux context
[elogind.git] / src / journal / journald.c
index 5ecb7f72d34a4e80742d51b78a82938bfd584022..e0e7cce1227d4aea19cc2934939efd56ae6445ee 100644 (file)
 #include <sys/statvfs.h>
 
 #include <systemd/sd-journal.h>
-#include <systemd/sd-login.h>
 #include <systemd/sd-messages.h>
 #include <systemd/sd-daemon.h>
 
+#ifdef HAVE_LOGIND
+#include <systemd/sd-login.h>
+#endif
+
 #include "mkdir.h"
 #include "hashmap.h"
 #include "journal-file.h"
@@ -479,7 +482,9 @@ static void dispatch_message_real(
 
         if (ucred) {
                 uint32_t audit;
+#ifdef HAVE_LOGIND
                 uid_t owner;
+#endif
 
                 realuid = ucred->uid;
 
@@ -538,6 +543,7 @@ static void dispatch_message_real(
                                 IOVEC_SET_STRING(iovec[n++], cgroup);
                 }
 
+#ifdef HAVE_LOGIND
                 if (sd_pid_get_session(ucred->pid, &t) >= 0) {
                         session = strappend("_SYSTEMD_SESSION=", t);
                         free(t);
@@ -546,7 +552,12 @@ static void dispatch_message_real(
                                 IOVEC_SET_STRING(iovec[n++], session);
                 }
 
-                if (sd_pid_get_unit(ucred->pid, &t) >= 0) {
+                if (sd_pid_get_owner_uid(ucred->uid, &owner) >= 0)
+                        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) {
                         unit = strappend("_SYSTEMD_UNIT=", t);
                         free(t);
 
@@ -554,10 +565,6 @@ static void dispatch_message_real(
                                 IOVEC_SET_STRING(iovec[n++], unit);
                 }
 
-                if (sd_pid_get_owner_uid(ucred->uid, &owner) >= 0)
-                        if (asprintf(&owner_uid, "_SYSTEMD_OWNER_UID=%lu", (unsigned long) owner) >= 0)
-                                IOVEC_SET_STRING(iovec[n++], owner_uid);
-
 #ifdef HAVE_SELINUX
                 if (label) {
                         selinux_context = malloc(sizeof("_SELINUX_CONTEXT=") + label_len);
@@ -1820,7 +1827,7 @@ static void proc_kmsg_line(Server *s, const char *p) {
 
                 /* Avoid any messages we generated ourselves via
                  * log_info() and friends. */
-                if (is_us(pid))
+                if (pid && is_us(pid))
                         goto finish;
 
                 if (s->forward_to_syslog)
@@ -1966,7 +1973,7 @@ static int system_journal_open(Server *s) {
                         /* OK, we really need the runtime journal, so create
                          * it if necessary. */
 
-                        (void) mkdir_parents(fn, 0755);
+                        (void) mkdir_parents_label(fn, 0755);
                         r = journal_file_open_reliably(fn, O_RDWR|O_CREAT, 0640, NULL, &s->runtime_journal);
                         free(fn);