diff --git a/headers/modsecurity/actions/action.h b/headers/modsecurity/actions/action.h index b1b277ec..c12f42d6 100644 --- a/headers/modsecurity/actions/action.h +++ b/headers/modsecurity/actions/action.h @@ -72,8 +72,8 @@ class Action { virtual std::string execute(const std::string &exp, Transaction *transaction); - virtual bool execute(RuleWithActions *rule, - Transaction *transaction); + virtual bool execute(Transaction *transaction = nullptr); + /** * This method is meant to be used by transformations — a particular * type of action. diff --git a/src/actions/accuracy.cc b/src/actions/accuracy.cc index 51514fb0..6ec7b988 100644 --- a/src/actions/accuracy.cc +++ b/src/actions/accuracy.cc @@ -40,11 +40,5 @@ bool Accuracy::init(std::string *error) { } -bool Accuracy::execute(RuleWithActions *rule, Transaction *transaction) { - rule->setAccuracy(m_accuracy); - return true; -} - - } // namespace actions } // namespace modsecurity diff --git a/src/actions/accuracy.h b/src/actions/accuracy.h index 03279610..5b40ff5b 100644 --- a/src/actions/accuracy.h +++ b/src/actions/accuracy.h @@ -15,7 +15,8 @@ #include -#include "modsecurity/actions/action.h" +#include "src/actions/action_type_configure.h" + #ifndef SRC_ACTIONS_ACCURACY_H_ #define SRC_ACTIONS_ACCURACY_H_ @@ -27,15 +28,17 @@ class Transaction; namespace actions { -class Accuracy : public Action { +class Accuracy : public ActionTypeConfigure { public: explicit Accuracy(const std::string &action) - : Action(action, ConfigurationKind), + : ActionTypeConfigure(action), m_accuracy(0) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; - int getAccuracy() const { return m_accuracy; } + + virtual void configure(RuleWithActions *rule) override { + rule->setAccuracy(m_accuracy); + } private: int m_accuracy; diff --git a/src/actions/action.cc b/src/actions/action.cc index 51621cab..70922d77 100644 --- a/src/actions/action.cc +++ b/src/actions/action.cc @@ -51,7 +51,7 @@ std::string Action::execute(const std::string &value, } -bool Action::execute(RuleWithActions *rule, Transaction *transaction) { +bool Action::execute(Transaction *transaction) { return true; } diff --git a/src/actions/audit_log.cc b/src/actions/audit_log.cc index 9a2d876f..d7d51972 100644 --- a/src/actions/audit_log.cc +++ b/src/actions/audit_log.cc @@ -27,7 +27,7 @@ namespace modsecurity { namespace actions { -bool AuditLog::execute(RuleWithActions *rule, Transaction *transaction) { +bool AuditLog::execute(Transaction *transaction) { transaction->messageSetNoAuditLog(false); return true; } diff --git a/src/actions/audit_log.h b/src/actions/audit_log.h index e6f5bffc..11823fee 100644 --- a/src/actions/audit_log.h +++ b/src/actions/audit_log.h @@ -35,7 +35,7 @@ class AuditLog : public Action { explicit AuditLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; }; diff --git a/src/actions/block.cc b/src/actions/block.cc index b929d228..2bf89486 100644 --- a/src/actions/block.cc +++ b/src/actions/block.cc @@ -31,7 +31,7 @@ namespace modsecurity { namespace actions { -bool Block::execute(RuleWithActions *rule, Transaction *transaction) { +bool Block::execute(Transaction *transaction) { ms_dbg_a(transaction, 8, "Marking request as disruptive."); return true; } diff --git a/src/actions/block.h b/src/actions/block.h index db876304..10f5fb67 100644 --- a/src/actions/block.h +++ b/src/actions/block.h @@ -35,7 +35,7 @@ class Block : public Action { public: explicit Block(const std::string &action) : Action(action) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; }; diff --git a/src/actions/capture.cc b/src/actions/capture.cc index dd164f28..c633c14d 100644 --- a/src/actions/capture.cc +++ b/src/actions/capture.cc @@ -32,7 +32,7 @@ namespace modsecurity { namespace actions { -bool Capture::execute(RuleWithActions *rule, Transaction *transaction) { +bool Capture::execute(Transaction *transaction) { return true; } diff --git a/src/actions/capture.h b/src/actions/capture.h index cbc2369e..169a7c6b 100644 --- a/src/actions/capture.h +++ b/src/actions/capture.h @@ -31,7 +31,7 @@ class Capture : public Action { explicit Capture(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; }; diff --git a/src/actions/chain.cc b/src/actions/chain.cc index db9e6c68..a40bff8c 100644 --- a/src/actions/chain.cc +++ b/src/actions/chain.cc @@ -27,11 +27,5 @@ namespace modsecurity { namespace actions { -bool Chain::execute(RuleWithActions *rule, Transaction *transaction) { - rule->setHasChainAction(true); - return true; -} - - } // namespace actions } // namespace modsecurity diff --git a/src/actions/chain.h b/src/actions/chain.h index cafb64f2..62bdec12 100644 --- a/src/actions/chain.h +++ b/src/actions/chain.h @@ -15,7 +15,8 @@ #include -#include "modsecurity/actions/action.h" +#include "src/actions/action_type_configure.h" + #ifndef SRC_ACTIONS_CHAIN_H_ #define SRC_ACTIONS_CHAIN_H_ @@ -30,12 +31,15 @@ class RuleWithOperator; namespace actions { -class Chain : public Action { +class Chain : public ActionTypeConfigure { public: explicit Chain(const std::string &action) - : Action(action, ConfigurationKind) { } + : ActionTypeConfigure(action) + { }; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + virtual void configure(RuleWithActions *rule) override { + rule->setHasChainAction(true); + } }; } // namespace actions diff --git a/src/actions/ctl/audit_log_parts.cc b/src/actions/ctl/audit_log_parts.cc index cfe62638..00aadcb3 100644 --- a/src/actions/ctl/audit_log_parts.cc +++ b/src/actions/ctl/audit_log_parts.cc @@ -38,7 +38,7 @@ bool AuditLogParts::init(std::string *error) { return true; } -bool AuditLogParts::execute(RuleWithActions *rule, Transaction *transaction) { +bool AuditLogParts::execute(Transaction *transaction) { transaction->m_auditLogModifier.push_back( std::make_pair(mPartsAction, mParts)); return true; diff --git a/src/actions/ctl/audit_log_parts.h b/src/actions/ctl/audit_log_parts.h index ea9572ae..9dc088e7 100644 --- a/src/actions/ctl/audit_log_parts.h +++ b/src/actions/ctl/audit_log_parts.h @@ -33,7 +33,7 @@ class AuditLogParts : public Action { mPartsAction(0), mParts("") { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; bool init(std::string *error) override; protected: diff --git a/src/actions/ctl/request_body_access.cc b/src/actions/ctl/request_body_access.cc index 8634deb5..6b0130ce 100644 --- a/src/actions/ctl/request_body_access.cc +++ b/src/actions/ctl/request_body_access.cc @@ -42,7 +42,7 @@ bool RequestBodyAccess::init(std::string *error) { return true; } -bool RequestBodyAccess::execute(RuleWithActions *rule, Transaction *transaction) { +bool RequestBodyAccess::execute(Transaction *transaction) { if (m_request_body_access) { transaction->m_requestBodyAccess = RulesSetProperties::TrueConfigBoolean; } else { diff --git a/src/actions/ctl/request_body_access.h b/src/actions/ctl/request_body_access.h index ddc5e20f..0a508ad7 100644 --- a/src/actions/ctl/request_body_access.h +++ b/src/actions/ctl/request_body_access.h @@ -34,7 +34,7 @@ class RequestBodyAccess : public Action { m_request_body_access(false) { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; bool m_request_body_access; }; diff --git a/src/actions/ctl/request_body_processor_json.cc b/src/actions/ctl/request_body_processor_json.cc index 14d7fa8a..b9833fdb 100644 --- a/src/actions/ctl/request_body_processor_json.cc +++ b/src/actions/ctl/request_body_processor_json.cc @@ -25,8 +25,7 @@ namespace actions { namespace ctl { -bool RequestBodyProcessorJSON::execute(RuleWithActions *rule, - Transaction *transaction) { +bool RequestBodyProcessorJSON::execute(Transaction *transaction) { transaction->m_requestBodyProcessor = Transaction::JSONRequestBody; transaction->m_variableReqbodyProcessor.set("JSON", transaction->m_variableOffset); diff --git a/src/actions/ctl/request_body_processor_json.h b/src/actions/ctl/request_body_processor_json.h index 846eb89b..61049568 100644 --- a/src/actions/ctl/request_body_processor_json.h +++ b/src/actions/ctl/request_body_processor_json.h @@ -31,7 +31,7 @@ class RequestBodyProcessorJSON : public Action { explicit RequestBodyProcessorJSON(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; }; diff --git a/src/actions/ctl/request_body_processor_urlencoded.cc b/src/actions/ctl/request_body_processor_urlencoded.cc index 433a9530..d53915a3 100644 --- a/src/actions/ctl/request_body_processor_urlencoded.cc +++ b/src/actions/ctl/request_body_processor_urlencoded.cc @@ -25,8 +25,7 @@ namespace actions { namespace ctl { -bool RequestBodyProcessorURLENCODED::execute(RuleWithActions *rule, - Transaction *transaction) { +bool RequestBodyProcessorURLENCODED::execute(Transaction *transaction) { transaction->m_requestBodyType = Transaction::WWWFormUrlEncoded; transaction->m_variableReqbodyProcessor.set("URLENCODED", transaction->m_variableOffset); diff --git a/src/actions/ctl/request_body_processor_urlencoded.h b/src/actions/ctl/request_body_processor_urlencoded.h index e437961e..90a999b4 100644 --- a/src/actions/ctl/request_body_processor_urlencoded.h +++ b/src/actions/ctl/request_body_processor_urlencoded.h @@ -31,7 +31,7 @@ class RequestBodyProcessorURLENCODED : public Action { explicit RequestBodyProcessorURLENCODED(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; }; diff --git a/src/actions/ctl/request_body_processor_xml.cc b/src/actions/ctl/request_body_processor_xml.cc index d2a32d38..b4d9c94b 100644 --- a/src/actions/ctl/request_body_processor_xml.cc +++ b/src/actions/ctl/request_body_processor_xml.cc @@ -25,8 +25,7 @@ namespace actions { namespace ctl { -bool RequestBodyProcessorXML::execute(RuleWithActions *rule, - Transaction *transaction) { +bool RequestBodyProcessorXML::execute(Transaction *transaction) { transaction->m_requestBodyProcessor = Transaction::XMLRequestBody; transaction->m_variableReqbodyProcessor.set("XML", transaction->m_variableOffset); diff --git a/src/actions/ctl/request_body_processor_xml.h b/src/actions/ctl/request_body_processor_xml.h index 0d1b678c..0c06f0d0 100644 --- a/src/actions/ctl/request_body_processor_xml.h +++ b/src/actions/ctl/request_body_processor_xml.h @@ -31,7 +31,7 @@ class RequestBodyProcessorXML : public Action { explicit RequestBodyProcessorXML(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; }; diff --git a/src/actions/ctl/rule_engine.cc b/src/actions/ctl/rule_engine.cc index 54e58159..dca9b213 100644 --- a/src/actions/ctl/rule_engine.cc +++ b/src/actions/ctl/rule_engine.cc @@ -45,7 +45,7 @@ bool RuleEngine::init(std::string *error) { return true; } -bool RuleEngine::execute(RuleWithActions *rule, Transaction *transaction) { +bool RuleEngine::execute(Transaction *transaction) { std::stringstream a; a << "Setting SecRuleEngine to "; a << modsecurity::RulesSetProperties::ruleEngineStateString(m_ruleEngine); diff --git a/src/actions/ctl/rule_engine.h b/src/actions/ctl/rule_engine.h index a95be7eb..356cf02c 100644 --- a/src/actions/ctl/rule_engine.h +++ b/src/actions/ctl/rule_engine.h @@ -35,7 +35,7 @@ class RuleEngine : public Action { m_ruleEngine(RulesSetProperties::PropertyNotSetRuleEngine) { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; RulesSetProperties::RuleEngine m_ruleEngine; }; diff --git a/src/actions/ctl/rule_remove_by_id.cc b/src/actions/ctl/rule_remove_by_id.cc index 43382733..76e97111 100644 --- a/src/actions/ctl/rule_remove_by_id.cc +++ b/src/actions/ctl/rule_remove_by_id.cc @@ -83,7 +83,7 @@ bool RuleRemoveById::init(std::string *error) { return false; } -bool RuleRemoveById::execute(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveById::execute(Transaction *transaction) { for (auto &i : m_ids) { transaction->m_ruleRemoveById.push_back(i); } diff --git a/src/actions/ctl/rule_remove_by_id.h b/src/actions/ctl/rule_remove_by_id.h index 56ef7f41..30815408 100644 --- a/src/actions/ctl/rule_remove_by_id.h +++ b/src/actions/ctl/rule_remove_by_id.h @@ -33,7 +33,7 @@ class RuleRemoveById : public Action { : Action(action, RunTimeOnlyIfMatchKind) { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; std::list > m_ranges; std::list m_ids; diff --git a/src/actions/ctl/rule_remove_by_tag.cc b/src/actions/ctl/rule_remove_by_tag.cc index 44ea217a..673d37ed 100644 --- a/src/actions/ctl/rule_remove_by_tag.cc +++ b/src/actions/ctl/rule_remove_by_tag.cc @@ -32,7 +32,7 @@ bool RuleRemoveByTag::init(std::string *error) { return true; } -bool RuleRemoveByTag::execute(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveByTag::execute(Transaction *transaction) { transaction->m_ruleRemoveByTag.push_back(m_tag); return true; } diff --git a/src/actions/ctl/rule_remove_by_tag.h b/src/actions/ctl/rule_remove_by_tag.h index 4d072bc6..eb0571e0 100644 --- a/src/actions/ctl/rule_remove_by_tag.h +++ b/src/actions/ctl/rule_remove_by_tag.h @@ -34,7 +34,7 @@ class RuleRemoveByTag : public Action { m_tag("") { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; std::string m_tag; }; diff --git a/src/actions/ctl/rule_remove_target_by_id.cc b/src/actions/ctl/rule_remove_target_by_id.cc index e82257f2..994bc92c 100644 --- a/src/actions/ctl/rule_remove_target_by_id.cc +++ b/src/actions/ctl/rule_remove_target_by_id.cc @@ -51,7 +51,7 @@ bool RuleRemoveTargetById::init(std::string *error) { return true; } -bool RuleRemoveTargetById::execute(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveTargetById::execute(Transaction *transaction) { transaction->m_ruleRemoveTargetById.push_back( std::make_pair(m_id, m_target)); return true; diff --git a/src/actions/ctl/rule_remove_target_by_id.h b/src/actions/ctl/rule_remove_target_by_id.h index 6e8b927c..b8feaac8 100644 --- a/src/actions/ctl/rule_remove_target_by_id.h +++ b/src/actions/ctl/rule_remove_target_by_id.h @@ -35,7 +35,7 @@ class RuleRemoveTargetById : public Action { m_target("") { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; int m_id; std::string m_target; diff --git a/src/actions/ctl/rule_remove_target_by_tag.cc b/src/actions/ctl/rule_remove_target_by_tag.cc index 57ebd4bc..5e96569c 100644 --- a/src/actions/ctl/rule_remove_target_by_tag.cc +++ b/src/actions/ctl/rule_remove_target_by_tag.cc @@ -44,7 +44,7 @@ bool RuleRemoveTargetByTag::init(std::string *error) { return true; } -bool RuleRemoveTargetByTag::execute(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveTargetByTag::execute(Transaction *transaction) { transaction->m_ruleRemoveTargetByTag.push_back( std::make_pair(m_tag, m_target)); return true; diff --git a/src/actions/ctl/rule_remove_target_by_tag.h b/src/actions/ctl/rule_remove_target_by_tag.h index 0d8a7aa4..0fbe4e50 100644 --- a/src/actions/ctl/rule_remove_target_by_tag.h +++ b/src/actions/ctl/rule_remove_target_by_tag.h @@ -33,7 +33,7 @@ class RuleRemoveTargetByTag : public Action { : Action(action, RunTimeOnlyIfMatchKind) { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; std::string m_tag; std::string m_target; diff --git a/src/actions/data/status.cc b/src/actions/data/status.cc index a31e5ffe..c6c7a5e0 100644 --- a/src/actions/data/status.cc +++ b/src/actions/data/status.cc @@ -38,7 +38,7 @@ bool Status::init(std::string *error) { } -bool Status::execute(RuleWithActions *rule, Transaction *transaction) { +bool Status::execute(Transaction *transaction) { transaction->m_it.status = m_status; return true; } diff --git a/src/actions/data/status.h b/src/actions/data/status.h index 87a30059..d13b9c9c 100644 --- a/src/actions/data/status.h +++ b/src/actions/data/status.h @@ -37,7 +37,7 @@ class Status : public Action { m_status(0) { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; int m_status; }; diff --git a/src/actions/disruptive/allow.cc b/src/actions/disruptive/allow.cc index ae22ddbf..f483d0f9 100644 --- a/src/actions/disruptive/allow.cc +++ b/src/actions/disruptive/allow.cc @@ -49,7 +49,7 @@ bool Allow::init(std::string *error) { } -bool Allow::execute(RuleWithActions *rule, Transaction *transaction) { +bool Allow::execute(Transaction *transaction) { ms_dbg_a(transaction, 4, "Dropping the evaluation of upcoming rules " \ "in favor of an `allow' action of type: " \ + allowTypeToName(m_allowType)); diff --git a/src/actions/disruptive/allow.h b/src/actions/disruptive/allow.h index 49776066..6b1028d0 100644 --- a/src/actions/disruptive/allow.h +++ b/src/actions/disruptive/allow.h @@ -59,7 +59,7 @@ class Allow : public Action { bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; bool isDisruptive() override { return true; } AllowType m_allowType; diff --git a/src/actions/disruptive/deny.cc b/src/actions/disruptive/deny.cc index 907e8874..e19f403a 100644 --- a/src/actions/disruptive/deny.cc +++ b/src/actions/disruptive/deny.cc @@ -28,7 +28,7 @@ namespace actions { namespace disruptive { -bool Deny::execute(RuleWithActions *rule, Transaction *transaction) { +bool Deny::execute(Transaction *transaction) { ms_dbg_a(transaction, 8, "Running action deny"); if (transaction->m_it.status == 200) { @@ -37,7 +37,7 @@ bool Deny::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - transaction->messageGetLast()->setRule(rule); + //transaction->messageGetLast()->setRule(rule); transaction->m_it.log = strdup( transaction->messageGetLast()->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); diff --git a/src/actions/disruptive/deny.h b/src/actions/disruptive/deny.h index 182b2162..510a534b 100644 --- a/src/actions/disruptive/deny.h +++ b/src/actions/disruptive/deny.h @@ -33,7 +33,7 @@ class Deny : public Action { public: explicit Deny(const std::string &action) : Action(action) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/drop.cc b/src/actions/disruptive/drop.cc index 848c05f9..692a583c 100644 --- a/src/actions/disruptive/drop.cc +++ b/src/actions/disruptive/drop.cc @@ -32,7 +32,7 @@ namespace actions { namespace disruptive { -bool Drop::execute(RuleWithActions *rule, Transaction *transaction) { +bool Drop::execute(Transaction *transaction) { ms_dbg_a(transaction, 8, "Running action drop " \ "[executing deny instead of drop.]"); @@ -42,7 +42,7 @@ bool Drop::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - transaction->messageGetLast()->setRule(rule); + //transaction->messageGetLast()->setRule(rule); transaction->m_it.log = strdup( transaction->messageGetLast()->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); diff --git a/src/actions/disruptive/drop.h b/src/actions/disruptive/drop.h index 2ff7d1f1..ea20ca72 100644 --- a/src/actions/disruptive/drop.h +++ b/src/actions/disruptive/drop.h @@ -32,7 +32,7 @@ class Drop : public Action { public: explicit Drop(const std::string &action) : Action(action) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/pass.cc b/src/actions/disruptive/pass.cc index 232d3087..549b6ce7 100644 --- a/src/actions/disruptive/pass.cc +++ b/src/actions/disruptive/pass.cc @@ -29,7 +29,7 @@ namespace actions { namespace disruptive { -bool Pass::execute(RuleWithActions *rule, Transaction *transaction) { +bool Pass::execute(Transaction *transaction) { intervention::free(&transaction->m_it); intervention::reset(&transaction->m_it); diff --git a/src/actions/disruptive/pass.h b/src/actions/disruptive/pass.h index b729ee21..0b512500 100644 --- a/src/actions/disruptive/pass.h +++ b/src/actions/disruptive/pass.h @@ -31,7 +31,7 @@ class Pass : public Action { public: explicit Pass(const std::string &action) : Action(action) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/redirect.cc b/src/actions/disruptive/redirect.cc index 92436938..ee495e92 100644 --- a/src/actions/disruptive/redirect.cc +++ b/src/actions/disruptive/redirect.cc @@ -34,7 +34,7 @@ bool Redirect::init(std::string *error) { } -bool Redirect::execute(RuleWithActions *rule, Transaction *transaction) { +bool Redirect::execute(Transaction *transaction) { std::string m_urlExpanded(getEvaluatedRunTimeString(transaction)); /* if it was changed before, lets keep it. */ if (transaction->m_it.status == 200 @@ -46,7 +46,7 @@ bool Redirect::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_it.url = strdup(m_urlExpanded.c_str()); transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - transaction->messageGetLast()->setRule(rule); + transaction->m_it.log = strdup( transaction->messageGetLast()->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); diff --git a/src/actions/disruptive/redirect.h b/src/actions/disruptive/redirect.h index e0cceda8..9688047a 100644 --- a/src/actions/disruptive/redirect.h +++ b/src/actions/disruptive/redirect.h @@ -51,7 +51,7 @@ class Redirect : public ActionWithRunTimeString { bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; bool isDisruptive() override { return true; } diff --git a/src/actions/exec.cc b/src/actions/exec.cc index 24b7f63d..0500fbe6 100644 --- a/src/actions/exec.cc +++ b/src/actions/exec.cc @@ -49,7 +49,7 @@ bool Exec::init(std::string *error) { } -bool Exec::execute(RuleWithActions *rule, Transaction *t) { +bool Exec::execute(Transaction *t) { ms_dbg_a(t, 8, "Running script... " + m_script); m_lua.run(t); return true; diff --git a/src/actions/exec.h b/src/actions/exec.h index cbe3f7b3..9bfaf54e 100644 --- a/src/actions/exec.h +++ b/src/actions/exec.h @@ -36,7 +36,7 @@ class Exec : public Action { ~Exec() { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; bool init(std::string *error) override; private: diff --git a/src/actions/init_col.cc b/src/actions/init_col.cc index f3d6e536..64472028 100644 --- a/src/actions/init_col.cc +++ b/src/actions/init_col.cc @@ -54,7 +54,7 @@ bool InitCol::init(std::string *error) { } -bool InitCol::execute(RuleWithActions *rule, Transaction *t) { +bool InitCol::execute(Transaction *t) { std::string collectionName(getEvaluatedRunTimeString(t)); if (m_collection_key == "ip") { diff --git a/src/actions/init_col.h b/src/actions/init_col.h index dacdd3af..c4b5f0e4 100644 --- a/src/actions/init_col.h +++ b/src/actions/init_col.h @@ -47,7 +47,7 @@ class InitCol : public ActionWithRunTimeString { bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; virtual ActionWithRunTimeString *clone() override { return new InitCol(*this); diff --git a/src/actions/log.cc b/src/actions/log.cc index 8619a8e7..e66c3c3f 100644 --- a/src/actions/log.cc +++ b/src/actions/log.cc @@ -28,7 +28,7 @@ namespace modsecurity { namespace actions { -bool Log::execute(RuleWithActions *rule, Transaction *transaction) { +bool Log::execute(Transaction *transaction) { return true; } diff --git a/src/actions/log.h b/src/actions/log.h index 7c90e761..4835dcbb 100644 --- a/src/actions/log.h +++ b/src/actions/log.h @@ -33,7 +33,7 @@ class Log : public Action { explicit Log(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/log_data.cc b/src/actions/log_data.cc index 20ea7e32..66fe42b1 100644 --- a/src/actions/log_data.cc +++ b/src/actions/log_data.cc @@ -29,7 +29,7 @@ namespace modsecurity { namespace actions { -bool LogData::execute(RuleWithActions *rule, Transaction *transaction) { +bool LogData::execute(Transaction *transaction) { transaction->messageGetLast()->m_data = getEvaluatedRunTimeString(transaction); return true; diff --git a/src/actions/log_data.h b/src/actions/log_data.h index f55c4f82..19540503 100644 --- a/src/actions/log_data.h +++ b/src/actions/log_data.h @@ -44,7 +44,7 @@ class LogData : public ActionWithRunTimeString { : ActionWithRunTimeString(data) { }; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; virtual ActionWithRunTimeString *clone() override { return new LogData(*this); diff --git a/src/actions/maturity.cc b/src/actions/maturity.cc index b419d385..1017a412 100644 --- a/src/actions/maturity.cc +++ b/src/actions/maturity.cc @@ -40,10 +40,5 @@ bool Maturity::init(std::string *error) { } -bool Maturity::execute(RuleWithActions *rule, Transaction *transaction) { - return true; -} - - } // namespace actions } // namespace modsecurity diff --git a/src/actions/maturity.h b/src/actions/maturity.h index e66f14d5..f7b68720 100644 --- a/src/actions/maturity.h +++ b/src/actions/maturity.h @@ -15,7 +15,8 @@ #include -#include "modsecurity/actions/action.h" +#include "src/actions/action_type_configure.h" + #ifndef SRC_ACTIONS_MATURITY_H_ #define SRC_ACTIONS_MATURITY_H_ @@ -27,15 +28,17 @@ class Transaction; namespace actions { -class Maturity : public Action { +class Maturity : public ActionTypeConfigure { public: explicit Maturity(const std::string &action) - : Action(action, ConfigurationKind), + : ActionTypeConfigure(action), m_maturity(0) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; - int getMaturity() const { return m_maturity; } + + virtual void configure(RuleWithActions *rule) override { + rule->setMaturity(m_maturity); + } private: int m_maturity; diff --git a/src/actions/msg.cc b/src/actions/msg.cc index 34d832dc..f5921c15 100644 --- a/src/actions/msg.cc +++ b/src/actions/msg.cc @@ -46,7 +46,7 @@ namespace modsecurity { namespace actions { -bool Msg::execute(RuleWithActions *rule, Transaction *transaction) { +bool Msg::execute(Transaction *transaction) { std::string msg = getEvaluatedRunTimeString(transaction); transaction->messageGetLast()->m_message = msg; ms_dbg_a(transaction, 9, "Saving msg: " + msg); diff --git a/src/actions/msg.h b/src/actions/msg.h index c9b6b12b..3f18beaa 100644 --- a/src/actions/msg.h +++ b/src/actions/msg.h @@ -45,7 +45,7 @@ class Msg : public ActionWithRunTimeString { : ActionWithRunTimeString(action) { }; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; virtual ActionWithRunTimeString *clone() override { return new Msg(*this); diff --git a/src/actions/multi_match.cc b/src/actions/multi_match.cc index 0956b7dc..c7b9f839 100644 --- a/src/actions/multi_match.cc +++ b/src/actions/multi_match.cc @@ -25,7 +25,7 @@ namespace modsecurity { namespace actions { -bool MultiMatch::execute(RuleWithActions *rule, Transaction *transaction) { +bool MultiMatch::execute(Transaction *transaction) { return true; } diff --git a/src/actions/multi_match.h b/src/actions/multi_match.h index 1c62523a..54563130 100644 --- a/src/actions/multi_match.h +++ b/src/actions/multi_match.h @@ -35,7 +35,7 @@ class MultiMatch : public Action { explicit MultiMatch(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/no_audit_log.cc b/src/actions/no_audit_log.cc index fd857177..92b7e2f9 100644 --- a/src/actions/no_audit_log.cc +++ b/src/actions/no_audit_log.cc @@ -26,7 +26,7 @@ namespace modsecurity { namespace actions { -bool NoAuditLog::execute(RuleWithActions *rule, Transaction *transaction) { +bool NoAuditLog::execute(Transaction *transaction) { transaction->messageSetNoAuditLog(true); return true; } diff --git a/src/actions/no_audit_log.h b/src/actions/no_audit_log.h index 1adcdd1b..66dc72cd 100644 --- a/src/actions/no_audit_log.h +++ b/src/actions/no_audit_log.h @@ -35,7 +35,7 @@ class NoAuditLog : public Action { explicit NoAuditLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/no_log.cc b/src/actions/no_log.cc index 910ac761..d87e396c 100644 --- a/src/actions/no_log.cc +++ b/src/actions/no_log.cc @@ -29,7 +29,7 @@ namespace modsecurity { namespace actions { -bool NoLog::execute(RuleWithActions *rule, Transaction *transaction) { +bool NoLog::execute(Transaction *transaction) { return true; } diff --git a/src/actions/no_log.h b/src/actions/no_log.h index df07060b..645290a7 100644 --- a/src/actions/no_log.h +++ b/src/actions/no_log.h @@ -33,7 +33,7 @@ class NoLog : public Action { explicit NoLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/phase.cc b/src/actions/phase.cc index b6382a43..d999e201 100644 --- a/src/actions/phase.cc +++ b/src/actions/phase.cc @@ -73,10 +73,5 @@ bool Phase::init(std::string *error) { } -bool Phase::execute(RuleWithActions *rule, Transaction *transaction) { - rule->setPhase(m_phase); - return true; -} - } // namespace actions } // namespace modsecurity diff --git a/src/actions/phase.h b/src/actions/phase.h index 82942b76..b9e57acd 100644 --- a/src/actions/phase.h +++ b/src/actions/phase.h @@ -15,7 +15,8 @@ #include -#include "modsecurity/actions/action.h" +#include "src/actions/action_type_configure.h" + #ifndef SRC_ACTIONS_PHASE_H_ #define SRC_ACTIONS_PHASE_H_ @@ -30,14 +31,19 @@ class RuleWithOperator; namespace actions { -class Phase : public Action { +class Phase : public ActionTypeConfigure { public: - explicit Phase(const std::string &action) : Action(action, ConfigurationKind), + explicit Phase(const std::string &action) + : ActionTypeConfigure(action), m_phase(0), m_secRulesPhase(0) { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + + virtual void configure(RuleWithActions *rule) override { + rule->setPhase(m_phase); + } + int m_phase; int m_secRulesPhase; diff --git a/src/actions/rev.cc b/src/actions/rev.cc index 4e2d94e0..52e4fd6f 100644 --- a/src/actions/rev.cc +++ b/src/actions/rev.cc @@ -29,12 +29,7 @@ namespace actions { bool Rev::init(std::string *error) { - m_rev = m_parser_payload; - return true; -} - - -bool Rev::execute(RuleWithActions *rule, Transaction *transaction) { + m_revision = m_parser_payload; return true; } diff --git a/src/actions/rev.h b/src/actions/rev.h index ed8dbfdf..6e0ffd33 100644 --- a/src/actions/rev.h +++ b/src/actions/rev.h @@ -15,7 +15,8 @@ #include -#include "modsecurity/actions/action.h" +#include "src/actions/action_type_configure.h" + #ifndef SRC_ACTIONS_REV_H_ #define SRC_ACTIONS_REV_H_ @@ -27,16 +28,19 @@ class Transaction; namespace actions { -class Rev : public Action { +class Rev : public ActionTypeConfigure { public: - explicit Rev(const std::string &action) : Action(action, ConfigurationKind) { } + explicit Rev(const std::string &action) + : ActionTypeConfigure(action), + m_revision("") + { }; - bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; - std::string getRevision() const { return m_rev; } - + virtual void configure(RuleWithActions *rule) override { + rule->setRevision(m_revision); + } private: - std::string m_rev; + std::string m_revision; }; diff --git a/src/actions/rule_id.cc b/src/actions/rule_id.cc index 7457e091..d4a7cf3b 100644 --- a/src/actions/rule_id.cc +++ b/src/actions/rule_id.cc @@ -50,11 +50,5 @@ bool RuleId::init(std::string *error) { } -bool RuleId::execute(RuleWithActions *rule, Transaction *transaction) { - rule->setId(m_ruleId); - return true; -} - - } // namespace actions } // namespace modsecurity diff --git a/src/actions/rule_id.h b/src/actions/rule_id.h index 74846f2d..6d37586a 100644 --- a/src/actions/rule_id.h +++ b/src/actions/rule_id.h @@ -15,7 +15,8 @@ #include -#include "modsecurity/actions/action.h" +#include "src/actions/action_type_configure.h" + #ifndef SRC_ACTIONS_RULE_ID_H_ #define SRC_ACTIONS_RULE_ID_H_ @@ -30,15 +31,17 @@ class RuleWithOperator; namespace actions { -class RuleId : public Action { +class RuleId : public ActionTypeConfigure { public: explicit RuleId(const std::string &action) - : Action(action, ConfigurationKind), + : ActionTypeConfigure(action), m_ruleId(0) { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + virtual void configure(RuleWithActions *rule) override { + rule->setId(m_ruleId); + } private: double m_ruleId; }; diff --git a/src/actions/set_env.cc b/src/actions/set_env.cc index a96b6ec7..cfba6c94 100644 --- a/src/actions/set_env.cc +++ b/src/actions/set_env.cc @@ -28,7 +28,7 @@ namespace modsecurity { namespace actions { -bool SetENV::execute(RuleWithActions *rule, Transaction *t) { +bool SetENV::execute(Transaction *t) { std::string colNameExpanded(getEvaluatedRunTimeString(t)); ms_dbg_a(t, 8, "Setting envoriment variable: " diff --git a/src/actions/set_env.h b/src/actions/set_env.h index 0fa1399e..f8435cc9 100644 --- a/src/actions/set_env.h +++ b/src/actions/set_env.h @@ -44,7 +44,7 @@ class SetENV : public ActionWithRunTimeString { : ActionWithRunTimeString(action) { }; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; virtual ActionWithRunTimeString *clone() override { return new SetENV(*this); diff --git a/src/actions/set_rsc.cc b/src/actions/set_rsc.cc index e34e2c72..5db01b05 100644 --- a/src/actions/set_rsc.cc +++ b/src/actions/set_rsc.cc @@ -26,7 +26,7 @@ namespace modsecurity { namespace actions { -bool SetRSC::execute(RuleWithActions *rule, Transaction *t) { +bool SetRSC::execute(Transaction *t) { std::string colNameExpanded(getEvaluatedRunTimeString(t)); ms_dbg_a(t, 8, "RESOURCE initiated with value: \'" + colNameExpanded + "\'."); diff --git a/src/actions/set_rsc.h b/src/actions/set_rsc.h index 66a5f535..ed031354 100644 --- a/src/actions/set_rsc.h +++ b/src/actions/set_rsc.h @@ -44,7 +44,7 @@ class SetRSC : public ActionWithRunTimeString { : ActionWithRunTimeString(action) { }; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; virtual ActionWithRunTimeString *clone() override { return new SetRSC(*this); diff --git a/src/actions/set_sid.cc b/src/actions/set_sid.cc index 9359ebcd..4ce75d83 100644 --- a/src/actions/set_sid.cc +++ b/src/actions/set_sid.cc @@ -26,7 +26,7 @@ namespace modsecurity { namespace actions { -bool SetSID::execute(RuleWithActions *rule, Transaction *t) { +bool SetSID::execute(Transaction *t) { std::string colNameExpanded(getEvaluatedRunTimeString(t)); ms_dbg_a(t, 8, "Session ID initiated with value: \'" + colNameExpanded + "\'."); diff --git a/src/actions/set_sid.h b/src/actions/set_sid.h index 71305e90..998aec76 100644 --- a/src/actions/set_sid.h +++ b/src/actions/set_sid.h @@ -44,7 +44,7 @@ class SetSID : public ActionWithRunTimeString { : ActionWithRunTimeString(action) { }; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; virtual ActionWithRunTimeString *clone() override { return new SetSID(*this); diff --git a/src/actions/set_uid.cc b/src/actions/set_uid.cc index 1c60ab49..643bab48 100644 --- a/src/actions/set_uid.cc +++ b/src/actions/set_uid.cc @@ -26,7 +26,7 @@ namespace modsecurity { namespace actions { -bool SetUID::execute(RuleWithActions *rule, Transaction *t) { +bool SetUID::execute(Transaction *t) { std::string colNameExpanded(getEvaluatedRunTimeString(t)); ms_dbg_a(t, 8, "User collection initiated with value: \'" + colNameExpanded + "\'."); diff --git a/src/actions/set_uid.h b/src/actions/set_uid.h index 0191e5ff..b7642ba0 100644 --- a/src/actions/set_uid.h +++ b/src/actions/set_uid.h @@ -44,7 +44,7 @@ class SetUID : public ActionWithRunTimeString { : ActionWithRunTimeString(action) { }; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; virtual ActionWithRunTimeString *clone() override { return new SetUID(*this); diff --git a/src/actions/set_var.cc b/src/actions/set_var.cc index 1fc6c084..e0712558 100644 --- a/src/actions/set_var.cc +++ b/src/actions/set_var.cc @@ -42,7 +42,7 @@ bool SetVar::init(std::string *error) { } -bool SetVar::execute(RuleWithActions *rule, Transaction *t) { +bool SetVar::execute(Transaction *t) { std::string targetValue; std::string resolvedPre; diff --git a/src/actions/set_var.h b/src/actions/set_var.h index 40f2b2b6..3870ee33 100644 --- a/src/actions/set_var.h +++ b/src/actions/set_var.h @@ -78,7 +78,7 @@ class SetVar : public ActionWithRunTimeString { - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; bool init(std::string *error) override; void populate(RuleWithActions *rule) override { diff --git a/src/actions/severity.cc b/src/actions/severity.cc index cc0cd809..4d368b28 100644 --- a/src/actions/severity.cc +++ b/src/actions/severity.cc @@ -71,7 +71,7 @@ bool Severity::init(std::string *error) { } -bool Severity::execute(RuleWithActions *rule, Transaction *transaction) { +bool Severity::execute(Transaction *transaction) { return true; } diff --git a/src/actions/severity.h b/src/actions/severity.h index ed373859..99cd5ac5 100644 --- a/src/actions/severity.h +++ b/src/actions/severity.h @@ -35,7 +35,7 @@ class Severity : public Action { : Action(action), m_severity(0) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; bool init(std::string *error) override; int m_severity; diff --git a/src/actions/skip.cc b/src/actions/skip.cc index 8611dee3..b0d9f272 100644 --- a/src/actions/skip.cc +++ b/src/actions/skip.cc @@ -38,7 +38,7 @@ bool Skip::init(std::string *error) { } -bool Skip::execute(RuleWithActions *rule, Transaction *transaction) { +bool Skip::execute(Transaction *transaction) { ms_dbg_a(transaction, 5, "Skipping the next " + \ std::to_string(m_skip_next) + " rules."); diff --git a/src/actions/skip.h b/src/actions/skip.h index 78bff450..a270ab8c 100644 --- a/src/actions/skip.h +++ b/src/actions/skip.h @@ -34,7 +34,7 @@ class Skip : public Action { m_skip_next(0) { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; int m_skip_next; }; diff --git a/src/actions/skip_after.cc b/src/actions/skip_after.cc index 9e1bae39..8f486d68 100644 --- a/src/actions/skip_after.cc +++ b/src/actions/skip_after.cc @@ -27,7 +27,7 @@ namespace modsecurity { namespace actions { -bool SkipAfter::execute(RuleWithActions *rule, Transaction *transaction) { +bool SkipAfter::execute(Transaction *transaction) { ms_dbg_a(transaction, 5, "Setting skipAfter for: " + *m_skipName); transaction->addMarker(m_skipName); return true; diff --git a/src/actions/skip_after.h b/src/actions/skip_after.h index c90c188b..0ae7f9a5 100644 --- a/src/actions/skip_after.h +++ b/src/actions/skip_after.h @@ -34,7 +34,7 @@ class SkipAfter : public Action { : Action(action, RunTimeOnlyIfMatchKind), m_skipName(std::make_shared(m_parser_payload)) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; private: std::shared_ptr m_skipName; }; diff --git a/src/actions/tag.cc b/src/actions/tag.cc index 4ae4a6ed..c5a22928 100644 --- a/src/actions/tag.cc +++ b/src/actions/tag.cc @@ -50,7 +50,7 @@ namespace modsecurity { namespace actions { -bool Tag::execute(RuleWithActions *rule, Transaction *transaction) { +bool Tag::execute(Transaction *transaction) { std::string tag = getTagName(transaction); ms_dbg_a(transaction, 9, "Rule tag: " + tag); diff --git a/src/actions/tag.h b/src/actions/tag.h index d41857c3..741624bd 100644 --- a/src/actions/tag.h +++ b/src/actions/tag.h @@ -44,7 +44,7 @@ class Tag : public ActionWithRunTimeString { : ActionWithRunTimeString(action) { }; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + bool execute(Transaction *transaction) override; inline std::string getTagName(Transaction *transaction) const { return getEvaluatedRunTimeString(transaction); diff --git a/src/actions/ver.cc b/src/actions/ver.cc index a169bb23..daad4e8d 100644 --- a/src/actions/ver.cc +++ b/src/actions/ver.cc @@ -28,10 +28,5 @@ namespace modsecurity { namespace actions { -bool Ver::execute(RuleWithActions *rule, Transaction *transaction) { - return true; -} - - } // namespace actions } // namespace modsecurity diff --git a/src/actions/ver.h b/src/actions/ver.h index b568c007..fc849ee4 100644 --- a/src/actions/ver.h +++ b/src/actions/ver.h @@ -15,7 +15,8 @@ #include -#include "modsecurity/actions/action.h" +#include "src/actions/action_type_configure.h" + #ifndef SRC_ACTIONS_VER_H_ #define SRC_ACTIONS_VER_H_ @@ -27,14 +28,19 @@ class Transaction; namespace actions { -class Ver : public Action { +class Ver : public ActionTypeConfigure { public: - explicit Ver(const std::string &action) : Action(action, ConfigurationKind) { } + explicit Ver(const std::string &action) + : ActionTypeConfigure(action), + m_version("") + { }; - bool execute(RuleWithActions *rule, Transaction *transaction) override; + virtual void configure(RuleWithActions *rule) override { + rule->setVersion(m_version); + } private: - std::string m_ver; + std::string m_version; }; diff --git a/src/actions/xmlns.h b/src/actions/xmlns.h index d401cf0f..b4bfbeeb 100644 --- a/src/actions/xmlns.h +++ b/src/actions/xmlns.h @@ -31,7 +31,7 @@ class XmlNS : public Action { public: explicit XmlNS(const std::string &action) : Action(action) { } - bool execute(RuleWithActions *rule, Transaction *transaction) override { + bool execute(Transaction *transaction) override { return true; } diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index 3dac7e17..f29fd139 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -47,6 +47,11 @@ #include "src/actions/xmlns.h" #include "src/utils/string.h" #include "src/actions/action_with_run_time_string.h" +#include "src/actions/phase.h" +#include "src/actions/chain.h" +#include "src/actions/rule_id.h" +#include "src/actions/ver.h" +#include "src/actions/action_type_configure.h" namespace modsecurity { @@ -113,16 +118,9 @@ void RuleWithActions::addDefaultAction(std::shared_ptr a) { arts->populate(this); } - if (a->m_actionKind == Action::ConfigurationKind) { - if (dynamic_cast(a.get())) { - actions::Accuracy *accuracy = dynamic_cast(a.get()); - m_defaultAccuracy = accuracy->getAccuracy(); - } else if (dynamic_cast(a.get())) { - actions::Rev *rev = dynamic_cast(a.get()); - m_defaultRevision = rev->getRevision(); - } else { - a->execute(this, NULL); - } + if (dynamic_cast(a.get())) { + ActionTypeConfigure *conf = dynamic_cast(a.get()); + conf->configure(this); return; } @@ -134,9 +132,6 @@ void RuleWithActions::addDefaultAction(std::shared_ptr a) { } else if (dynamic_cast(a.get())) { actions::Severity *severity = dynamic_cast(a.get()); setDefaultActionSeverity(severity->m_severity); - } else if (dynamic_cast(a.get())) { - actions::Maturity *maturity = dynamic_cast(a.get()); - setDefaultActionMaturity(maturity->getMaturity()); } else if (dynamic_cast(a.get())) { m_defaultActionLogData = std::static_pointer_cast(a); } else if (dynamic_cast(a.get())) { @@ -175,16 +170,9 @@ void RuleWithActions::addAction(actions::Action *a) { arts->populate(this); } - if (a->m_actionKind == Action::ConfigurationKind) { - if (dynamic_cast(a)) { - actions::Accuracy *accuracy = dynamic_cast(a); - m_accuracy = accuracy->getAccuracy(); - } else if (dynamic_cast(a)) { - actions::Rev *rev = dynamic_cast(a); - m_revision = rev->getRevision(); - } else { - a->execute(this, NULL); - } + if (dynamic_cast(a)) { + ActionTypeConfigure *conf = dynamic_cast(a); + conf->configure(this); delete a; return; } @@ -207,10 +195,6 @@ void RuleWithActions::addAction(actions::Action *a) { } else if (dynamic_cast(a)) { actions::SetVar *var = dynamic_cast(a); m_actionsSetVar.push_back(std::unique_ptr(var)); - } else if (dynamic_cast(a)) { - actions::Maturity *maturity = dynamic_cast(a); - m_maturity = maturity->getMaturity(); - delete a; } else if (dynamic_cast(a)) { m_containsLogAction = true; delete a; @@ -257,7 +241,7 @@ void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction * ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ "action: " + *a->m_name.get()); - a->execute(this, trans); + a->execute(trans); } for (auto &b : @@ -271,20 +255,20 @@ void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction * } else if (*a->m_name.get() == "setvar") { ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ "action: " + *a->m_name.get()); - a->execute(this, trans); + a->execute(trans); } } if (m_logData) { - m_logData->execute(this, trans); + m_logData->execute(trans); } else if (m_defaultActionLogData) { - m_defaultActionLogData->execute(this, trans); + m_defaultActionLogData->execute(trans); } if (m_msg) { - m_msg->execute(this, trans); + m_msg->execute(trans); } else if (m_defaultActionMsg) { - m_defaultActionMsg->execute(this, trans); + m_defaultActionMsg->execute(trans); } } @@ -307,7 +291,7 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { for (actions::Tag *a : getTagsActionPtr()) { ms_dbg_a(trans, 4, "Running (non-disruptive) action: " \ + *a->m_name.get()); - a->execute(this, trans); + a->execute(trans); } /** @@ -321,8 +305,13 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { continue; } actions::Action *a = dynamic_cast(b.second.get()); + if (a->isDisruptive()) { + trans->messageGetLast()->setRule(this); + } executeAction(trans, a, false); - disruptiveAlreadyExecuted = true; + if (a->isDisruptive()) { + disruptiveAlreadyExecuted = true; + } } for (auto &a : getMatchActionsPtr()) { if (!a->isDisruptive() @@ -348,7 +337,7 @@ void RuleWithActions::executeAction(Transaction *trans, if (a->isDisruptive() == false && *a->m_name.get() != "block") { ms_dbg_a(trans, 9, "Running " \ "action: " + *a->m_name.get()); - a->execute(this, trans); + a->execute(trans); return; } @@ -361,7 +350,7 @@ void RuleWithActions::executeAction(Transaction *trans, if (trans->getRuleEngineState() == RulesSet::EnabledRuleEngine) { ms_dbg_a(trans, 4, "Running (disruptive) action: " + *a->m_name.get() + "."); - a->execute(this, trans); + a->execute(trans); return; } diff --git a/src/rule_with_actions.h b/src/rule_with_actions.h index b77c683e..eca268b6 100644 --- a/src/rule_with_actions.h +++ b/src/rule_with_actions.h @@ -29,6 +29,8 @@ #include "modsecurity/modsecurity.h" #include "modsecurity/variable_value.h" #include "modsecurity/rule.h" +#include "modsecurity/actions/action.h" +#include "src/actions/action_type_configure.h" #ifdef __cplusplus @@ -53,6 +55,7 @@ using Transformation = actions::transformations::Transformation; using Transformations = std::vector >; using TransformationsPtr = std::vector; using Action = actions::Action; +using ActionTypeConfigure = actions::ActionTypeConfigure; using Actions = std::vector; using Tags = std::vector >; using TagsPtr = std::vector;