From 64bffdebc42021c1a08c8fd2097721dbfa5b7f27 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Mon, 24 Aug 2020 12:57:47 -0300 Subject: [PATCH] Cosmetics: Using VariableValues instead of std::vector<...> Making the code more readable. --- headers/modsecurity/anchored_set_variable.h | 10 +++++----- headers/modsecurity/anchored_variable.h | 2 +- headers/modsecurity/collection/collection.h | 18 +++++++++--------- headers/modsecurity/variable_value.h | 6 +++++- src/actions/set_var.cc | 2 +- src/anchored_set_variable.cc | 10 +++++----- src/anchored_variable.cc | 2 +- .../backend/in_memory-per_process.cc | 6 +++--- src/collection/backend/in_memory-per_process.h | 6 +++--- src/collection/backend/lmdb.cc | 6 +++--- src/collection/backend/lmdb.h | 6 +++--- src/engine/lua.cc | 2 +- src/rule_with_operator.cc | 2 +- src/run_time_string.h | 2 +- src/transaction.cc | 12 ++++++------ src/variables/duration.cc | 2 +- src/variables/duration.h | 2 +- src/variables/env.cc | 2 +- src/variables/env.h | 2 +- src/variables/global.h | 8 ++++---- src/variables/highest_severity.cc | 2 +- src/variables/highest_severity.h | 2 +- src/variables/ip.h | 8 ++++---- src/variables/modsec_build.cc | 2 +- src/variables/modsec_build.h | 2 +- src/variables/remote_user.cc | 4 ++-- src/variables/remote_user.h | 2 +- src/variables/resource.h | 8 ++++---- src/variables/rule.h | 16 ++++++++-------- src/variables/session.h | 8 ++++---- src/variables/time.cc | 2 +- src/variables/time.h | 2 +- src/variables/time_day.cc | 2 +- src/variables/time_day.h | 2 +- src/variables/time_epoch.cc | 2 +- src/variables/time_epoch.h | 2 +- src/variables/time_hour.cc | 2 +- src/variables/time_hour.h | 2 +- src/variables/time_min.cc | 2 +- src/variables/time_min.h | 2 +- src/variables/time_mon.cc | 2 +- src/variables/time_mon.h | 2 +- src/variables/time_sec.cc | 2 +- src/variables/time_sec.h | 2 +- src/variables/time_wday.cc | 2 +- src/variables/time_wday.h | 2 +- src/variables/time_year.cc | 2 +- src/variables/time_year.h | 2 +- src/variables/tx.h | 8 ++++---- src/variables/user.h | 8 ++++---- src/variables/variable.h | 18 +++++++++--------- src/variables/web_app_id.h | 2 +- src/variables/xml.cc | 4 ++-- src/variables/xml.h | 4 ++-- 54 files changed, 123 insertions(+), 119 deletions(-) diff --git a/headers/modsecurity/anchored_set_variable.h b/headers/modsecurity/anchored_set_variable.h index 790cf4d8..63f3cc7c 100644 --- a/headers/modsecurity/anchored_set_variable.h +++ b/headers/modsecurity/anchored_set_variable.h @@ -92,18 +92,18 @@ class AnchoredSetVariable : public std::unordered_multimap> *l); - void resolve(std::vector> *l, + void resolve(VariableValues *l); + void resolve(VariableValues *l, variables::KeyExclusions &ke); void resolve(const std::string &key, - std::vector> *l); + VariableValues *l); void resolveRegularExpression(Utils::Regex *r, - std::vector> *l); + VariableValues *l); void resolveRegularExpression(Utils::Regex *r, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke); std::unique_ptr resolveFirst(const std::string &key); diff --git a/headers/modsecurity/anchored_variable.h b/headers/modsecurity/anchored_variable.h index 21cbb7bd..a0a0df50 100644 --- a/headers/modsecurity/anchored_variable.h +++ b/headers/modsecurity/anchored_variable.h @@ -69,7 +69,7 @@ class AnchoredVariable { void append(const std::string &a, size_t offset, bool spaceSeparator, int size); - void evaluate(std::vector> *l); + void evaluate(VariableValues *l); std::string * evaluate(); std::unique_ptr resolveFirst(); diff --git a/headers/modsecurity/collection/collection.h b/headers/modsecurity/collection/collection.h index fbe4ec3d..a8bab804 100644 --- a/headers/modsecurity/collection/collection.h +++ b/headers/modsecurity/collection/collection.h @@ -60,12 +60,12 @@ class Collection { const std::string& var) = 0; virtual void resolveSingleMatch(const std::string& var, - std::vector> *l) = 0; + VariableValues *l) = 0; virtual void resolveMultiMatches(const std::string& var, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) = 0; virtual void resolveRegularExpression(const std::string& var, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) = 0; @@ -146,7 +146,7 @@ class Collection { /* resolveSingleMatch */ virtual void resolveSingleMatch(const std::string& var, - std::string compartment, std::vector> *l) { + std::string compartment, VariableValues *l) { std::string nkey = compartment + "::" + var; resolveSingleMatch(nkey, l); } @@ -154,7 +154,7 @@ class Collection { virtual void resolveSingleMatch(const std::string& var, std::string compartment, std::string compartment2, - std::vector> *l) { + VariableValues *l) { std::string nkey = compartment + "::" + compartment2 + "::" + var; resolveSingleMatch(nkey, l); } @@ -162,7 +162,7 @@ class Collection { /* resolveMultiMatches */ virtual void resolveMultiMatches(const std::string& var, - std::string compartment, std::vector> *l, + std::string compartment, VariableValues *l, variables::KeyExclusions &ke) { std::string nkey = compartment + "::" + var; resolveMultiMatches(nkey, l, ke); @@ -171,7 +171,7 @@ class Collection { virtual void resolveMultiMatches(const std::string& var, std::string compartment, std::string compartment2, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) { std::string nkey = compartment + "::" + compartment2 + "::" + var; resolveMultiMatches(nkey, l, ke); @@ -180,7 +180,7 @@ class Collection { /* resolveRegularExpression */ virtual void resolveRegularExpression(const std::string& var, - std::string compartment, std::vector> *l, + std::string compartment, VariableValues *l, variables::KeyExclusions &ke) { std::string nkey = compartment + "::" + var; resolveRegularExpression(nkey, l, ke); @@ -189,7 +189,7 @@ class Collection { virtual void resolveRegularExpression(const std::string& var, std::string compartment, std::string compartment2, - std::vector> *l, variables::KeyExclusions &ke) { + VariableValues *l, variables::KeyExclusions &ke) { std::string nkey = compartment + "::" + compartment2 + "::" + var; resolveRegularExpression(nkey, l, ke); } diff --git a/headers/modsecurity/variable_value.h b/headers/modsecurity/variable_value.h index a7d145f5..cb13b8b0 100644 --- a/headers/modsecurity/variable_value.h +++ b/headers/modsecurity/variable_value.h @@ -34,10 +34,14 @@ typedef struct Variable_t VariableValue; #ifdef __cplusplus namespace modsecurity { +class VariableValue; +using VariableValues = std::vector>; +using Origins = std::vector; + + class Collection; class VariableValue { public: - using Origins = std::vector; explicit VariableValue(const std::string *key, const std::string *value = nullptr) diff --git a/src/actions/set_var.cc b/src/actions/set_var.cc index 8f20b141..88412910 100644 --- a/src/actions/set_var.cc +++ b/src/actions/set_var.cc @@ -108,7 +108,7 @@ bool SetVar::execute(Transaction *t) const noexcept { } try { - std::vector> l; + VariableValues l; m_variable->evaluate(t, &l); if (l.size() == 0) { value = 0; diff --git a/src/anchored_set_variable.cc b/src/anchored_set_variable.cc index d74d2467..c7c9609f 100644 --- a/src/anchored_set_variable.cc +++ b/src/anchored_set_variable.cc @@ -96,7 +96,7 @@ void AnchoredSetVariable::set(const std::string &key, void AnchoredSetVariable::resolve( - std::vector> *l) { + VariableValues *l) { for (const auto& x : *this) { l->insert(l->begin(), x.second); } @@ -104,7 +104,7 @@ void AnchoredSetVariable::resolve( void AnchoredSetVariable::resolve( - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) { for (const auto& x : *this) { if (!ke.toOmit(x.first)) { @@ -118,7 +118,7 @@ void AnchoredSetVariable::resolve( void AnchoredSetVariable::resolve(const std::string &key, - std::vector> *l) { + VariableValues *l) { auto range = this->equal_range(key); for (auto it = range.first; it != range.second; ++it) { l->push_back(it->second); @@ -139,7 +139,7 @@ std::unique_ptr AnchoredSetVariable::resolveFirst( void AnchoredSetVariable::resolveRegularExpression(Utils::Regex *r, - std::vector> *l) { + VariableValues *l) { for (const auto& x : *this) { int ret = Utils::regex_search(x.first, *r); if (ret <= 0) { @@ -151,7 +151,7 @@ void AnchoredSetVariable::resolveRegularExpression(Utils::Regex *r, void AnchoredSetVariable::resolveRegularExpression(Utils::Regex *r, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) { for (const auto& x : *this) { int ret = Utils::regex_search(x.first, *r); diff --git a/src/anchored_variable.cc b/src/anchored_variable.cc index 741a53f9..54f8c18a 100644 --- a/src/anchored_variable.cc +++ b/src/anchored_variable.cc @@ -117,7 +117,7 @@ void AnchoredVariable::append(const std::string &a, size_t offset, } -void AnchoredVariable::evaluate(std::vector> *l) { +void AnchoredVariable::evaluate(VariableValues *l) { if (m_name.empty()) { return; } diff --git a/src/collection/backend/in_memory-per_process.cc b/src/collection/backend/in_memory-per_process.cc index 1abc97c8..eb15fa5b 100644 --- a/src/collection/backend/in_memory-per_process.cc +++ b/src/collection/backend/in_memory-per_process.cc @@ -86,7 +86,7 @@ void InMemoryPerProcess::del(const std::string& key) { void InMemoryPerProcess::resolveSingleMatch(const std::string& var, - std::vector> *l) { + VariableValues *l) { auto range = this->equal_range(var); for (auto it = range.first; it != range.second; ++it) { @@ -96,7 +96,7 @@ void InMemoryPerProcess::resolveSingleMatch(const std::string& var, void InMemoryPerProcess::resolveMultiMatches(const std::string& var, - std::vector> *l, variables::KeyExclusions &ke) { + VariableValues *l, variables::KeyExclusions &ke) { size_t keySize = var.size(); l->reserve(15); @@ -120,7 +120,7 @@ void InMemoryPerProcess::resolveMultiMatches(const std::string& var, void InMemoryPerProcess::resolveRegularExpression(const std::string& var, - std::vector> *l, variables::KeyExclusions &ke) { + VariableValues *l, variables::KeyExclusions &ke) { //if (var.find(":") == std::string::npos) { // return; diff --git a/src/collection/backend/in_memory-per_process.h b/src/collection/backend/in_memory-per_process.h index 8955667b..81abe0bb 100644 --- a/src/collection/backend/in_memory-per_process.h +++ b/src/collection/backend/in_memory-per_process.h @@ -87,12 +87,12 @@ class InMemoryPerProcess : std::unique_ptr resolveFirst(const std::string& var) override; void resolveSingleMatch(const std::string& var, - std::vector> *l) override; + VariableValues *l) override; void resolveMultiMatches(const std::string& var, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) override; void resolveRegularExpression(const std::string& var, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) override; private: diff --git a/src/collection/backend/lmdb.cc b/src/collection/backend/lmdb.cc index 18260bf5..0836c1b8 100644 --- a/src/collection/backend/lmdb.cc +++ b/src/collection/backend/lmdb.cc @@ -262,7 +262,7 @@ end_txn: void LMDB::resolveSingleMatch(const std::string& var, - std::vector> *l) { + VariableValues *l) { int rc; MDB_txn *txn; MDB_dbi dbi; @@ -465,7 +465,7 @@ end_txn: void LMDB::resolveMultiMatches(const std::string& var, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) { MDB_val key, data; MDB_txn *txn = NULL; @@ -527,7 +527,7 @@ end_txn: void LMDB::resolveRegularExpression(const std::string& var, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) { MDB_val key, data; MDB_txn *txn = NULL; diff --git a/src/collection/backend/lmdb.h b/src/collection/backend/lmdb.h index f0044acb..9e9c8e08 100644 --- a/src/collection/backend/lmdb.h +++ b/src/collection/backend/lmdb.h @@ -66,12 +66,12 @@ class LMDB : std::unique_ptr resolveFirst(const std::string& var) override; void resolveSingleMatch(const std::string& var, - std::vector> *l) override; + VariableValues *l) override; void resolveMultiMatches(const std::string& var, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) override; void resolveRegularExpression(const std::string& var, - std::vector> *l, + VariableValues *l, variables::KeyExclusions &ke) override; private: diff --git a/src/engine/lua.cc b/src/engine/lua.cc index 50be5814..20ed11dd 100644 --- a/src/engine/lua.cc +++ b/src/engine/lua.cc @@ -286,7 +286,7 @@ int Lua::getvars(lua_State *L) { const char *varname(NULL); Transaction *t(NULL); void *z(NULL); - std::vector> l; + VariableValues l; int idx = 1; /* Retrieve parameters. */ diff --git a/src/rule_with_operator.cc b/src/rule_with_operator.cc index 0d921e7d..1e7bf864 100644 --- a/src/rule_with_operator.cc +++ b/src/rule_with_operator.cc @@ -265,7 +265,7 @@ bool RuleWithOperator::evaluate(Transaction *trans) const { getFinalVars(&vars, &exclusion, trans); - std::vector> e; + VariableValues e; for (auto &var : vars) { if (!var) { continue; diff --git a/src/run_time_string.h b/src/run_time_string.h index 445b69b4..6904dceb 100644 --- a/src/run_time_string.h +++ b/src/run_time_string.h @@ -124,7 +124,7 @@ class RunTimeString { void appendValueTo(/* const */ Transaction *transaction, std::string &v) const noexcept { if (m_variable && transaction) { - std::vector> l; + VariableValues l; m_variable->evaluate(transaction, &l); if (!l.empty()) { v.append(l[0]->getValue()); diff --git a/src/transaction.cc b/src/transaction.cc index 1030d82e..4ec5fef3 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -961,7 +961,7 @@ int Transaction::processRequestBody() { * computationally intensive. */ std::string fullRequest; - std::vector> l; + VariableValues l; m_variableRequestHeaders.resolve(&l); for (const auto &h : l) { fullRequest = fullRequest + h->getKey() + ": " + h->getValue() + "\n"; @@ -1490,7 +1490,7 @@ std::string Transaction::toOldAuditLogFormatIndex(const std::string &filename, ss << utils::string::dash_if_empty(this->m_clientIpAddress->c_str()) << " "; /** TODO: Check variable */ variables::RemoteUser *r = new variables::RemoteUser("REMOTE_USER"); - std::vector> l; + VariableValues l; r->evaluate(this, &l); delete r; @@ -1553,7 +1553,7 @@ std::string Transaction::toOldAuditLogFormat(int parts, audit_log << std::endl; if (parts & audit_log::AuditLog::BAuditLogPart) { - std::vector> l; + VariableValues l; audit_log << "--" << trailer << "-" << "B--" << std::endl; audit_log << utils::string::dash_if_empty( m_variableRequestMethod.evaluate()); @@ -1592,7 +1592,7 @@ std::string Transaction::toOldAuditLogFormat(int parts, audit_log << std::endl; } if (parts & audit_log::AuditLog::FAuditLogPart) { - std::vector> l; + VariableValues l; audit_log << "--" << trailer << "-" << "F--" << std::endl; audit_log << "HTTP/" << m_httpVersion.c_str() << " "; @@ -1693,7 +1693,7 @@ std::string Transaction::toJSON(int parts) { /* request headers */ if (parts & audit_log::AuditLog::BAuditLogPart) { - std::vector> l; + VariableValues l; yajl_gen_string(g, reinterpret_cast("headers"), strlen("headers")); yajl_gen_map_open(g); @@ -1722,7 +1722,7 @@ std::string Transaction::toJSON(int parts) { /* response headers */ if (parts & audit_log::AuditLog::FAuditLogPart) { - std::vector> l; + VariableValues l; yajl_gen_string(g, reinterpret_cast("headers"), strlen("headers")); yajl_gen_map_open(g); diff --git a/src/variables/duration.cc b/src/variables/duration.cc index aaf9782a..8726b6bf 100644 --- a/src/variables/duration.cc +++ b/src/variables/duration.cc @@ -28,7 +28,7 @@ namespace modsecurity { namespace variables { void Duration::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { double e = utils::cpu_seconds() - transaction->m_creationTimeStamp; transaction->m_variableDuration.assign(std::to_string(e)); diff --git a/src/variables/duration.h b/src/variables/duration.h index 992117d9..7a34f180 100644 --- a/src/variables/duration.h +++ b/src/variables/duration.h @@ -35,7 +35,7 @@ class Duration : public Variable { m_retName("DURATION") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/env.cc b/src/variables/env.cc index 09e88dcc..d27d6df8 100644 --- a/src/variables/env.cc +++ b/src/variables/env.cc @@ -33,7 +33,7 @@ namespace modsecurity { namespace variables { void Env::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { for (char **current = environ; *current; current++) { std::string env = std::string(*current); size_t pos = env.find_first_of("="); diff --git a/src/variables/env.h b/src/variables/env.h index 92591240..ea19fdfc 100644 --- a/src/variables/env.h +++ b/src/variables/env.h @@ -34,7 +34,7 @@ class Env : public Variable { : Variable(_name) { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; }; } // namespace variables diff --git a/src/variables/global.h b/src/variables/global.h index 9b2625b6..c0506c20 100644 --- a/src/variables/global.h +++ b/src/variables/global.h @@ -40,7 +40,7 @@ class Global_DictElement : public Variable { m_dictElement("GLOBAL:" + dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_global_collection->resolveMultiMatches( *getVariableKey(), t->m_collections.m_global_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -56,7 +56,7 @@ class Global_NoDictElement : public Variable { : Variable("GLOBAL") { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_global_collection->resolveMultiMatches("", t->m_collections.m_global_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -71,7 +71,7 @@ class Global_DictElementRegexp : public VariableRegex { m_dictElement(dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_global_collection->resolveRegularExpression( m_dictElement, t->m_collections.m_global_collection_key, @@ -92,7 +92,7 @@ class Global_DynamicElement : public VariableWithRunTimeString { { }; void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { std::string string = m_string->evaluate(t); t->m_collections.m_global_collection->resolveMultiMatches( string, diff --git a/src/variables/highest_severity.cc b/src/variables/highest_severity.cc index f3a924b3..f4c9cba6 100644 --- a/src/variables/highest_severity.cc +++ b/src/variables/highest_severity.cc @@ -27,7 +27,7 @@ namespace modsecurity { namespace variables { void HighestSeverity::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { transaction->m_variableHighestSeverityAction.assign( std::to_string(transaction->m_highestSeverityAction)); l->push_back(std::make_shared(getVariableKeyWithCollection().get(), &transaction->m_variableHighestSeverityAction)); diff --git a/src/variables/highest_severity.h b/src/variables/highest_severity.h index bbc8af3b..babc01c8 100644 --- a/src/variables/highest_severity.h +++ b/src/variables/highest_severity.h @@ -35,7 +35,7 @@ class HighestSeverity : public Variable { { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; }; diff --git a/src/variables/ip.h b/src/variables/ip.h index 3fd3baff..8d6f95c6 100644 --- a/src/variables/ip.h +++ b/src/variables/ip.h @@ -40,7 +40,7 @@ class Ip_DictElement : public Variable { m_dictElement("IP:" + dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_ip_collection->resolveMultiMatches( *getVariableKey(), t->m_collections.m_ip_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -56,7 +56,7 @@ class Ip_NoDictElement : public Variable { : Variable("IP") { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_ip_collection->resolveMultiMatches("", t->m_collections.m_ip_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -71,7 +71,7 @@ class Ip_DictElementRegexp : public VariableRegex { m_dictElement(dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_ip_collection->resolveRegularExpression( m_dictElement, t->m_collections.m_ip_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -91,7 +91,7 @@ class Ip_DynamicElement : public VariableWithRunTimeString { { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { std::string string = m_string->evaluate(t); t->m_collections.m_ip_collection->resolveMultiMatches( string, diff --git a/src/variables/modsec_build.cc b/src/variables/modsec_build.cc index ec509a42..9a4f1a73 100644 --- a/src/variables/modsec_build.cc +++ b/src/variables/modsec_build.cc @@ -25,7 +25,7 @@ namespace modsecurity { namespace variables { void ModsecBuild::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { l->push_back(std::make_shared(&m_retName, &m_build)); } diff --git a/src/variables/modsec_build.h b/src/variables/modsec_build.h index 6fa75856..319f0a72 100644 --- a/src/variables/modsec_build.h +++ b/src/variables/modsec_build.h @@ -44,7 +44,7 @@ class ModsecBuild : public Variable { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_build; std::string m_retName; diff --git a/src/variables/remote_user.cc b/src/variables/remote_user.cc index 3d13e43b..253f2992 100644 --- a/src/variables/remote_user.cc +++ b/src/variables/remote_user.cc @@ -37,12 +37,12 @@ namespace variables { void RemoteUser::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { size_t pos; std::string base64; std::string header; - std::vector> l2; + VariableValues l2; transaction->m_variableRequestHeaders.resolve("authorization", &l2); if (l2.size() < 1) { diff --git a/src/variables/remote_user.h b/src/variables/remote_user.h index af2c121f..f46f00b5 100644 --- a/src/variables/remote_user.h +++ b/src/variables/remote_user.h @@ -37,7 +37,7 @@ class RemoteUser : public Variable { m_retName("REMOTE_USER") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/resource.h b/src/variables/resource.h index fba92c1b..7c262abd 100644 --- a/src/variables/resource.h +++ b/src/variables/resource.h @@ -40,7 +40,7 @@ class Resource_DictElement : public Variable { m_dictElement("RESOURCE:" + dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_resource_collection->resolveMultiMatches( *getVariableKey(), t->m_collections.m_resource_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -56,7 +56,7 @@ class Resource_NoDictElement : public Variable { : Variable("RESOURCE") { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_resource_collection->resolveMultiMatches(*getVariableKey(), t->m_collections.m_resource_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -71,7 +71,7 @@ class Resource_DictElementRegexp : public VariableRegex { m_dictElement(dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_resource_collection->resolveRegularExpression( m_dictElement, t->m_collections.m_resource_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -91,7 +91,7 @@ class Resource_DynamicElement : public VariableWithRunTimeString { { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { std::string string = m_string->evaluate(t); t->m_collections.m_resource_collection->resolveMultiMatches( string, diff --git a/src/variables/rule.h b/src/variables/rule.h index b09089d0..78fe5b08 100644 --- a/src/variables/rule.h +++ b/src/variables/rule.h @@ -56,7 +56,7 @@ class Rule_DictElement : public RuleVariable, public VariableDictElement { static void id(Transaction *t, const RuleWithActions *rule, - std::vector> *l) { + VariableValues *l) { std::string a = std::to_string(rule->getId()); auto var = std::make_shared(&m_rule, &m_rule_id, &a); VariableOrigin origin; @@ -70,7 +70,7 @@ class Rule_DictElement : public RuleVariable, public VariableDictElement { static void rev(Transaction *t, const RuleWithActions *rule, - std::vector> *l) { + VariableValues *l) { if (rule->hasRevisionAction()) { std::string a(rule->getRevision()); @@ -87,7 +87,7 @@ class Rule_DictElement : public RuleVariable, public VariableDictElement { static void severity(Transaction *t, const RuleWithActions *rule, - std::vector> *l) { + VariableValues *l) { if (rule->hasSeverityAction()) { std::string a(std::to_string(rule->getSeverity())); @@ -103,7 +103,7 @@ class Rule_DictElement : public RuleVariable, public VariableDictElement { static void logData(Transaction *t, const RuleWithActions *rule, - std::vector> *l) { + VariableValues *l) { if (rule->hasLogDataAction()) { std::string a(rule->getLogData(t)); @@ -118,7 +118,7 @@ class Rule_DictElement : public RuleVariable, public VariableDictElement { static void msg(Transaction *t, const RuleWithActions *rule, - std::vector> *l) { + VariableValues *l) { if (rule->hasMessageAction()) { std::string a(rule->getMessage(t)); @@ -132,7 +132,7 @@ class Rule_DictElement : public RuleVariable, public VariableDictElement { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { if (m_dictElement == "id") { id(t, getRule(), l); @@ -180,7 +180,7 @@ class Rule_DictElementRegexp : public RuleVariable, public VariableRegex { void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { if (Utils::regex_search("id", m_r) > 0) { Rule_DictElement::id(t, getRule(), l); @@ -225,7 +225,7 @@ class Rule_NoDictElement : public RuleVariable, public Variable { void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { Rule_DictElement::id(t, getRule(), l); Rule_DictElement::rev(t, getRule(), l); Rule_DictElement::severity(t, getRule(), l); diff --git a/src/variables/session.h b/src/variables/session.h index 7dca903f..8f581b74 100644 --- a/src/variables/session.h +++ b/src/variables/session.h @@ -39,7 +39,7 @@ class Session_DictElement : public Variable { m_dictElement("SESSION:" + dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_session_collection->resolveMultiMatches( *getVariableKey(), t->m_collections.m_session_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -55,7 +55,7 @@ class Session_NoDictElement : public Variable { : Variable("SESSION") { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_session_collection->resolveMultiMatches("", t->m_collections.m_session_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -70,7 +70,7 @@ class Session_DictElementRegexp : public VariableRegex { m_dictElement(dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_session_collection->resolveRegularExpression( m_dictElement, t->m_collections.m_session_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -90,7 +90,7 @@ class Session_DynamicElement : public VariableWithRunTimeString { { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { std::string string = m_string->evaluate(t); t->m_collections.m_session_collection->resolveMultiMatches( string, diff --git a/src/variables/time.cc b/src/variables/time.cc index 57457a6e..cc11f342 100644 --- a/src/variables/time.cc +++ b/src/variables/time.cc @@ -34,7 +34,7 @@ namespace modsecurity { namespace variables { void Time::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { char tstr[200]; struct tm timeinfo; diff --git a/src/variables/time.h b/src/variables/time.h index 2ef1fe72..e069747f 100644 --- a/src/variables/time.h +++ b/src/variables/time.h @@ -36,7 +36,7 @@ class Time : public Variable { m_retName("TIME") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/time_day.cc b/src/variables/time_day.cc index 23cd3ea4..1bc24c27 100644 --- a/src/variables/time_day.cc +++ b/src/variables/time_day.cc @@ -34,7 +34,7 @@ namespace modsecurity { namespace variables { void TimeDay::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { char tstr[200]; struct tm timeinfo; time_t timer; diff --git a/src/variables/time_day.h b/src/variables/time_day.h index 532a5962..66141821 100644 --- a/src/variables/time_day.h +++ b/src/variables/time_day.h @@ -35,7 +35,7 @@ class TimeDay : public Variable { m_retName("TIME_DAY") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/time_epoch.cc b/src/variables/time_epoch.cc index 75c40ab3..3895b9bf 100644 --- a/src/variables/time_epoch.cc +++ b/src/variables/time_epoch.cc @@ -34,7 +34,7 @@ namespace modsecurity { namespace variables { void TimeEpoch::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { transaction->m_variableTimeEpoch.assign( std::to_string(std::time(nullptr))); l->push_back(std::make_shared(&m_retName, &transaction->m_variableTimeEpoch)); diff --git a/src/variables/time_epoch.h b/src/variables/time_epoch.h index cdd9d828..994288aa 100644 --- a/src/variables/time_epoch.h +++ b/src/variables/time_epoch.h @@ -35,7 +35,7 @@ class TimeEpoch : public Variable { m_retName("TIME_EPOCH") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/time_hour.cc b/src/variables/time_hour.cc index 9c149e1c..a44ce2a4 100644 --- a/src/variables/time_hour.cc +++ b/src/variables/time_hour.cc @@ -34,7 +34,7 @@ namespace modsecurity { namespace variables { void TimeHour::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { char tstr[200]; struct tm timeinfo; time_t timer; diff --git a/src/variables/time_hour.h b/src/variables/time_hour.h index cfe1a420..497317d1 100644 --- a/src/variables/time_hour.h +++ b/src/variables/time_hour.h @@ -35,7 +35,7 @@ class TimeHour : public Variable { m_retName("TIME_HOUR") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/time_min.cc b/src/variables/time_min.cc index 3711f19e..67473acb 100644 --- a/src/variables/time_min.cc +++ b/src/variables/time_min.cc @@ -34,7 +34,7 @@ namespace modsecurity { namespace variables { void TimeMin::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { char tstr[200]; struct tm timeinfo; time_t timer; diff --git a/src/variables/time_min.h b/src/variables/time_min.h index a2923008..cde00d58 100644 --- a/src/variables/time_min.h +++ b/src/variables/time_min.h @@ -35,7 +35,7 @@ class TimeMin : public Variable { m_retName("TIME_MIN") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/time_mon.cc b/src/variables/time_mon.cc index 5af0f37d..333a9e91 100644 --- a/src/variables/time_mon.cc +++ b/src/variables/time_mon.cc @@ -34,7 +34,7 @@ namespace modsecurity { namespace variables { void TimeMon::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { char tstr[200]; struct tm timeinfo; time_t timer; diff --git a/src/variables/time_mon.h b/src/variables/time_mon.h index 3da58036..2f96b885 100644 --- a/src/variables/time_mon.h +++ b/src/variables/time_mon.h @@ -35,7 +35,7 @@ class TimeMon : public Variable { m_retName("TIME_MON") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/time_sec.cc b/src/variables/time_sec.cc index e448ad76..fc37ff01 100644 --- a/src/variables/time_sec.cc +++ b/src/variables/time_sec.cc @@ -34,7 +34,7 @@ namespace modsecurity { namespace variables { void TimeSec::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { char tstr[200]; struct tm timeinfo; time_t timer; diff --git a/src/variables/time_sec.h b/src/variables/time_sec.h index 9245cbac..3c460f48 100644 --- a/src/variables/time_sec.h +++ b/src/variables/time_sec.h @@ -35,7 +35,7 @@ class TimeSec : public Variable { m_retName("TIME_SEC") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/time_wday.cc b/src/variables/time_wday.cc index ab8e310b..83034598 100644 --- a/src/variables/time_wday.cc +++ b/src/variables/time_wday.cc @@ -34,7 +34,7 @@ namespace modsecurity { namespace variables { void TimeWDay::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { char tstr[200]; struct tm timeinfo; time_t timer; diff --git a/src/variables/time_wday.h b/src/variables/time_wday.h index 68bc459d..f9bc3946 100644 --- a/src/variables/time_wday.h +++ b/src/variables/time_wday.h @@ -35,7 +35,7 @@ class TimeWDay : public Variable { m_retName("TIME_WDAY") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/time_year.cc b/src/variables/time_year.cc index bccb1542..d1c11597 100644 --- a/src/variables/time_year.cc +++ b/src/variables/time_year.cc @@ -34,7 +34,7 @@ namespace modsecurity { namespace variables { void TimeYear::evaluate(Transaction *transaction, - std::vector> *l) { + VariableValues *l) { char tstr[200]; struct tm timeinfo; time_t timer; diff --git a/src/variables/time_year.h b/src/variables/time_year.h index 4a9cf9f4..4b5882d2 100644 --- a/src/variables/time_year.h +++ b/src/variables/time_year.h @@ -35,7 +35,7 @@ class TimeYear : public Variable { m_retName("TIME_YEAR") { } void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; std::string m_retName; }; diff --git a/src/variables/tx.h b/src/variables/tx.h index a2598034..1b432d10 100644 --- a/src/variables/tx.h +++ b/src/variables/tx.h @@ -40,7 +40,7 @@ class Tx_DictElement : public Variable { m_dictElement("TX:" + dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_tx_collection->resolveMultiMatches( *getVariableKey(), l, m_keyExclusion); } @@ -55,7 +55,7 @@ class Tx_NoDictElement : public Variable { : Variable("TX") { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_tx_collection->resolveMultiMatches("", l, m_keyExclusion); } @@ -69,7 +69,7 @@ class Tx_DictElementRegexp : public VariableRegex { m_dictElement(dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_tx_collection->resolveRegularExpression( m_dictElement, l, m_keyExclusion); } @@ -88,7 +88,7 @@ class Tx_DynamicElement : public VariableWithRunTimeString { { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { std::string string = m_string->evaluate(t); t->m_collections.m_tx_collection->resolveMultiMatches(string, l, m_keyExclusion); diff --git a/src/variables/user.h b/src/variables/user.h index 5c41a732..4f5223de 100644 --- a/src/variables/user.h +++ b/src/variables/user.h @@ -40,7 +40,7 @@ class User_DictElement : public Variable { m_dictElement("USER:" + dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_user_collection->resolveMultiMatches( *getVariableKey(), t->m_collections.m_user_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -56,7 +56,7 @@ class User_NoDictElement : public Variable { : Variable("USER") { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_user_collection->resolveMultiMatches(*getVariableKey(), t->m_collections.m_user_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -71,7 +71,7 @@ class User_DictElementRegexp : public VariableRegex { m_dictElement(dictElement) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { t->m_collections.m_user_collection->resolveRegularExpression( m_dictElement, t->m_collections.m_user_collection_key, t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); @@ -91,7 +91,7 @@ class User_DynamicElement : public VariableWithRunTimeString { { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { std::string string = m_string->evaluate(t); t->m_collections.m_user_collection->resolveMultiMatches( string, diff --git a/src/variables/variable.h b/src/variables/variable.h index 202f674e..fad44e28 100644 --- a/src/variables/variable.h +++ b/src/variables/variable.h @@ -48,7 +48,7 @@ class n ## _DictElementRegexp : public VariableRegex { \ : VariableRegex(#N, regex) { } \ \ void evaluate(Transaction *transaction, \ - std::vector> *l) override { \ + VariableValues *l) override { \ transaction-> e .resolveRegularExpression(&m_r, l, \ m_keyExclusion); \ } \ @@ -62,7 +62,7 @@ class n ## _DictElement : public VariableDictElement { \ : VariableDictElement(#N, dictElement) { } \ \ void evaluate(Transaction *transaction, \ - std::vector> *l) override { \ + VariableValues *l) override { \ transaction-> e .resolve(m_dictElement, l); \ } \ }; @@ -75,7 +75,7 @@ class n ## _NoDictElement : public Variable { \ : Variable(#N) { } \ \ void evaluate(Transaction *transaction, \ - std::vector> *l) override { \ + VariableValues *l) override { \ transaction-> e .resolve(l, m_keyExclusion); \ } \ }; @@ -88,7 +88,7 @@ class n : public Variable { \ : Variable(#N) { } \ \ void evaluate(Transaction *transaction, \ - std::vector> *l) override { \ + VariableValues *l) override { \ transaction-> e .evaluate(l); \ } \ }; @@ -186,7 +186,7 @@ class VariableMonkeyResolution { static void stringMatchResolveMulti(Transaction *t, const std::string &variable, - std::vector> *l) { + VariableValues *l) { size_t collection = variable.find("."); if (collection == std::string::npos) { collection = variable.find(":"); @@ -576,7 +576,7 @@ class Variable : public VariableMonkeyResolution { virtual void evaluate(Transaction *t, - std::vector> *l) = 0; + VariableValues *l) = 0; bool inline belongsToCollection(Variable *var) const noexcept { @@ -727,7 +727,7 @@ class VariableModificatorExclusion : public Variable { m_base(std::move(var)) { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { m_base->evaluate(t, l); } @@ -744,9 +744,9 @@ class VariableModificatorCount : public Variable { } void evaluate(Transaction *t, - std::vector> *l) override { + VariableValues *l) override { - std::vector> reslIn; + VariableValues reslIn; m_base->evaluate(t, &reslIn); auto count = reslIn.size(); diff --git a/src/variables/web_app_id.h b/src/variables/web_app_id.h index 77a30fb6..2c60afd9 100644 --- a/src/variables/web_app_id.h +++ b/src/variables/web_app_id.h @@ -36,7 +36,7 @@ class WebAppId : public Variable { : Variable("WEBAPPID") { } void evaluate(Transaction *transaction, - std::vector> *l) override { + VariableValues *l) override { const std::string rname = transaction->m_rules->m_secWebAppId.m_value; l->push_back(std::make_shared(getVariableKeyWithCollection().get(), &rname)); } diff --git a/src/variables/xml.cc b/src/variables/xml.cc index 8d22ea4b..534d2d30 100644 --- a/src/variables/xml.cc +++ b/src/variables/xml.cc @@ -50,11 +50,11 @@ namespace variables { #ifndef WITH_LIBXML2 void XML_WithNSPath::evaluate(Transaction *t, - std::vector> *l) { } + VariableValues *l) { } #else void XML_WithNSPath::evaluate(Transaction *t, - std::vector> *l) { + VariableValues *l) { xmlXPathContextPtr xpathCtx; xmlXPathObjectPtr xpathObj; xmlNodeSetPtr nodes; diff --git a/src/variables/xml.h b/src/variables/xml.h index c35ffc43..c081e5d4 100644 --- a/src/variables/xml.h +++ b/src/variables/xml.h @@ -51,7 +51,7 @@ class XML_WithoutNSPath : public RuleVariable, public Variable { { }; void evaluate(Transaction *transaction, - std::vector> *l) override { + VariableValues *l) override { l->push_back(m_var); } @@ -76,7 +76,7 @@ class XML_WithNSPath : public RuleVariable, public VariableDictElement { { }; void evaluate(Transaction *transaction, - std::vector> *l) override; + VariableValues *l) override; virtual Variable *clone() override { return new XML_WithNSPath(*this);