From d334c1211fc02b40ff2ba6df398bdd8058c16d21 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Mon, 23 Oct 2023 16:43:33 +0100 Subject: [PATCH] systemctl: fallback if logind doesn't support new flag Follow-up for 665a3d6d15c09428 --- src/systemctl/systemctl-logind.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/systemctl/systemctl-logind.c b/src/systemctl/systemctl-logind.c index cd83d29474..268e528856 100644 --- a/src/systemctl/systemctl-logind.c +++ b/src/systemctl/systemctl-logind.c @@ -89,6 +89,18 @@ int logind_reboot(enum action a) { SET_FLAG(flags, SD_LOGIND_SOFT_REBOOT, a == ACTION_SOFT_REBOOT); r = bus_call_method(bus, bus_login_mgr, method_with_flags, &error, NULL, "t", flags); + if (r < 0 && FLAGS_SET(flags, SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP) && + sd_bus_error_has_name(&error, SD_BUS_ERROR_INVALID_ARGS)) { + sd_bus_error_free(&error); + r = bus_call_method( + bus, + bus_login_mgr, + method_with_flags, + &error, + NULL, + "t", + flags & ~SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP); + } if (r >= 0) return 0; if (!sd_bus_error_has_name(&error, SD_BUS_ERROR_UNKNOWN_METHOD))