summaryrefslogtreecommitdiffstats
path: root/src/json.c
diff options
context:
space:
mode:
authorChander Govindarajan <mail@chandergovind.org>2022-05-23 15:37:11 +0530
committerPablo Neira Ayuso <pablo@netfilter.org>2022-05-24 10:57:55 +0200
commit4c20fe9563bfcdf35ede86938cb1b39f5c0b1b3e (patch)
treeb3c8cb145c987e0d8d6848466f153ae7089bf158 /src/json.c
parent5774135060bf1ee1ffb9f37133db04b0fdc65df6 (diff)
json: update json output ordering to place rules after chains
Currently the json output of `nft -j list ruleset` interleaves rules with chains. As reported in this bug: https://bugzilla.netfilter.org/show_bug.cgi?id=1580 the json cannot be fed into `nft -j -f <file>` since rules may reference chains that are created later Instead create rules after all chains are output. Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1580 Signed-off-by: ChanderG <mail@chandergovind.org> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/json.c')
-rw-r--r--src/json.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/json.c b/src/json.c
index 0b7224c2..a525fd1b 100644
--- a/src/json.c
+++ b/src/json.c
@@ -1587,7 +1587,7 @@ json_t *optstrip_stmt_json(const struct stmt *stmt, struct output_ctx *octx)
static json_t *table_print_json_full(struct netlink_ctx *ctx,
struct table *table)
{
- json_t *root = json_array(), *tmp;
+ json_t *root = json_array(), *rules = json_array(), *tmp;
struct flowtable *flowtable;
struct chain *chain;
struct rule *rule;
@@ -1617,10 +1617,13 @@ static json_t *table_print_json_full(struct netlink_ctx *ctx,
list_for_each_entry(rule, &chain->rules, list) {
tmp = rule_print_json(&ctx->nft->output, rule);
- json_array_append_new(root, tmp);
+ json_array_append_new(rules, tmp);
}
}
+ json_array_extend(root, rules);
+ json_decref(rules);
+
return root;
}