]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-json: use sd_json_dispatch_const_string() in sd_json_dispatch_string()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 7 Oct 2024 04:27:37 +0000 (13:27 +0900)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 7 Oct 2024 07:53:36 +0000 (09:53 +0200)
Also, do similar for json_dispatch_user_group_name().

src/libsystemd/sd-json/json-util.c
src/libsystemd/sd-json/sd-json.c

index fb8d2f46c3a9df1b039c00faee38d6328b62331b..c8d67c8d55da788aef1f6a53dc69d6b25b7d4e19 100644 (file)
@@ -73,17 +73,9 @@ int json_dispatch_user_group_name(const char *name, sd_json_variant *variant, sd
         const char *n;
         int r;
 
-        if (sd_json_variant_is_null(variant)) {
-                *s = mfree(*s);
-                return 0;
-        }
-
-        if (!sd_json_variant_is_string(variant))
-                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name));
-
-        n = sd_json_variant_string(variant);
-        if (!valid_user_group_name(n, FLAGS_SET(flags, SD_JSON_RELAX) ? VALID_USER_RELAX : 0))
-                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid user/group name.", strna(name));
+        r = json_dispatch_const_user_group_name(name, variant, flags, &n);
+        if (r < 0)
+                return r;
 
         r = free_and_strdup(s, n);
         if (r < 0)
index 20599114ab5e752b96324cd78f83fa9133f5269e..33ccdcac5aad0f4e5ac5dbfabd5a8e881637f65d 100644 (file)
@@ -5376,22 +5376,16 @@ _public_ int sd_json_dispatch_double(const char *name, sd_json_variant *variant,
 
 _public_ int sd_json_dispatch_string(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
         char **s = ASSERT_PTR(userdata);
+        const char *n;
         int r;
 
         assert_return(variant, -EINVAL);
 
-        if (sd_json_variant_is_null(variant)) {
-                *s = mfree(*s);
-                return 0;
-        }
-
-        if (!sd_json_variant_is_string(variant))
-                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name));
-
-        if ((flags & SD_JSON_STRICT) && !string_is_safe(sd_json_variant_string(variant)))
-                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' contains unsafe characters, refusing.", strna(name));
+        r = sd_json_dispatch_const_string(name, variant, flags, &n);
+        if (r < 0)
+                return r;
 
-        r = free_and_strdup(s, sd_json_variant_string(variant));
+        r = free_and_strdup(s, n);
         if (r < 0)
                 return json_log(variant, flags, r, "Failed to allocate string: %m");