[systemd-devel] [PATCH] systemctl: Use logind for --firmware-setup if possible

Jan Janssen medhefgo at web.de
Wed Apr 8 10:05:45 PDT 2015


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 (medhefgo at 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 at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/systemd-devel
>
>
> Lennart
>


More information about the systemd-devel mailing list