]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser_bison: Fix for chain prio name 'out'
authorPhil Sutter <phil@nwl.cc>
Tue, 25 Sep 2018 12:24:12 +0000 (14:24 +0200)
committerFlorian Westphal <fw@strlen.de>
Wed, 26 Sep 2018 08:32:07 +0000 (10:32 +0200)
Since 'out' is defined as a keyword in scanner.l, using it as a chain
priority name without quotes is not possible. Fix this by introducing
'extended_prio_name' in bison which may be either a string (as before)
or OUT, which is then converted into a string.

Fixes: c8a0e8c90e2d1 ("src: Set/print standard chain prios with textual names")
Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Florian Westphal <fw@strlen.de>
src/parser_bison.y

index 1c68b4f4420e78eac6d1b0076ea6da3f7d197242..831090b66e8ec45a267c0c3484f667cde17418c3 100644 (file)
@@ -541,6 +541,8 @@ int nft_lex(void *, void *, void *);
 %destructor { handle_free(&$$); } set_spec setid_spec set_identifier obj_spec objid_spec obj_identifier
 %type <val>                    family_spec family_spec_explicit chain_policy int_num
 %type <prio_spec>              extended_prio_spec prio_spec
+%type <string>                 extended_prio_name
+%destructor { xfree($$); }     extended_prio_name
 
 %type <string>                 dev_spec quota_unit
 %destructor { xfree($$); }     dev_spec quota_unit
@@ -1861,26 +1863,33 @@ prio_spec               :       PRIORITY extended_prio_spec
                        }
                        ;
 
+extended_prio_name     :       OUT
+                       {
+                               $$ = strdup("out");
+                       }
+                       |       STRING
+                       ;
+
 extended_prio_spec     :       int_num
                        {
                                struct prio_spec spec = {0};
                                spec.num = $1;
                                $$ = spec;
                        }
-                       |       STRING
+                       |       extended_prio_name
                        {
                                struct prio_spec spec = {0};
                                spec.str = $1;
                                $$ = spec;
                        }
-                       |       STRING PLUS NUM
+                       |       extended_prio_name PLUS NUM
                        {
                                struct prio_spec spec = {0};
                                spec.num = $3;
                                spec.str = $1;
                                $$ = spec;
                        }
-                       |       STRING DASH NUM
+                       |       extended_prio_name DASH NUM
                        {
                                struct prio_spec spec = {0};
                                spec.num = -$3;