diff --git a/src/Makefile.am b/src/Makefile.am index e2a0fa0d..ff9db98a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -103,6 +103,47 @@ ACTIONS = \ actions/transformations/utf8_to_unicode.cc +OPERATORS = \ + operators/begins_with.cc \ + operators/contains.cc \ + operators/contains_word.cc \ + operators/detect_sqli.cc \ + operators/detect_xss.cc \ + operators/ends_with.cc \ + operators/eq.cc \ + operators/fuzzy_hash.cc \ + operators/ge.cc \ + operators/geo_lookup.cc \ + operators/gsblookup.cc \ + operators/gt.cc \ + operators/inspect_file.cc \ + operators/ip_match.cc \ + operators/ip_match_f.cc \ + operators/ip_match_from_file.cc \ + operators/le.cc \ + operators/lt.cc \ + operators/no_match.cc \ + operators/operator.cc \ + operators/pm.cc \ + operators/pm_f.cc \ + operators/pm_from_file.cc \ + operators/rbl.cc \ + operators/rsub.cc \ + operators/rx.cc \ + operators/str_eq.cc \ + operators/str_match.cc \ + operators/validate_byte_range.cc \ + operators/validate_dtd.cc \ + operators/validate_hash.cc \ + operators/validate_schema.cc \ + operators/validate_url_encoding.cc \ + operators/validate_utf8_encoding.cc \ + operators/verify_cc.cc \ + operators/verify_cpf.cc \ + operators/verify_ssn.cc \ + operators/within.cc + + UTILS = \ utils/acmp.cc \ utils/geo_lookup.cc \ @@ -132,44 +173,8 @@ libmodsecurity_la_SOURCES = \ request_body_processor/multipart_blob.cc \ rule.cc \ unique_id.cc \ - operators/operator.cc \ - operators/detect_sqli.cc \ - operators/detect_xss.cc \ - operators/inspect_file.cc \ - operators/fuzzy_hash.cc \ - operators/validate_byte_range.cc \ - operators/validate_dtd.cc \ - operators/validate_hash.cc \ - operators/validate_schema.cc \ - operators/validate_url_encoding.cc \ - operators/validate_utf8_encoding.cc \ - operators/verify_cc.cc \ - operators/verify_cpf.cc \ - operators/verify_ssn.cc \ - operators/geo_lookup.cc \ - operators/gsblookup.cc \ - operators/rsub.cc \ - operators/within.cc \ - operators/contains_word.cc \ - operators/contains.cc \ - operators/ends_with.cc \ - operators/eq.cc \ - operators/ge.cc \ - operators/gt.cc \ - operators/ip_match_f.cc \ - operators/ip_match.cc \ - operators/ip_match_from_file.cc \ - operators/le.cc \ - operators/lt.cc \ - operators/pm_f.cc \ - operators/pm.cc \ - operators/pm_from_file.cc \ - operators/rbl.cc \ - operators/rx.cc \ - operators/str_eq.cc \ - operators/str_match.cc \ - operators/begins_with.cc \ ${ACTIONS} \ + ${OPERATORS} \ ${UTILS} \ ${VARIABLES} diff --git a/src/operators/no_match.cc b/src/operators/no_match.cc new file mode 100644 index 00000000..1d36ecb6 --- /dev/null +++ b/src/operators/no_match.cc @@ -0,0 +1,29 @@ +/* + * ModSecurity, http://www.modsecurity.org/ + * Copyright (c) 2015 Trustwave Holdings, Inc. (http://www.trustwave.com/) + * + * You may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * If any of the files related to licensing are missing or if you have any + * other questions related to licensing please contact Trustwave Holdings, Inc. + * directly using the email address security@modsecurity.org. + * + */ + +#include "operators/no_match.h" + +#include + +namespace ModSecurity { +namespace operators { + +bool NoMatch::evaluate(Assay *assay, const std::string &str) { + return false; +} + + +} // namespace operators +} // namespace ModSecurity diff --git a/src/operators/no_match.h b/src/operators/no_match.h new file mode 100644 index 00000000..2e5905b4 --- /dev/null +++ b/src/operators/no_match.h @@ -0,0 +1,42 @@ +/* + * ModSecurity, http://www.modsecurity.org/ + * Copyright (c) 2015 Trustwave Holdings, Inc. (http://www.trustwave.com/) + * + * You may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * If any of the files related to licensing are missing or if you have any + * other questions related to licensing please contact Trustwave Holdings, Inc. + * directly using the email address security@modsecurity.org. + * + */ + +#include + +#include "modsecurity/assay.h" +#include "operators/operator.h" + + +#ifndef SRC_OPERATORS_NO_MATCH_H_ +#define SRC_OPERATORS_NO_MATCH_H_ + + +namespace ModSecurity { +namespace operators { + +class NoMatch : public Operator { + public: + /** @ingroup ModSecurity_Operator */ + NoMatch(std::string op, std::string param, bool negation) + : Operator(op, param, negation) { } + + bool evaluate(Assay *assay, const std::string &str) override; +}; + +} // namespace operators +} // namespace ModSecurity + + +#endif // SRC_OPERATORS_NO_MATCH_H_ diff --git a/src/operators/operator.cc b/src/operators/operator.cc index d9c6cef5..32a3b273 100644 --- a/src/operators/operator.cc +++ b/src/operators/operator.cc @@ -21,10 +21,33 @@ #include "modsecurity/assay.h" +#include "operators/begins_with.h" +#include "operators/contains.h" +#include "operators/contains_word.h" #include "operators/detect_sqli.h" #include "operators/detect_xss.h" -#include "operators/inspect_file.h" +#include "operators/ends_with.h" +#include "operators/eq.h" #include "operators/fuzzy_hash.h" +#include "operators/ge.h" +#include "operators/geo_lookup.h" +#include "operators/gsblookup.h" +#include "operators/gt.h" +#include "operators/inspect_file.h" +#include "operators/ip_match_f.h" +#include "operators/ip_match_from_file.h" +#include "operators/ip_match.h" +#include "operators/le.h" +#include "operators/lt.h" +#include "operators/no_match.h" +#include "operators/pm_f.h" +#include "operators/pm_from_file.h" +#include "operators/pm.h" +#include "operators/rbl.h" +#include "operators/rsub.h" +#include "operators/rx.h" +#include "operators/str_eq.h" +#include "operators/str_match.h" #include "operators/validate_byte_range.h" #include "operators/validate_dtd.h" #include "operators/validate_hash.h" @@ -34,29 +57,7 @@ #include "operators/verify_cc.h" #include "operators/verify_cpf.h" #include "operators/verify_ssn.h" -#include "operators/geo_lookup.h" -#include "operators/gsblookup.h" -#include "operators/rsub.h" #include "operators/within.h" -#include "operators/contains_word.h" -#include "operators/contains.h" -#include "operators/ends_with.h" -#include "operators/eq.h" -#include "operators/ge.h" -#include "operators/gt.h" -#include "operators/ip_match_f.h" -#include "operators/ip_match.h" -#include "operators/ip_match_from_file.h" -#include "operators/le.h" -#include "operators/lt.h" -#include "operators/pm_f.h" -#include "operators/pm.h" -#include "operators/pm_from_file.h" -#include "operators/rbl.h" -#include "operators/rx.h" -#include "operators/str_eq.h" -#include "operators/str_match.h" -#include "operators/begins_with.h" #define IF_MATCH(a) \ if (op_ == #a) @@ -153,6 +154,7 @@ Operator *Operator::instantiate(std::string op_string) { IF_MATCH(ipmatch) { return new IpMatch(op, param, negation); } IF_MATCH(le) { return new Le(op, param, negation); } IF_MATCH(lt) { return new Lt(op, param, negation); } + IF_MATCH(nomatch) { return new NoMatch(op, param, negation); } IF_MATCH(pmf) { return new PmF(op, param, negation); } IF_MATCH(pmfromfile) { return new PmFromFile(op, param, negation); } IF_MATCH(pm) { return new Pm(op, param, negation); }