rust/dcerpc: Remove redundant fields

pull/5570/head
Ilya Bakhtin 6 years ago committed by Victor Julien
parent 2840a2e064
commit 2033f386f9

@ -169,8 +169,6 @@ pub struct DCERPCTransaction {
pub endianness: u8, pub endianness: u8,
pub stub_data_buffer_ts: Vec<u8>, pub stub_data_buffer_ts: Vec<u8>,
pub stub_data_buffer_tc: Vec<u8>, pub stub_data_buffer_tc: Vec<u8>,
pub stub_data_buffer_len_ts: u32,
pub stub_data_buffer_len_tc: u32,
pub stub_data_buffer_reset_ts: bool, pub stub_data_buffer_reset_ts: bool,
pub stub_data_buffer_reset_tc: bool, pub stub_data_buffer_reset_tc: bool,
pub req_done: bool, pub req_done: bool,
@ -198,8 +196,6 @@ impl DCERPCTransaction {
endianness: 0, endianness: 0,
stub_data_buffer_ts: Vec::new(), stub_data_buffer_ts: Vec::new(),
stub_data_buffer_tc: Vec::new(), stub_data_buffer_tc: Vec::new(),
stub_data_buffer_len_ts: 0, // TODO maybe retrieve length from buffer and avoid this param
stub_data_buffer_len_tc: 0,
stub_data_buffer_reset_ts: false, stub_data_buffer_reset_ts: false,
stub_data_buffer_reset_tc: false, stub_data_buffer_reset_tc: false,
req_done: false, req_done: false,
@ -827,7 +823,6 @@ impl DCERPCState {
hdrpfcflags, hdrpfcflags,
padleft, padleft,
&mut tx.stub_data_buffer_ts, &mut tx.stub_data_buffer_ts,
&mut tx.stub_data_buffer_len_ts,
&mut tx.stub_data_buffer_reset_ts, &mut tx.stub_data_buffer_reset_ts,
); );
tx.req_done = true; tx.req_done = true;
@ -840,7 +835,6 @@ impl DCERPCState {
hdrpfcflags, hdrpfcflags,
padleft, padleft,
&mut tx.stub_data_buffer_tc, &mut tx.stub_data_buffer_tc,
&mut tx.stub_data_buffer_len_tc,
&mut tx.stub_data_buffer_reset_tc, &mut tx.stub_data_buffer_reset_tc,
); );
tx.resp_done = true; tx.resp_done = true;
@ -1132,8 +1126,8 @@ impl DCERPCState {
} }
fn evaluate_stub_params( fn evaluate_stub_params(
input: &[u8], input_len: u16, hdrflags: u8, lenleft: u16, stub_data_buffer: &mut Vec<u8>, input: &[u8], input_len: u16, hdrflags: u8, lenleft: u16,
stub_data_buffer_len: &mut u32, stub_data_buffer_reset: &mut bool, stub_data_buffer: &mut Vec<u8>,stub_data_buffer_reset: &mut bool,
) -> u16 { ) -> u16 {
let stub_len: u16; let stub_len: u16;
let fragtype = hdrflags & (PFC_FIRST_FRAG | PFC_LAST_FRAG); let fragtype = hdrflags & (PFC_FIRST_FRAG | PFC_LAST_FRAG);
@ -1147,7 +1141,6 @@ fn evaluate_stub_params(
let input_slice = &input[..stub_len as usize]; let input_slice = &input[..stub_len as usize];
stub_data_buffer.extend_from_slice(&input_slice); stub_data_buffer.extend_from_slice(&input_slice);
*stub_data_buffer_len += stub_len as u32;
stub_len stub_len
} }
@ -1317,12 +1310,12 @@ pub unsafe extern "C" fn rs_dcerpc_get_stub_data(
) { ) {
match dir { match dir {
core::STREAM_TOSERVER => { core::STREAM_TOSERVER => {
*len = tx.stub_data_buffer_len_ts; *len = tx.stub_data_buffer_ts.len() as u32;
*buf = tx.stub_data_buffer_ts.as_ptr(); *buf = tx.stub_data_buffer_ts.as_ptr();
SCLogDebug!("DCERPC Request stub buffer: Setting buffer to: {:?}", *buf); SCLogDebug!("DCERPC Request stub buffer: Setting buffer to: {:?}", *buf);
} }
_ => { _ => {
*len = tx.stub_data_buffer_len_tc; *len = tx.stub_data_buffer_tc.len() as u32;
*buf = tx.stub_data_buffer_tc.as_ptr(); *buf = tx.stub_data_buffer_tc.as_ptr();
SCLogDebug!("DCERPC Response stub buffer: Setting buffer to: {:?}", *buf); SCLogDebug!("DCERPC Response stub buffer: Setting buffer to: {:?}", *buf);
} }
@ -1771,7 +1764,7 @@ mod tests {
assert_eq!(11, tx.ctxid); assert_eq!(11, tx.ctxid);
assert_eq!(9, tx.opnum); assert_eq!(9, tx.opnum);
assert_eq!(1, tx.first_request_seen); assert_eq!(1, tx.first_request_seen);
assert_eq!(1000, tx.stub_data_buffer_len_ts); assert_eq!(1000, tx.stub_data_buffer_ts.len());
assert_eq!(true, tx.stub_data_buffer_reset_ts); assert_eq!(true, tx.stub_data_buffer_reset_ts);
} }
@ -1901,7 +1894,7 @@ mod tests {
dcerpc_state.handle_input_data(&request3, core::STREAM_TOSERVER) dcerpc_state.handle_input_data(&request3, core::STREAM_TOSERVER)
); );
let tx = &dcerpc_state.transactions[0]; let tx = &dcerpc_state.transactions[0];
assert_eq!(20, tx.stub_data_buffer_len_ts); assert_eq!(20, tx.stub_data_buffer_ts.len());
} }
#[test] #[test]
@ -1959,7 +1952,7 @@ mod tests {
dcerpc_state.handle_input_data(&request2, core::STREAM_TOSERVER) dcerpc_state.handle_input_data(&request2, core::STREAM_TOSERVER)
); );
let tx = &dcerpc_state.transactions[0]; let tx = &dcerpc_state.transactions[0];
assert_eq!(12, tx.stub_data_buffer_len_ts); assert_eq!(12, tx.stub_data_buffer_ts.len());
} }
#[test] #[test]
@ -2469,6 +2462,6 @@ mod tests {
let tx = &dcerpc_state.transactions[0]; let tx = &dcerpc_state.transactions[0];
assert_eq!(2, tx.opnum); assert_eq!(2, tx.opnum);
assert_eq!(0, tx.ctxid); assert_eq!(0, tx.ctxid);
assert_eq!(14, tx.stub_data_buffer_len_ts); assert_eq!(14, tx.stub_data_buffer_ts.len());
} }
} }

