]> git.ipfire.org Git - thirdparty/ipset.git/commitdiff
Fix json output for -name option
authorMark <mark@glines.org>
Tue, 12 Dec 2023 08:30:40 +0000 (09:30 +0100)
committerJozsef Kadlecsik <kadlec@netfilter.org>
Tue, 12 Dec 2023 08:30:40 +0000 (09:30 +0100)
When listing just the set names,json output generated key:value pairs
in an array and not a map, which is invalid in json. Instead of

[
"name" : "test"
"name" : "test2"
]

generate

[
  { "name" : "test" },
  { "name" : "test2" }
]

Fixes bugzilla #1726.

Signed-off-by: Jozsef Kadlecsik <kadlec@netfilter.org>
lib/session.c

index 944e002ff5c4e57e8dad3c3d0bc3ff38765f0e2a..281b31418ec23308a54da289e49d4182c33054c8 100644 (file)
@@ -1306,6 +1306,7 @@ callback_list(struct ipset_session *session, struct nlattr *nla[],
              enum ipset_cmd cmd)
 {
        struct ipset_data *data = session->data;
+       static bool firstipset = true;
 
        if (setjmp(printf_failure)) {
                session->saved_setname[0] = '\0';
@@ -1324,10 +1325,13 @@ callback_list(struct ipset_session *session, struct nlattr *nla[],
                if (session->mode == IPSET_LIST_XML)
                        safe_snprintf(session, "<ipset name=\"%s\"/>\n",
                                      ipset_data_setname(data));
-               if (session->mode == IPSET_LIST_JSON)
-                       safe_snprintf(session, "\"name\" : \"%s\"\n",
+               else if (session->mode == IPSET_LIST_JSON) {
+                       if (!firstipset)
+                               safe_snprintf(session, ",\n");
+                       firstipset = false;
+                       safe_snprintf(session, "  { \"name\" : \"%s\" }",
                                      ipset_data_setname(data));
-               else
+               else
                        safe_snprintf(session, "%s\n",
                                      ipset_data_setname(data));
                return call_outfn(session) ? MNL_CB_ERROR : MNL_CB_OK;