mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-08-14 05:45:59 +03:00
Refactoring: changes ModSecurityStringVar to transaction::Variable
Having the variables and collection in place before start to implement persistent storage.
This commit is contained in:
parent
7afc07914f
commit
776502e021
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
14
src/assay.cc
14
src/assay.cc
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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) {
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user