@@ -102,90 +102,23 @@ namespace modsecurity {
102102 * @endcode
103103 *
104104 */
105- Transaction::Transaction (ModSecurity *ms, RulesSet *rules, void *logCbData)
106- : m_creationTimeStamp(utils::cpu_seconds()),
107- m_clientIpAddress (" " ),
108- m_httpVersion(" " ),
109- m_serverIpAddress(" " ),
110- m_requestHostName(" " ),
111- m_uri(" " ),
112- m_uri_no_query_string_decoded(" " ),
113- m_ARGScombinedSizeDouble(0 ),
114- m_clientPort(0 ),
115- m_highestSeverityAction(255 ),
116- m_httpCodeReturned(200 ),
117- m_serverPort(0 ),
118- m_ms(ms),
119- m_requestBodyType(UnknownFormat),
120- m_requestBodyProcessor(UnknownFormat),
121- m_rules(rules),
122- m_ruleRemoveById(),
123- m_ruleRemoveByIdRange(),
124- m_ruleRemoveByTag(),
125- m_ruleRemoveTargetByTag(),
126- m_ruleRemoveTargetById(),
127- m_requestBodyAccess(RulesSet::PropertyNotSetConfigBoolean),
128- m_auditLogModifier(),
129- m_ctlAuditEngine(AuditLog::AuditLogStatus::NotSetLogStatus),
130- m_rulesMessages(),
131- m_requestBody(),
132- m_responseBody(),
133- /* m_id(), */
134- m_skip_next(0 ),
135- m_allowType(modsecurity::actions::disruptive::NoneAllowType),
136- m_uri_decoded(" " ),
137- m_actions(),
138- m_it(),
139- m_timeStamp(std::time(NULL )),
140- m_collections(ms->m_global_collection, ms->m_ip_collection,
141- ms->m_session_collection, ms->m_user_collection,
142- ms->m_resource_collection),
143- m_matched(),
144- #ifdef WITH_LIBXML2
145- m_xml (new RequestBodyProcessor::XML(this )),
146- #else
147- m_xml (NULL ),
148- #endif
149- #ifdef WITH_YAJL
150- m_json (new RequestBodyProcessor::JSON(this )),
151- #else
152- m_json (NULL ),
153- #endif
154- m_secRuleEngine (RulesSetProperties::PropertyNotSetRuleEngine),
155- m_variableDuration(" " ),
156- m_variableEnvs(),
157- m_variableHighestSeverityAction(" " ),
158- m_variableRemoteUser(" " ),
159- m_variableTime(" " ),
160- m_variableTimeDay(" " ),
161- m_variableTimeEpoch(" " ),
162- m_variableTimeHour(" " ),
163- m_variableTimeMin(" " ),
164- m_variableTimeSec(" " ),
165- m_variableTimeWDay(" " ),
166- m_variableTimeYear(" " ),
167- m_logCbData(logCbData),
168- TransactionAnchoredVariables(this ) {
169- m_id = std::to_string (m_timeStamp) +
170- std::to_string (modsecurity::utils::generate_transaction_unique_id ());
171105
172- m_variableUrlEncodedError.set (" 0" , 0 );
173- m_variableMscPcreError.set (" 0" , 0 );
174- m_variableMscPcreLimitsExceeded.set (" 0" , 0 );
106+ static std::string get_id (const char *id, const time_t timestamp) {
107+ return (id == nullptr ) ?
108+ std::to_string (timestamp) +
109+ std::to_string (modsecurity::utils::generate_transaction_unique_id ())
110+ : id;
111+ }
175112
176- ms_dbg (4 , " Initializing transaction" );
113+ Transaction::Transaction (ModSecurity *ms, RulesSet *rules, void *logCbData)
114+ : Transaction(ms, rules, nullptr , logCbData) { }
177115
178- intervention::clean (&m_it);
179- }
116+ Transaction::Transaction (ModSecurity *ms, RulesSet *rules, const char *id, void *logCbData)
117+ : Transaction(ms, rules, id, logCbData, std::time( nullptr )) { }
180118
181- Transaction::Transaction (ModSecurity *ms, RulesSet *rules, char *id, void *logCbData)
119+ Transaction::Transaction (ModSecurity *ms, RulesSet *rules, const char *id,
120+ void *logCbData, const time_t timestamp)
182121 : m_creationTimeStamp(utils::cpu_seconds()),
183- m_clientIpAddress(" " ),
184- m_httpVersion(" " ),
185- m_serverIpAddress(" " ),
186- m_requestHostName(" " ),
187- m_uri(" " ),
188- m_uri_no_query_string_decoded(" " ),
189122 m_ARGScombinedSizeDouble (0 ),
190123 m_clientPort(0 ),
191124 m_highestSeverityAction(255 ),
@@ -195,54 +128,28 @@ Transaction::Transaction(ModSecurity *ms, RulesSet *rules, char *id, void *logCb
195128 m_requestBodyType(UnknownFormat),
196129 m_requestBodyProcessor(UnknownFormat),
197130 m_rules(rules),
198- m_ruleRemoveById(),
199- m_ruleRemoveByIdRange(),
200- m_ruleRemoveByTag(),
201- m_ruleRemoveTargetByTag(),
202- m_ruleRemoveTargetById(),
203131 m_requestBodyAccess(RulesSet::PropertyNotSetConfigBoolean),
204- m_auditLogModifier(),
205132 m_ctlAuditEngine(AuditLog::AuditLogStatus::NotSetLogStatus),
206- m_rulesMessages(),
207- m_requestBody(),
208- m_responseBody(),
209- m_id(id),
133+ m_id(get_id(id, timestamp)),
210134 m_skip_next(0 ),
211135 m_allowType(modsecurity::actions::disruptive::NoneAllowType),
212- m_uri_decoded(" " ),
213- m_actions(),
214- m_it(),
215- m_timeStamp(std::time(NULL )),
136+ m_timeStamp(timestamp),
216137 m_collections(ms->m_global_collection, ms->m_ip_collection,
217138 ms->m_session_collection, ms->m_user_collection,
218139 ms->m_resource_collection),
219- m_matched(),
220140#ifdef WITH_LIBXML2
221141 m_xml (new RequestBodyProcessor::XML(this )),
222142#else
223- m_xml (NULL ),
143+ m_xml (nullptr ),
224144#endif
225145#ifdef WITH_YAJL
226146 m_json (new RequestBodyProcessor::JSON(this )),
227147#else
228- m_json (NULL ),
148+ m_json (nullptr ),
229149#endif
230150 m_secRuleEngine (RulesSetProperties::PropertyNotSetRuleEngine),
231- m_variableDuration(" " ),
232- m_variableEnvs(),
233- m_variableHighestSeverityAction(" " ),
234- m_variableRemoteUser(" " ),
235- m_variableTime(" " ),
236- m_variableTimeDay(" " ),
237- m_variableTimeEpoch(" " ),
238- m_variableTimeHour(" " ),
239- m_variableTimeMin(" " ),
240- m_variableTimeSec(" " ),
241- m_variableTimeWDay(" " ),
242- m_variableTimeYear(" " ),
243151 m_logCbData(logCbData),
244152 TransactionAnchoredVariables(this ) {
245-
246153 m_variableUrlEncodedError.set (" 0" , 0 );
247154 m_variableMscPcreError.set (" 0" , 0 );
248155 m_variableMscPcreLimitsExceeded.set (" 0" , 0 );
@@ -1904,7 +1811,7 @@ extern "C" Transaction *msc_new_transaction(ModSecurity *ms,
19041811 return new Transaction (ms, rules, logCbData);
19051812}
19061813extern " C" Transaction *msc_new_transaction_with_id (ModSecurity *ms,
1907- RulesSet *rules, char *id, void *logCbData) {
1814+ RulesSet *rules, const char *id, void *logCbData) {
19081815 return new Transaction (ms, rules, id, logCbData);
19091816}
19101817
0 commit comments