]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
Revert "evaluate: error out when existing set has incompatible key"
authorFlorian Westphal <fw@strlen.de>
Thu, 14 Dec 2023 16:47:21 +0000 (17:47 +0100)
committerFlorian Westphal <fw@strlen.de>
Thu, 14 Dec 2023 16:51:24 +0000 (17:51 +0100)
This breaks existing behaviour, add a test case so this is caught in
the future.

The reverted test case will be brought back once a better fix
is available.

Signed-off-by: Florian Westphal <fw@strlen.de>
src/evaluate.c
tests/shell/testcases/bogons/nft-f/range_expr_value_high_assert [deleted file]
tests/shell/testcases/transactions/doubled-set [new file with mode: 0755]
tests/shell/testcases/transactions/dumps/doubled-set.json-nft [new file with mode: 0644]
tests/shell/testcases/transactions/dumps/doubled-set.nft [new file with mode: 0644]

index 0e0e0c00b91b40de9b09b7808c1647423e5139e1..70d80eb4855612543f8379cdd8edd0528b5f4b31 100644 (file)
@@ -4768,9 +4768,6 @@ static int set_evaluate(struct eval_ctx *ctx, struct set *set)
                existing_set = set_cache_find(table, set->handle.set.name);
                if (!existing_set)
                        set_cache_add(set_get(set), table);
-               else if (!datatype_equal(existing_set->key->dtype, set->key->dtype))
-                       return set_error(ctx, set, "%s definition has conflicting key (%s vs %s)\n",
-                                        type, set->key->dtype->name, existing_set->key->dtype->name);
 
                if (existing_set && existing_set->flags & NFT_SET_EVAL) {
                        uint32_t existing_flags = existing_set->flags & ~NFT_SET_EVAL;
diff --git a/tests/shell/testcases/bogons/nft-f/range_expr_value_high_assert b/tests/shell/testcases/bogons/nft-f/range_expr_value_high_assert
deleted file mode 100644 (file)
index a25ac02..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-table inet t {
-       set s3 {
-               type inet_proto
-               flags interval
-               elements = { 100-11.0.0.0, }
-       }
-       set s3 {
-               type ipv4_addr
-               flags interval
-               elements = { 100-11.0.0.0, }
-       }
-}
diff --git a/tests/shell/testcases/transactions/doubled-set b/tests/shell/testcases/transactions/doubled-set
new file mode 100755 (executable)
index 0000000..50b568e
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+# NFT_TEST_REQUIRES(NFT_TEST_HAVE_pipapo)
+
+$NFT -f /dev/stdin <<EOF
+table t {
+       set s {
+               type ipv4_addr . ifname
+               flags interval
+               elements = { 1.2.3.4 . "foo" }
+       }
+
+       set s {
+               type ipv4_addr . ifname
+               flags interval
+               elements = { 1.2.3.4 . "foo" }
+
+       }
+}
+EOF
+
+# run-tests.sh will validate dumpfile.
diff --git a/tests/shell/testcases/transactions/dumps/doubled-set.json-nft b/tests/shell/testcases/transactions/dumps/doubled-set.json-nft
new file mode 100644 (file)
index 0000000..00a1af0
--- /dev/null
@@ -0,0 +1 @@
+{"nftables": [{"metainfo": {"version": "VERSION", "release_name": "RELEASE_NAME", "json_schema_version": 1}}, {"table": {"family": "ip", "name": "t", "handle": 0}}, {"set": {"family": "ip", "name": "s", "table": "t", "type": ["ipv4_addr", "ifname"], "handle": 0, "flags": ["interval"], "elem": [{"concat": ["1.2.3.4", "foo"]}]}}]}
diff --git a/tests/shell/testcases/transactions/dumps/doubled-set.nft b/tests/shell/testcases/transactions/dumps/doubled-set.nft
new file mode 100644 (file)
index 0000000..48a322e
--- /dev/null
@@ -0,0 +1,7 @@
+table ip t {
+       set s {
+               type ipv4_addr . ifname
+               flags interval
+               elements = { 1.2.3.4 . "foo" }
+       }
+}