mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-09-30 19:47:47 +03:00
Splits Rule class into: Rule, RuleBase, RuleMarker
This commit is contained in:
@@ -41,9 +41,11 @@ Driver::~Driver() {
|
||||
}
|
||||
|
||||
|
||||
int Driver::addSecMarker(std::string marker) {
|
||||
int Driver::addSecMarker(std::string marker, std::unique_ptr<std::string> fileName, int lineNumber) {
|
||||
// FIXME: we might move this to the parser.
|
||||
for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) {
|
||||
std::unique_ptr<Rule> rule(new Rule(marker));
|
||||
RuleMarker *r = new RuleMarker(marker, std::move(fileName), lineNumber);
|
||||
std::unique_ptr<RuleMarker> rule(std::move(r));
|
||||
rule->setPhase(i);
|
||||
m_rulesSetPhases.insert(std::move(rule));
|
||||
}
|
||||
@@ -58,7 +60,6 @@ int Driver::addSecAction(std::unique_ptr<Rule> rule) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
m_rulesSetPhases.insert(std::move(rule));
|
||||
|
||||
return true;
|
||||
@@ -99,15 +100,16 @@ int Driver::addSecRule(std::unique_ptr<Rule> r) {
|
||||
*/
|
||||
if (rule->m_ruleId == 0) {
|
||||
m_parserError << "Rules must have an ID. File: ";
|
||||
m_parserError << rule->m_fileName << " at line: ";
|
||||
m_parserError << std::to_string(rule->m_lineNumber) << std::endl;
|
||||
m_parserError << rule->getFileName() << " at line: ";
|
||||
m_parserError << std::to_string(rule->getLineNumber()) << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) {
|
||||
Rules *rules = m_rulesSetPhases[i];
|
||||
for (int j = 0; j < rules->size(); j++) {
|
||||
if (rules->at(j)->m_ruleId == rule->m_ruleId) {
|
||||
Rule *lr = dynamic_cast<Rule *>(rules->at(j).get());
|
||||
if (lr && lr->m_ruleId == rule->m_ruleId) {
|
||||
m_parserError << "Rule id: " << std::to_string(rule->m_ruleId) \
|
||||
<< " is duplicated" << std::endl;
|
||||
return false;
|
||||
|
@@ -68,7 +68,7 @@ class Driver : public RulesSetProperties {
|
||||
|
||||
int addSecRule(std::unique_ptr<Rule> rule);
|
||||
int addSecAction(std::unique_ptr<Rule> rule);
|
||||
int addSecMarker(std::string marker);
|
||||
int addSecMarker(std::string marker, std::unique_ptr<std::string> fileName, int lineNumber);
|
||||
int addSecRuleScript(std::unique_ptr<RuleScript> rule);
|
||||
|
||||
bool scan_begin();
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1221,7 +1221,10 @@ expression:
|
||||
}
|
||||
| CONFIG_DIR_SEC_MARKER
|
||||
{
|
||||
driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded($1));
|
||||
driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded($1),
|
||||
/* file name */ std::unique_ptr<std::string>(new std::string(*@1.end.filename)),
|
||||
/* line number */ @1.end.line
|
||||
);
|
||||
}
|
||||
| CONFIG_DIR_RULE_ENG CONFIG_VALUE_OFF
|
||||
{
|
||||
|
Reference in New Issue
Block a user