Skip to content

Commit 8eb7b8f

Browse files
committed
Refactoring: Splits Rule into Rule and RuleWithActions
1 parent 43f8aee commit 8eb7b8f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+358
-380
lines changed

headers/modsecurity/actions/action.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
namespace modsecurity {
3333
class Transaction;
3434
class Rule;
35+
class RuleWithActions;
3536

3637
namespace actions {
3738

@@ -59,8 +60,8 @@ class Action {
5960

6061
virtual std::string evaluate(const std::string &exp,
6162
Transaction *transaction);
62-
virtual bool evaluate(Rule *rule, Transaction *transaction);
63-
virtual bool evaluate(Rule *rule, Transaction *transaction,
63+
virtual bool evaluate(RuleWithActions *rule, Transaction *transaction);
64+
virtual bool evaluate(RuleWithActions *rule, Transaction *transaction,
6465
std::shared_ptr<RuleMessage> ruleMessage) {
6566
return evaluate(rule, transaction);
6667
}

headers/modsecurity/rule.h

Lines changed: 67 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ using TransformationResults = std::list<TransformationResult>;
6060
using Transformation = actions::transformations::Transformation;
6161
using Transformations = std::vector<Transformation *>;
6262

63+
using Actions = std::vector<actions::Action *>;
64+
6365
using Tags = std::vector<actions::Tag *>;
6466
using SetVars = std::vector<actions::SetVar *>;
6567
using MatchActions = std::vector<actions::Action *>;
@@ -137,49 +139,21 @@ class RuleMarker : public RuleBase {
137139
};
138140

139141

140-
class Rule : public RuleBase {
142+
class RuleWithActions : public RuleBase {
141143
public:
142-
Rule(operators::Operator *op,
143-
variables::Variables *variables,
144-
std::vector<actions::Action *> *actions,
145-
Transformations *transformations,
146-
std::unique_ptr<std::string> fileName,
147-
int lineNumber);
148-
explicit Rule(const std::string &marker,
149-
std::unique_ptr<std::string> fileName,
150-
int lineNumber);
151-
virtual ~Rule();
144+
RuleWithActions(
145+
Actions *a,
146+
Transformations *t,
147+
std::unique_ptr<std::string> fileName,
148+
int lineNumber);
152149

153-
virtual bool evaluate(Transaction *transaction,
154-
std::shared_ptr<RuleMessage> rm) override;
150+
~RuleWithActions();
155151

156-
void organizeActions(std::vector<actions::Action *> *actions);
157-
void cleanUpActions();
158152
void executeAction(Transaction *trans,
159-
bool containsBlock, std::shared_ptr<RuleMessage> ruleMessage,
160-
actions::Action *a, bool context);
161-
162-
163-
void getVariablesExceptions(Transaction *t,
164-
variables::Variables *exclusion, variables::Variables *addition);
165-
inline void getFinalVars(variables::Variables *vars,
166-
variables::Variables *eclusion, Transaction *trans);
167-
void executeActionsAfterFullMatch(Transaction *trasn,
168-
bool containsDisruptive, std::shared_ptr<RuleMessage> ruleMessage);
169-
170-
bool executeOperatorAt(Transaction *trasn, const std::string &key,
171-
std::string value, std::shared_ptr<RuleMessage> rm);
172-
void executeActionsIndependentOfChainedRuleResult(Transaction *trasn,
173-
bool *b, std::shared_ptr<RuleMessage> ruleMessage);
174-
static inline void updateMatchedVars(Transaction *trasn, const std::string &key,
175-
const std::string &value);
176-
static inline void cleanMatchedVars(Transaction *trasn);
177-
178-
std::vector<actions::Action *> getActionsByName(const std::string& name,
179-
Transaction *t);
180-
bool containsTag(const std::string& name, Transaction *t);
181-
bool containsMsg(const std::string& name, Transaction *t);
182-
153+
bool containsBlock,
154+
std::shared_ptr<RuleMessage> ruleMessage,
155+
actions::Action *a,
156+
bool context);
183157

184158
void executeTransformations(
185159
Transaction *trasn, const std::string &value, TransformationResults &ret);
@@ -191,15 +165,22 @@ class Rule : public RuleBase {
191165
std::string *path,
192166
int *nth) const;
193167

168+
void executeActionsIndependentOfChainedRuleResult(Transaction *trasn,
169+
bool *b, std::shared_ptr<RuleMessage> ruleMessage);
170+
void executeActionsAfterFullMatch(Transaction *trasn,
171+
bool containsDisruptive, std::shared_ptr<RuleMessage> ruleMessage);
194172

195-
196-
inline bool isUnconditional() const { return m_operator == NULL; }
173+
std::vector<actions::Action *> getActionsByName(const std::string& name,
174+
Transaction *t);
175+
bool containsTag(const std::string& name, Transaction *t);
176+
bool containsMsg(const std::string& name, Transaction *t);
197177

198178
inline bool isChained() const { return m_isChained == true; }
199179
inline bool hasCaptureAction() const { return m_containsCaptureAction == true; }
200180
inline void setChained(bool b) { m_isChained = b; }
201181
inline bool hasDisruptiveAction() const { return m_disruptiveAction != NULL; }
202-
182+
inline bool hasBlockAction() const { return m_containsStaticBlockAction == true; }
183+
inline bool hasMultimatch() const { return m_containsMultiMatchAction == true; }
203184

204185
inline bool hasLogData() const { return m_logData != NULL; }
205186
std::string logData(Transaction *t);
@@ -208,27 +189,14 @@ class Rule : public RuleBase {
208189
inline bool hasSeverity() const { return m_severity != NULL; }
209190
int severity() const;
210191

211-
std::string getOperatorName() const;
212-
213-
int64_t m_ruleId;
214-
215-
virtual std::string getReference() override {
216-
return std::to_string(m_ruleId);
217-
}
218-
219-
std::unique_ptr<Rule> m_chainedRuleChild;
220-
Rule *m_chainedRuleParent;
221-
222-
std::string m_marker;
223192
std::string m_rev;
224193
std::string m_ver;
225194
int m_accuracy;
226195
int m_maturity;
227196

228-
private:
229-
modsecurity::variables::Variables *m_variables;
230-
operators::Operator *m_operator;
197+
int64_t m_ruleId;
231198

199+
private:
232200
/* actions */
233201
actions::Action *m_disruptiveAction;
234202
actions::LogData *m_logData;
@@ -245,11 +213,51 @@ class Rule : public RuleBase {
245213
bool m_containsMultiMatchAction:1;
246214
bool m_containsStaticBlockAction:1;
247215
bool m_isChained:1;
248-
bool m_isSecMarker:1;
249-
bool m_unconditional:1;
216+
};
217+
218+
219+
class Rule : public RuleWithActions {
220+
public:
221+
Rule(operators::Operator *op,
222+
variables::Variables *variables,
223+
std::vector<actions::Action *> *actions,
224+
Transformations *transformations,
225+
std::unique_ptr<std::string> fileName,
226+
int lineNumber);
227+
228+
virtual ~Rule();
229+
230+
bool evaluate(Transaction *transaction,
231+
std::shared_ptr<RuleMessage> rm) override;
232+
233+
void getVariablesExceptions(Transaction *t,
234+
variables::Variables *exclusion, variables::Variables *addition);
235+
inline void getFinalVars(variables::Variables *vars,
236+
variables::Variables *eclusion, Transaction *trans);
237+
238+
bool executeOperatorAt(Transaction *trasn, const std::string &key,
239+
std::string value, std::shared_ptr<RuleMessage> rm);
240+
241+
static void updateMatchedVars(Transaction *trasn, const std::string &key,
242+
const std::string &value);
243+
static void cleanMatchedVars(Transaction *trasn);
244+
245+
inline bool isUnconditional() const { return m_operator == NULL; }
246+
247+
std::string getOperatorName() const;
250248

249+
virtual std::string getReference() override {
250+
return std::to_string(m_ruleId);
251+
}
251252

253+
std::unique_ptr<Rule> m_chainedRuleChild;
254+
Rule *m_chainedRuleParent;
252255

256+
private:
257+
modsecurity::variables::Variables *m_variables;
258+
operators::Operator *m_operator;
259+
260+
bool m_unconditional:1;
253261
};
254262

255263
} // namespace modsecurity

src/actions/accuracy.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ bool Accuracy::init(std::string *error) {
3939
}
4040

4141

42-
bool Accuracy::evaluate(Rule *rule, Transaction *transaction) {
42+
bool Accuracy::evaluate(RuleWithActions *rule, Transaction *transaction) {
4343
rule->m_accuracy = m_accuracy;
4444
return true;
4545
}

src/actions/accuracy.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class Accuracy : public Action {
3333
: Action(action, ConfigurationKind),
3434
m_accuracy(0) { }
3535

36-
bool evaluate(Rule *rule, Transaction *transaction) override;
36+
bool evaluate(RuleWithActions *rule, Transaction *transaction) override;
3737
bool init(std::string *error) override;
3838

3939
private:

src/actions/action.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ std::string Action::evaluate(const std::string &value,
5151
}
5252

5353

54-
bool Action::evaluate(Rule *rule, Transaction *transaction) {
54+
bool Action::evaluate(RuleWithActions *rule, Transaction *transaction) {
5555
return true;
5656
}
5757

src/actions/audit_log.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace modsecurity {
2727
namespace actions {
2828

2929

30-
bool AuditLog::evaluate(Rule *rule, Transaction *transaction,
30+
bool AuditLog::evaluate(RuleWithActions *rule, Transaction *transaction,
3131
std::shared_ptr<RuleMessage> rm) {
3232
rm->m_noAuditLog = false;
3333
ms_dbg_a(transaction, 9, "Saving transaction to logs");

src/actions/audit_log.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class AuditLog : public Action {
3535
explicit AuditLog(const std::string &action)
3636
: Action(action, RunTimeOnlyIfMatchKind) { }
3737

38-
bool evaluate(Rule *rule, Transaction *transaction,
38+
bool evaluate(RuleWithActions *rule, Transaction *transaction,
3939
std::shared_ptr<RuleMessage> rm) override;
4040
};
4141

src/actions/block.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ namespace modsecurity {
2929
namespace actions {
3030

3131

32-
bool Block::evaluate(Rule *rule, Transaction *transaction,
32+
bool Block::evaluate(RuleWithActions *rule, Transaction *transaction,
3333
std::shared_ptr<RuleMessage> rm) {
3434
ms_dbg_a(transaction, 8, "Marking request as disruptive.");
3535

src/actions/block.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class Block : public Action {
3535
public:
3636
explicit Block(const std::string &action) : Action(action) { }
3737

38-
bool evaluate(Rule *rule, Transaction *transaction,
38+
bool evaluate(RuleWithActions *rule, Transaction *transaction,
3939
std::shared_ptr<RuleMessage> rm) override;
4040
};
4141

src/actions/capture.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace modsecurity {
3232
namespace actions {
3333

3434

35-
bool Capture::evaluate(Rule *rule, Transaction *transaction) {
35+
bool Capture::evaluate(RuleWithActions *rule, Transaction *transaction) {
3636
return true;
3737
}
3838

0 commit comments

Comments
 (0)