@ -29,7 +29,7 @@ fn log_dcerpc_header(
jsb.open_object("req")?; jsb.open_object("req")?;
jsb.set_uint("opnum", tx.opnum as u64)?; jsb.set_uint("opnum", tx.opnum as u64)?;
jsb.set_uint("frag_cnt", tx.frag_cnt_ts as u64)?; jsb.set_uint("frag_cnt", tx.frag_cnt_ts as u64)?;
jsb.set_uint("stub_data_size", tx.stub_data_buffer_len_ts as u64)?; jsb.set_uint("stub_data_size", tx.stub_data_buffer_ts.len() as u64)?;
jsb.close()?; jsb.close()?;
} }
DCERPC_TYPE_BIND => match &state.bind { DCERPC_TYPE_BIND => match &state.bind {
@ -61,7 +61,7 @@ fn log_dcerpc_header(
DCERPC_TYPE_RESPONSE => { DCERPC_TYPE_RESPONSE => {
jsb.open_object("res")?; jsb.open_object("res")?;
jsb.set_uint("frag_cnt", tx.frag_cnt_tc as u64)?; jsb.set_uint("frag_cnt", tx.frag_cnt_tc as u64)?;
jsb.set_uint("stub_data_size", tx.stub_data_buffer_len_tc as u64)?; jsb.set_uint("stub_data_size", tx.stub_data_buffer_tc.len() as u64)?;
jsb.close()?; jsb.close()?;
} }
_ => {} // replicating behavior from smb _ => {} // replicating behavior from smb

Loading…
Cancel
Save