summaryrefslogtreecommitdiff
path: root/src/portable/portablectl.c
diff options
context:
space:
mode:
authorLuca Boccassi <luca.boccassi@microsoft.com>2022-01-24 17:42:32 +0000
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-01-25 06:44:27 +0900
commit0017415cc5f2b97e0f9812cb10984c364d4e03bc (patch)
tree44255fcca46106648ce515269f765e05310fd4ec /src/portable/portablectl.c
parent9697662915e47a4797b05003cb1970fe2b01e530 (diff)
downloadsystemd-0017415cc5f2b97e0f9812cb10984c364d4e03bc.tar.gz
portable: add GetImageStateWithExtensions method
Allow to correctly query a layered portable service for attached/detached state.
Diffstat (limited to 'src/portable/portablectl.c')
-rw-r--r--src/portable/portablectl.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/portable/portablectl.c b/src/portable/portablectl.c
index 60feac6f5d..27883eb867 100644
--- a/src/portable/portablectl.c
+++ b/src/portable/portablectl.c
@@ -1034,11 +1034,11 @@ static int set_limit(int argc, char *argv[], void *userdata) {
}
static int is_image_attached(int argc, char *argv[], void *userdata) {
- _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
_cleanup_free_ char *image = NULL;
- const char *state;
+ const char *state, *method;
int r;
r = determine_image(argv[1], true, &image);
@@ -1049,9 +1049,29 @@ static int is_image_attached(int argc, char *argv[], void *userdata) {
if (r < 0)
return r;
- r = bus_call_method(bus, bus_portable_mgr, "GetImageState", &error, &reply, "s", image);
+ method = strv_isempty(arg_extension_images) ? "GetImageState" : "GetImageStateWithExtensions";
+
+ r = bus_message_new_method_call(bus, &m, bus_portable_mgr, method);
+ if (r < 0)
+ return bus_log_create_error(r);
+
+ r = sd_bus_message_append(m, "s", image);
+ if (r < 0)
+ return bus_log_create_error(r);
+
+ r = attach_extensions_to_message(m, arg_extension_images);
+ if (r < 0)
+ return r;
+
+ if (!strv_isempty(arg_extension_images)) {
+ r = sd_bus_message_append(m, "t", 0);
+ if (r < 0)
+ return bus_log_create_error(r);
+ }
+
+ r = sd_bus_call(bus, m, 0, &error, &reply);
if (r < 0)
- return log_error_errno(r, "Failed to get image state: %s", bus_error_message(&error, r));
+ return log_error_errno(r, "%s failed: %s", method, bus_error_message(&error, r));
r = sd_bus_message_read(reply, "s", &state);
if (r < 0)