machine: use sd_json_dispatch_pid() in varlink code

This commit is contained in:
Ivan Kruglov
2024-10-10 13:40:45 +02:00
parent dafd44de4f
commit d8aefe88c8
3 changed files with 10 additions and 9 deletions
+3 -4
View File
@@ -217,9 +217,8 @@ static int lookup_machine_by_pid(sd_varlink *link, Manager *manager, pid_t pid,
assert(link);
assert(manager);
assert(ret_machine);
assert_cc(sizeof(pid_t) == sizeof(uint32_t));
if (pid == 0) {
if (pid == PID_AUTOMATIC) {
r = varlink_get_peer_pidref(link, &pidref);
if (r < 0)
return log_debug_errno(r, "Failed to get peer pidref: %m");
@@ -254,7 +253,7 @@ int lookup_machine_by_name_or_pid(sd_varlink *link, Manager *manager, const char
return r;
}
if (pid >= 0) {
if (pid_is_valid_or_automatic(pid)) {
r = lookup_machine_by_pid(link, manager, pid, &pid_machine);
if (r == -EINVAL)
return sd_varlink_error_invalid_parameter_name(link, "pid");
@@ -335,7 +334,7 @@ int vl_method_kill(sd_varlink *link, sd_json_variant *parameters, sd_varlink_met
};
Manager *manager = ASSERT_PTR(userdata);
struct params p = { .pid = -1 };
struct params p = {};
KillWhom whom;
int r;
+3 -2
View File
@@ -13,8 +13,9 @@
}, { \
.name = "pid", \
.type = _SD_JSON_VARIANT_TYPE_INVALID, \
.callback = sd_json_dispatch_uint32, \
.offset = offsetof(t, pid) \
.callback = sd_json_dispatch_pid, \
.offset = offsetof(t, pid), \
.flags = SD_JSON_RELAX /* allows pid=0 */ \
}
int lookup_machine_by_name_or_pid(sd_varlink *link, Manager *manager, const char *machine_name, pid_t pid, Machine **ret_machine);
+4 -3
View File
@@ -9,6 +9,7 @@
#include "machine-varlink.h"
#include "machined-varlink.h"
#include "mkdir.h"
#include "process-util.h"
#include "socket-util.h"
#include "user-util.h"
#include "varlink-io.systemd.Machine.h"
@@ -430,7 +431,7 @@ static int vl_method_list(sd_varlink *link, sd_json_variant *parameters, sd_varl
};
Manager *m = ASSERT_PTR(userdata);
MachineLookupParameters p = { .pid = -1 };
MachineLookupParameters p = {};
Machine *machine;
int r;
@@ -441,7 +442,7 @@ static int vl_method_list(sd_varlink *link, sd_json_variant *parameters, sd_varl
if (r != 0)
return r;
if (p.machine_name || p.pid >= 0) {
if (p.machine_name || pid_is_valid_or_automatic(p.pid)) {
r = lookup_machine_by_name_or_pid(link, m, p.machine_name, p.pid, &machine);
if (r == -ESRCH)
return sd_varlink_error(link, "io.systemd.Machine.NoSuchMachine", NULL);
@@ -479,7 +480,7 @@ static int lookup_machine_and_call_method(sd_varlink *link, sd_json_variant *par
};
Manager *manager = ASSERT_PTR(userdata);
MachineLookupParameters p = { .pid = -1 };
MachineLookupParameters p = {};
Machine *machine;
int r;