]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
nfs: file handling cleanups
authorVictor Julien <vjulien@oisf.net>
Fri, 20 Jan 2023 14:27:42 +0000 (15:27 +0100)
committerVictor Julien <vjulien@oisf.net>
Mon, 23 Jan 2023 08:17:26 +0000 (09:17 +0100)
rust/src/nfs/nfs.rs
rust/src/nfs/nfs3.rs
rust/src/nfs/nfs4.rs

index 21dd0dd5d248097e9dd33cafdea36b7986e5915a..f6d76ec1892f86665cad7b48202e1003e6d3aa87 100644 (file)
@@ -295,14 +295,31 @@ pub fn filetracker_newchunk(ft: &mut FileTransferTracker, files: &mut FileContai
         flags: u16, name: &[u8], data: &[u8],
         chunk_offset: u64, chunk_size: u32, fill_bytes: u8, is_last: bool, xid: &u32)
 {
-    match unsafe {SURICATA_NFS_FILE_CONFIG} {
-        Some(sfcm) => {
-            ft.new_chunk(sfcm, files, flags, name, data, chunk_offset,
-                    chunk_size, fill_bytes, is_last, xid); }
-        None => panic!("no SURICATA_NFS_FILE_CONFIG"),
+    if let Some(sfcm) = unsafe { SURICATA_NFS_FILE_CONFIG } {
+        ft.new_chunk(sfcm, files, flags, name, data, chunk_offset,
+                chunk_size, fill_bytes, is_last, xid);
     }
 }
 
+fn filetracker_trunc(ft: &mut FileTransferTracker, files: &mut FileContainer,
+        flags: u16)
+{
+    ft.trunc(files, flags);
+}
+
+pub fn filetracker_close(ft: &mut FileTransferTracker, files: &mut FileContainer,
+        flags: u16)
+{
+    ft.close(files, flags);
+}
+
+fn filetracker_update(ft: &mut FileTransferTracker, files: &mut FileContainer,
+        flags: u16, data: &[u8], gap_size: u32) -> u32
+{
+    ft.update(files, flags, data, gap_size)
+}
+
+
 #[derive(Debug)]
 pub struct NFSState {
     state_data: AppLayerStateData,
@@ -590,7 +607,7 @@ impl NFSState {
                         tx.request_done = true;
                         tx.response_done = true;
                         let (files, flags) = f.files.get(tx.file_tx_direction);
-                        f.file_tracker.trunc(files, flags);
+                        filetracker_trunc(&mut f.file_tracker, files, flags);
                     } else {
                         post_gap_txs = true;
                     }
@@ -945,7 +962,7 @@ impl NFSState {
                         let queued_data = tdf.file_tracker.get_queued_size();
                         if queued_data > 2000000 { // TODO should probably be configurable
                             SCLogDebug!("QUEUED size {} while we've seen GAPs. Truncating file.", queued_data);
-                            tdf.file_tracker.trunc(files, flags);
+                            filetracker_trunc(&mut tdf.file_tracker, files, flags);
                         }
                     }
 
@@ -955,7 +972,7 @@ impl NFSState {
                     }
 
                     tdf.chunk_count += 1;
-                    let cs = tdf.file_tracker.update(files, flags, data, gap_size);
+                    let cs = filetracker_update(&mut tdf.file_tracker, files, flags, data, gap_size);
                     /* see if we need to close the tx */
                     if tdf.file_tracker.is_done() {
                         if direction == Direction::ToClient {
index a90cfbb0640ab1bee4c1fd7aef3e164f046b210b..89dd0705d20078a6e6e1a2dfa8e2bf91082a5e17 100644 (file)
@@ -123,7 +123,7 @@ impl NFSState {
                         let (files, flags) = tdf.files.get(Direction::ToServer);
                         tdf.chunk_count += 1;
                         tdf.file_additional_procs.push(NFSPROC3_COMMIT);
-                        tdf.file_tracker.close(files, flags);
+                        filetracker_close(&mut tdf.file_tracker, files, flags);
                         tdf.file_last_xid = r.hdr.xid;
                         tx.is_last = true;
                         tx.request_done = true;
index 7661221bbaa3f7c1bd53a630426c3574748cb327..7bb650caca4876a7fca02b4d38f8593997281c40 100644 (file)
@@ -118,7 +118,7 @@ impl NFSState {
         if let Some(tx) = self.get_file_tx_by_handle(&file_handle, Direction::ToServer) {
             if let Some(NFSTransactionTypeData::FILE(ref mut tdf)) = tx.type_data {
                 let (files, flags) = tdf.files.get(Direction::ToServer);
-                tdf.file_tracker.close(files, flags);
+                filetracker_close(&mut tdf.file_tracker, files, flags);
                 tdf.file_last_xid = r.hdr.xid;
                 tx.is_last = true;
                 tx.request_done = true;