diff options
author | Chander Govindarajan <mail@chandergovind.org> | 2022-05-23 15:37:11 +0530 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2022-05-24 10:57:55 +0200 |
commit | 4c20fe9563bfcdf35ede86938cb1b39f5c0b1b3e (patch) | |
tree | b3c8cb145c987e0d8d6848466f153ae7089bf158 /src | |
parent | 5774135060bf1ee1ffb9f37133db04b0fdc65df6 (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')
-rw-r--r-- | src/json.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -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; } |