From: Lennart Poettering Date: Fri, 16 Dec 2022 17:45:55 +0000 (+0100) Subject: bootctl: also split out 'systemd-efi-options' verb X-Git-Tag: v253-rc1~246^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6e975890a6d1258682f160427e355c11db95f4e0;p=thirdparty%2Fsystemd.git bootctl: also split out 'systemd-efi-options' verb --- diff --git a/meson.build b/meson.build index d4d19dc0a84..d30331e72a9 100644 --- a/meson.build +++ b/meson.build @@ -2611,6 +2611,8 @@ if conf.get('HAVE_BLKID') == 1 and conf.get('HAVE_GNU_EFI') == 1 'src/boot/bootctl-random-seed.h', 'src/boot/bootctl-reboot-to-firmware.c', 'src/boot/bootctl-reboot-to-firmware.h', + 'src/boot/bootctl-systemd-efi-options.c', + 'src/boot/bootctl-systemd-efi-options.h', 'src/boot/bootctl-util.c', 'src/boot/bootctl-util.h'], include_directories : includes, diff --git a/src/boot/bootctl-systemd-efi-options.c b/src/boot/bootctl-systemd-efi-options.c new file mode 100644 index 00000000000..d0de9ef4f61 --- /dev/null +++ b/src/boot/bootctl-systemd-efi-options.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "alloc-util.h" +#include "bootctl-systemd-efi-options.h" +#include "efi-loader.h" + +int verb_systemd_efi_options(int argc, char *argv[], void *userdata) { + int r; + + if (argc == 1) { + _cleanup_free_ char *line = NULL, *new = NULL; + + r = systemd_efi_options_variable(&line); + if (r == -ENODATA) + log_debug("No SystemdOptions EFI variable present in cache."); + else if (r < 0) + return log_error_errno(r, "Failed to read SystemdOptions EFI variable from cache: %m"); + else + puts(line); + + r = systemd_efi_options_efivarfs_if_newer(&new); + if (r == -ENODATA) { + if (line) + log_notice("Note: SystemdOptions EFI variable has been removed since boot."); + } else if (r < 0) + log_warning_errno(r, "Failed to check SystemdOptions EFI variable in efivarfs, ignoring: %m"); + else if (new && !streq_ptr(line, new)) + log_notice("Note: SystemdOptions EFI variable has been modified since boot. New value: %s", + new); + } else { + r = efi_set_variable_string(EFI_SYSTEMD_VARIABLE(SystemdOptions), argv[1]); + if (r < 0) + return log_error_errno(r, "Failed to set SystemdOptions EFI variable: %m"); + } + + return 0; +} diff --git a/src/boot/bootctl-systemd-efi-options.h b/src/boot/bootctl-systemd-efi-options.h new file mode 100644 index 00000000000..d0243eb1786 --- /dev/null +++ b/src/boot/bootctl-systemd-efi-options.h @@ -0,0 +1,4 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +int verb_systemd_efi_options(int argc, char *argv[], void *userdata); diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c index 808c1f0c444..52f4200e387 100644 --- a/src/boot/bootctl.c +++ b/src/boot/bootctl.c @@ -17,6 +17,7 @@ #include "bootctl.h" #include "bootctl-random-seed.h" #include "bootctl-reboot-to-firmware.h" +#include "bootctl-systemd-efi-options.h" #include "bootctl-util.h" #include "bootspec.h" #include "build.h" @@ -2318,38 +2319,6 @@ static int verb_set_efivar(int argc, char *argv[], void *userdata) { return 0; } -static int verb_systemd_efi_options(int argc, char *argv[], void *userdata) { - int r; - - if (argc == 1) { - _cleanup_free_ char *line = NULL, *new = NULL; - - r = systemd_efi_options_variable(&line); - if (r == -ENODATA) - log_debug("No SystemdOptions EFI variable present in cache."); - else if (r < 0) - return log_error_errno(r, "Failed to read SystemdOptions EFI variable from cache: %m"); - else - puts(line); - - r = systemd_efi_options_efivarfs_if_newer(&new); - if (r == -ENODATA) { - if (line) - log_notice("Note: SystemdOptions EFI variable has been removed since boot."); - } else if (r < 0) - log_warning_errno(r, "Failed to check SystemdOptions EFI variable in efivarfs, ignoring: %m"); - else if (new && !streq_ptr(line, new)) - log_notice("Note: SystemdOptions EFI variable has been modified since boot. New value: %s", - new); - } else { - r = efi_set_variable_string(EFI_SYSTEMD_VARIABLE(SystemdOptions), argv[1]); - if (r < 0) - return log_error_errno(r, "Failed to set SystemdOptions EFI variable: %m"); - } - - return 0; -} - static int bootctl_main(int argc, char *argv[]) { static const Verb verbs[] = { { "help", VERB_ANY, VERB_ANY, 0, help },