summaryrefslogtreecommitdiffstats
path: root/lib/session.c
diff options
context:
space:
mode:
authorMark <mark@glines.org>2023-12-12 09:30:40 +0100
committerJozsef Kadlecsik <kadlec@netfilter.org>2023-12-12 09:30:40 +0100
commit8b3824f9e209754135e7afa52a8f056eabb3442b (patch)
treee7d62821a203dfccad46ca6b1e7cba8a6f3e1d51 /lib/session.c
parentca62c0e1640e5d112679044434227024690b53bc (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>
Diffstat (limited to 'lib/session.c')
-rw-r--r--lib/session.c10
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;