diff --git a/src/operators/str_match.cc b/src/operators/str_match.cc index 17ad00ae..1d58e30f 100644 --- a/src/operators/str_match.cc +++ b/src/operators/str_match.cc @@ -22,20 +22,17 @@ namespace ModSecurity { namespace operators { -bool StrMatch::evaluate(Assay *assay) { - /** - * @todo Implement the operator StrMatch. - * Reference: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#strmatch - */ - return true; + +bool StrMatch::evaluate(Assay *assay, const std::string &input) { + bool ret = input.find(param) != std::string::npos; + + if (negation) { + return !ret; + } + + return ret; } -StrMatch::StrMatch(std::string op, std::string param, bool negation) - : Operator() { - this->op = op; - this->param = param; -} - } // namespace operators } // namespace ModSecurity diff --git a/src/operators/str_match.h b/src/operators/str_match.h index d456aed7..f986e10a 100644 --- a/src/operators/str_match.h +++ b/src/operators/str_match.h @@ -27,8 +27,10 @@ namespace operators { class StrMatch : public Operator { public: /** @ingroup ModSecurity_Operator */ - StrMatch(std::string o, std::string p, bool i); - bool evaluate(Assay *assay); + StrMatch(std::string op, std::string param, bool negation) + : Operator(op, param, negation) { } + + bool evaluate(Assay *assay, const std::string &input) override; }; } // namespace operators