From 4198ff4c6a2576a38bda527e69eedaf48f9722d1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 13 May 2024 07:05:49 -0600 Subject: [PATCH 1/3] machined: modernize method_create_or_register_machine() return parameter naming --- src/machine/machined-dbus.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c index 944b52efd4b..820ac3c58fe 100644 --- a/src/machine/machined-dbus.c +++ b/src/machine/machined-dbus.c @@ -218,7 +218,13 @@ static int method_list_machines(sd_bus_message *message, void *userdata, sd_bus_ return sd_bus_send(NULL, reply, NULL); } -static int method_create_or_register_machine(Manager *manager, sd_bus_message *message, bool read_network, Machine **_m, sd_bus_error *error) { +static int method_create_or_register_machine( + Manager *manager, + sd_bus_message *message, + bool read_network, + Machine **ret, + sd_bus_error *error) { + _cleanup_(pidref_done) PidRef pidref = PIDREF_NULL; const char *name, *service, *class, *root_directory; const int32_t *netif = NULL; @@ -232,7 +238,7 @@ static int method_create_or_register_machine(Manager *manager, sd_bus_message *m assert(manager); assert(message); - assert(_m); + assert(ret); r = sd_bus_message_read(message, "s", &name); if (r < 0) @@ -337,8 +343,7 @@ static int method_create_or_register_machine(Manager *manager, sd_bus_message *m m->n_netif = n_netif; } - *_m = m; - + *ret = m; return 1; fail: From 92a6f214849156cfea191d8fd5fe4f8ca768ca9c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 13 May 2024 07:06:30 -0600 Subject: [PATCH 2/3] machined: prefer pinning clients via pidfd when creating machine, rather than PID --- src/machine/machined-dbus.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c index 820ac3c58fe..6fe1206d64d 100644 --- a/src/machine/machined-dbus.c +++ b/src/machine/machined-dbus.c @@ -288,23 +288,15 @@ static int method_create_or_register_machine( return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Root directory must be empty or an absolute path"); if (leader == 0) { - _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL; - - r = sd_bus_query_sender_creds(message, SD_BUS_CREDS_PID, &creds); + r = bus_query_sender_pidref(message, &pidref); if (r < 0) - return r; - - assert_cc(sizeof(uint32_t) == sizeof(pid_t)); - - r = sd_bus_creds_get_pid(creds, (pid_t*) &leader); + return sd_bus_error_set_errnof(error, r, "Failed to pin client process: %m"); + } else { + r = pidref_set_pid(&pidref, leader); if (r < 0) - return r; + return sd_bus_error_set_errnof(error, r, "Failed to pin process " PID_FMT ": %m", (pid_t) leader); } - r = pidref_set_pid(&pidref, leader); - if (r < 0) - return sd_bus_error_set_errnof(error, r, "Failed to pin process " PID_FMT ": %m", pidref.pid); - if (hashmap_get(manager->machines, name)) return sd_bus_error_setf(error, BUS_ERROR_MACHINE_EXISTS, "Machine '%s' already exists", name); From 087065424160a4071920a6558ab6e0dbfe6dacf3 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 27 May 2024 12:03:35 +0200 Subject: [PATCH 3/3] machined: use pidref instead of just pid when determining unit of pid when registering machine --- src/machine/machined-dbus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c index 6fe1206d64d..da64095d372 100644 --- a/src/machine/machined-dbus.c +++ b/src/machine/machined-dbus.c @@ -390,7 +390,7 @@ static int method_register_machine_internal(sd_bus_message *message, bool read_n if (r < 0) return r; - r = cg_pid_get_unit(m->leader.pid, &m->unit); + r = cg_pidref_get_unit(&m->leader, &m->unit); if (r < 0) { r = sd_bus_error_set_errnof(error, r, "Failed to determine unit of process "PID_FMT" : %m",