From 9897b09ba77489670079cd270178029bfc077e48 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 25 Jun 2018 16:22:13 +0200 Subject: [PATCH 1/3] systemctl: add 'static' to constant state array --- src/systemctl/systemctl.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index f072ad0c31..cc70e43717 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -3673,13 +3673,20 @@ static int check_unit_generic(int code, const UnitActiveState good_states[], int } static int check_unit_active(int argc, char *argv[], void *userdata) { - const UnitActiveState states[] = { UNIT_ACTIVE, UNIT_RELOADING }; + static const UnitActiveState states[] = { + UNIT_ACTIVE, + UNIT_RELOADING, + }; + /* According to LSB: 3, "program is not running" */ return check_unit_generic(EXIT_PROGRAM_NOT_RUNNING, states, ELEMENTSOF(states), strv_skip(argv, 1)); } static int check_unit_failed(int argc, char *argv[], void *userdata) { - const UnitActiveState states[] = { UNIT_FAILED }; + static const UnitActiveState states[] = { + UNIT_FAILED, + }; + return check_unit_generic(EXIT_PROGRAM_DEAD_AND_PID_EXISTS, states, ELEMENTSOF(states), strv_skip(argv, 1)); } From e686a616e8854765cbe9ea8cdebc94cc0ce94ea5 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 25 Jun 2018 16:22:48 +0200 Subject: [PATCH 2/3] systemctl: log errors to LOG_DEBUG rather than eating them up entirely --- src/systemctl/systemctl.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index cc70e43717..ca886a845e 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -6591,6 +6591,7 @@ static int unit_is_enabled(int argc, char *argv[], void *userdata) { } static int is_system_running(int argc, char *argv[], void *userdata) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; _cleanup_free_ char *state = NULL; sd_bus *bus; int r; @@ -6611,9 +6612,11 @@ static int is_system_running(int argc, char *argv[], void *userdata) { "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "SystemState", - NULL, + &error, &state); if (r < 0) { + log_debug_errno(r, "Failed to query system state: %s", bus_error_message(&error, r)); + if (!arg_quiet) puts("unknown"); return 0; From bfeec178dbd3fb9c254df3803f3b5ff43eb9c5ad Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 25 Jun 2018 16:23:18 +0200 Subject: [PATCH 3/3] systemctl: if we can't detect the system-is-running state, assume it's not running --- src/systemctl/systemctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index ca886a845e..9c6156237a 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -6619,7 +6619,7 @@ static int is_system_running(int argc, char *argv[], void *userdata) { if (!arg_quiet) puts("unknown"); - return 0; + return EXIT_FAILURE; } if (!arg_quiet)