diff --git a/src/operators/contains_word.h b/src/operators/contains_word.h index d60b609a..8ca8d171 100644 --- a/src/operators/contains_word.h +++ b/src/operators/contains_word.h @@ -36,7 +36,8 @@ class ContainsWord : public Operator { const std::string &str, std::shared_ptr ruleMessage) override; - bool acceptableChar(const std::string& a, size_t pos); + private: + static bool acceptableChar(const std::string& a, size_t pos); }; } // namespace operators diff --git a/src/operators/geo_lookup.cc b/src/operators/geo_lookup.cc index eb0116e3..274772a2 100644 --- a/src/operators/geo_lookup.cc +++ b/src/operators/geo_lookup.cc @@ -33,11 +33,6 @@ namespace modsecurity { namespace operators { -bool GeoLookup::debug(Transaction *transaction, int x, std::string a) { - ms_dbg_a(transaction, x, a); - return true; -} - bool GeoLookup::evaluate(Transaction *trans, const std::string &exp) { using std::placeholders::_1; diff --git a/src/operators/geo_lookup.h b/src/operators/geo_lookup.h index a411fdb5..ab473e2b 100644 --- a/src/operators/geo_lookup.h +++ b/src/operators/geo_lookup.h @@ -32,7 +32,10 @@ class GeoLookup : public Operator { bool evaluate(Transaction *transaction, const std::string &exp) override; protected: - bool debug(Transaction *transaction, int x, std::string a); + bool debug(Transaction *transaction, int x, const std::string &a) { + ms_dbg_a(transaction, x, a); + return true; + } }; } // namespace operators diff --git a/src/operators/gsblookup.h b/src/operators/gsblookup.h index 1473991e..6aaa4e62 100644 --- a/src/operators/gsblookup.h +++ b/src/operators/gsblookup.h @@ -31,7 +31,7 @@ class GsbLookup : public Operator { explicit GsbLookup(std::unique_ptr param) : Operator("GsbLookup", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &str); + bool evaluate(Transaction *transaction, const std::string &str) override; }; } // namespace operators diff --git a/src/operators/ip_match.h b/src/operators/ip_match.h index 00fdedfc..c7fe33ba 100644 --- a/src/operators/ip_match.h +++ b/src/operators/ip_match.h @@ -31,7 +31,7 @@ class IpMatch : public Operator { /** @ingroup ModSecurity_Operator */ explicit IpMatch(std::unique_ptr param) : Operator("IpMatch", std::move(param)) { } - IpMatch(std::string n, std::unique_ptr param) + IpMatch(const std::string &n, std::unique_ptr param) : Operator(n, std::move(param)) { } bool evaluate(Transaction *transaction, const std::string &input) override; diff --git a/src/operators/ip_match_from_file.h b/src/operators/ip_match_from_file.h index c4d72b04..796e583c 100644 --- a/src/operators/ip_match_from_file.h +++ b/src/operators/ip_match_from_file.h @@ -29,7 +29,7 @@ class IpMatchFromFile : public IpMatch { /** @ingroup ModSecurity_Operator */ explicit IpMatchFromFile(std::unique_ptr param) : IpMatch("IpMatchFromFile", std::move(param)) { } - IpMatchFromFile(std::string n, std::unique_ptr param) + IpMatchFromFile(const std::string &n, std::unique_ptr param) : IpMatch(n, std::move(param)) { } bool init(const std::string& file, std::string *error) override; }; diff --git a/src/operators/operator.h b/src/operators/operator.h index c147d12e..c4190db4 100644 --- a/src/operators/operator.h +++ b/src/operators/operator.h @@ -42,7 +42,7 @@ class Operator { } } - Operator(std::string opName, std::string param, bool negation) + Operator(const std::string &opName, const std::string ¶m, bool negation) : m_match_message(""), m_negation(negation), m_op(opName), @@ -53,7 +53,7 @@ class Operator { } } - Operator(std::string opName, std::unique_ptr param, + Operator(const std::string &opName, std::unique_ptr param, bool negation) : m_match_message(""), m_negation(negation), @@ -66,7 +66,7 @@ class Operator { } } - Operator(std::string opName, std::string param) + Operator(const std::string &opName, const std::string ¶m) : m_match_message(""), m_negation(false), m_op(opName), @@ -77,7 +77,7 @@ class Operator { } } - Operator(std::string opName, std::unique_ptr param) + Operator(const std::string &opName, std::unique_ptr param) : m_match_message(""), m_negation(false), m_op(opName), @@ -89,7 +89,7 @@ class Operator { } } - explicit Operator(std::string opName) + explicit Operator(const std::string &opName) : m_match_message(""), m_negation(false), m_op(opName), diff --git a/src/operators/pm.h b/src/operators/pm.h index b459937b..0f124b54 100644 --- a/src/operators/pm.h +++ b/src/operators/pm.h @@ -36,7 +36,7 @@ class Pm : public Operator { : Operator("Pm", std::move(param)) { m_p = acmp_create(0); } - explicit Pm(std::string n, std::unique_ptr param) + explicit Pm(const std::string &n, std::unique_ptr param) : Operator(n, std::move(param)) { m_p = acmp_create(0); } diff --git a/src/operators/pm_from_file.h b/src/operators/pm_from_file.h index 432e8144..151b3f3b 100644 --- a/src/operators/pm_from_file.h +++ b/src/operators/pm_from_file.h @@ -32,12 +32,13 @@ class PmFromFile : public Pm { /** @ingroup ModSecurity_Operator */ explicit PmFromFile(std::unique_ptr param) : Pm("PmFromFile", std::move(param)) { } - explicit PmFromFile(std::string n, std::unique_ptr param) + explicit PmFromFile(const std::string &n, std::unique_ptr param) : Pm(n, std::move(param)) { } bool init(const std::string &file, std::string *error) override; - bool isComment(const std::string &s); +private: + static bool isComment(const std::string &s); }; diff --git a/src/operators/rbl.cc b/src/operators/rbl.cc index dc7e0f6e..6c2eb718 100644 --- a/src/operators/rbl.cc +++ b/src/operators/rbl.cc @@ -30,7 +30,7 @@ namespace modsecurity { namespace operators { -std::string Rbl::mapIpToAddress(std::string ipStr, Transaction *trans) { +std::string Rbl::mapIpToAddress(const std::string &ipStr, Transaction *trans) const { std::string addr; int h0, h1, h2, h3; std::string key; @@ -67,11 +67,13 @@ std::string Rbl::mapIpToAddress(std::string ipStr, Transaction *trans) { } -void Rbl::futherInfo_httpbl(struct sockaddr_in *sin, std::string ipStr, +void Rbl::futherInfo_httpbl(struct sockaddr_in *sin, const std::string &ipStr, Transaction *trans) { char *respBl; int first, days, score, type; +#ifndef NO_LOGS std::string ptype; +#endif respBl = inet_ntoa(sin->sin_addr); @@ -85,6 +87,7 @@ void Rbl::futherInfo_httpbl(struct sockaddr_in *sin, std::string ipStr, return; } +#ifndef NO_LOGS switch (type) { case 0: ptype = "Search Engine"; @@ -113,6 +116,7 @@ void Rbl::futherInfo_httpbl(struct sockaddr_in *sin, std::string ipStr, default: ptype = " "; } +#endif ms_dbg_a(trans, 4, "RBL lookup of " + ipStr + " succeeded. %s: " \ + std::to_string(days) + " " \ @@ -121,7 +125,7 @@ void Rbl::futherInfo_httpbl(struct sockaddr_in *sin, std::string ipStr, } -void Rbl::futherInfo_spamhaus(unsigned int high8bits, std::string ipStr, +void Rbl::futherInfo_spamhaus(unsigned int high8bits, const std::string &ipStr, Transaction *trans) { switch (high8bits) { case 2: @@ -148,7 +152,7 @@ void Rbl::futherInfo_spamhaus(unsigned int high8bits, std::string ipStr, } -void Rbl::futherInfo_uribl(unsigned int high8bits, std::string ipStr, +void Rbl::futherInfo_uribl(unsigned int high8bits, const std::string &ipStr, Transaction *trans) { switch (high8bits) { case 2: @@ -175,11 +179,11 @@ void Rbl::futherInfo_uribl(unsigned int high8bits, std::string ipStr, } -void Rbl::furtherInfo(struct sockaddr_in *sin, std::string ipStr, - Transaction *trans) { +void Rbl::furtherInfo(struct sockaddr_in *sin, const std::string &ipStr, + Transaction *trans, RblProvider provider) { unsigned int high8bits = sin->sin_addr.s_addr >> 24; - switch (m_provider) { + switch (provider) { case RblProvider::UnknownProvider: ms_dbg_a(trans, 2, "RBL lookup of " + ipStr + " succeeded."); break; @@ -200,7 +204,7 @@ bool Rbl::evaluate(Transaction *t, Rule *rule, const std::string& ipStr, std::shared_ptr ruleMessage) { struct addrinfo *info = NULL; - std::string host = mapIpToAddress(ipStr, t); + std::string host = Rbl::mapIpToAddress(ipStr, t); int rc = 0; if (host.empty()) { @@ -219,7 +223,7 @@ bool Rbl::evaluate(Transaction *t, Rule *rule, struct sockaddr *addr = info->ai_addr; struct sockaddr_in *sin = (struct sockaddr_in *) addr; - furtherInfo(sin, ipStr, t); + furtherInfo(sin, ipStr, t, m_provider); freeaddrinfo(info); if (rule && t && rule->m_containsCaptureAction) { diff --git a/src/operators/rbl.h b/src/operators/rbl.h index d7d13ad0..26a50b77 100644 --- a/src/operators/rbl.h +++ b/src/operators/rbl.h @@ -62,10 +62,11 @@ class Rbl : public Operator { /** @ingroup ModSecurity_Operator */ explicit Rbl(std::unique_ptr param) - : Operator("Rbl", std::move(param)), - m_demandsPassword(false) { + : m_service(""), + m_demandsPassword(false), + m_provider(RblProvider::UnknownProvider), + Operator("Rbl", std::move(param)) { m_service = m_string->evaluate(); - m_provider = RblProvider::UnknownProvider; if (m_service.find("httpbl.org") != std::string::npos) { m_demandsPassword = true; m_provider = RblProvider::httpbl; @@ -79,17 +80,18 @@ class Rbl : public Operator { const std::string& input, std::shared_ptr ruleMessage) override; - std::string mapIpToAddress(std::string ipStr, Transaction *trans); + std::string mapIpToAddress(const std::string &ipStr, Transaction *trans) const; - void futherInfo_httpbl(struct sockaddr_in *sin, std::string ipStr, + static void futherInfo_httpbl(struct sockaddr_in *sin, const std::string &ipStr, Transaction *trans); - void futherInfo_spamhaus(unsigned int high8bits, std::string ipStr, + static void futherInfo_spamhaus(unsigned int high8bits, const std::string &ipStr, Transaction *trans); - void futherInfo_uribl(unsigned int high8bits, std::string ipStr, - Transaction *trans); - void furtherInfo(struct sockaddr_in *sin, std::string ipStr, + static void futherInfo_uribl(unsigned int high8bits, const std::string &ipStr, Transaction *trans); + static void furtherInfo(struct sockaddr_in *sin, const std::string &ipStr, + Transaction *trans, RblProvider provider); + private: std::string m_service; bool m_demandsPassword; RblProvider m_provider; diff --git a/src/operators/rx.h b/src/operators/rx.h index 7460c396..eddb32a4 100644 --- a/src/operators/rx.h +++ b/src/operators/rx.h @@ -37,7 +37,8 @@ class Rx : public Operator { public: /** @ingroup ModSecurity_Operator */ explicit Rx(std::unique_ptr param) - : Operator("Rx", std::move(param)) { + : m_re(nullptr), + Operator("Rx", std::move(param)) { m_couldContainsMacro = true; } diff --git a/src/operators/validate_url_encoding.cc b/src/operators/validate_url_encoding.cc index 43b63e6a..532606d6 100644 --- a/src/operators/validate_url_encoding.cc +++ b/src/operators/validate_url_encoding.cc @@ -28,7 +28,7 @@ int ValidateUrlEncoding::validate_url_encoding(const char *input, int i; *offset = 0; - if ((input == NULL) || (input_length <= 0)) { + if ((input == NULL) || (input_length == 0)) { return -1; } diff --git a/src/operators/validate_url_encoding.h b/src/operators/validate_url_encoding.h index f52e8175..e803b811 100644 --- a/src/operators/validate_url_encoding.h +++ b/src/operators/validate_url_encoding.h @@ -34,7 +34,8 @@ class ValidateUrlEncoding : public Operator { bool evaluate(Transaction *transaction, Rule *rule, const std::string &input, std::shared_ptr ruleMessage) override; - int validate_url_encoding(const char *input, uint64_t input_length, + + static int validate_url_encoding(const char *input, uint64_t input_length, size_t *offset); }; diff --git a/src/operators/validate_utf8_encoding.h b/src/operators/validate_utf8_encoding.h index eb10dc6e..30a93a7f 100644 --- a/src/operators/validate_utf8_encoding.h +++ b/src/operators/validate_utf8_encoding.h @@ -42,7 +42,7 @@ class ValidateUtf8Encoding : public Operator { const std::string &str, std::shared_ptr ruleMessage) override; - int detect_utf8_character(const unsigned char *p_read, + static int detect_utf8_character(const unsigned char *p_read, unsigned int length); }; diff --git a/src/operators/verify_cc.cc b/src/operators/verify_cc.cc index 76231776..0a3d53e6 100644 --- a/src/operators/verify_cc.cc +++ b/src/operators/verify_cc.cc @@ -120,7 +120,6 @@ bool VerifyCC::init(const std::string ¶m2, std::string *error) { bool VerifyCC::evaluate(Transaction *t, Rule *rule, const std::string& i, std::shared_ptr ruleMessage) { int offset = 0; - bool is_cc = false; int target_length = i.length(); for (offset = 0; offset < target_length; offset++) { @@ -139,7 +138,7 @@ bool VerifyCC::evaluate(Transaction *t, Rule *rule, } if (ret > 0) { match = std::string(i, ovector[0], ovector[1] - ovector[0]); - is_cc = luhnVerify(match.c_str(), match.size()); + int is_cc = luhnVerify(match.c_str(), match.size()); if (is_cc) { if (t) { if (rule && t && rule->m_containsCaptureAction) { diff --git a/src/operators/verify_cc.h b/src/operators/verify_cc.h index 47cbb057..0c819cbd 100644 --- a/src/operators/verify_cc.h +++ b/src/operators/verify_cc.h @@ -35,7 +35,6 @@ class VerifyCC : public Operator { m_pce(NULL) { } ~VerifyCC(); - int luhnVerify(const char *ccnumber, int len); bool evaluate(Transaction *t, Rule *rule, const std::string& input, std::shared_ptr ruleMessage) override; @@ -43,6 +42,7 @@ class VerifyCC : public Operator { private: pcre *m_pc; pcre_extra *m_pce; + static int luhnVerify(const char *ccnumber, int len); }; } // namespace operators diff --git a/src/operators/verify_cpf.cc b/src/operators/verify_cpf.cc index a58adbdd..5c806d4b 100644 --- a/src/operators/verify_cpf.cc +++ b/src/operators/verify_cpf.cc @@ -37,31 +37,22 @@ int VerifyCPF::convert_to_int(const char c) { return n; } + bool VerifyCPF::verify(const char *cpfnumber, int len) { int factor, part_1, part_2, var_len = len; unsigned int sum = 0, i = 0, cpf_len = 11, c; int cpf[11]; char s_cpf[11]; - char bad_cpf[12][12] = { "00000000000", - "01234567890", - "11111111111", - "22222222222", - "33333333333", - "44444444444", - "55555555555", - "66666666666", - "77777777777", - "88888888888", - "99999999999"}; while ((*cpfnumber != '\0') && (var_len > 0)) { - if (*cpfnumber != '-' || *cpfnumber != '.') { + // Always true. + //if (*cpfnumber != '-' || *cpfnumber != '.') { if (i < cpf_len && isdigit(*cpfnumber)) { s_cpf[i] = *cpfnumber; cpf[i] = convert_to_int(*cpfnumber); i++; } - } + //} cpfnumber++; var_len--; } diff --git a/src/operators/verify_cpf.h b/src/operators/verify_cpf.h index 893c47fb..04ab2768 100644 --- a/src/operators/verify_cpf.h +++ b/src/operators/verify_cpf.h @@ -42,6 +42,10 @@ class VerifyCPF : public Operator { ~VerifyCPF() { delete m_re; } + + bool operator=(const VerifyCPF &a) = delete; + VerifyCPF(const VerifyCPF &a) = delete; + bool evaluate(Transaction *transaction, Rule *rule, const std::string &input) override { return evaluate(transaction, NULL, input, NULL); @@ -54,11 +58,22 @@ class VerifyCPF : public Operator { const std::string& input, std::shared_ptr ruleMessage) override; - int convert_to_int(const char c); bool verify(const char *ssnumber, int len); private: + static int convert_to_int(const char c); Regex *m_re; + const char bad_cpf[12][12] = { "00000000000", + "01234567890", + "11111111111", + "22222222222", + "33333333333", + "44444444444", + "55555555555", + "66666666666", + "77777777777", + "88888888888", + "99999999999"}; }; } // namespace operators diff --git a/src/operators/verify_ssn.cc b/src/operators/verify_ssn.cc index deb97e6f..4dcb7450 100644 --- a/src/operators/verify_ssn.cc +++ b/src/operators/verify_ssn.cc @@ -24,6 +24,7 @@ namespace modsecurity { namespace operators { + int VerifySSN::convert_to_int(const char c) { int n; if ((c >= '0') && (c <= '9')) { @@ -38,6 +39,7 @@ int VerifySSN::convert_to_int(const char c) { return n; } + bool VerifySSN::verify(const char *ssnumber, int len) { int i; int num[9]; @@ -120,15 +122,15 @@ bool VerifySSN::evaluate(Transaction *t, Rule *rule, for (i = 0; i < input.size() - 1 && is_ssn == false; i++) { matches = m_re->searchAll(input.substr(i, input.size())); - for (const auto & i : matches) { - is_ssn = verify(i.str().c_str(), i.str().size()); + for (const auto & j : matches) { + is_ssn = verify(j.str().c_str(), j.str().size()); if (is_ssn) { - logOffset(ruleMessage, i.offset(), i.str().size()); + logOffset(ruleMessage, j.offset(), j.str().size()); if (rule && t && rule->m_containsCaptureAction) { t->m_collections.m_tx_collection->storeOrUpdateFirst( - "0", i.str()); + "0", j.str()); ms_dbg_a(t, 7, "Added VerifySSN match TX.0: " + \ - i.str()); + j.str()); } goto out; diff --git a/src/operators/verify_ssn.h b/src/operators/verify_ssn.h index c8cf7f16..0a28c5a6 100644 --- a/src/operators/verify_ssn.h +++ b/src/operators/verify_ssn.h @@ -42,6 +42,10 @@ class VerifySSN : public Operator { ~VerifySSN() { delete m_re; } + + bool operator=(const VerifySSN &a) = delete; + VerifySSN(const VerifySSN &a) = delete; + bool evaluate(Transaction *transaction, Rule *rule, const std::string &input) override { return evaluate(transaction, NULL, input, NULL); @@ -54,10 +58,12 @@ class VerifySSN : public Operator { const std::string& input, std::shared_ptr ruleMessage) override; - int convert_to_int(const char c); - bool verify(const char *ssnumber, int len); + private: + static bool verify(const char *ssnumber, int len); + static int convert_to_int(const char c); + Regex *m_re; }; diff --git a/src/operators/verify_svnr.cc b/src/operators/verify_svnr.cc index 17b49177..bede368d 100644 --- a/src/operators/verify_svnr.cc +++ b/src/operators/verify_svnr.cc @@ -11,8 +11,8 @@ namespace modsecurity { namespace operators { -int VerifySVNR::convert_to_int(const char c) -{ + +int VerifySVNR::convert_to_int(const char c) { int n; if ((c>='0') && (c<='9')) n = c - '0'; @@ -21,28 +21,18 @@ int VerifySVNR::convert_to_int(const char c) return n; } + bool VerifySVNR::verify(const char *svnrnumber, int len) { int var_len = len; int sum = 0; unsigned int i = 0, svnr_len = 10; int svnr[11]; char s_svnr[11]; - char bad_svnr[12][11] = { "0000000000", - "0123456789", - "1234567890", - "1111111111", - "2222222222", - "3333333333", - "4444444444", - "5555555555", - "6666666666", - "7777777777", - "8888888888", - "9999999999"}; while ((*svnrnumber != '\0') && ( var_len > 0)) { - if (*svnrnumber != '-' || *svnrnumber != '.') + // Always true on the original code. + //if (*svnrnumber != '-' || *svnrnumber != '.') { if (i < svnr_len && isdigit(*svnrnumber)) { @@ -98,15 +88,15 @@ bool VerifySVNR::evaluate(Transaction *t, Rule *rule, for (i = 0; i < input.size() - 1 && is_svnr == false; i++) { matches = m_re->searchAll(input.substr(i, input.size())); - for (const auto & i : matches) { - is_svnr = verify(i.str().c_str(), i.str().size()); + for (const auto & j : matches) { + is_svnr = verify(j.str().c_str(), j.str().size()); if (is_svnr) { - logOffset(ruleMessage, i.offset(), i.str().size()); + logOffset(ruleMessage, j.offset(), j.str().size()); if (rule && t && rule->m_containsCaptureAction) { t->m_collections.m_tx_collection->storeOrUpdateFirst( - "0", i.str()); + "0", j.str()); ms_dbg_a(t, 7, "Added VerifySVNR match TX.0: " + \ - i.str()); + j.str()); } goto out; diff --git a/src/operators/verify_svnr.h b/src/operators/verify_svnr.h index c3ceda50..ce04185a 100644 --- a/src/operators/verify_svnr.h +++ b/src/operators/verify_svnr.h @@ -28,6 +28,10 @@ class VerifySVNR : public Operator { ~VerifySVNR() { delete m_re; } + + bool operator=(const VerifySVNR &a) = delete; + VerifySVNR(const VerifySVNR &a) = delete; + bool evaluate(Transaction *transaction, Rule *rule, const std::string &input) override { return evaluate(transaction, NULL, input, NULL); @@ -40,11 +44,23 @@ class VerifySVNR : public Operator { const std::string& input, std::shared_ptr ruleMessage) override; - int convert_to_int(const char c); bool verify(const char *ssnumber, int len); private: Regex *m_re; + static int convert_to_int(const char c); + const char bad_svnr[12][11] = { "0000000000", + "0123456789", + "1234567890", + "1111111111", + "2222222222", + "3333333333", + "4444444444", + "5555555555", + "6666666666", + "7777777777", + "8888888888", + "9999999999"}; }; } // namespace operators diff --git a/src/operators/within.h b/src/operators/within.h index fccf4ff5..ab27608a 100644 --- a/src/operators/within.h +++ b/src/operators/within.h @@ -34,7 +34,7 @@ class Within : public Operator { m_couldContainsMacro = true; } bool evaluate(Transaction *transaction, Rule *rule, - const std::string &str, std::shared_ptr ruleMessage); + const std::string &str, std::shared_ptr ruleMessage) override; }; } // namespace operators diff --git a/src/utils/geo_lookup.cc b/src/utils/geo_lookup.cc index 2be7e8f9..ff0030fa 100644 --- a/src/utils/geo_lookup.cc +++ b/src/utils/geo_lookup.cc @@ -106,7 +106,7 @@ bool GeoLookup::setDataBase(const std::string& filePath, bool GeoLookup::lookup(const std::string& target, Transaction *trans, - std::function debug) const { + std::function debug) const { if (m_version == NOT_LOADED) { if (debug) { diff --git a/src/utils/geo_lookup.h b/src/utils/geo_lookup.h index 28384605..2d0627af 100644 --- a/src/utils/geo_lookup.h +++ b/src/utils/geo_lookup.h @@ -50,7 +50,7 @@ class GeoLookup { void cleanUp(); bool lookup(const std::string& target, Transaction *transaction, - std::function debug) const; + std::function debug) const; private: GeoLookup() : diff --git a/test/cppcheck_suppressions.txt b/test/cppcheck_suppressions.txt index 16c9269e..0edcf180 100644 --- a/test/cppcheck_suppressions.txt +++ b/test/cppcheck_suppressions.txt @@ -56,7 +56,6 @@ useStlAlgorithm:src/utils/shared_files.cc:41 useStlAlgorithm:test/regression/regression.cc:493 useStlAlgorithm:test/unit/unit.cc:174 useStlAlgorithm:test/unit/unit.cc:209 -variableScope:src/operators/verify_cpf.cc:45 unusedFunction funcArgNamesDifferent preprocessorErrorDirective @@ -67,4 +66,8 @@ toomanyconfigs functionStatic:src/unique_id.h:49 functionStatic:src/unique_id.h:50 functionConst:src/utils/geo_lookup.h:49 -functionStatic:headers/modsecurity/transaction.h:374 \ No newline at end of file +functionStatic:headers/modsecurity/transaction.h:374 + + +functionStatic:src/operators/geo_lookup.h:35 +useInitializationList:src/operators/rbl.h:69