From 61fca4e9db337a0bb5fef91388e2e0fc57b48fa5 Mon Sep 17 00:00:00 2001 From: Shivani Bhardwaj Date: Sat, 26 Jun 2021 16:43:35 +0530 Subject: [PATCH] nfs: add missing code from rust impl of fns --- rust/src/nfs/nfs.rs | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/rust/src/nfs/nfs.rs b/rust/src/nfs/nfs.rs index 98aa5cf5a4..acd6a13784 100644 --- a/rust/src/nfs/nfs.rs +++ b/rust/src/nfs/nfs.rs @@ -1360,7 +1360,7 @@ impl NFSState { } fn setfileflags(&mut self, direction: u8, flags: u16) { SCLogDebug!("direction: {}, flags: {}", direction, flags); - if direction == 1 { + if direction == STREAM_TOCLIENT { self.files.flags_tc = flags; } else { self.files.flags_ts = flags; @@ -1399,6 +1399,12 @@ pub extern "C" fn rs_nfs_parse_request(flow: *const Flow, { let state = cast_pointer!(state, NFSState); let flow = cast_pointer!(flow, Flow); + let file_flags = unsafe { FileFlowToFlags(flow, STREAM_TOSERVER) }; + rs_nfs_setfileflags(STREAM_TOSERVER, state, file_flags); + + if input.is_null() == true && input_len > 0 { + return rs_nfs_parse_request_tcp_gap(state, input_len); + } let buf = unsafe{std::slice::from_raw_parts(input, input_len as usize)}; SCLogDebug!("parsing {} bytes of request data", input_len); @@ -1427,6 +1433,12 @@ pub extern "C" fn rs_nfs_parse_response(flow: *const Flow, { let state = cast_pointer!(state, NFSState); let flow = cast_pointer!(flow, Flow); + let file_flags = unsafe { FileFlowToFlags(flow, STREAM_TOCLIENT) }; + rs_nfs_setfileflags(STREAM_TOCLIENT, state, file_flags); + + if input.is_null() == true && input_len > 0 { + return rs_nfs_parse_response_tcp_gap(state, input_len); + } SCLogDebug!("parsing {} bytes of response data", input_len); let buf = unsafe{std::slice::from_raw_parts(input, input_len as usize)}; @@ -1445,7 +1457,7 @@ pub extern "C" fn rs_nfs_parse_response_tcp_gap( /// C binding parse a DNS request. Returns 1 on success, -1 on failure. #[no_mangle] -pub extern "C" fn rs_nfs_parse_request_udp(_f: *const Flow, +pub extern "C" fn rs_nfs_parse_request_udp(f: *const Flow, state: *mut std::os::raw::c_void, _pstate: *mut std::os::raw::c_void, input: *const u8, @@ -1454,6 +1466,8 @@ pub extern "C" fn rs_nfs_parse_request_udp(_f: *const Flow, _flags: u8) -> AppLayerResult { let state = cast_pointer!(state, NFSState); + let file_flags = unsafe { FileFlowToFlags(f, STREAM_TOSERVER) }; + rs_nfs_setfileflags(STREAM_TOSERVER, state, file_flags); let buf = unsafe{std::slice::from_raw_parts(input, input_len as usize)}; SCLogDebug!("parsing {} bytes of request data", input_len); @@ -1461,7 +1475,7 @@ pub extern "C" fn rs_nfs_parse_request_udp(_f: *const Flow, } #[no_mangle] -pub extern "C" fn rs_nfs_parse_response_udp(_f: *const Flow, +pub extern "C" fn rs_nfs_parse_response_udp(f: *const Flow, state: *mut std::os::raw::c_void, _pstate: *mut std::os::raw::c_void, input: *const u8, @@ -1470,7 +1484,8 @@ pub extern "C" fn rs_nfs_parse_response_udp(_f: *const Flow, _flags: u8) -> AppLayerResult { let state = cast_pointer!(state, NFSState); - + let file_flags = unsafe { FileFlowToFlags(f, STREAM_TOCLIENT) }; + rs_nfs_setfileflags(STREAM_TOCLIENT, state, file_flags); SCLogDebug!("parsing {} bytes of response data", input_len); let buf = unsafe{std::slice::from_raw_parts(input, input_len as usize)}; state.parse_udp_tc(buf)