]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
pgsql: trigger raw stream reassembly at tx completion 11804/head
authorJuliana Fajardini <jufajardini@oisf.net>
Wed, 17 Jul 2024 20:22:04 +0000 (17:22 -0300)
committerVictor Julien <victor@inliniac.net>
Fri, 20 Sep 2024 09:49:18 +0000 (11:49 +0200)
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

rust/src/pgsql/pgsql.rs

index 8a2b0da157b0e1f90518080d08999a2126cd325a..658c2326ffd5aa3e9e4f6fb1d2c49b6a03d7d516 100644 (file)
@@ -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,
+                                    );
                                 }
                             }
                         }