chiark / gitweb /
systemctl: restore ability to directly connect to PID1 from systemctl
[elogind.git] / src / systemctl / systemctl.c
index 44dc47344d13c4ee2c402ccd41fda6595697832f..73fdbdbed6b6e6dda16ea307e0fd40c69a0c058b 100644 (file)
@@ -1204,6 +1204,7 @@ static void output_jobs_list(const struct job_info* jobs, unsigned n) {
 
         pager_open_if_enabled();
 
+        id_len = unit_len = type_len = state_len = 0;
         for (j = jobs; j < jobs + n; j++) {
                 uint32_t id = j->id;
                 assert(j->name && j->type && j->state);
@@ -2525,7 +2526,7 @@ static void print_status_info(
 
                 printf("   CGroup: %s\n", i->control_group);
 
-                if (arg_transport == BUS_TRANSPORT_LOCAL) {
+                if (arg_transport == BUS_TRANSPORT_LOCAL || arg_transport == BUS_TRANSPORT_CONTAINER) {
                         unsigned k = 0;
                         pid_t extra[2];
                         char prefix[] = "           ";
@@ -5353,7 +5354,7 @@ static int talk_initctl(void) {
         return 1;
 }
 
-static int systemctl_main(sd_bus *bus, int argc, char *argv[], const int r) {
+static int systemctl_main(sd_bus *bus, int argc, char *argv[], int bus_error) {
 
         static const struct {
                 const char* verb;
@@ -5504,14 +5505,14 @@ static int systemctl_main(sd_bus *bus, int argc, char *argv[], const int r) {
                 if (((!streq(verbs[i].verb, "reboot") &&
                       !streq(verbs[i].verb, "halt") &&
                       !streq(verbs[i].verb, "poweroff")) || arg_force <= 0) && !bus) {
-                        log_error("Failed to get D-Bus connection: %s", strerror (-r));
+                        log_error("Failed to get D-Bus connection: %s", strerror (-bus_error));
                         return -EIO;
                 }
 
         } else {
 
                 if (!bus && !avoid_bus()) {
-                        log_error("Failed to get D-Bus connection: %s", strerror (-r));
+                        log_error("Failed to get D-Bus connection: %s", strerror (-bus_error));
                         return -EIO;
                 }
         }
@@ -5763,13 +5764,11 @@ int main(int argc, char*argv[]) {
                 goto finish;
         }
 
-        if (!avoid_bus()) {
-                r = bus_open_transport(arg_transport, arg_host, arg_scope != UNIT_FILE_SYSTEM, &bus);
-                if (r < 0) {
-                        log_error("Failed to create bus connection: %s", strerror(-r));
-                        goto finish;
-                }
-        }
+        if (!avoid_bus())
+                r = bus_open_transport_systemd(arg_transport, arg_host, arg_scope != UNIT_FILE_SYSTEM, &bus);
+
+        /* systemctl_main() will print an error message for the bus
+         * connection, but only if it needs to */
 
         switch (arg_action) {