|
23 | 23 | namespace modsecurity {
|
24 | 24 |
|
25 | 25 |
|
26 |
| -std::string RuleMessage::_details(const RuleMessage *rm) { |
27 |
| - std::string msg; |
28 |
| - |
29 |
| - msg.append(" [file \"" + std::string(*rm->m_ruleFile.get()) + "\"]"); |
30 |
| - msg.append(" [line \"" + std::to_string(rm->m_ruleLine) + "\"]"); |
31 |
| - msg.append(" [id \"" + std::to_string(rm->m_ruleId) + "\"]"); |
32 |
| - msg.append(" [rev \"" + rm->m_rev + "\"]"); |
33 |
| - msg.append(" [msg \"" + rm->m_message + "\"]"); |
34 |
| - msg.append(" [data \"" + utils::string::limitTo(200, rm->m_data) + "\"]"); |
35 |
| - msg.append(" [severity \"" + |
36 |
| - std::to_string(rm->m_severity) + "\"]"); |
37 |
| - msg.append(" [ver \"" + rm->m_ver + "\"]"); |
38 |
| - msg.append(" [maturity \"" + std::to_string(rm->m_maturity) + "\"]"); |
39 |
| - msg.append(" [accuracy \"" + std::to_string(rm->m_accuracy) + "\"]"); |
| 26 | +inline void RuleMessage::_details(const RuleMessage *rm, std::string *msg) { |
| 27 | + *msg += " [file \"" + std::string(*rm->m_ruleFile.get()) + "\"]" \ |
| 28 | + " [line \"" + std::to_string(rm->m_ruleLine) + "\"]" \ |
| 29 | + " [id \"" + std::to_string(rm->m_ruleId) + "\"]" \ |
| 30 | + " [rev \"" + rm->m_rev + "\"]" \ |
| 31 | + " [msg \"" + rm->m_message + "\"]" \ |
| 32 | + " [data \"" + utils::string::limitTo(200, rm->m_data) + "\"]" \ |
| 33 | + " [severity \"" + std::to_string(rm->m_severity) + "\"]" \ |
| 34 | + " [ver \"" + rm->m_ver + "\"]" \ |
| 35 | + " [maturity \"" + std::to_string(rm->m_maturity) + "\"]" \ |
| 36 | + " [accuracy \"" + std::to_string(rm->m_accuracy) + "\"]"; |
| 37 | + |
40 | 38 | for (auto &a : rm->m_tags) {
|
41 |
| - msg.append(" [tag \"" + a + "\"]"); |
| 39 | + *msg += " [tag \"" + a + "\"]"; |
42 | 40 | }
|
43 |
| - msg.append(" [hostname \"" + *rm->m_serverIpAddress.get() \ |
44 |
| - + "\"]"); |
45 |
| - msg.append(" [uri \"" + utils::string::limitTo(200, *rm->m_uriNoQueryStringDecoded.get()) + "\"]"); |
46 |
| - msg.append(" [unique_id \"" + rm->m_id + "\"]"); |
47 |
| - msg.append(" [ref \"" + utils::string::limitTo(200, rm->m_reference) + "\"]"); |
48 | 41 |
|
49 |
| - return msg; |
| 42 | + *msg += " [hostname \"" + *rm->m_serverIpAddress.get() + "\"]" \ |
| 43 | + " [uri \"" + *rm->m_uriNoQueryStringDecoded.get() + "\"]" \ |
| 44 | + " [unique_id \"" + *rm->m_id.get() + "\"]" \ |
| 45 | + " [ref \"" + utils::string::limitTo(200, rm->m_reference) + "\"]"; |
50 | 46 | }
|
51 | 47 |
|
52 | 48 |
|
53 |
| -std::string RuleMessage::_errorLogTail(const RuleMessage *rm) { |
54 |
| - std::string msg; |
55 |
| - |
56 |
| - msg.append("[hostname \"" + *rm->m_serverIpAddress.get() + "\"]"); |
57 |
| - msg.append(" [uri \"" + utils::string::limitTo(200, *rm->m_uriNoQueryStringDecoded.get()) + "\"]"); |
58 |
| - msg.append(" [unique_id \"" + rm->m_id + "\"]"); |
59 |
| - |
60 |
| - return msg; |
| 49 | +inline void RuleMessage::_errorLogTail(const RuleMessage *rm, |
| 50 | + std::string *msg) { |
| 51 | + *msg += " [hostname \"" + *rm->m_serverIpAddress.get() + "\"]" \ |
| 52 | + " [uri \"" + utils::string::limitTo(200, |
| 53 | + *rm->m_uriNoQueryStringDecoded.get()) + "\"]" \ |
| 54 | + " [unique_id \"" + *rm->m_id.get() + "\"]"; |
61 | 55 | }
|
62 | 56 |
|
63 | 57 |
|
64 | 58 | std::string RuleMessage::log(const RuleMessage *rm, int props, int code) {
|
65 | 59 | std::string msg("");
|
| 60 | + msg.reserve(2048); |
66 | 61 |
|
67 | 62 | if (props & ClientLogMessageInfo) {
|
68 |
| - msg.append("[client " + std::string(*rm->m_clientIpAddress.get()) + "] "); |
| 63 | + msg += "[client " + std::string(*rm->m_clientIpAddress.get()) + "] "; |
69 | 64 | }
|
70 | 65 |
|
71 | 66 | if (rm->m_isDisruptive) {
|
72 |
| - msg.append("ModSecurity: Access denied with code "); |
| 67 | + msg += "ModSecurity: Access denied with code "; |
73 | 68 | if (code == -1) {
|
74 |
| - msg.append("%d"); |
| 69 | + msg += "%d"; |
75 | 70 | } else {
|
76 |
| - msg.append(std::to_string(code)); |
| 71 | + msg += std::to_string(code); |
77 | 72 | }
|
78 |
| - msg.append(" (phase "); |
79 |
| - msg.append(std::to_string(rm->m_rule->m_phase - 1) + "). "); |
| 73 | + msg += " (phase " + std::to_string(rm->m_rule->m_phase - 1) + "). "; |
80 | 74 | } else {
|
81 |
| - msg.append("ModSecurity: Warning. "); |
| 75 | + msg += "ModSecurity: Warning. "; |
82 | 76 | }
|
83 | 77 |
|
84 |
| - msg.append(rm->m_match); |
85 |
| - msg.append(_details(rm)); |
| 78 | + msg += (rm->m_match); |
| 79 | + _details(rm, &msg); |
86 | 80 |
|
87 | 81 | if (props & ErrorLogTailLogMessageInfo) {
|
88 |
| - msg.append(" " + _errorLogTail(rm)); |
| 82 | + _errorLogTail(rm, &msg); |
89 | 83 | }
|
90 | 84 |
|
91 | 85 | return modsecurity::utils::string::toHexIfNeeded(msg);
|
|
0 commit comments