Extends the direct access model to other collections

This commit is contained in:
Felipe Zimmerle
2017-01-26 23:13:38 -03:00
committed by Felipe Zimmerle
parent ca24b6bb06
commit f2d149fc5f
157 changed files with 7711 additions and 4959 deletions

View File

@@ -19,6 +19,8 @@
#include <utility>
#include "modsecurity/transaction.h"
#include "modsecurity/rule.h"
#include "src/utils/string.h"
#include "src/utils/regex.h"
#ifndef SRC_VARIABLES_VARIABLE_H_
#define SRC_VARIABLES_VARIABLE_H_
@@ -66,32 +68,21 @@ class Variable {
Variable(std::string name, VariableKind kind);
virtual ~Variable() { }
static std::string to_s(std::vector<Variable *> *variables);
virtual std::vector<const collection::Variable *>
*evaluate(Transaction *transaction);
virtual void evaluateInternal(Transaction *transaction,
virtual void evaluate(Transaction *transaction,
Rule *rule,
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,
std::vector<const collection::Variable *> *l);
virtual void evaluate(Transaction *transaction,
Rule *rule,
std::vector<const collection::Variable *> *l) {
evaluate(transaction, l);
}
static std::string to_s(std::vector<Variable *> *variables);
std::string m_name;
std::string m_collectionName;
@@ -103,6 +94,57 @@ class Variable {
};
class VariableModificatorExclusion : public Variable {
public:
VariableModificatorExclusion(std::unique_ptr<Variable> var)
: Variable(var->m_name),
m_var(std::move(var)) {
m_isExclusion = true;
}
void evaluate(Transaction *transaction,
Rule *rule,
std::vector<const collection::Variable *> *l) {
m_var->evaluate(transaction, rule, l);
}
std::unique_ptr<Variable> m_var;
};
class VariableModificatorCount : public Variable {
public:
VariableModificatorCount(std::unique_ptr<Variable> var)
: Variable(var->m_name),
m_var(std::move(var)) {
m_isCount = true;
}
void evaluate(Transaction *transaction,
Rule *rule,
std::vector<const collection::Variable *> *l) {
std::vector<const collection::Variable *> reslIn;
std::string *res = NULL;
collection::Variable *val = NULL;
int count = 0;
m_var->evaluate(transaction, rule, &reslIn);
for (auto &a : reslIn) {
count++;
}
res = new std::string(std::to_string(count));
val = new collection::Variable(&m_name, res);
val->m_dynamic_value = true;
val->m_dynamic = true;
l->push_back(val);
return;
}
std::unique_ptr<Variable> m_var;
};
} // namespace Variables
} // namespace modsecurity