]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
machine: use sd_json_dispatch_pid() in varlink code 34681/head
authorIvan Kruglov <mail@ikruglov.com>
Thu, 10 Oct 2024 09:52:34 +0000 (11:52 +0200)
committerIvan Kruglov <mail@ikruglov.com>
Thu, 10 Oct 2024 11:40:45 +0000 (13:40 +0200)
src/machine/machine-varlink.c
src/machine/machine-varlink.h
src/machine/machined-varlink.c

index f5acb33eafb64f91f6b0a06264086a94811696e8..4e42a8d13b5816f2b4411d4d8615ec8d831748ca 100644 (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;
 
index 4ee15ce40b5d0f66ecef6a5c0a935bd062b1e31b..77db7b14edb5d71248bb4aa11e7148715327b383 100644 (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);
index 6100024174197b7916f40570cc586b667279c04f..63d24c67adb75aa103b61fcc69ed891d3518b81f 100644 (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;