+static int manager_setup_kdbus(Manager *m) {
+ _cleanup_free_ char *p = NULL;
+
+ assert(m);
+
+#ifdef ENABLE_KDBUS
+ 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", &p);
+ if (m->kdbus_fd < 0) {
+ log_debug("Failed to set up kdbus: %s", strerror(-m->kdbus_fd));
+ return m->kdbus_fd;
+ }
+
+ log_info("Successfully set up kdbus on %s", p);
+#endif
+
+ return 0;
+}
+
+static int manager_connect_bus(Manager *m, bool reexecuting) {
+ bool try_bus_connect;
+
+ assert(m);
+
+ try_bus_connect =
+ m->kdbus_fd >= 0 ||
+ reexecuting ||
+ (m->running_as == SYSTEMD_USER && getenv("DBUS_SESSION_BUS_ADDRESS"));
+
+ /* Try to connect to the busses, if possible. */
+ return bus_init(m, try_bus_connect);
+}
+
+int manager_new(SystemdRunningAs running_as, Manager **_m) {