summaryrefslogtreecommitdiffstats
path: root/src/userdb
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2023-11-01 18:36:12 +0100
committerLuca Boccassi <luca.boccassi@gmail.com>2023-11-02 02:19:21 +0100
commitf1b622a00ce614654fcdff309a2394cfae3b3a88 (patch)
tree0c54e3da87805ec8c33da5276c3cb22e20652b5e /src/userdb
parentfuzz: limit the size of the input (diff)
downloadsystemd-f1b622a00ce614654fcdff309a2394cfae3b3a88.tar.xz
systemd-f1b622a00ce614654fcdff309a2394cfae3b3a88.zip
varlink,json: introduce new varlink_dispatch() helper
varlink_dispatch() is a simple wrapper around json_dispatch() that returns clean, standards-compliant InvalidParameter error back to clients, if the specified JSON cannot be parsed properly. For this json_dispatch() is extended to return the offending field's name. Because it already has quite a few parameters, I then renamed json_dispatch() to json_dispatch_full() and made json_dispatch() a wrapper around it that passes the new argument as NULL. While doing so I figured we should also get rid of the bad= argument in the short wrapper, since it's only used in the OCI code. To simplify the OCI code this adds a second wrapper oci_dispatch() around json_dispatch_full(), that fills in bad= the way we want. Net result: instead of one json_dispatch() call there are now: 1. json_dispatch_full() for the fully feature mother of all dispathers. 2. json_dispatch() for the simpler version that you want to use most of the time. 3. varlink_dispatch() that generates nice Varlink errors 4. oci_dispatch() that does the OCI specific error handling And that's all there is.
Diffstat (limited to 'src/userdb')
-rw-r--r--src/userdb/userwork.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/userdb/userwork.c b/src/userdb/userwork.c
index 7413378bcb..b49dbbd523 100644
--- a/src/userdb/userwork.c
+++ b/src/userdb/userwork.c
@@ -148,8 +148,8 @@ static int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, Var
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
r = userdb_flags_from_service(link, p.service, &userdb_flags);
@@ -284,8 +284,8 @@ static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, Va
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
r = userdb_flags_from_service(link, p.service, &userdb_flags);
@@ -367,8 +367,8 @@ static int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, Var
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
r = userdb_flags_from_service(link, p.service, &userdb_flags);