diff options
author | Jozsef Kadlecsik <kadlec@netfilter.org> | 2023-12-12 09:24:43 +0100 |
---|---|---|
committer | Jozsef Kadlecsik <kadlec@netfilter.org> | 2023-12-12 09:24:43 +0100 |
commit | ca62c0e1640e5d112679044434227024690b53bc (patch) | |
tree | 7203fc52711aa458c1107646bc27be1269cd5a68 /lib/session.c | |
parent | b15dd2752a2d666358a42285528805bf2835f6c6 (diff) |
Fix hex literals in json output
Json does not allow 0x prefixes in hex numbers, so output hex numbers
as quoted strings instead.
Fixes bugzilla #1726, reported by Mark.
Signed-off-by: Jozsef Kadlecsik <kadlec@netfilter.org>
Diffstat (limited to 'lib/session.c')
-rw-r--r-- | lib/session.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/lib/session.c b/lib/session.c index a10238d..944e002 100644 --- a/lib/session.c +++ b/lib/session.c @@ -2277,23 +2277,26 @@ ipset_cmd(struct ipset_session *session, enum ipset_cmd cmd, uint32_t lineno) session->cmd = cmd; session->lineno = lineno; - /* Set default output mode */ - if (cmd == IPSET_CMD_LIST) { + if (cmd == IPSET_CMD_LIST || cmd == IPSET_CMD_SAVE) { + /* Set default output mode */ if (session->mode == IPSET_LIST_NONE) session->mode = IPSET_LIST_PLAIN; - } else if (cmd == IPSET_CMD_SAVE) { - if (session->mode == IPSET_LIST_NONE) - session->mode = IPSET_LIST_SAVE; + /* Reset just in case there are multiple modes in a session */ + ipset_envopt_unset(session, IPSET_ENV_QUOTED); + switch (session->mode) { + case IPSET_LIST_XML: + /* Start the root element in XML mode */ + safe_snprintf(session, "<ipsets>\n"); + break; + case IPSET_LIST_JSON: + /* Start the root element in json mode */ + ipset_envopt_set(session, IPSET_ENV_QUOTED); + safe_snprintf(session, "[\n"); + break; + default: + break; + } } - /* Start the root element in XML mode */ - if ((cmd == IPSET_CMD_LIST || cmd == IPSET_CMD_SAVE) && - session->mode == IPSET_LIST_XML) - safe_snprintf(session, "<ipsets>\n"); - - /* Start the root element in json mode */ - if ((cmd == IPSET_CMD_LIST || cmd == IPSET_CMD_SAVE) && - session->mode == IPSET_LIST_JSON) - safe_snprintf(session, "[\n"); D("next: build_msg"); /* Build new message or append buffered commands */ |