chiark / gitweb /
bus-util: print a friendly message when PID1 is not systemd
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 9 May 2018 08:06:46 +0000 (17:06 +0900)
committerSven Eden <yamakuzure@gmx.net>
Fri, 24 Aug 2018 14:47:08 +0000 (16:47 +0200)
Follow-up for 861f16d2679eeda79e8185057cef24653913e300.

Fixes #8913.

src/shared/bus-util.c

index 7263593acaf36d80213a55139072f03e16f2ca77..52f8432fc93eec1084f58fdc61f8e1b78a5a1bd1 100644 (file)
@@ -1307,10 +1307,16 @@ int bus_connect_transport(BusTransport transport, const char *host, bool user, s
 #if 0 /// elogind does not support a user bus
                 if (user)
                         r = sd_bus_default_user(&bus);
-                else
 #endif // 0
-                        r = sd_bus_default_system(&bus);
+                else {
+                        if (sd_booted() <= 0) {
+                                /* Print a friendly message when the local system is actually not running systemd as PID 1. */
+                                log_error("System has not been booted with elogind as init system (PID 1). Can't operate.");
 
+                                return -EHOSTDOWN;
+                        }
+                        r = sd_bus_default_system(&bus);
+                }
                 break;
 
         case BUS_TRANSPORT_REMOTE:
@@ -1352,9 +1358,15 @@ int bus_connect_transport_systemd(BusTransport transport, const char *host, bool
         case BUS_TRANSPORT_LOCAL:
                 if (user)
                         r = bus_connect_user_systemd(bus);
-                else
-                        r = bus_connect_system_systemd(bus);
+                else {
+                        if (sd_booted() <= 0) {
+                                /* Print a friendly message when the local system is actually not running systemd as PID 1. */
+                                log_error("System has not been booted with systemd as init system (PID 1). Can't operate.");
 
+                                return -EHOSTDOWN;
+                        }
+                        r = bus_connect_system_systemd(bus);
+                }
                 break;
 
         case BUS_TRANSPORT_REMOTE: