mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-08-16 07:56:12 +03:00
Adds support to rules with actions without quotes
This commit is contained in:
parent
0087a602f1
commit
941b9e75c4
@ -248,6 +248,7 @@ using ModSecurity::Variables::Variable;
|
|||||||
%type <std::vector<Variable *> *> variables
|
%type <std::vector<Variable *> *> variables
|
||||||
%type <Variable *> var
|
%type <Variable *> var
|
||||||
%type <Action *> act
|
%type <Action *> act
|
||||||
|
%type <std::vector<Action *> *> actings
|
||||||
|
|
||||||
%printer { yyoutput << $$; } <*>;
|
%printer { yyoutput << $$; } <*>;
|
||||||
%%
|
%%
|
||||||
@ -336,10 +337,24 @@ audit_log:
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
actings:
|
||||||
|
QUOTATION_MARK actions SPACE QUOTATION_MARK
|
||||||
|
{
|
||||||
|
$$ = $2;
|
||||||
|
}
|
||||||
|
| QUOTATION_MARK actions QUOTATION_MARK
|
||||||
|
{
|
||||||
|
$$ = $2;
|
||||||
|
}
|
||||||
|
| actions
|
||||||
|
{
|
||||||
|
$$ = $1;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
expression:
|
expression:
|
||||||
audit_log
|
audit_log
|
||||||
| DIRECTIVE SPACE variables SPACE OPERATOR SPACE QUOTATION_MARK actions SPACE QUOTATION_MARK
|
| DIRECTIVE SPACE variables SPACE OPERATOR SPACE actings
|
||||||
| DIRECTIVE SPACE variables SPACE OPERATOR SPACE QUOTATION_MARK actions QUOTATION_MARK
|
|
||||||
{
|
{
|
||||||
Operator *op = Operator::instantiate($5);
|
Operator *op = Operator::instantiate($5);
|
||||||
const char *error = NULL;
|
const char *error = NULL;
|
||||||
@ -350,15 +365,14 @@ expression:
|
|||||||
Rule *rule = new Rule(
|
Rule *rule = new Rule(
|
||||||
/* op */ op,
|
/* op */ op,
|
||||||
/* variables */ $3,
|
/* variables */ $3,
|
||||||
/* actions */ $8
|
/* actions */ $7
|
||||||
);
|
);
|
||||||
|
|
||||||
if (driver.addSecRule(rule) == false) {
|
if (driver.addSecRule(rule) == false) {
|
||||||
YYERROR;
|
YYERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| DIRECTIVE SPACE variables SPACE FREE_TEXT SPACE QUOTATION_MARK actions SPACE QUOTATION_MARK
|
| DIRECTIVE SPACE variables SPACE FREE_TEXT SPACE actings
|
||||||
| DIRECTIVE SPACE variables SPACE FREE_TEXT SPACE QUOTATION_MARK actions QUOTATION_MARK
|
|
||||||
{
|
{
|
||||||
Operator *op = Operator::instantiate("\"@rx " + $5 + "\"");
|
Operator *op = Operator::instantiate("\"@rx " + $5 + "\"");
|
||||||
const char *error = NULL;
|
const char *error = NULL;
|
||||||
@ -369,7 +383,25 @@ expression:
|
|||||||
Rule *rule = new Rule(
|
Rule *rule = new Rule(
|
||||||
/* op */ op,
|
/* op */ op,
|
||||||
/* variables */ $3,
|
/* variables */ $3,
|
||||||
/* actions */ $8
|
/* actions */ $7
|
||||||
|
);
|
||||||
|
|
||||||
|
if (driver.addSecRule(rule) == false) {
|
||||||
|
YYERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
| DIRECTIVE SPACE variables SPACE OPERATOR
|
||||||
|
{
|
||||||
|
Operator *op = Operator::instantiate("\"@rx " + $5 + "\"");
|
||||||
|
const char *error = NULL;
|
||||||
|
if (op->init(&error) == false) {
|
||||||
|
driver.error(@0, error);
|
||||||
|
YYERROR;
|
||||||
|
}
|
||||||
|
Rule *rule = new Rule(
|
||||||
|
/* op */ op,
|
||||||
|
/* variables */ $3,
|
||||||
|
/* actions */ NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
if (driver.addSecRule(rule) == false) {
|
if (driver.addSecRule(rule) == false) {
|
||||||
|
26
src/rule.cc
26
src/rule.cc
@ -97,18 +97,20 @@ Rule::Rule(Operator *_op,
|
|||||||
m_secmarker(false),
|
m_secmarker(false),
|
||||||
m_marker(""),
|
m_marker(""),
|
||||||
m_referenceCount(0) {
|
m_referenceCount(0) {
|
||||||
for (Action *a : *actions) {
|
if (actions != NULL) {
|
||||||
if (a->action_kind == Action::ConfigurationKind) {
|
for (Action *a : *actions) {
|
||||||
actions_conf.push_back(a);
|
if (a->action_kind == Action::ConfigurationKind) {
|
||||||
a->evaluate(this, NULL);
|
actions_conf.push_back(a);
|
||||||
} else if (a->action_kind == Action::RunTimeBeforeMatchAttemptKind) {
|
a->evaluate(this, NULL);
|
||||||
actions_runtime_pre.push_back(a);
|
} else if (a->action_kind == Action::RunTimeBeforeMatchAttemptKind) {
|
||||||
} else if (a->action_kind == Action::RunTimeOnlyIfMatchKind) {
|
actions_runtime_pre.push_back(a);
|
||||||
actions_runtime_pos.push_back(a);
|
} else if (a->action_kind == Action::RunTimeOnlyIfMatchKind) {
|
||||||
} else {
|
actions_runtime_pos.push_back(a);
|
||||||
std::cout << "General failure, action: " << a->name;
|
} else {
|
||||||
std::cout << " has an unknown type." << std::endl;
|
std::cout << "General failure, action: " << a->name;
|
||||||
delete a;
|
std::cout << " has an unknown type." << std::endl;
|
||||||
|
delete a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user