handling the "no" option with a token, and "yes" via a string made my
eye twitch.

ok? or is the helpful yyerror a nice feature?

Index: parse.y
===================================================================
RCS file: /cvs/src/sbin/pfctl/parse.y,v
retrieving revision 1.709
diff -u -p -r1.709 parse.y
--- parse.y     1 Feb 2021 00:31:04 -0000       1.709
+++ parse.y     31 Aug 2021 04:36:30 -0000
@@ -471,7 +471,7 @@ int parseport(char *, struct range *r, i
 %token PASS BLOCK MATCH SCRUB RETURN IN OS OUT LOG QUICK ON FROM TO FLAGS
 %token RETURNRST RETURNICMP RETURNICMP6 PROTO INET INET6 ALL ANY ICMPTYPE
 %token ICMP6TYPE CODE KEEP MODULATE STATE PORT BINATTO NODF
-%token MINTTL ERROR ALLOWOPTS FILENAME ROUTETO DUPTO REPLYTO NO LABEL
+%token MINTTL ERROR ALLOWOPTS FILENAME ROUTETO DUPTO REPLYTO YES NO LABEL
 %token NOROUTE URPFFAILED FRAGMENT USER GROUP MAXMSS MAXIMUM TTL TOS DROP TABLE
 %token REASSEMBLE ANCHOR SYNCOOKIES
 %token SET OPTIMIZATION TIMEOUT LIMIT LOGINTERFACE BLOCKPOLICY RANDOMID
@@ -3754,17 +3754,7 @@ comma            : ','
                ;
 
 yesno          : NO                    { $$ = 0; }
-               | STRING                {
-                       if (!strcmp($1, "yes"))
-                               $$ = 1;
-                       else {
-                               yyerror("invalid value '%s', expected 'yes' "
-                                   "or 'no'", $1);
-                               free($1);
-                               YYERROR;
-                       }
-                       free($1);
-               }
+               | YES                   { $$ = 1; }
                ;
 
 unaryop                : '='           { $$ = PF_OP_EQ; }
@@ -5048,6 +5038,7 @@ lookup(char *s)
                { "urpf-failed",        URPFFAILED},
                { "user",               USER},
                { "weight",             WEIGHT},
+               { "yes",                YES},
        };
        const struct keywords   *p;
 

Reply via email to