From 28ced52894cf6921d1fe9831f2def29de164e189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 27 Sep 2024 20:17:12 +0200 Subject: [PATCH] systemctl: fix printing of RootImageOptions The type is a(ss), so a custom printer is required. Fixes https://github.com/systemd/systemd/issues/33967. (cherry picked from commit 69c751c61cb2b386afe51f03b58f8f7ceeeb643e) --- src/systemctl/systemctl-show.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c index 2fdf3218868..49f74546ff7 100644 --- a/src/systemctl/systemctl-show.c +++ b/src/systemctl/systemctl-show.c @@ -1750,6 +1750,29 @@ static int print_property(const char *name, const char *expected_value, sd_bus_m return bus_log_parse_error(r); return 1; + + } else if (streq(name, "RootImageOptions")) { + const char *a, *p; + + /* In config files, the syntax allows the partition name to be omitted. Here, we + * always print the partition name, also because we have no way of knowing if it was + * originally omitted or not. We also print the partitions on separate lines. */ + + r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "(ss)"); + if (r < 0) + return bus_log_parse_error(r); + + while ((r = sd_bus_message_read(m, "(ss)", &a, &p)) > 0) + bus_print_property_valuef(name, expected_value, flags, "%s:%s", a, p); + if (r < 0) + return bus_log_parse_error(r); + + r = sd_bus_message_exit_container(m); + if (r < 0) + return bus_log_parse_error(r); + + return 1; + } else if (streq(name, "MountImages")) { _cleanup_free_ char *paths = NULL;