]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemctl: fallback if logind doesn't support new flag
authorLuca Boccassi <bluca@debian.org>
Mon, 23 Oct 2023 15:43:33 +0000 (16:43 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Mon, 23 Oct 2023 18:43:15 +0000 (19:43 +0100)
Follow-up for 665a3d6d15c09428

src/systemctl/systemctl-logind.c

index cd83d29474a4ebeeb63ff90af30d1e17eff980e6..268e528856a382d4fb541c8083c33cc20cb08a13 100644 (file)
@@ -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))