Variables are now receiving the rule instance as parameter

This commit is contained in:
Felipe Zimmerle 2016-05-17 15:45:35 -03:00
parent 8c714af8e1
commit a9e6716c6a
2 changed files with 20 additions and 4 deletions

View File

@ -306,7 +306,7 @@ bool Rule::evaluate(Transaction *trasn) {
Variable *variable = variables->at(i); Variable *variable = variables->at(i);
if (variable->m_isExclusion) { if (variable->m_isExclusion) {
std::vector<const collection::Variable *> z; std::vector<const collection::Variable *> z;
variable->evaluateInternal(trasn, &z); variable->evaluateInternal(trasn, this, &z);
for (auto &y : z) { for (auto &y : z) {
exclusions.push_back(y->m_key); exclusions.push_back(y->m_key);
} }
@ -322,7 +322,7 @@ bool Rule::evaluate(Transaction *trasn) {
} }
std::vector<const collection::Variable *> e; std::vector<const collection::Variable *> e;
variable->evaluateInternal(trasn, &e); variable->evaluateInternal(trasn, this, &e);
for (auto &v : e) { for (auto &v : e) {
if (std::find(exclusions.begin(), exclusions.end(), if (std::find(exclusions.begin(), exclusions.end(),

View File

@ -18,6 +18,7 @@
#include <list> #include <list>
#include <utility> #include <utility>
#include "modsecurity/transaction.h" #include "modsecurity/transaction.h"
#include "modsecurity/rule.h"
#ifndef SRC_VARIABLES_VARIABLE_H_ #ifndef SRC_VARIABLES_VARIABLE_H_
#define SRC_VARIABLES_VARIABLE_H_ #define SRC_VARIABLES_VARIABLE_H_
@ -66,14 +67,29 @@ class Variable {
static std::string to_s(std::vector<Variable *> *variables); static std::string to_s(std::vector<Variable *> *variables);
virtual std::vector<const collection::Variable *> virtual std::vector<const collection::Variable *>
*evaluate(Transaction *transaction); *evaluate(Transaction *transaction);
virtual void evaluateInternal(Transaction *transaction,
std::vector<const collection::Variable *> *l);
virtual void evaluateInternal(Transaction *transaction,
Rule *rule,
std::vector<const collection::Variable *> *l) {
evaluateInternal(transaction, l);
}
virtual void evaluate(Transaction *transaction, virtual void evaluate(Transaction *transaction,
std::vector<const collection::Variable *> *l); std::vector<const collection::Variable *> *l);
virtual void evaluateInternal(Transaction *transaction, virtual void evaluate(Transaction *transaction,
std::vector<const collection::Variable *> *l); Rule *rule,
std::vector<const collection::Variable *> *l) {
evaluate(transaction, l);
}
std::string m_name; std::string m_name;