From: Lennart Poettering Date: Fri, 24 Oct 2025 09:09:01 +0000 (+0200) Subject: sd-json: parse uid_t/gid_t as uint32_t first X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=786aaed943c814d20411a229d487338ce968d8eb;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/libsystemd/sd-json/sd-json.c b/src/libsystemd/sd-json/sd-json.c index b13960897ed..a69fb2ae111 100644 --- a/src/libsystemd/sd-json/sd-json.c +++ b/src/libsystemd/sd-json/sd-json.c @@ -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;