Adds support to the Rx operator

This commit is contained in:
Felipe Zimmerle 2015-08-03 14:24:17 -03:00
parent 3a4cef6fb1
commit 6cd4c0492a
2 changed files with 24 additions and 14 deletions

View File

@ -22,20 +22,17 @@
namespace ModSecurity {
namespace operators {
bool Rx::evaluate(Assay *assay) {
/**
* @todo Implement the operator Rx.
* Reference: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#rx
*/
return true;
bool Rx::evaluate(Assay *assay, const std::string& input) {
SMatch match;
if (regex_search(input, &match, m_re) && match.size() >= 1) {
return true;
}
return false;
}
Rx::Rx(std::string op, std::string param, bool negation)
: Operator() {
this->op = op;
this->param = param;
}
} // namespace operators
} // namespace ModSecurity

View File

@ -19,17 +19,30 @@
#include <string>
#include "operators/operator.h"
#include "utils/regex.h"
#ifdef __cplusplus
namespace ModSecurity {
using Utils::SMatch;
using Utils::regex_search;
using Utils::Regex;
namespace operators {
class Rx : public Operator {
public:
/** @ingroup ModSecurity_Operator */
Rx(std::string o, std::string p, bool i);
bool evaluate(Assay *assay);
Rx(std::string op, std::string param, bool negation)
: Operator(op, param, negation),
m_re(param) { }
bool evaluate(Assay *assay, const std::string &input);
private:
Regex m_re;
};
} // namespace operators
} // namespace ModSecurity