diff --git a/server/modules/filter/dbfwfilter/ruleparser.y b/server/modules/filter/dbfwfilter/ruleparser.y index 00b78f2c7..fc76919e2 100644 --- a/server/modules/filter/dbfwfilter/ruleparser.y +++ b/server/modules/filter/dbfwfilter/ruleparser.y @@ -34,15 +34,19 @@ %lex-param {void* scanner} /** Terminal symbols */ -%token FWTOK_RULE FWTOK_RULENAME FWTOK_USERS FWTOK_USER FWTOK_RULES FWTOK_MATCH FWTOK_ANY FWTOK_ALL FWTOK_STRICT_ALL FWTOK_DENY -%token FWTOK_WILDCARD FWTOK_COLUMNS FWTOK_REGEX FWTOK_LIMIT_QUERIES FWTOK_WHERE_CLAUSE FWTOK_AT_TIMES FWTOK_ON_QUERIES -%token FWTOK_SQLOP FWTOK_COMMENT FWTOK_INT FWTOK_FLOAT FWTOK_PIPE FWTOK_TIME -%token FWTOK_BTSTR FWTOK_QUOTEDSTR FWTOK_STR FWTOK_FUNCTION FWTOK_USES_FUNCTION FWTOK_CMP +%token FWTOK_RULE FWTOK_USERS FWTOK_RULES FWTOK_MATCH FWTOK_ANY FWTOK_ALL +%token FWTOK_STRICT_ALL FWTOK_DENY FWTOK_WILDCARD FWTOK_COLUMNS FWTOK_REGEX +%token FWTOK_LIMIT_QUERIES FWTOK_WHERE_CLAUSE FWTOK_AT_TIMES FWTOK_ON_QUERIES +%token FWTOK_FUNCTION FWTOK_USES_FUNCTION FWTOK_COMMENT FWTOK_PIPE + +/** Terminal typed symbols */ +%token FWTOK_FLOAT FWTOK_TIME FWTOK_BTSTR +%token FWTOK_QUOTEDSTR FWTOK_STR FWTOK_USER +%token FWTOK_CMP FWTOK_SQLOP FWTOK_INT FWTOK_RULENAME /** Non-terminal symbols */ %type rulename %type cond -%type columnlist %type orlist %% @@ -118,16 +122,14 @@ mandatory: | FWTOK_USES_FUNCTION functionusagelist ; -columnlist: +columnvalue: FWTOK_BTSTR {if (!define_columns_rule(scanner, $1)){YYERROR;}} | FWTOK_STR {if (!define_columns_rule(scanner, $1)){YYERROR;}} - | columnlist FWTOK_BTSTR {if (!define_columns_rule(scanner, $2)){YYERROR;}} - | columnlist FWTOK_STR {if (!define_columns_rule(scanner, $2)){YYERROR;}} ; -functionlist: - functionvalue - | functionlist functionvalue +columnlist: + columnvalue + | columnlist columnvalue ; functionvalue: @@ -136,6 +138,11 @@ functionvalue: | FWTOK_BTSTR {if (!define_function_rule(scanner, $1)){YYERROR;}} ; +functionlist: + functionvalue + | functionlist functionvalue + ; + functionusagevalue: FWTOK_BTSTR {if (!define_function_usage_rule(scanner, $1)){YYERROR;}} | FWTOK_STR {if (!define_function_usage_rule(scanner, $1)){YYERROR;}} @@ -145,7 +152,7 @@ functionusagelist: | functionusagelist functionusagevalue ; - +/** Optional parts of a rule */ optional: FWTOK_AT_TIMES timelist | FWTOK_ON_QUERIES orlist