chiark / gitweb /
manager: connect to private bus even if $DBUS_SESSION_BUS_ADDRESS is not set
authorMantas Mikulėnas <grawity@gmail.com>
Wed, 9 Oct 2013 11:57:12 +0000 (14:57 +0300)
committerColin Walters <walters@verbum.org>
Mon, 14 Oct 2013 03:01:23 +0000 (23:01 -0400)
Because that's exactly the kind of situation where the private bus is
necessary.

src/core/manager.c

index b45a2e11a5a1cde016bd0b529e9468fc33346a10..56191bfc7c340d46ccfac6097f30ccdf550848c9 100644 (file)
@@ -486,6 +486,7 @@ static int manager_default_environment(Manager *m) {
 int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) {
         Manager *m;
         int r = -ENOMEM;
+        bool try_bus_connect = false;
 
         assert(_m);
         assert(running_as >= 0);
@@ -557,15 +558,18 @@ int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) {
         if (r < 0)
                 goto fail;
 
-        /* Try to connect to the busses, if possible. */
-        if ((running_as == SYSTEMD_USER && getenv("DBUS_SESSION_BUS_ADDRESS")) ||
-            running_as == SYSTEMD_SYSTEM) {
-                r = bus_init(m, reexecuting || running_as != SYSTEMD_SYSTEM);
-                if (r < 0)
-                        goto fail;
-        } else
+        if (running_as == SYSTEMD_SYSTEM)
+                try_bus_connect = reexecuting;
+        else if (getenv("DBUS_SESSION_BUS_ADDRESS"))
+                try_bus_connect = true;
+        else
                 log_debug("Skipping DBus session bus connection attempt - no DBUS_SESSION_BUS_ADDRESS set...");
 
+        /* Try to connect to the busses, if possible. */
+        r = bus_init(m, try_bus_connect);
+        if (r < 0)
+                goto fail;
+
         m->taint_usr = dir_is_empty("/usr") > 0;
 
         *_m = m;