From a8e07fef9a342feb55534221052de565f8385317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 18 Aug 2026 00:33:55 +0200 Subject: [PATCH] bless-boot: make 'help' work also in containers TEST-74-AUX-UTILS.introspect-cli.sh would fail because 'systemd-bless-boot help' would refuse to run in a container. It's nicer to make 'help' work always. --- src/bless-boot/bless-boot.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/bless-boot/bless-boot.c b/src/bless-boot/bless-boot.c index 8486451246..10effd0462 100644 --- a/src/bless-boot/bless-boot.c +++ b/src/bless-boot/bless-boot.c @@ -41,6 +41,18 @@ typedef enum Status { VERB_COMMON_HELP_AUTO_HIDDEN("systemd-bless-boot"); +static int check_support(void) { + if (detect_container() > 0) + return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), + "Marking a boot is not supported in containers."); + + if (!is_efi_boot()) + return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), + "Marking a boot is only supported on EFI systems."); + + return 0; +} + static int parse_argv(int argc, char *argv[], char ***ret_args) { int r; @@ -316,6 +328,10 @@ static int verb_status(int argc, char *argv[], uintptr_t _data, void *userdata) uint64_t left, done; int r; + r = check_support(); + if (r < 0) + return r; + r = acquire_boot_count_path(&path, &prefix, &left, &done, &suffix); if (r == -EUNATCH) { /* No boot count in place, then let's consider this a "clean" boot, * since "good", "bad", or "indeterminate" don't apply. */ @@ -433,6 +449,10 @@ static int verb_set(int argc, char *argv[], uintptr_t data, void *userdata) { assert(IN_SET(status, STATUS_GOOD, STATUS_BAD, STATUS_INDETERMINATE)); + r = check_support(); + if (r < 0) + return r; + r = acquire_boot_count_path(&path, &prefix, &left, &done, &suffix); if (r == -EUNATCH) /* acquire_boot_count_path() won't log on its own for this specific error */ return log_error_errno(r, "Not booted with boot counting in effect."); @@ -545,14 +565,6 @@ static int run(int argc, char *argv[]) { if (r <= 0) return r; - if (detect_container() > 0) - return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "Marking a boot is not supported in containers."); - - if (!is_efi_boot()) - return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "Marking a boot is only supported on EFI systems."); - return dispatch_verb(args, NULL); }