From 7a6c20b931aaf1c11e20f581b0bf49dce81f7393 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Tue, 12 Feb 2019 16:13:15 -0300 Subject: [PATCH] Lets reserve some memory for rule message --- headers/modsecurity/rule_message.h | 4 +- src/rule_message.cc | 70 +++++++++++++++++------------- 2 files changed, 42 insertions(+), 32 deletions(-) diff --git a/headers/modsecurity/rule_message.h b/headers/modsecurity/rule_message.h index c04ec735..efbf9564 100644 --- a/headers/modsecurity/rule_message.h +++ b/headers/modsecurity/rule_message.h @@ -88,8 +88,8 @@ class RuleMessage { return RuleMessage::log(rm, 0); } - static inline void _details(const RuleMessage *rm, std::string *msg); - static inline void _errorLogTail(const RuleMessage *rm, std::string *msg); + static std::string _details(const RuleMessage *rm); + static std::string _errorLogTail(const RuleMessage *rm); int m_accuracy; std::shared_ptr m_clientIpAddress; diff --git a/src/rule_message.cc b/src/rule_message.cc index 9290243e..519e526d 100644 --- a/src/rule_message.cc +++ b/src/rule_message.cc @@ -23,32 +23,41 @@ namespace modsecurity { -inline void RuleMessage::_details(const RuleMessage *rm, std::string *msg) { - *msg += " [file \"" + std::string(*rm->m_ruleFile.get()) + "\"]" \ - " [line \"" + std::to_string(rm->m_ruleLine) + "\"]" \ - " [id \"" + std::to_string(rm->m_ruleId) + "\"]" \ - " [rev \"" + rm->m_rev + "\"]" \ - " [msg \"" + rm->m_message + "\"]" \ - " [data \"" + rm->m_data + "\"]" \ - " [severity \"" + std::to_string(rm->m_severity) + "\"]" \ - " [ver \"" + rm->m_ver + "\"]" \ - " [maturity \"" + std::to_string(rm->m_maturity) + "\"]" \ - " [accuracy \"" + std::to_string(rm->m_accuracy) + "\"]"; +std::string RuleMessage::_details(const RuleMessage *rm) { + std::string msg; + + msg.append(" [file \"" + std::string(*rm->m_ruleFile.get()) + "\"]"); + msg.append(" [line \"" + std::to_string(rm->m_ruleLine) + "\"]"); + msg.append(" [id \"" + std::to_string(rm->m_ruleId) + "\"]"); + msg.append(" [rev \"" + rm->m_rev + "\"]"); + msg.append(" [msg \"" + rm->m_message + "\"]"); + msg.append(" [data \"" + rm->m_data + "\"]"); + msg.append(" [severity \"" + + std::to_string(rm->m_severity) + "\"]"); + msg.append(" [ver \"" + rm->m_ver + "\"]"); + msg.append(" [maturity \"" + std::to_string(rm->m_maturity) + "\"]"); + msg.append(" [accuracy \"" + std::to_string(rm->m_accuracy) + "\"]"); for (auto &a : rm->m_tags) { - *msg += " [tag \"" + a + "\"]"; + msg.append(" [tag \"" + a + "\"]"); } - *msg += " [hostname \"" + *rm->m_serverIpAddress.get() + "\"]" \ - " [uri \"" + *rm->m_uriNoQueryStringDecoded.get() + "\"]" \ - " [unique_id \"" + *rm->m_id.get() + "\"]" \ - " [ref \"" + rm->m_reference + "\"]"; + msg.append(" [hostname \"" + *rm->m_serverIpAddress.get() \ + + "\"]"); + msg.append(" [uri \"" + *rm->m_uriNoQueryStringDecoded.get() + "\"]"); + msg.append(" [unique_id \"" + *rm->m_id + "\"]"); + msg.append(" [ref \"" + rm->m_reference + "\"]"); + + return msg; } -inline void RuleMessage::_errorLogTail(const RuleMessage *rm, - std::string *msg) { - *msg += " [hostname \"" + *rm->m_serverIpAddress.get() + "\"]" \ - " [uri \"" + *rm->m_uriNoQueryStringDecoded.get() + "\"]" \ - " [unique_id \"" + *rm->m_id.get() + "\"]"; +std::string RuleMessage::_errorLogTail(const RuleMessage *rm) { + std::string msg; + + msg.append("[hostname \"" + *rm->m_serverIpAddress.get() + "\"]"); + msg.append(" [uri \"" + *rm->m_uriNoQueryStringDecoded.get() + "\"]"); + msg.append(" [unique_id \"" + *rm->m_id + "\"]"); + + return msg; } @@ -57,26 +66,27 @@ std::string RuleMessage::log(const RuleMessage *rm, int props, int code) { msg.reserve(2048); if (props & ClientLogMessageInfo) { - msg += "[client " + std::string(*rm->m_clientIpAddress.get()) + "] "; + msg.append("[client " + std::string(*rm->m_clientIpAddress.get()) + "] "); } if (rm->m_isDisruptive) { - msg += "ModSecurity: Access denied with code "; + msg.append("ModSecurity: Access denied with code "); if (code == -1) { - msg += "%d"; + msg.append("%d"); } else { - msg += std::to_string(code); + msg.append(std::to_string(code)); } - msg += " (phase " + std::to_string(rm->m_rule->m_phase - 1) + "). "; + msg.append(" (phase "); + msg.append(std::to_string(rm->m_rule->m_phase - 1) + "). "); } else { - msg += "ModSecurity: Warning. "; + msg.append("ModSecurity: Warning. "); } - msg += (rm->m_match); - _details(rm, &msg); + msg.append(rm->m_match); + msg.append(_details(rm)); if (props & ErrorLogTailLogMessageInfo) { - _errorLogTail(rm, &msg); + msg.append(" " + _errorLogTail(rm)); } return modsecurity::utils::string::toHexIfNeeded(msg);