summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2018-09-20 17:21:45 +0200
committerFlorian Westphal <fw@strlen.de>2018-09-20 17:21:45 +0200
commit5b35fb3132b1fa4348266139661ffa21a5a5ae0d (patch)
treeb8fde11306aa74fcadde0af7ef419aad4c727bdd
parent3bacae9e4a1e34eb09503c5bb8c45b418b6c38b5 (diff)
evaluate: throw distinct error if map exists but contains no objects
nft would throw misleading error in case map exists but doesn't contain expected objects. nft add rule filter in ct helper set tcp dport map @foo Error: Expression is not a map add rule filter in ct helper set tcp dport map @foo ^^^^ nft list table filter table ip filter { map foo { type inet_service : ifname } ... clarify this. Reported-by: Christian Göttsche <cgzones@googlemail.com> Signed-off-by: Florian Westphal <fw@strlen.de>
-rw-r--r--src/evaluate.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/evaluate.c b/src/evaluate.c
index 19550823..c8010852 100644
--- a/src/evaluate.c
+++ b/src/evaluate.c
@@ -2806,10 +2806,12 @@ static int stmt_evaluate_objref_map(struct eval_ctx *ctx, struct stmt *stmt)
case EXPR_SYMBOL:
if (expr_evaluate(ctx, &map->mappings) < 0)
return -1;
- if (map->mappings->ops->type != EXPR_SET_REF ||
- !(map->mappings->set->flags & NFT_SET_OBJECT))
+ if (map->mappings->ops->type != EXPR_SET_REF)
return expr_error(ctx->msgs, map->mappings,
"Expression is not a map");
+ if (!(map->mappings->set->flags & NFT_SET_OBJECT))
+ return expr_error(ctx->msgs, map->mappings,
+ "Expression is not a map with objects");
break;
default:
BUG("invalid mapping expression %s\n",