]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tree-wide: rely on sd_varlink_dispatch() for validating zero-argument method calls...
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 19 Jan 2025 15:04:01 +0000 (00:04 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 19 Jan 2025 15:21:31 +0000 (00:21 +0900)
Follow-ups for a7cc7038ac06d2c02cbaa5a749aa47b4f7cbe786.

src/bootctl/bootctl-reboot-to-firmware.c
src/bootctl/bootctl-status.c
src/core/core-varlink.c
src/journal/journald-server.c
src/libsystemd/sd-varlink/sd-varlink.c
src/network/networkd-manager-varlink.c
src/pcrlock/pcrlock.c
src/udev/udev-varlink.c

index 0bedd230bb51519102edf25026e57bad5a4f9b67..e24234aa909d9c4eef08cc259766ff6e707dd929 100644 (file)
@@ -62,8 +62,9 @@ int vl_method_set_reboot_to_firmware(sd_varlink *link, sd_json_variant *paramete
 int vl_method_get_reboot_to_firmware(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
         int r;
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         r = efi_get_reboot_to_firmware();
         if (ERRNO_IS_NEG_NOT_SUPPORTED(r))
index 6bcb34893500ebd15aeb4432f630b3821246b89b..2ca49ec485fb60d8a26b44f7f53618990b6fb986 100644 (file)
@@ -876,8 +876,9 @@ int vl_method_list_boot_entries(sd_varlink *link, sd_json_variant *parameters, s
 
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         if (!FLAGS_SET(flags, SD_VARLINK_METHOD_MORE))
                 return sd_varlink_error(link, SD_VARLINK_ERROR_EXPECTED_MORE, NULL);
index 92cfd36e7186923ef945966f8a5d50bbf6ee2c5d..985bd702b824d06a254f7e953fe8400cf023f86c 100644 (file)
@@ -325,8 +325,9 @@ static int vl_method_subscribe_managed_oom_cgroups(
         if (!streq(u->id, "systemd-oomd.service"))
                 return sd_varlink_error(link, SD_VARLINK_ERROR_PERMISSION_DENIED, NULL);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         /* We only take one subscriber for this method so return an error if there's already an existing one.
          * This shouldn't happen since systemd-oomd is the only client of this method. */
index 3469a90fefa0e91b603c6c3ccc72273286cd0308..16fb88324ffc1066052e7eb8f4fd2e8f34c71326 100644 (file)
@@ -2223,8 +2223,9 @@ static int vl_method_synchronize(sd_varlink *link, sd_json_variant *parameters,
 
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         log_info("Received client request to sync journal.");
 
@@ -2259,11 +2260,13 @@ static int vl_method_synchronize(sd_varlink *link, sd_json_variant *parameters,
 
 static int vl_method_rotate(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
         Server *s = ASSERT_PTR(userdata);
+        int r;
 
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         log_info("Received client request to rotate journal, rotating.");
         server_full_rotate(s);
@@ -2273,11 +2276,14 @@ static int vl_method_rotate(sd_varlink *link, sd_json_variant *parameters, sd_va
 
 static int vl_method_flush_to_var(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
         Server *s = ASSERT_PTR(userdata);
+        int r;
 
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
+
         if (s->namespace)
                 return sd_varlink_error(link, "io.systemd.Journal.NotSupportedByNamespaces", NULL);
 
@@ -2289,11 +2295,14 @@ static int vl_method_flush_to_var(sd_varlink *link, sd_json_variant *parameters,
 
 static int vl_method_relinquish_var(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
         Server *s = ASSERT_PTR(userdata);
+        int r;
 
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
+
         if (s->namespace)
                 return sd_varlink_error(link, "io.systemd.Journal.NotSupportedByNamespaces", NULL);
 
index 8658c81f67c651ebe76e776d7b05d8aa8fa3fa34..ffb596b378f22534248550c8b3ba730d7f6c3426 100644 (file)
@@ -1197,8 +1197,9 @@ static int generic_method_get_info(
         assert(link);
         assert(link->server);
 
-        if (sd_json_variant_elements(parameters) != 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         sd_varlink_interface *interface;
         HASHMAP_FOREACH(interface, link->server->interfaces) {
index 6206fb6e448fa3b9a5fbc319bf2b85a354aab3e3..3182c0094e410172a340d0181ac101fb88cf1d70 100644 (file)
 
 static int vl_method_get_states(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
         Manager *m = ASSERT_PTR(userdata);
+        int r;
 
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         return sd_varlink_replybo(
                         link,
@@ -40,8 +42,9 @@ static int vl_method_get_namespace_id(sd_varlink *link, sd_json_variant *paramet
 
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         /* Network namespaces have two identifiers: the inode number (which all namespace types have), and
          * the "nsid" (aka the "cookie"), which only network namespaces know as a concept, and which is not
index 72b13f8fac49e4dfe988a7bdfe91dafd363902ad..2d46b31b5873abef6935f82c83a81f004d07e63c 100644 (file)
@@ -5269,8 +5269,9 @@ static int vl_method_read_event_log(sd_varlink *link, sd_json_variant *parameter
 
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         el = event_log_new();
         if (!el)
@@ -5332,8 +5333,9 @@ static int vl_method_remove_policy(sd_varlink *link, sd_json_variant *parameters
 
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         r = remove_policy();
         if (r < 0)
index 8faadb8bcf6bb61a2974c97dd64fbbb435c64f2b..d95bfcdd91f89f60d39a8875a3198639ee5b8a23 100644 (file)
 #define UDEV_VARLINK_ADDRESS "/run/udev/io.systemd.Udev"
 
 static int vl_method_reload(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
+        int r;
+
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         log_debug("Received io.systemd.service.Reload()");
         manager_reload(userdata, /* force = */ true);
@@ -87,8 +90,9 @@ static int vl_method_start_stop_exec_queue(sd_varlink *link, sd_json_variant *pa
 
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         r = sd_varlink_get_current_method(link, &method);
         if (r < 0)
@@ -100,10 +104,13 @@ static int vl_method_start_stop_exec_queue(sd_varlink *link, sd_json_variant *pa
 }
 
 static int vl_method_exit(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
+        int r;
+
         assert(link);
 
-        if (sd_json_variant_elements(parameters) > 0)
-                return sd_varlink_error_invalid_parameter(link, parameters);
+        r = sd_varlink_dispatch(link, parameters, /* dispatch_table = */ NULL, /* userdata = */ NULL);
+        if (r != 0)
+                return r;
 
         /* Refuse further connections. */
         _unused_ _cleanup_(sd_varlink_flush_close_unrefp) sd_varlink *v = sd_varlink_ref(link);