diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-08-29 17:16:35 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-08-29 20:30:29 +0200 |
commit | a26d13e2b099d750e5333a563f5d802bf568eb59 (patch) | |
tree | eccffa3782d27b62721568d4cedc810eee409cf9 /src/parser_bison.y | |
parent | 7a3d6802ddcb40d2339a461762afdb0328a3beb7 (diff) |
parser_bison: allow variable references in set elements definition
Andreas reports that he cannot use variables in set definitions:
define s-ext-2-int = 10.10.10.10 . 25, 10.10.10.10 . 143
set s-ext-2-int {
type ipv4_addr . inet_service
elements = { $s-ext-2-int }
}
This syntax is not correct though, since the curly braces should be
placed in the variable definition itself, so we have context to handle
this variable as a list of set elements.
The correct syntax that works after this patch is:
define s-ext-2-int = { 10.10.10.10 . 25, 10.10.10.10 . 143 }
table inet forward {
set s-ext-2-int {
type ipv4_addr . inet_service
elements = $s-ext-2-int
}
}
Reported-by: Andreas Hainke <andreas.hainke@foteviken.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/parser_bison.y')
-rw-r--r-- | src/parser_bison.y | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/parser_bison.y b/src/parser_bison.y index a87468e2..aac10dcc 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -525,8 +525,8 @@ static void location_update(struct location *loc, struct location *rhs, int n) %type <expr> verdict_map_expr verdict_map_list_expr verdict_map_list_member_expr %destructor { expr_free($$); } verdict_map_expr verdict_map_list_expr verdict_map_list_member_expr -%type <expr> set_expr set_list_expr set_list_member_expr -%destructor { expr_free($$); } set_expr set_list_expr set_list_member_expr +%type <expr> set_expr set_block_expr set_list_expr set_list_member_expr +%destructor { expr_free($$); } set_expr set_block_expr set_list_expr set_list_member_expr %type <expr> set_elem_expr set_elem_expr_alloc set_lhs_expr set_rhs_expr %destructor { expr_free($$); } set_elem_expr set_elem_expr_alloc set_lhs_expr set_rhs_expr %type <expr> set_elem_expr_stmt set_elem_expr_stmt_alloc @@ -1061,7 +1061,7 @@ set_block : /* empty */ { $$ = $<set>-1; } $1->gc_int = $3 * 1000; $$ = $1; } - | set_block ELEMENTS '=' set_expr + | set_block ELEMENTS '=' set_block_expr { $1->init = $4; $$ = $1; @@ -1069,6 +1069,10 @@ set_block : /* empty */ { $$ = $<set>-1; } | set_block set_mechanism stmt_seperator ; +set_block_expr : set_expr + | variable_expr + ; + set_flag_list : set_flag_list COMMA set_flag { $$ = $1 | $3; @@ -1104,7 +1108,7 @@ map_block : /* empty */ { $$ = $<set>-1; } $1->flags |= $3; $$ = $1; } - | map_block ELEMENTS '=' set_expr + | map_block ELEMENTS '=' set_block_expr { $1->init = $4; $$ = $1; |