]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser_bison: allow RESET token from rhs
authorPablo Neira Ayuso <pablo@netfilter.org>
Fri, 2 Dec 2016 10:23:29 +0000 (11:23 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 3 Jan 2017 13:21:53 +0000 (14:21 +0100)
Stateful objects have introduced a RESET token in the parser. This breaks the
use of RESET from the rhs, to fix this:

1) I added a new rule to catch this case, thus, dccp doesn't break.
2) Update reject_opts so reject with tcp reset still works.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/parser_bison.y

index b571fbbed5f349dee6cba40cfb2a414d31cd2c49..5b829a243128bc2154f0719efb8f6d1168224274 100644 (file)
@@ -1897,15 +1897,9 @@ reject_opts              :       /* empty */
                                                          $4);
                                $<stmt>0->reject.expr->dtype = &icmpx_code_type;
                        }
-                       |       WITH    TCP     STRING
+                       |       WITH    TCP     RESET
                        {
-                               if (strcmp($3, "reset") == 0) {
-                                       $<stmt>0->reject.type = NFT_REJECT_TCP_RST;
-                               } else {
-                                       erec_queue(error(&@2, "unsupported reject type", $3),
-                                                  state->msgs);
-                                       YYERROR;
-                               }
+                               $<stmt>0->reject.type = NFT_REJECT_TCP_RST;
                        }
                        ;
 
@@ -2721,6 +2715,12 @@ primary_rhs_expr :       symbol_expr             { $$ = $1; }
                                                       current_scope(state),
                                                       "ecn");
                        }
+                       |       RESET
+                       {
+                               $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
+                                                      current_scope(state),
+                                                      "reset");
+                       }
                        ;
 
 relational_op          :       EQ              { $$ = OP_EQ; }