chiark / gitweb /
core: --user -- move generator directories from /tmp to $XDG_RUNTIME_DIR
[elogind.git] / src / core / manager.c
index 22a3e3ef5db273a6dc354f62a6ccd55af54b4608..0e35ba5cab9134d3364bbdf30e00a2bff88a3b21 100644 (file)
@@ -538,10 +538,6 @@ static int manager_setup_kdbus(Manager *m) {
         if (m->kdbus_fd >= 0)
                 return 0;
 
-        /* If there's already a bus address set, don't set up kdbus */
-        if (m->running_as == SYSTEMD_USER && getenv("DBUS_SESSION_BUS_ADDRESS"))
-                return 0;
-
         m->kdbus_fd = bus_kernel_create_bus(m->running_as == SYSTEMD_SYSTEM ? "system" : "user", m->running_as == SYSTEMD_SYSTEM, &p);
         if (m->kdbus_fd < 0) {
                 log_debug("Failed to set up kdbus: %s", strerror(-m->kdbus_fd));
@@ -554,7 +550,8 @@ static int manager_setup_kdbus(Manager *m) {
          * of that directory is not visible to non-root users. This is
          * necessary to ensure that users cannot get access to busses
          * of virtualized users when no UID namespacing is used. */
-        mkdir_p_label("/dev/kdbus/ns", 0700);
+        if (m->running_as == SYSTEMD_SYSTEM)
+                mkdir_p_label("/dev/kdbus/ns", 0700);
 #endif
 
         return 0;
@@ -2510,11 +2507,29 @@ static int create_generator_dir(Manager *m, char **generator, const char *name)
                 return 0;
 
         if (m->running_as == SYSTEMD_SYSTEM && getpid() == 1) {
+                /* systemd --system, not running --test */
 
                 p = strappend("/run/systemd/", name);
                 if (!p)
                         return log_oom();
 
+                r = mkdir_p_label(p, 0755);
+                if (r < 0) {
+                        log_error("Failed to create generator directory %s: %s",
+                                  p, strerror(-r));
+                        free(p);
+                        return r;
+                }
+        } else if (m->running_as == SYSTEMD_USER) {
+                const char *s = NULL;
+
+                s = getenv("XDG_RUNTIME_DIR");
+                if (!s)
+                        return -EINVAL;
+                p = strjoin(s, "/systemd/", name, NULL);
+                if (!p)
+                        return log_oom();
+
                 r = mkdir_p_label(p, 0755);
                 if (r < 0) {
                         log_error("Failed to create generator directory %s: %s",
@@ -2523,6 +2538,8 @@ static int create_generator_dir(Manager *m, char **generator, const char *name)
                         return r;
                 }
         } else {
+                /* systemd --system --test */
+
                 p = strjoin("/tmp/systemd-", name, ".XXXXXX", NULL);
                 if (!p)
                         return log_oom();