]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
cache: include set elements in "nft set list"
authorFlorian Westphal <fw@strlen.de>
Sun, 18 Jun 2023 16:39:45 +0000 (18:39 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Thu, 2 Nov 2023 10:56:20 +0000 (11:56 +0100)
commit 29bed4fa594c3f6e343a8b5669d61e20c7129cca upstream.

Make "nft list sets" include set elements in listing by default.
In nftables 1.0.0, "nft list sets" did not include the set elements,
but with "--json" they were included.

1.0.1 and newer never include them.
This causes a problem for people updating from 1.0.0 and relying
on the presence of the set elements.

Change nftables to always include the set elements.
The "--terse" option is honored to get the "no elements" behaviour.

Fixes: a1a6b0a5c3c4 ("cache: finer grain cache population for list commands")
Link: https://marc.info/?l=netfilter&m=168704941828372&w=2
Signed-off-by: Florian Westphal <fw@strlen.de>
src/cache.c
src/rule.c

index 85de970f76448ff7e25657eafae07c4c4533a81f..8ffce60cdc3185b8cd92ac851dc740dac2f48255 100644 (file)
@@ -235,6 +235,8 @@ static unsigned int evaluate_cache_list(struct nft_ctx *nft, struct cmd *cmd,
        case CMD_OBJ_SETS:
        case CMD_OBJ_MAPS:
                flags |= NFT_CACHE_TABLE | NFT_CACHE_SET;
+               if (!nft_output_terse(&nft->output))
+                       flags |= NFT_CACHE_SETELEM;
                break;
        case CMD_OBJ_FLOWTABLE:
                if (filter &&
index 982160359aea067947b2d6beaa476893966164ec..cebbd47a982e41262e243f22c84d1ca2eba267cd 100644 (file)
@@ -1768,11 +1768,6 @@ static int do_list_table(struct netlink_ctx *ctx, struct cmd *cmd,
 
 static int do_list_sets(struct netlink_ctx *ctx, struct cmd *cmd)
 {
-       struct print_fmt_options opts = {
-               .tab            = "\t",
-               .nl             = "\n",
-               .stmt_separator = "\n",
-       };
        struct table *table;
        struct set *set;
 
@@ -1795,8 +1790,7 @@ static int do_list_sets(struct netlink_ctx *ctx, struct cmd *cmd)
                        if (cmd->obj == CMD_OBJ_MAPS &&
                            !map_is_literal(set->flags))
                                continue;
-                       set_print_declaration(set, &opts, &ctx->nft->output);
-                       nft_print(&ctx->nft->output, "%s}%s", opts.tab, opts.nl);
+                       set_print(set, &ctx->nft->output);
                }
 
                nft_print(&ctx->nft->output, "}\n");