systemctl: fallback if logind doesn't support new flag

Follow-up for 665a3d6d15
This commit is contained in:
Luca Boccassi
2023-10-23 19:43:15 +01:00
committed by Luca Boccassi
parent 28d2c32f0b
commit d334c1211f
+12
View 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))