Eliminates the sec language grammar shift-reduce problem

This commit is contained in:
Felipe Zimmerle 2015-08-11 15:57:35 -03:00
parent a324ff9317
commit 2ff0a44df2

View File

@ -120,18 +120,14 @@ using ModSecurity::Variables::Variable;
%define api.token.prefix {TOK_} %define api.token.prefix {TOK_}
%token %token
END 0 "end of file" END 0 "end of file"
CONFIG_DIR_VAL "+" COMMA ","
COMMA "*"
QUOTATION_MARK ")" QUOTATION_MARK ")"
SPACE SPACE
PIPE PIPE
UNKNOWN
FREE_TEXT
; ;
%left ARGS CONFIG_VALUE_RELEVANT_ONLY CONFIG_VALUE_ON CONFIG_VALUE_OFF CONFIG_VALUE %left CONFIG_VALUE_RELEVANT_ONLY CONFIG_VALUE_ON CONFIG_VALUE_OFF
%token <std::string> DIRECTIVE %token <std::string> DIRECTIVE
%token <std::string> CONFIG_DIRECTIVE
%token <std::string> CONFIG_DIR_REQ_BODY_LIMIT %token <std::string> CONFIG_DIR_REQ_BODY_LIMIT
%token <std::string> CONFIG_DIR_RES_BODY_LIMIT %token <std::string> CONFIG_DIR_RES_BODY_LIMIT
%token <std::string> CONFIG_DIR_REQ_BODY_LIMIT_ACTION %token <std::string> CONFIG_DIR_REQ_BODY_LIMIT_ACTION
@ -139,7 +135,6 @@ using ModSecurity::Variables::Variable;
%token <std::string> CONFIG_DIR_RULE_ENG %token <std::string> CONFIG_DIR_RULE_ENG
%token <std::string> CONFIG_DIR_REQ_BODY %token <std::string> CONFIG_DIR_REQ_BODY
%token <std::string> CONFIG_DIR_RES_BODY %token <std::string> CONFIG_DIR_RES_BODY
%token <std::string> CONFIG_VALUE
%token <std::string> CONFIG_VALUE_ON %token <std::string> CONFIG_VALUE_ON
%token <std::string> CONFIG_VALUE_OFF %token <std::string> CONFIG_VALUE_OFF
%token <std::string> CONFIG_VALUE_DETC %token <std::string> CONFIG_VALUE_DETC
@ -182,8 +177,6 @@ using ModSecurity::Variables::Variable;
%token <std::string> RUN_TIME_VAR_TIME_WDAY %token <std::string> RUN_TIME_VAR_TIME_WDAY
%token <std::string> RUN_TIME_VAR_TIME_YEAR %token <std::string> RUN_TIME_VAR_TIME_YEAR
%token <std::string> CONFIG_INCLUDE
%token <std::string> CONFIG_SEC_REMOTE_RULES
%token <std::string> CONFIG_SEC_REMOTE_RULES_FAIL_ACTION %token <std::string> CONFIG_SEC_REMOTE_RULES_FAIL_ACTION
%token <std::string> CONFIG_DIR_GEO_DB %token <std::string> CONFIG_DIR_GEO_DB
@ -197,8 +190,6 @@ using ModSecurity::Variables::Variable;
%token <std::string> ACTION_REV %token <std::string> ACTION_REV
%token <std::string> TRANSFORMATION %token <std::string> TRANSFORMATION
%token <double> CONFIG_VALUE_NUMBER
%type <std::vector<Action *> *> actions %type <std::vector<Action *> *> actions
%type <std::vector<Variable *> *> variables %type <std::vector<Variable *> *> variables
%type <Variable *> var %type <Variable *> var
@ -206,19 +197,17 @@ using ModSecurity::Variables::Variable;
%printer { yyoutput << $$; } <*>; %printer { yyoutput << $$; } <*>;
%% %%
%start secrule; %start input;
secrule: input:
| secrule line %empty
| input line
;
line: line: expression
expression
| SPACE expression | SPACE expression
| SPACE ;
{
}
audit_log: audit_log:
/* SecAuditLogDirMode */ /* SecAuditLogDirMode */
@ -289,7 +278,7 @@ audit_log:
{ {
driver.audit_log->setType(ModSecurity::AuditLog::ParallelAuditLogType); driver.audit_log->setType(ModSecurity::AuditLog::ParallelAuditLogType);
} }
;
expression: expression:
audit_log audit_log
@ -387,7 +376,7 @@ expression:
{ {
driver.remoteRulesActionOnFailed = Rules::OnFailedRemoteRulesAction::WarnOnFailedRemoteRulesAction; driver.remoteRulesActionOnFailed = Rules::OnFailedRemoteRulesAction::WarnOnFailedRemoteRulesAction;
} }
;
variables: variables:
variables PIPE var variables PIPE var
@ -402,6 +391,7 @@ variables:
variables->push_back($1); variables->push_back($1);
$$ = variables; $$ = variables;
} }
;
var: var:
VARIABLE VARIABLE
@ -530,6 +520,7 @@ var:
if (!var) { var = new TimeYear(name); } if (!var) { var = new TimeYear(name); }
$$ = var; $$ = var;
} }
;
actions: actions:
actions COMMA SPACE ACTION actions COMMA SPACE ACTION
@ -718,6 +709,7 @@ actions:
actions->push_back(rev); actions->push_back(rev);
$$ = actions; $$ = actions;
} }
;
%% %%
void void