actions: Compute the rule association during rules load

This commit is contained in:
Felipe Zimmerle
2020-05-18 15:08:17 -03:00
parent 374203b000
commit eb3e05646d
83 changed files with 842 additions and 415 deletions

View File

@@ -25,6 +25,7 @@
#include "src/variables/variable.h"
#include "src/run_time_string.h"
#include "src/variables/variable_with_runtime_string.h"
namespace modsecurity {
@@ -39,7 +40,6 @@ class Ip_DictElement : public Variable {
m_dictElement("IP:" + dictElement) { }
void evaluate(Transaction *t,
RuleWithActions *rule,
std::vector<const VariableValue *> *l) override {
t->m_collections.m_ip_collection->resolveMultiMatches(
m_name, t->m_collections.m_ip_collection_key,
@@ -56,7 +56,6 @@ class Ip_NoDictElement : public Variable {
: Variable("IP") { }
void evaluate(Transaction *t,
RuleWithActions *rule,
std::vector<const VariableValue *> *l) override {
t->m_collections.m_ip_collection->resolveMultiMatches("",
t->m_collections.m_ip_collection_key,
@@ -72,7 +71,6 @@ class Ip_DictElementRegexp : public VariableRegex {
m_dictElement(dictElement) { }
void evaluate(Transaction *t,
RuleWithActions *rule,
std::vector<const VariableValue *> *l) override {
t->m_collections.m_ip_collection->resolveRegularExpression(
m_dictElement, t->m_collections.m_ip_collection_key,
@@ -83,14 +81,16 @@ class Ip_DictElementRegexp : public VariableRegex {
};
class Ip_DynamicElement : public Variable {
class Ip_DynamicElement : public VariableWithRunTimeString {
public:
explicit Ip_DynamicElement(std::unique_ptr<RunTimeString> dictElement)
: Variable("IP:dynamic"),
m_string(std::move(dictElement)) { }
: VariableWithRunTimeString(
"IP:dynamic",
std::move(dictElement)
)
{ }
void evaluate(Transaction *t,
RuleWithActions *rule,
std::vector<const VariableValue *> *l) override {
std::string string = m_string->evaluate(t);
t->m_collections.m_ip_collection->resolveMultiMatches(
@@ -112,8 +112,6 @@ class Ip_DynamicElement : public Variable {
t->m_rules->m_secWebAppId.m_value,
value);
}
std::unique_ptr<RunTimeString> m_string;
};