diff options
author | Mark <mark@glines.org> | 2023-12-12 09:30:40 +0100 |
---|---|---|
committer | Jozsef Kadlecsik <kadlec@netfilter.org> | 2023-12-12 09:30:40 +0100 |
commit | 8b3824f9e209754135e7afa52a8f056eabb3442b (patch) | |
tree | e7d62821a203dfccad46ca6b1e7cba8a6f3e1d51 | |
parent | ca62c0e1640e5d112679044434227024690b53bc (diff) |
Fix json output for -name option
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>
-rw-r--r-- | lib/session.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/session.c b/lib/session.c index 944e002..281b314 100644 --- a/lib/session.c +++ b/lib/session.c @@ -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; |