From 37c0de363edfc46ed36445c5ce20c3f219424c77 Mon Sep 17 00:00:00 2001 From: Jakub Onderka Date: Tue, 22 Apr 2025 19:31:36 +0200 Subject: [PATCH] Simplify code for JSON audit log --- headers/modsecurity/rules_set_properties.h | 4 +- headers/modsecurity/transaction.h | 7 ++- src/transaction.cc | 58 +++++++++++----------- 3 files changed, 34 insertions(+), 35 deletions(-) diff --git a/headers/modsecurity/rules_set_properties.h b/headers/modsecurity/rules_set_properties.h index 386a252d..c88bd1e5 100644 --- a/headers/modsecurity/rules_set_properties.h +++ b/headers/modsecurity/rules_set_properties.h @@ -311,7 +311,7 @@ class RulesSetProperties { }; - static const char *ruleEngineStateString(RuleEngine i) { + static std::string ruleEngineStateString(RuleEngine i) { switch (i) { case DisabledRuleEngine: return "Disabled"; @@ -322,7 +322,7 @@ class RulesSetProperties { case PropertyNotSetRuleEngine: return "PropertyNotSet/DetectionOnly"; } - return NULL; + return std::string{}; } diff --git a/headers/modsecurity/transaction.h b/headers/modsecurity/transaction.h index f294c246..58e8d59f 100644 --- a/headers/modsecurity/transaction.h +++ b/headers/modsecurity/transaction.h @@ -80,15 +80,14 @@ typedef struct Rules_t RulesSet; #define LOGFY_ADD(a, b) \ yajl_gen_string(g, reinterpret_cast(a), strlen(a)); \ - if (b == NULL) { \ + if (b.data() == NULL) { \ yajl_gen_string(g, reinterpret_cast(""), \ strlen("")); \ } else { \ - yajl_gen_string(g, reinterpret_cast(b), \ - strlen(b)); \ + yajl_gen_string(g, reinterpret_cast(b.data()), \ + b.length()); \ } - #define LOGFY_ADD_INT(a, b) \ yajl_gen_string(g, reinterpret_cast(a), strlen(a)); \ yajl_gen_number(g, reinterpret_cast(b), strlen(b)); diff --git a/src/transaction.cc b/src/transaction.cc index 85a0c4a2..3a790153 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -1564,7 +1564,7 @@ std::string Transaction::toJSON(int parts) { size_t len; yajl_gen g; std::string log; - std::string ts = utils::string::ascTime(&m_timeStamp).c_str(); + std::string ts = utils::string::ascTime(&m_timeStamp); std::string uniqueId = UniqueId::uniqueId(); g = yajl_gen_alloc(NULL); @@ -1582,13 +1582,13 @@ std::string Transaction::toJSON(int parts) { yajl_gen_map_open(g); /* Part: A (header mandatory) */ - LOGFY_ADD("client_ip", m_clientIpAddress.c_str()); - LOGFY_ADD("time_stamp", ts.c_str()); - LOGFY_ADD("server_id", uniqueId.c_str()); + LOGFY_ADD("client_ip", m_clientIpAddress); + LOGFY_ADD("time_stamp", ts); + LOGFY_ADD("server_id", uniqueId); LOGFY_ADD_NUM("client_port", m_clientPort); - LOGFY_ADD("host_ip", m_serverIpAddress.c_str()); + LOGFY_ADD("host_ip", m_serverIpAddress); LOGFY_ADD_NUM("host_port", m_serverPort); - LOGFY_ADD("unique_id", m_id.c_str()); + LOGFY_ADD("unique_id", m_id); /* request */ yajl_gen_string(g, reinterpret_cast("request"), @@ -1597,14 +1597,14 @@ std::string Transaction::toJSON(int parts) { LOGFY_ADD("method", utils::string::dash_if_empty( - m_variableRequestMethod.evaluate()).c_str()); + m_variableRequestMethod.evaluate())); LOGFY_ADD_INT("http_version", m_httpVersion.c_str()); - LOGFY_ADD("uri", this->m_uri.c_str()); + LOGFY_ADD("uri", this->m_uri); if (parts & audit_log::AuditLog::CAuditLogPart) { // FIXME: check for the binary content size. - LOGFY_ADD("body", this->m_requestBody.str().c_str()); + LOGFY_ADD("body", this->m_requestBody.str()); } /* request headers */ @@ -1616,7 +1616,7 @@ std::string Transaction::toJSON(int parts) { m_variableRequestHeaders.resolve(&l); for (auto &h : l) { - LOGFY_ADD(h->getKey().c_str(), h->getValue().c_str()); + LOGFY_ADD(h->getKey().c_str(), h->getValue()); delete h; } @@ -1633,7 +1633,7 @@ std::string Transaction::toJSON(int parts) { yajl_gen_map_open(g); if (parts & audit_log::AuditLog::EAuditLogPart) { - LOGFY_ADD("body", this->m_responseBody.str().c_str()); + LOGFY_ADD("body", this->m_responseBody.str()); } LOGFY_ADD_NUM("http_code", m_httpCodeReturned); @@ -1646,7 +1646,7 @@ std::string Transaction::toJSON(int parts) { m_variableResponseHeaders.resolve(&l); for (auto &h : l) { - LOGFY_ADD(h->getKey().c_str(), h->getValue().c_str()); + LOGFY_ADD(h->getKey().c_str(), h->getValue()); delete h; } @@ -1663,10 +1663,10 @@ std::string Transaction::toJSON(int parts) { yajl_gen_map_open(g); /* producer > libmodsecurity */ - LOGFY_ADD("modsecurity", m_ms->whoAmI().c_str()); + LOGFY_ADD("modsecurity", m_ms->whoAmI()); /* producer > connector */ - LOGFY_ADD("connector", m_ms->getConnectorInformation().c_str()); + LOGFY_ADD("connector", m_ms->getConnectorInformation()); /* producer > engine state */ LOGFY_ADD("secrules_engine", @@ -1682,7 +1682,7 @@ std::string Transaction::toJSON(int parts) { for (const auto &a : m_rules->m_components) { yajl_gen_string(g, reinterpret_cast - (a.c_str()), a.length()); + (a.data()), a.length()); } yajl_gen_array_close(g); @@ -1696,20 +1696,20 @@ std::string Transaction::toJSON(int parts) { yajl_gen_array_open(g); for (auto a : m_rulesMessages) { yajl_gen_map_open(g); - LOGFY_ADD("message", a.m_message.c_str()); + LOGFY_ADD("message", a.m_message); yajl_gen_string(g, reinterpret_cast("details"), strlen("details")); yajl_gen_map_open(g); - LOGFY_ADD("match", a.m_match.c_str()); - LOGFY_ADD("reference", a.m_reference.c_str()); - LOGFY_ADD("ruleId", std::to_string(a.m_rule.m_ruleId).c_str()); - LOGFY_ADD("file", a.m_rule.getFileName().c_str()); - LOGFY_ADD("lineNumber", std::to_string(a.m_rule.getLineNumber()).c_str()); - LOGFY_ADD("data", a.m_data.c_str()); - LOGFY_ADD("severity", std::to_string(a.m_severity).c_str()); - LOGFY_ADD("ver", a.m_rule.m_ver.c_str()); - LOGFY_ADD("rev", a.m_rule.m_rev.c_str()); + LOGFY_ADD("match", a.m_match); + LOGFY_ADD("reference", a.m_reference); + LOGFY_ADD("ruleId", std::to_string(a.m_rule.m_ruleId)); + LOGFY_ADD("file", a.m_rule.getFileName()); + LOGFY_ADD("lineNumber", std::to_string(a.m_rule.getLineNumber())); + LOGFY_ADD("data", a.m_data); + LOGFY_ADD("severity", std::to_string(a.m_severity)); + LOGFY_ADD("ver", a.m_rule.m_ver); + LOGFY_ADD("rev", a.m_rule.m_rev); yajl_gen_string(g, reinterpret_cast("tags"), @@ -1717,13 +1717,13 @@ std::string Transaction::toJSON(int parts) { yajl_gen_array_open(g); for (auto b : a.m_tags) { yajl_gen_string(g, - reinterpret_cast(b.c_str()), - strlen(b.c_str())); + reinterpret_cast(b.data()), + b.length()); } yajl_gen_array_close(g); - LOGFY_ADD("maturity", std::to_string(a.m_rule.m_maturity).c_str()); - LOGFY_ADD("accuracy", std::to_string(a.m_rule.m_accuracy).c_str()); + LOGFY_ADD("maturity", std::to_string(a.m_rule.m_maturity)); + LOGFY_ADD("accuracy", std::to_string(a.m_rule.m_accuracy)); yajl_gen_map_close(g); yajl_gen_map_close(g); }