Skip to content

Commit 4dd2812

Browse files
author
Felipe Zimmerle
committed
Adds new transaction constructor that accepts the transaction id as parameter.
1 parent c721e10 commit 4dd2812

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

CHANGES

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
v3.0.3 - YYYY-MMM-DD (to be released)
22
-------------------------------------
33

4+
- Adds new transaction constructor that accepts the transaction id
5+
as parameter.
6+
[Issue #1627 - @defanator, @zimmerle]
47
- Adds request IDs and URIs to the debug log
58
[Issue #1627 - @defanator, @zimmerle]
69
- Treating variables exception on load-time instead of run time.

headers/modsecurity/transaction.h

+6
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,8 @@ class TransactionAnchoredVariables {
267267
class Transaction : public TransactionAnchoredVariables {
268268
public:
269269
Transaction(ModSecurity *transaction, Rules *rules, void *logCbData);
270+
Transaction(ModSecurity *transaction, Rules *rules, char *id,
271+
void *logCbData);
270272
~Transaction();
271273

272274
/** TODO: Should be an structure that fits an IP address */
@@ -577,6 +579,10 @@ extern "C" {
577579
Transaction *msc_new_transaction(ModSecurity *ms,
578580
Rules *rules, void *logCbData);
579581

582+
/** @ingroup ModSecurity_C_API */
583+
Transaction *msc_new_transaction_with_id(ModSecurity *ms,
584+
Rules *rules, char *id, void *logCbData);
585+
580586
/** @ingroup ModSecurity_C_API */
581587
int msc_process_connection(Transaction *transaction,
582588
const char *client, int cPort, const char *server, int sPort);

src/transaction.cc

+49-1
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,51 @@ Transaction::Transaction(ModSecurity *ms, Rules *rules, void *logCbData)
145145
intervention::clean(&m_it);
146146
}
147147

148+
Transaction::Transaction(ModSecurity *ms, Rules *rules, char *id, void *logCbData)
149+
: m_clientPort(0),
150+
m_serverPort(0),
151+
m_uri_no_query_string_decoded(""),
152+
m_rules(rules),
153+
m_timeStamp(std::time(NULL)),
154+
m_httpCodeReturned(200),
155+
m_highestSeverityAction(255),
156+
m_ARGScombinedSizeDouble(0),
157+
m_requestBodyType(UnknownFormat),
158+
m_requestBodyProcessor(UnknownFormat),
159+
m_requestBodyAccess(Rules::PropertyNotSetConfigBoolean),
160+
m_marker(""),
161+
m_allowType(modsecurity::actions::disruptive::NoneAllowType),
162+
m_skip_next(0),
163+
m_creationTimeStamp(utils::cpu_seconds()),
164+
m_logCbData(logCbData),
165+
m_ms(ms),
166+
m_secRuleEngine(RulesProperties::PropertyNotSetRuleEngine),
167+
m_collections(ms->m_global_collection, ms->m_ip_collection,
168+
ms->m_session_collection, ms->m_user_collection,
169+
ms->m_resource_collection),
170+
#ifdef WITH_YAJL
171+
m_json(new RequestBodyProcessor::JSON(this)),
172+
#else
173+
m_json(NULL),
174+
#endif
175+
#ifdef WITH_LIBXML2
176+
m_xml(new RequestBodyProcessor::XML(this)),
177+
#else
178+
m_xml(NULL),
179+
#endif
180+
TransactionAnchoredVariables(this) {
181+
m_id = std::string(id);
182+
m_rules->incrementReferenceCount();
183+
184+
m_variableUrlEncodedError.set("0", 0);
185+
186+
#ifndef NO_LOGS
187+
this->debug(4, "Initializing transaction");
188+
#endif
189+
190+
intervention::clean(&m_it);
191+
}
192+
148193

149194
Transaction::~Transaction() {
150195
m_responseBody.str(std::string());
@@ -1795,7 +1840,10 @@ extern "C" Transaction *msc_new_transaction(ModSecurity *ms,
17951840
Rules *rules, void *logCbData) {
17961841
return new Transaction(ms, rules, logCbData);
17971842
}
1798-
1843+
extern "C" Transaction *msc_new_transaction_with_id(ModSecurity *ms,
1844+
Rules *rules, char *id, void *logCbData) {
1845+
return new Transaction(ms, rules, id, logCbData);
1846+
}
17991847

18001848
/**
18011849
* @name msc_process_connection

0 commit comments

Comments
 (0)