]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-json: parse signals also in string format
authorLennart Poettering <lennart@poettering.net>
Fri, 24 Oct 2025 09:10:31 +0000 (11:10 +0200)
committerLennart Poettering <lennart@poettering.net>
Sat, 1 Nov 2025 20:43:37 +0000 (21:43 +0100)
src/libsystemd/sd-json/sd-json.c

index a69fb2ae111c12cdbc20e3070471ca0a26c18340..776df25b8e783acfc213fe5e69f574e5a38823b1 100644 (file)
@@ -5738,12 +5738,18 @@ _public_ int sd_json_dispatch_signal(const char *name, sd_json_variant *variant,
         }
 
         int k;
-        r = sd_json_dispatch_int(name, variant, flags, &k);
-        if (r < 0)
-                return r;
+        if (sd_json_variant_is_string(variant)) {
+                k = signal_from_string(sd_json_variant_string(variant));
+                if (k < 0)
+                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid signal.", strna(name));
+        } else {
+                r = sd_json_dispatch_int(name, variant, flags, &k);
+                if (r < 0)
+                        return r;
 
-        if (!SIGNAL_VALID(k))
-                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid signal.", strna(name));
+                if (!SIGNAL_VALID(k))
+                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid signal.", strna(name));
+        }
 
         *signo = k;
         return 0;