diff --git a/headers/modsecurity/transaction.h b/headers/modsecurity/transaction.h index 1f4646f1..aa1fa975 100644 --- a/headers/modsecurity/transaction.h +++ b/headers/modsecurity/transaction.h @@ -308,7 +308,7 @@ class Transaction { * of the actions: `log_data' and `msg'. These should be included on the * auditlogs. */ - std::list m_rulesMessages; + std::list m_rulesMessages; /** * Holds the request body, in case of any. diff --git a/src/rule.cc b/src/rule.cc index 2a2b337b..f26f34d7 100644 --- a/src/rule.cc +++ b/src/rule.cc @@ -623,6 +623,9 @@ end_exec: for (const auto &u : ruleMessage.m_server_logs) { trasn->serverLog(u); } + if (ruleMessage.m_server_logs.size() > 0) { + trasn->m_rulesMessages.push_back(ruleMessage); + } while (finalVars.empty() == false) { auto *a = finalVars.back(); diff --git a/src/transaction.cc b/src/transaction.cc index 5b7ce8e1..7e855dcb 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -172,9 +172,6 @@ Transaction::~Transaction() { m_requestBody.str(std::string()); m_requestBody.clear(); - for (auto *a : m_rulesMessages) { - delete a; - } m_rulesMessages.clear(); m_rules->decrementReferenceCount(); @@ -1504,7 +1501,8 @@ std::string Transaction::toJSON(int parts) { m_collections.m_transient->resolveMultiMatches("REQUEST_HEADERS", &l); for (auto h : l) { - LOGFY_ADD(h->m_key.c_str(), h->m_value.c_str()); + size_t pos = strlen("REQUEST_HEADERS:"); + LOGFY_ADD(h->m_key.c_str() + pos, h->m_value.c_str()); delete h; } @@ -1534,7 +1532,8 @@ std::string Transaction::toJSON(int parts) { m_collections.m_transient->resolveMultiMatches("RESPONSE_HEADERS", &l); for (auto h : l) { - LOGFY_ADD(h->m_key.c_str(), h->m_value.c_str()); + size_t pos = strlen("RESPONSE_HEADERS:"); + LOGFY_ADD(h->m_key.c_str() + pos, h->m_value.c_str()); delete h; } @@ -1583,34 +1582,36 @@ 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.c_str()); +#if 1 yajl_gen_string(g, - reinterpret_cast("producer"), - strlen("producer")); + reinterpret_cast("details"), + strlen("details")); yajl_gen_map_open(g); - LOGFY_ADD("match", a->m_match.c_str()); - LOGFY_ADD("ruleId", std::to_string(a->m_ruleId).c_str()); - LOGFY_ADD("file", a->m_ruleFile.c_str()); - LOGFY_ADD("lineNumber", std::to_string(a->m_ruleLine).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_ver.c_str()); - LOGFY_ADD("rev", a->m_rev.c_str()); + LOGFY_ADD("match", a.m_match.c_str()); + LOGFY_ADD("ruleId", std::to_string(a.m_ruleId).c_str()); + LOGFY_ADD("file", a.m_ruleFile.c_str()); + LOGFY_ADD("lineNumber", std::to_string(a.m_ruleLine).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_ver.c_str()); + LOGFY_ADD("rev", a.m_rev.c_str()); yajl_gen_string(g, reinterpret_cast("tags"), strlen("tags")); yajl_gen_array_open(g); - for (auto b : a->m_tags) { + for (auto b : a.m_tags) { yajl_gen_string(g, reinterpret_cast(b.c_str()), strlen(b.c_str())); } yajl_gen_array_close(g); - LOGFY_ADD("maturity", std::to_string(a->m_maturity).c_str()); - LOGFY_ADD("accuracy", std::to_string(a->m_accuracy).c_str()); + LOGFY_ADD("maturity", std::to_string(a.m_maturity).c_str()); + LOGFY_ADD("accuracy", std::to_string(a.m_accuracy).c_str()); yajl_gen_map_close(g); +#endif yajl_gen_map_close(g); } yajl_gen_array_close(g);