From 4bfeac65915bd35db942e1b287a627a278b2ca9a Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 20 Jan 2023 15:27:42 +0100 Subject: [PATCH] nfs: file handling cleanups --- rust/src/nfs/nfs.rs | 33 +++++++++++++++++++++++++-------- rust/src/nfs/nfs3.rs | 2 +- rust/src/nfs/nfs4.rs | 2 +- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/rust/src/nfs/nfs.rs b/rust/src/nfs/nfs.rs index 21dd0dd5d2..f6d76ec189 100644 --- a/rust/src/nfs/nfs.rs +++ b/rust/src/nfs/nfs.rs @@ -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 { diff --git a/rust/src/nfs/nfs3.rs b/rust/src/nfs/nfs3.rs index a90cfbb064..89dd0705d2 100644 --- a/rust/src/nfs/nfs3.rs +++ b/rust/src/nfs/nfs3.rs @@ -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; diff --git a/rust/src/nfs/nfs4.rs b/rust/src/nfs/nfs4.rs index 7661221bba..7bb650caca 100644 --- a/rust/src/nfs/nfs4.rs +++ b/rust/src/nfs/nfs4.rs @@ -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;