Refactoring: changes ModSecurityStringVar to transaction::Variable

Having the variables and collection in place before start to implement
persistent storage.
This commit is contained in:
Felipe Zimmerle 2015-10-28 13:53:07 -03:00
parent 7afc07914f
commit 776502e021
38 changed files with 115 additions and 129 deletions

View File

@ -73,38 +73,22 @@ namespace operators {
class Operator; class Operator;
} }
class ModSecurityHeader { namespace transaction {
class Variable {
public: public:
ModSecurityHeader(char *key, char *value) Variable(const std::string& key, const std::string& value) :
: _key(key),
_value(value)
{ }
char *_key;
char *_value;
};
class ModSecurityCollectionsVariables :
public std::unordered_map<std::string,
std::unordered_map<std::string, std::string>> {
public:
};
class ModSecurityStringVar {
public:
ModSecurityStringVar(const std::string& key, const std::string& value) :
m_key(key), m_key(key),
m_value(value) { } m_value(value) { }
std::string m_key; std::string m_key;
std::string m_value; std::string m_value;
}; };
class ModSecurityStringVariables :
class Variables :
public std::unordered_multimap<std::string, std::string> { public std::unordered_multimap<std::string, std::string> {
public: public:
ModSecurityStringVariables() { Variables() {
this->reserve(1000); this->reserve(1000);
} }
@ -136,13 +120,13 @@ class ModSecurityStringVariables :
this->erase(key); this->erase(key);
} }
std::list<ModSecurityStringVar *> std::list<Variable *>
resolveVariable(const std::string& key, resolveVariable(const std::string& key,
std::list<ModSecurityStringVar *> *l) { std::list<Variable *> *l) {
auto range = this->equal_range(key); auto range = this->equal_range(key);
for (auto it = range.first; it != range.second; ++it) { for (auto it = range.first; it != range.second; ++it) {
l->push_back(new ModSecurityStringVar(key, it->second)); l->push_back(new transaction::Variable(key, it->second));
} }
if (key.find(":") == std::string::npos && l->size() == 0) { if (key.find(":") == std::string::npos && l->size() == 0) {
@ -160,7 +144,7 @@ class ModSecurityStringVariables :
// auto range = this->equal_range(x.first); // auto range = this->equal_range(x.first);
// for (auto it = range.first; it != range.second; ++it) { // for (auto it = range.first; it != range.second; ++it) {
l->push_back(new ModSecurityStringVar(x.first, x.second)); l->push_back(new transaction::Variable(x.first, x.second));
// } // }
} }
} }
@ -168,14 +152,17 @@ class ModSecurityStringVariables :
return *l; return *l;
} }
std::list<ModSecurityStringVar *> std::list<Variable *>
resolveVariable(const std::string& key) { resolveVariable(const std::string& key) {
std::list<ModSecurityStringVar *> l; std::list<Variable *> l;
return resolveVariable(key, &l); return resolveVariable(key, &l);
} }
}; };
} // name space Transaction
/** @ingroup ModSecurity_CPP_API */ /** @ingroup ModSecurity_CPP_API */
class Assay { class Assay {
public: public:
@ -247,11 +234,11 @@ class Assay {
const char *getResponseBody(); const char *getResponseBody();
int getResponseBodyLenth(); int getResponseBodyLenth();
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
resolve_variable(const std::string& var); resolve_variable(const std::string& var);
void resolve_variable(const std::string& var, void resolve_variable(const std::string& var,
std::list<ModSecurityStringVar *> *); std::list<transaction::Variable *> *);
std::string* resolve_variable_first(const std::string& key); std::string* resolve_variable_first(const std::string& key);
std::string* resolve_variable_first(const std::string& collectionName, std::string* resolve_variable_first(const std::string& collectionName,
@ -261,8 +248,8 @@ class Assay {
bool update_variable_first(std::string var, const std::string &value); bool update_variable_first(std::string var, const std::string &value);
void delete_variable(std::string key); void delete_variable(std::string key);
ModSecurityStringVariables m_variables_strings; transaction::Variables m_variables_strings;
std::unordered_map<std::string, ModSecurityStringVariables *> collections; std::unordered_map<std::string, transaction::Variables *> collections;
#ifndef NO_LOGS #ifndef NO_LOGS
void debug(int, std::string); void debug(int, std::string);
#endif #endif
@ -317,7 +304,6 @@ class Assay {
std::ostringstream m_requestBody; std::ostringstream m_requestBody;
std::ostringstream m_responseBody; std::ostringstream m_responseBody;
ModSecurityCollectionsVariables m_variables_collections;
void *m_logCbData; void *m_logCbData;
}; };

View File

@ -126,7 +126,7 @@ Assay::Assay(ModSecurity *ms, Rules *rules, void *logCbData)
this->m_responseHeadersNames = resolve_variable_first( this->m_responseHeadersNames = resolve_variable_first(
"RESPONSE_HEADERS_NAMES"); "RESPONSE_HEADERS_NAMES");
collections.emplace("TX", new ModSecurityStringVariables()); collections.emplace("TX", new transaction::Variables());
#ifndef NO_LOGS #ifndef NO_LOGS
this->debug(4, "Initialising transaction"); this->debug(4, "Initialising transaction");
#endif #endif
@ -664,7 +664,7 @@ int Assay::processRequestBody() {
* computationally intensive. * computationally intensive.
*/ */
std::string fullRequest; std::string fullRequest;
std::list<ModSecurityStringVar *> l; std::list<transaction::Variable *> l;
resolve_variable("REQUEST_HEADERS", &l); resolve_variable("REQUEST_HEADERS", &l);
for (auto &a : l) { for (auto &a : l) {
fullRequest = fullRequest + \ fullRequest = fullRequest + \
@ -1480,7 +1480,7 @@ void Assay::delete_variable(std::string key) {
void Assay::resolve_variable(const std::string& var, void Assay::resolve_variable(const std::string& var,
std::list<ModSecurityStringVar *> *l) { std::list<transaction::Variable *> *l) {
m_variables_strings.resolveVariable(var, l); m_variables_strings.resolveVariable(var, l);
@ -1490,10 +1490,10 @@ void Assay::resolve_variable(const std::string& var,
} }
} }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
Assay::resolve_variable(const std::string& var) { Assay::resolve_variable(const std::string& var) {
std::list<ModSecurityStringVar *> *l = std::list<transaction::Variable *> *l =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
resolve_variable(var, l); resolve_variable(var, l);
@ -1543,7 +1543,7 @@ void Assay::setCollection(const std::string& collectionName,
const std::string& targetValue) { const std::string& targetValue) {
try { try {
ModSecurityStringVariables *collection; transaction::Variables *collection;
collection = collections.at(collectionName); collection = collections.at(collectionName);
collection->storeOrUpdateVariable(collectionName + ":" collection->storeOrUpdateVariable(collectionName + ":"
+ variableName, targetValue); + variableName, targetValue);

View File

@ -35,7 +35,7 @@ class Multipart {
bool process(std::string data); bool process(std::string data);
void checkForCrlfLf(const std::string &blob); void checkForCrlfLf(const std::string &blob);
ModSecurityStringVariables variables; transaction::Variables variables;
bool crlf; bool crlf;
bool containsDataAfter; bool containsDataAfter;

View File

@ -284,7 +284,7 @@ bool Rule::evaluate(Assay *assay) {
Exclusion *exl = dynamic_cast<Exclusion *>(variable); Exclusion *exl = dynamic_cast<Exclusion *>(variable);
if (exl != NULL) { if (exl != NULL) {
std::list<ModSecurityStringVar *> *z = std::list<transaction::Variable *> *z =
variable->evaluate(assay); variable->evaluate(assay);
for (auto &y : *z) { for (auto &y : *z) {
exclusions.push_back(y->m_key); exclusions.push_back(y->m_key);
@ -301,7 +301,7 @@ bool Rule::evaluate(Assay *assay) {
continue; continue;
} }
std::list<ModSecurityStringVar *> *e = std::list<transaction::Variable *> *e =
variable->evaluate(assay); variable->evaluate(assay);
for (auto &v : *e) { for (auto &v : *e) {

View File

@ -27,17 +27,17 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
Duration::evaluate(Assay *assay) { Duration::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
std::string res; std::string res;
double e = cpu_seconds() - assay->start; double e = cpu_seconds() - assay->start;
res = std::to_string(e); res = std::to_string(e);
resl->push_back(new ModSecurityStringVar("DURATION", std::string(res))); resl->push_back(new transaction::Variable("DURATION", std::string(res)));
return resl; return resl;
} }

View File

@ -33,7 +33,7 @@ class Duration : public Variable {
explicit Duration(std::string _name) explicit Duration(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,10 +33,10 @@ extern char **environ;
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
Env::evaluate(Assay *assay) { Env::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
std::map<std::string, std::string> envs; std::map<std::string, std::string> envs;
for (char **current = environ; *current; current++) { for (char **current = environ; *current; current++) {
@ -50,7 +50,7 @@ std::list<ModSecurityStringVar *> *
envs.insert(std::pair<std::string, std::string>("ENV:" + key, value)); envs.insert(std::pair<std::string, std::string>("ENV:" + key, value));
if ("env:" + key == name) { if ("env:" + key == name) {
resl->push_back(new ModSecurityStringVar(name, value)); resl->push_back(new transaction::Variable(name, value));
return resl; return resl;
} }
} }
@ -60,7 +60,7 @@ std::list<ModSecurityStringVar *> *
&& (x.first != name)) { && (x.first != name)) {
continue; continue;
} }
resl->push_back(new ModSecurityStringVar(x.first, x.second)); resl->push_back(new transaction::Variable(x.first, x.second));
} }
return resl; return resl;

View File

@ -33,7 +33,7 @@ class Env : public Variable {
explicit Env(std::string _name) explicit Env(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -26,12 +26,12 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
HighestSeverity::evaluate(Assay *assay) { HighestSeverity::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
resl->push_back(new ModSecurityStringVar("HIGHEST_SEVERITY", resl->push_back(new transaction::Variable("HIGHEST_SEVERITY",
std::to_string(assay->highest_severity))); std::to_string(assay->highest_severity)));
return resl; return resl;

View File

@ -33,7 +33,7 @@ class HighestSeverity : public Variable {
explicit HighestSeverity(std::string _name) explicit HighestSeverity(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -27,10 +27,10 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
ModsecBuild::evaluate(Assay *assay) { ModsecBuild::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
std::ostringstream ss; std::ostringstream ss;
ss << std::setw(2) << std::setfill('0') << MODSECURITY_MAJOR; ss << std::setw(2) << std::setfill('0') << MODSECURITY_MAJOR;
@ -38,7 +38,7 @@ std::list<ModSecurityStringVar *> *
ss << std::setw(2) << std::setfill('0') << MODSECURITY_PATCHLEVEL; ss << std::setw(2) << std::setfill('0') << MODSECURITY_PATCHLEVEL;
ss << std::setw(2) << std::setfill('0') << MODSECURITY_TAG_NUM; ss << std::setw(2) << std::setfill('0') << MODSECURITY_TAG_NUM;
resl->push_back(new ModSecurityStringVar("MODSEC_BUILD", ss.str())); resl->push_back(new transaction::Variable("MODSEC_BUILD", ss.str()));
return resl; return resl;
} }

View File

@ -33,7 +33,7 @@ class ModsecBuild : public Variable {
explicit ModsecBuild(std::string _name) explicit ModsecBuild(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,10 +33,10 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
Time::evaluate(Assay *assay) { Time::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
char tstr[200]; char tstr[200];
struct tm timeinfo; struct tm timeinfo;
@ -48,7 +48,7 @@ std::list<ModSecurityStringVar *> *
localtime_r(&timer, &timeinfo); localtime_r(&timer, &timeinfo);
strftime(tstr, 200, "%H:%M:%S", &timeinfo); strftime(tstr, 200, "%H:%M:%S", &timeinfo);
resl->push_back(new ModSecurityStringVar("TIME", std::string(tstr))); resl->push_back(new transaction::Variable("TIME", std::string(tstr)));
return resl; return resl;
} }

View File

@ -34,7 +34,7 @@ class Time : public Variable {
explicit Time(std::string _name) explicit Time(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,10 +33,10 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
TimeDay::evaluate(Assay *assay) { TimeDay::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
char tstr[200]; char tstr[200];
struct tm timeinfo; struct tm timeinfo;
@ -48,7 +48,7 @@ std::list<ModSecurityStringVar *> *
localtime_r(&timer, &timeinfo); localtime_r(&timer, &timeinfo);
strftime(tstr, 200, "%d", &timeinfo); strftime(tstr, 200, "%d", &timeinfo);
resl->push_back(new ModSecurityStringVar("TIME_DAY", std::string(tstr))); resl->push_back(new transaction::Variable("TIME_DAY", std::string(tstr)));
return resl; return resl;
} }

View File

@ -33,7 +33,7 @@ class TimeDay : public Variable {
explicit TimeDay(std::string _name) explicit TimeDay(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,12 +33,12 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
TimeEpoch::evaluate(Assay *assay) { TimeEpoch::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
resl->push_back(new ModSecurityStringVar("TIME_EPOCH", resl->push_back(new transaction::Variable("TIME_EPOCH",
std::to_string(std::time(nullptr)))); std::to_string(std::time(nullptr))));
return resl; return resl;

View File

@ -33,7 +33,7 @@ class TimeEpoch : public Variable {
explicit TimeEpoch(std::string _name) explicit TimeEpoch(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,10 +33,10 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
TimeHour::evaluate(Assay *assay) { TimeHour::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
char tstr[200]; char tstr[200];
struct tm timeinfo; struct tm timeinfo;
@ -48,7 +48,7 @@ std::list<ModSecurityStringVar *> *
localtime_r(&timer, &timeinfo); localtime_r(&timer, &timeinfo);
strftime(tstr, 200, "%H", &timeinfo); strftime(tstr, 200, "%H", &timeinfo);
resl->push_back(new ModSecurityStringVar("TIME_HOUR", std::string(tstr))); resl->push_back(new transaction::Variable("TIME_HOUR", std::string(tstr)));
return resl; return resl;
} }

View File

@ -33,7 +33,7 @@ class TimeHour : public Variable {
explicit TimeHour(std::string _name) explicit TimeHour(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,10 +33,10 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
TimeMin::evaluate(Assay *assay) { TimeMin::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
char tstr[200]; char tstr[200];
struct tm timeinfo; struct tm timeinfo;
@ -48,7 +48,7 @@ std::list<ModSecurityStringVar *> *
localtime_r(&timer, &timeinfo); localtime_r(&timer, &timeinfo);
strftime(tstr, 200, "%M", &timeinfo); strftime(tstr, 200, "%M", &timeinfo);
resl->push_back(new ModSecurityStringVar("TIME_MIN", std::string(tstr))); resl->push_back(new transaction::Variable("TIME_MIN", std::string(tstr)));
return resl; return resl;
} }

View File

@ -33,7 +33,7 @@ class TimeMin : public Variable {
explicit TimeMin(std::string _name) explicit TimeMin(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,10 +33,10 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
TimeMon::evaluate(Assay *assay) { TimeMon::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
char tstr[200]; char tstr[200];
struct tm timeinfo; struct tm timeinfo;
@ -50,7 +50,7 @@ std::list<ModSecurityStringVar *> *
int a = atoi(tstr); int a = atoi(tstr);
a--; a--;
resl->push_back(new ModSecurityStringVar("TIME_MON", std::to_string(a))); resl->push_back(new transaction::Variable("TIME_MON", std::to_string(a)));
return resl; return resl;
} }

View File

@ -33,7 +33,7 @@ class TimeMon : public Variable {
explicit TimeMon(std::string _name) explicit TimeMon(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,10 +33,10 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
TimeSec::evaluate(Assay *assay) { TimeSec::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
char tstr[200]; char tstr[200];
struct tm timeinfo; struct tm timeinfo;
@ -48,7 +48,7 @@ std::list<ModSecurityStringVar *> *
localtime_r(&timer, &timeinfo); localtime_r(&timer, &timeinfo);
strftime(tstr, 200, "%S", &timeinfo); strftime(tstr, 200, "%S", &timeinfo);
resl->push_back(new ModSecurityStringVar("TIME_SEC", std::string(tstr))); resl->push_back(new transaction::Variable("TIME_SEC", std::string(tstr)));
return resl; return resl;
} }

View File

@ -33,7 +33,7 @@ class TimeSec : public Variable {
explicit TimeSec(std::string _name) explicit TimeSec(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,10 +33,10 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
TimeWDay::evaluate(Assay *assay) { TimeWDay::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
char tstr[200]; char tstr[200];
struct tm timeinfo; struct tm timeinfo;
@ -50,7 +50,7 @@ std::list<ModSecurityStringVar *> *
int a = atoi(tstr); int a = atoi(tstr);
a--; a--;
resl->push_back(new ModSecurityStringVar("TIME_WDAY", std::to_string(a))); resl->push_back(new transaction::Variable("TIME_WDAY", std::to_string(a)));
return resl; return resl;
} }

View File

@ -33,7 +33,7 @@ class TimeWDay : public Variable {
explicit TimeWDay(std::string _name) explicit TimeWDay(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,10 +33,10 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
TimeYear::evaluate(Assay *assay) { TimeYear::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
char tstr[200]; char tstr[200];
struct tm timeinfo; struct tm timeinfo;
@ -48,7 +48,7 @@ std::list<ModSecurityStringVar *> *
localtime_r(&timer, &timeinfo); localtime_r(&timer, &timeinfo);
strftime(tstr, 200, "%Y", &timeinfo); strftime(tstr, 200, "%Y", &timeinfo);
resl->push_back(new ModSecurityStringVar("TIME_YEAR", std::string(tstr))); resl->push_back(new transaction::Variable("TIME_YEAR", std::string(tstr)));
return resl; return resl;
} }

View File

@ -33,7 +33,7 @@ class TimeYear : public Variable {
explicit TimeYear(std::string _name) explicit TimeYear(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -33,12 +33,12 @@
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
Tx::evaluate(Assay *assay) { Tx::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *resl = std::list<transaction::Variable *> *resl =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
resl->push_back(new ModSecurityStringVar("TX:0", "teste")); resl->push_back(new transaction::Variable("TX:0", "teste"));
return resl; return resl;
} }

View File

@ -34,7 +34,7 @@ class Tx : public Variable {
explicit Tx(std::string _name) explicit Tx(std::string _name)
: Variable(_name) { } : Variable(_name) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
}; };

View File

@ -28,10 +28,10 @@ using ModSecurity::Variables::Variations::Exclusion;
namespace ModSecurity { namespace ModSecurity {
namespace Variables { namespace Variables {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
Variable::evaluate(Assay *assay) { Variable::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *l = std::list<transaction::Variable *> *l =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
assay->resolve_variable(this->name, l); assay->resolve_variable(this->name, l);
return l; return l;
} }

View File

@ -33,7 +33,7 @@ class Variable {
: name(_name) { } : name(_name) { }
static std::string to_s(std::vector<Variable *> *variables); static std::string to_s(std::vector<Variable *> *variables);
virtual std::list<ModSecurityStringVar *> * virtual std::list<transaction::Variable *> *
evaluate(Assay *assay); evaluate(Assay *assay);
std::string name; std::string name;
}; };

View File

@ -28,11 +28,11 @@ namespace ModSecurity {
namespace Variables { namespace Variables {
namespace Variations { namespace Variations {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
Count::evaluate(Assay *assay) { Count::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *reslIn; std::list<transaction::Variable *> *reslIn;
std::list<ModSecurityStringVar *> *reslOut = std::list<transaction::Variable *> *reslOut =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
int count = 0; int count = 0;
reslIn = var->evaluate(assay); reslIn = var->evaluate(assay);
@ -43,7 +43,7 @@ std::list<ModSecurityStringVar *> *
std::string res = std::to_string(count); std::string res = std::to_string(count);
reslOut->push_back(new ModSecurityStringVar(std::string(var->name), reslOut->push_back(new transaction::Variable(std::string(var->name),
std::string(res))); std::string(res)));
return reslOut; return reslOut;

View File

@ -35,7 +35,7 @@ class Count : public Variable {
: Variable("count(" + v->name + ")"), : Variable("count(" + v->name + ")"),
var(v) { } var(v) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
Variable *var; Variable *var;

View File

@ -29,10 +29,10 @@ namespace Variables {
namespace Variations { namespace Variations {
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
Exclusion::evaluate(Assay *assay) { Exclusion::evaluate(Assay *assay) {
std::list<ModSecurityStringVar *> *l = std::list<transaction::Variable *> *l =
new std::list<ModSecurityStringVar *>(); new std::list<transaction::Variable *>();
assay->resolve_variable(this->name, l); assay->resolve_variable(this->name, l);
return l; return l;
} }

View File

@ -36,7 +36,7 @@ class Exclusion : public Variable {
: Variable(v->name), : Variable(v->name),
var(v) { } var(v) { }
std::list<ModSecurityStringVar *> * std::list<transaction::Variable *> *
evaluate(Assay *assay) override; evaluate(Assay *assay) override;
Variable *var; Variable *var;