What's the point in retrying if you got EOPNOTSUPP the first time? :P

Jan

On 2015-04-08 18:24, Lennart Poettering wrote:
On Wed, 08.04.15 16:49, Jan Janssen (medhe...@web.de) wrote:

Awesome! Thanks!

Applied! (Though I took the liberty to swap the order around, to first
try direct access, and only the fall back via logind.

Thanks,

Lennart

---
  src/systemctl/systemctl.c | 43 ++++++++++++++++++++++++++++++++++++++-----
  1 file changed, 38 insertions(+), 5 deletions(-)

diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index ae87e44..caa8d07 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -2913,6 +2913,41 @@ static int check_inhibitors(sd_bus *bus, enum action a) {
  #endif
  }

+static int prepare_firmware_setup(sd_bus *bus) {
+        int r;
+        _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+
+        if (!arg_firmware_setup)
+                return 0;
+
+#ifdef HAVE_LOGIND
+        r = sd_bus_call_method(
+                        bus,
+                        "org.freedesktop.login1",
+                        "/org/freedesktop/login1",
+                        "org.freedesktop.login1.Manager",
+                        "SetRebootToFirmwareSetup",
+                        &error,
+                        NULL,
+                        "b", true);
+        if (r < 0)
+                log_error("Cannot indicate to EFI to boot into setup mode: %s", 
bus_error_message(&error, r));
+
+        /* No point trying to fall back. */
+        if (r == -EOPNOTSUPP)
+                return r;
+#endif
+
+        if (arg_transport != BUS_TRANSPORT_LOCAL)
+                return log_error_errno(-EINVAL, "Cannot remotely indicate to EFI to 
boot into setup mode.");
+
+        r = efi_set_reboot_to_firmware(true);
+        if (r < 0)
+                return log_error_errno(r, "Cannot indicate to EFI to boot into 
setup mode: %m");
+
+        return 0;
+}
+
  static int start_special(sd_bus *bus, char **args) {
          enum action a;
          int r;
@@ -2930,11 +2965,9 @@ static int start_special(sd_bus *bus, char **args) {
                  return -EPERM;
          }

-        if (arg_firmware_setup) {
-                r = efi_set_reboot_to_firmware(true);
-                if (r < 0)
-                        return log_error_errno(r, "Cannot indicate to EFI to boot 
into setup mode: %m");
-        }
+        r = prepare_firmware_setup(bus);
+        if (r < 0)
+                return r;

          if (a == ACTION_REBOOT && args[1]) {
                  r = update_reboot_param_file(args[1]);
--
2.3.5

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Lennart

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to