Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rust: generic files definition #5513

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
33 changes: 33 additions & 0 deletions rust/src/filecontainer.rs
Expand Up @@ -25,6 +25,39 @@ extern {
pub fn FileFlowToFlags(flow: *const Flow, flags: u8) -> u16;
}

// Generic file structure, so it can be used by different protocols
#[derive(Debug)]
pub struct Files {
pub files_ts: FileContainer,
pub files_tc: FileContainer,
pub flags_ts: u16,
pub flags_tc: u16,
}

impl Files {
pub fn new() -> Files {
Files {
files_ts:FileContainer::default(),
files_tc:FileContainer::default(),
flags_ts:0,
flags_tc:0,
}
}
pub fn free(&mut self) {
self.files_ts.free();
self.files_tc.free();
}

pub fn get(&mut self, direction: u8) -> (&mut FileContainer, u16)
{
if direction == STREAM_TOSERVER {
(&mut self.files_ts, self.flags_ts)
} else {
(&mut self.files_tc, self.flags_tc)
}
}
}

pub struct File;
#[repr(C)]
#[derive(Debug)]
Expand Down
36 changes: 2 additions & 34 deletions rust/src/nfs/nfs.rs
Expand Up @@ -259,38 +259,6 @@ impl NFSRequestXidMap {
}
}

#[derive(Debug)]
pub struct NFSFiles {
pub files_ts: FileContainer,
pub files_tc: FileContainer,
pub flags_ts: u16,
pub flags_tc: u16,
}

impl NFSFiles {
pub fn new() -> NFSFiles {
NFSFiles {
files_ts:FileContainer::default(),
files_tc:FileContainer::default(),
flags_ts:0,
flags_tc:0,
}
}
pub fn free(&mut self) {
self.files_ts.free();
self.files_tc.free();
}

pub fn get(&mut self, direction: u8) -> (&mut FileContainer, u16)
{
if direction == STREAM_TOSERVER {
(&mut self.files_ts, self.flags_ts)
} else {
(&mut self.files_tc, self.flags_tc)
}
}
}

/// little wrapper around the FileTransferTracker::new_chunk method
pub fn filetracker_newchunk(ft: &mut FileTransferTracker, files: &mut FileContainer,
flags: u16, name: &Vec<u8>, data: &[u8],
Expand All @@ -315,7 +283,7 @@ pub struct NFSState {
/// transactions list
pub transactions: Vec<NFSTransaction>,

pub files: NFSFiles,
pub files: Files,

/// partial record tracking
pub ts_chunk_xid: u32,
Expand Down Expand Up @@ -358,7 +326,7 @@ impl NFSState {
requestmap:HashMap::new(),
namemap:HashMap::new(),
transactions: Vec::new(),
files:NFSFiles::new(),
files:Files::new(),
ts_chunk_xid:0,
tc_chunk_xid:0,
ts_chunk_left:0,
Expand Down
33 changes: 0 additions & 33 deletions rust/src/smb/files.rs
Expand Up @@ -47,39 +47,6 @@ impl SMBTransactionFile {
}
}

/// Wrapper around Suricata's internal file container logic.
#[derive(Debug)]
pub struct SMBFiles {
pub files_ts: FileContainer,
pub files_tc: FileContainer,
pub flags_ts: u16,
pub flags_tc: u16,
}

impl SMBFiles {
pub fn new() -> SMBFiles {
SMBFiles {
files_ts:FileContainer::default(),
files_tc:FileContainer::default(),
flags_ts:0,
flags_tc:0,
}
}
pub fn free(&mut self) {
self.files_ts.free();
self.files_tc.free();
}

pub fn get(&mut self, direction: u8) -> (&mut FileContainer, u16)
{
if direction == STREAM_TOSERVER {
(&mut self.files_ts, self.flags_ts)
} else {
(&mut self.files_tc, self.flags_tc)
}
}
}

/// little wrapper around the FileTransferTracker::new_chunk method
pub fn filetracker_newchunk(ft: &mut FileTransferTracker, files: &mut FileContainer,
flags: u16, name: &Vec<u8>, data: &[u8],
Expand Down
5 changes: 3 additions & 2 deletions rust/src/smb/smb.rs
Expand Up @@ -37,6 +37,7 @@ use nom;
use crate::core::*;
use crate::applayer;
use crate::applayer::{AppLayerResult, AppLayerTxData};
use crate::filecontainer::*;

use crate::smb::nbss_records::*;
use crate::smb::smb1_records::*;
Expand Down Expand Up @@ -755,7 +756,7 @@ pub struct SMBState<> {
// requests for DCERPC.
pub ssnguid2vec_map: HashMap<SMBHashKeyHdrGuid, Vec<u8>>,

pub files: SMBFiles,
pub files: Files,

skip_ts: u32,
skip_tc: u32,
Expand Down Expand Up @@ -808,7 +809,7 @@ impl SMBState {
ssn2vecoffset_map:HashMap::new(),
ssn2tree_map:HashMap::new(),
ssnguid2vec_map:HashMap::new(),
files: SMBFiles::new(),
files: Files::new(),
skip_ts:0,
skip_tc:0,
file_ts_left:0,
Expand Down