sd-json: parse uid_t/gid_t as uint32_t first

Let's use the proper uint32_t parsers initially, so that the usual logic
of formatting integers as decimal strings, works too for uids/gids. Not
because it made any sense to encode them like that, but just to be
systematic here.
This commit is contained in:
Lennart Poettering
2025-10-24 11:09:01 +02:00
parent e01f8990f1
commit 786aaed943

View File

@@ -5676,7 +5676,8 @@ _public_ int sd_json_dispatch_variant_noref(const char *name, sd_json_variant *v
_public_ int sd_json_dispatch_uid_gid(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
uid_t *uid = userdata;
uint64_t k;
uint32_t k;
int r;
assert_return(variant, -EINVAL);
assert_return(userdata, -EINVAL);
@@ -5693,11 +5694,10 @@ _public_ int sd_json_dispatch_uid_gid(const char *name, sd_json_variant *variant
return 0;
}
if (!sd_json_variant_is_unsigned(variant))
return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an integer.", strna(name));
k = sd_json_variant_unsigned(variant);
if (k > UINT32_MAX || !uid_is_valid(k))
r = sd_json_dispatch_uint32(name, variant, flags, &k);
if (r < 0)
return r;
if (!uid_is_valid(k))
return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid UID/GID.", strna(name));
*uid = k;