From: Juliana Fajardini Date: Wed, 17 Jul 2024 20:22:04 +0000 (-0300) Subject: pgsql: trigger raw stream reassembly at tx completion X-Git-Tag: suricata-8.0.0-beta1~868 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b1ad81cf587fb46392d751f740a55139795ec56;p=thirdparty%2Fsuricata.git pgsql: trigger raw stream reassembly at tx completion Once we are tracking tx progress per-direction for PGSQL, we can trigger the raw stream reassembly, for detection purposes, as soon as the transactions are completed in the given direction. Task #7000 --- diff --git a/rust/src/pgsql/pgsql.rs b/rust/src/pgsql/pgsql.rs index 8a2b0da157..658c2326ff 100644 --- a/rust/src/pgsql/pgsql.rs +++ b/rust/src/pgsql/pgsql.rs @@ -344,10 +344,6 @@ impl PgsqlState { ); match PgsqlState::state_based_req_parsing(self.state_progress, start) { Ok((rem, request)) => { - sc_app_layer_parser_trigger_raw_stream_reassembly( - flow, - Direction::ToServer as i32, - ); start = rem; let new_state = PgsqlState::request_next_state(&request); @@ -375,6 +371,10 @@ impl PgsqlState { /* The server won't send any responses to such requests, so transaction should be over */ tx.tx_res_state = PgsqlTxProgress::TxDone; } + sc_app_layer_parser_trigger_raw_stream_reassembly( + flow, + Direction::ToServer as i32, + ); } } } else { @@ -511,10 +511,6 @@ impl PgsqlState { while !start.is_empty() { match PgsqlState::state_based_resp_parsing(self.state_progress, start) { Ok((rem, response)) => { - sc_app_layer_parser_trigger_raw_stream_reassembly( - flow, - Direction::ToClient as i32, - ); start = rem; SCLogDebug!("Response is {:?}", &response); let new_state = self.response_process_next_state(&response, flow); @@ -546,6 +542,10 @@ impl PgsqlState { if Self::response_is_complete(state) { tx.tx_req_state = PgsqlTxProgress::TxDone; tx.tx_res_state = PgsqlTxProgress::TxDone; + sc_app_layer_parser_trigger_raw_stream_reassembly( + flow, + Direction::ToClient as i32, + ); } } }