]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bus-util: print a friendly message when PID1 is not systemd 8934/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 9 May 2018 08:06:46 +0000 (17:06 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 9 May 2018 08:07:37 +0000 (17:07 +0900)
Follow-up for 861f16d2679eeda79e8185057cef24653913e300.

Fixes #8913.

src/analyze/analyze.c
src/shared/bus-util.c
src/systemctl/systemctl.c

index 43b0cc1ab80611b66bd76d7cc9728dee09d498ad..30139dd5f532a2d1b8e5a0d7e62211bd9db75826 100644 (file)
@@ -120,10 +120,12 @@ struct host_info {
 
 static int acquire_bus(sd_bus **bus, bool *use_full_bus) {
         bool user = arg_scope != UNIT_FILE_SYSTEM;
+        int r;
 
         if (use_full_bus && *use_full_bus) {
-                if (bus_connect_transport(arg_transport, arg_host, user, bus) == 0)
-                        return 0;
+                r = bus_connect_transport(arg_transport, arg_host, user, bus);
+                if (IN_SET(r, 0, -EHOSTDOWN))
+                        return r;
 
                 *use_full_bus = false;
         }
index a14e87d1ba16af917ac7f3583d320adaa41adec5..af18a674c1d0ada573fe804e3a8d7083e018b4d9 100644 (file)
@@ -1300,9 +1300,15 @@ int bus_connect_transport(BusTransport transport, const char *host, bool user, s
         case BUS_TRANSPORT_LOCAL:
                 if (user)
                         r = sd_bus_default_user(&bus);
-                else
-                        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 systemd as init system (PID 1). Can't operate.");
 
+                                return -EHOSTDOWN;
+                        }
+                        r = sd_bus_default_system(&bus);
+                }
                 break;
 
         case BUS_TRANSPORT_REMOTE:
@@ -1343,9 +1349,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:
index a9461aa3911b911761f818bee4eb3d26fb0f7b17..a6646aa7f6dea11e878f07c6eea4e8918090f42f 100644 (file)
@@ -211,12 +211,6 @@ static int acquire_bus(BusFocus focus, sd_bus **ret) {
 
                 user = arg_scope != UNIT_FILE_SYSTEM;
 
-                if (!user && 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;
-                }
-
                 if (focus == BUS_MANAGER)
                         r = bus_connect_transport_systemd(arg_transport, arg_host, user, &busses[focus]);
                 else