From 702551ed420b71c0bb38d757d747768ab4313d38 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Tue, 12 Jan 2016 10:57:06 -0300 Subject: [PATCH] Adds support to action `exec' to sec lang parser --- src/parser/seclang-parser.yy | 19 +++++++++++++++++++ src/parser/seclang-scanner.ll | 10 +++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/parser/seclang-parser.yy b/src/parser/seclang-parser.yy index 785b331c..87a8972c 100644 --- a/src/parser/seclang-parser.yy +++ b/src/parser/seclang-parser.yy @@ -227,6 +227,7 @@ using modsecurity::Variables::Tx; %token FREE_TEXT %token ACTION %token ACTION_ACCURACY +%token ACTION_EXEC %token ACTION_ALLOW %token ACTION_REDIRECT %token ACTION_SKIP_AFTER @@ -827,6 +828,24 @@ act: { $$ = Action::instantiate($1); } + | ACTION_EXEC + { + /* + + TODO: exec is not implemented yet. + + std::string error; + Allow *exec = new Exec($1); + + if (exec->init(&error) == false) { + driver.parserError << error; + YYERROR; + } + + $$ = exec; + */ + $$ = Action::instantiate($1); + } | ACTION_ALLOW { /* diff --git a/src/parser/seclang-scanner.ll b/src/parser/seclang-scanner.ll index 24ce035e..a6255a7a 100755 --- a/src/parser/seclang-scanner.ll +++ b/src/parser/seclang-scanner.ll @@ -23,7 +23,7 @@ using modsecurity::split; %} %option noyywrap nounput batch debug noinput -ACTION (?i:accuracy|append|block|capture|chain|deny|deprecatevar|drop|exec|expirevar|id:[0-9]+|id:'[0-9]+'|log|multiMatch|noauditlog|nolog|pass|pause|prepend|proxy|sanitiseArg|sanitiseMatched|sanitiseMatchedBytes|sanitiseRequestHeader|sanitiseResponseHeader|setrsc|setenv|status:[0-9]+|xmlns) +ACTION (?i:accuracy|append|block|capture|chain|deny|deprecatevar|drop|expirevar|id:[0-9]+|id:'[0-9]+'|log|multiMatch|noauditlog|nolog|pass|pause|prepend|proxy|sanitiseArg|sanitiseMatched|sanitiseMatchedBytes|sanitiseRequestHeader|sanitiseResponseHeader|setrsc|setenv|status:[0-9]+|xmlns) ACTION_ALLOW (?i:allow) ACTION_INITCOL (?i:initcol) @@ -33,6 +33,7 @@ ACTION_SKIP (?i:skip) ACTION_SKIP_AFTER (?i:skipAfter) ACTION_PHASE ((?i:phase:(?i:REQUEST|RESPONSE|LOGGING|[0-9]+))|(?i:phase:'(?i:REQUEST|RESPONSE|LOGGING|[0-9]+)')) ACTION_AUDIT_LOG (?i:auditlog) +ACTION_EXEC (?i:exec) ACTION_SEVERITY (?i:severity) ACTION_SEVERITY_VALUE (?i:(EMERGENCY|ALERT|CRITICAL|ERROR|WARNING|NOTICE|INFO|DEBUG)|[0-9]+) ACTION_SETVAR (?i:setvar) @@ -315,6 +316,13 @@ CONFIG_DIR_UNICODE_MAP_FILE (?i:SecUnicodeMapFile) {ACTION_SEVERITY}:{ACTION_SEVERITY_VALUE} { return yy::seclang_parser::make_ACTION_SEVERITY(yytext + 9, *driver.loc.back()); } {ACTION_SEVERITY}:'{ACTION_SEVERITY_VALUE}' { return yy::seclang_parser::make_ACTION_SEVERITY(std::string(yytext, 10, yyleng - 11), *driver.loc.back()); } +{ACTION_EXEC}:'{VAR_FREE_TEXT_QUOTE}' { + return yy::seclang_parser::make_ACTION_EXEC(strchr(yytext, ':') + 1, *driver.loc.back()); + } + +{ACTION_EXEC}:{VAR_FREE_TEXT_SPACE_COMMA} { + return yy::seclang_parser::make_ACTION_EXEC(strchr(yytext, ':') + 1, *driver.loc.back()); + } {ACTION_EXPIREVAR}:'{VAR_FREE_TEXT_QUOTE}={VAR_FREE_TEXT_QUOTE}' { return yy::seclang_parser::make_ACTION_EXPIREVAR(strchr(yytext, ':') + 1, *driver.loc.back());