Skip to content

Commit 99ce977

Browse files
authored
Merge pull request #3253 from eduar-hte/rule-message
Simplified handling of RuleMessage by removing usage of std::shared_ptr
2 parents 9a1155c + 75d31a4 commit 99ce977

Some content is hidden

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

95 files changed

+432
-525
lines changed

build/win32/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,13 @@ endfunction()
171171

172172
# unit tests
173173
file(GLOB unitTestSources ${BASE_DIR}/test/unit/*.cc)
174-
add_executable(unit_tests ${unitTestSources})
174+
add_executable(unit_tests ${unitTestSources} ${BASE_DIR}/test/common/custom_debug_log.cc)
175175
setTestTargetProperties(unit_tests)
176176
target_compile_options(unit_tests PRIVATE /wd4805)
177177

178178
# regression tests
179179
file(GLOB regressionTestsSources ${BASE_DIR}/test/regression/*.cc)
180-
add_executable(regression_tests ${regressionTestsSources})
180+
add_executable(regression_tests ${regressionTestsSources} ${BASE_DIR}/test/common/custom_debug_log.cc)
181181
setTestTargetProperties(regression_tests)
182182

183183
macro(add_regression_test_capability compile_definition flag)

examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,13 +160,13 @@ class ReadingLogsViaRuleMessage {
160160
std::cout << std::endl;
161161
if (ruleMessage->m_isDisruptive) {
162162
std::cout << " * Disruptive action: ";
163-
std::cout << modsecurity::RuleMessage::log(ruleMessage);
163+
std::cout << modsecurity::RuleMessage::log(*ruleMessage);
164164
std::cout << std::endl;
165165
std::cout << " ** %d is meant to be informed by the webserver.";
166166
std::cout << std::endl;
167167
} else {
168168
std::cout << " * Match, but no disruptive action: ";
169-
std::cout << modsecurity::RuleMessage::log(ruleMessage);
169+
std::cout << modsecurity::RuleMessage::log(*ruleMessage);
170170
std::cout << std::endl;
171171
}
172172
}

examples/using_bodies_in_chunks/simple_request.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,13 @@ static void logCb(void *data, const void *ruleMessagev) {
8181
std::cout << std::endl;
8282
if (ruleMessage->m_isDisruptive) {
8383
std::cout << " * Disruptive action: ";
84-
std::cout << modsecurity::RuleMessage::log(ruleMessage);
84+
std::cout << modsecurity::RuleMessage::log(*ruleMessage);
8585
std::cout << std::endl;
8686
std::cout << " ** %d is meant to be informed by the webserver.";
8787
std::cout << std::endl;
8888
} else {
8989
std::cout << " * Match, but no disruptive action: ";
90-
std::cout << modsecurity::RuleMessage::log(ruleMessage);
90+
std::cout << modsecurity::RuleMessage::log(*ruleMessage);
9191
std::cout << std::endl;
9292
}
9393
}

headers/modsecurity/actions/action.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class Action {
8989

9090
virtual bool evaluate(RuleWithActions *rule, Transaction *transaction);
9191
virtual bool evaluate(RuleWithActions *rule, Transaction *transaction,
92-
std::shared_ptr<RuleMessage> ruleMessage) {
92+
RuleMessage &ruleMessage) {
9393
return evaluate(rule, transaction);
9494
}
9595
virtual bool init(std::string *error) { return true; }

headers/modsecurity/modsecurity.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ class ModSecurity {
292292
*/
293293
void setServerLogCb(ModSecLogCb cb, int properties);
294294

295-
void serverLog(void *data, std::shared_ptr<RuleMessage> rm);
295+
void serverLog(void *data, const RuleMessage &rm);
296296

297297
const std::string& getConnectorInformation() const;
298298

headers/modsecurity/rule.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,7 @@ class Rule {
7878

7979
virtual bool evaluate(Transaction *transaction) = 0;
8080

81-
virtual bool evaluate(Transaction *transaction,
82-
std::shared_ptr<RuleMessage> rm) = 0;
81+
virtual bool evaluate(Transaction *transaction, RuleMessage &ruleMessage) = 0;
8382

8483
const std::string& getFileName() const {
8584
return m_fileName;

headers/modsecurity/rule_marker.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ class RuleMarker : public Rule {
4242

4343
RuleMarker &operator=(const RuleMarker &r) = delete;
4444

45-
virtual bool evaluate(Transaction *transaction,
46-
std::shared_ptr<RuleMessage> rm) override {
45+
virtual bool evaluate(Transaction *transaction, RuleMessage &ruleMessage) override {
4746
return evaluate(transaction);
4847
}
4948

headers/modsecurity/rule_message.h

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,6 @@
1313
*
1414
*/
1515

16-
#ifdef __cplusplus
17-
#include <stack>
18-
#include <vector>
19-
#include <string>
20-
#include <list>
21-
#include <cstring>
22-
#endif
23-
2416
#ifndef HEADERS_MODSECURITY_RULE_MESSAGE_H_
2517
#define HEADERS_MODSECURITY_RULE_MESSAGE_H_
2618

@@ -31,8 +23,10 @@
3123

3224
#ifdef __cplusplus
3325

34-
namespace modsecurity {
26+
#include <string>
27+
#include <list>
3528

29+
namespace modsecurity {
3630

3731

3832
class RuleMessage {
@@ -45,43 +39,51 @@ class RuleMessage {
4539
RuleMessage(const RuleWithActions &rule, const Transaction &trans) :
4640
m_rule(rule),
4741
m_transaction(trans)
48-
{ }
42+
{
43+
reset(true);
44+
}
4945

5046
RuleMessage(const RuleMessage &ruleMessage) = default;
5147
RuleMessage &operator=(const RuleMessage &ruleMessage) = delete;
5248

53-
void clean() {
54-
m_data = "";
55-
m_match = "";
49+
void reset(const bool resetSaveMessage)
50+
{
51+
m_data.clear();
5652
m_isDisruptive = false;
57-
m_reference = "";
53+
m_match.clear();
54+
m_message.clear();
55+
m_noAuditLog = false;
56+
m_reference.clear();
57+
if (resetSaveMessage == true)
58+
m_saveMessage = true;
5859
m_severity = 0;
60+
m_tags.clear();
5961
}
6062

61-
std::string log() {
62-
return log(this, 0);
63+
std::string log() const {
64+
return log(*this, 0);
6365
}
64-
std::string log(int props) {
65-
return log(this, props);
66+
std::string log(int props) const {
67+
return log(*this, props);
6668
}
67-
std::string log(int props, int responseCode) {
68-
return log(this, props, responseCode);
69+
std::string log(int props, int responseCode) const {
70+
return log(*this, props, responseCode);
6971
}
70-
std::string errorLog() {
71-
return log(this,
72-
ClientLogMessageInfo | ErrorLogTailLogMessageInfo);
72+
std::string errorLog() const {
73+
return log(*this,
74+
ClientLogMessageInfo | ErrorLogTailLogMessageInfo);
7375
}
7476

75-
static std::string log(const RuleMessage *rm, int props, int code);
76-
static std::string log(const RuleMessage *rm, int props) {
77+
static std::string log(const RuleMessage &rm, int props, int code);
78+
static std::string log(const RuleMessage &rm, int props) {
7779
return log(rm, props, -1);
7880
}
79-
static std::string log(const RuleMessage *rm) {
81+
static std::string log(const RuleMessage &rm) {
8082
return log(rm, 0);
8183
}
8284

83-
static std::string _details(const RuleMessage *rm);
84-
static std::string _errorLogTail(const RuleMessage *rm);
85+
static std::string _details(const RuleMessage &rm);
86+
static std::string _errorLogTail(const RuleMessage &rm);
8587

8688
int getPhase() const { return m_rule.getPhase() - 1; }
8789

headers/modsecurity/rule_unconditional.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class RuleUnconditional : public RuleWithActions {
3636
public:
3737
using RuleWithActions::RuleWithActions;
3838

39-
virtual bool evaluate(Transaction *transaction, std::shared_ptr<RuleMessage> ruleMessage) override;
39+
virtual bool evaluate(Transaction *transaction, RuleMessage &ruleMessage) override;
4040
};
4141

4242

headers/modsecurity/rule_with_actions.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,21 @@ class RuleWithActions : public Rule {
5151

5252
virtual bool evaluate(Transaction *transaction) override;
5353

54-
virtual bool evaluate(Transaction *transaction, std::shared_ptr<RuleMessage> ruleMessage) override;
54+
virtual bool evaluate(Transaction *transaction, RuleMessage &ruleMessage) override;
5555

5656
void executeActionsIndependentOfChainedRuleResult(
5757
Transaction *trasn,
5858
bool *containsDisruptive,
59-
std::shared_ptr<RuleMessage> ruleMessage);
59+
RuleMessage &ruleMessage);
6060

6161
void executeActionsAfterFullMatch(
6262
Transaction *trasn,
6363
bool containsDisruptive,
64-
std::shared_ptr<RuleMessage> ruleMessage);
64+
RuleMessage &ruleMessage);
6565

6666
void executeAction(Transaction *trans,
6767
bool containsBlock,
68-
std::shared_ptr<RuleMessage> ruleMessage,
68+
RuleMessage &ruleMessage,
6969
actions::Action *a,
7070
bool context);
7171

@@ -74,7 +74,7 @@ class RuleWithActions : public Rule {
7474
const Transaction *trasn, const std::string &value, TransformationResults &ret);
7575

7676
void performLogging(Transaction *trans,
77-
std::shared_ptr<RuleMessage> ruleMessage,
77+
RuleMessage &ruleMessage,
7878
bool lastLog = true,
7979
bool chainedParentNull = false) const;
8080

0 commit comments

Comments
 (0)