ike: rustfmt

pull/7713/head
Philippe Antoine 3 years ago committed by Victor Julien
parent 2b83cc799d
commit d0171d7418

@ -142,11 +142,9 @@ pub extern "C" fn rs_ike_state_get_sa_attribute(
debug_validate_bug_on!(value == std::ptr::null_mut()); debug_validate_bug_on!(value == std::ptr::null_mut());
let mut ret_val = 0; let mut ret_val = 0;
let mut ret_code = 0; let mut ret_code = 0;
let sa_type_s: Result<_,_>; let sa_type_s: Result<_, _>;
unsafe { unsafe { sa_type_s = CStr::from_ptr(sa_type).to_str() }
sa_type_s = CStr::from_ptr(sa_type).to_str()
}
SCLogInfo!("{:#?}", sa_type_s); SCLogInfo!("{:#?}", sa_type_s);
if let Ok(sa) = sa_type_s { if let Ok(sa) = sa_type_s {
@ -159,7 +157,7 @@ pub extern "C" fn rs_ike_state_get_sa_attribute(
if let Some(numeric_value) = attr.numeric_value { if let Some(numeric_value) = attr.numeric_value {
ret_val = numeric_value; ret_val = numeric_value;
ret_code = 1; ret_code = 1;
break break;
} }
} }
} }

@ -320,8 +320,7 @@ pub unsafe extern "C" fn rs_ike_state_tx_free(state: *mut std::os::raw::c_void,
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn rs_ike_parse_request( pub unsafe extern "C" fn rs_ike_parse_request(
_flow: *const Flow, state: *mut std::os::raw::c_void, _pstate: *mut std::os::raw::c_void, _flow: *const Flow, state: *mut std::os::raw::c_void, _pstate: *mut std::os::raw::c_void,
stream_slice: StreamSlice, stream_slice: StreamSlice, _data: *const std::os::raw::c_void,
_data: *const std::os::raw::c_void,
) -> AppLayerResult { ) -> AppLayerResult {
let state = cast_pointer!(state, IKEState); let state = cast_pointer!(state, IKEState);
return state.handle_input(stream_slice.as_slice(), Direction::ToServer); return state.handle_input(stream_slice.as_slice(), Direction::ToServer);
@ -330,8 +329,7 @@ pub unsafe extern "C" fn rs_ike_parse_request(
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn rs_ike_parse_response( pub unsafe extern "C" fn rs_ike_parse_response(
_flow: *const Flow, state: *mut std::os::raw::c_void, _pstate: *mut std::os::raw::c_void, _flow: *const Flow, state: *mut std::os::raw::c_void, _pstate: *mut std::os::raw::c_void,
stream_slice: StreamSlice, stream_slice: StreamSlice, _data: *const std::os::raw::c_void,
_data: *const std::os::raw::c_void,
) -> AppLayerResult { ) -> AppLayerResult {
let state = cast_pointer!(state, IKEState); let state = cast_pointer!(state, IKEState);
return state.handle_input(stream_slice.as_slice(), Direction::ToClient); return state.handle_input(stream_slice.as_slice(), Direction::ToClient);
@ -387,7 +385,7 @@ pub unsafe extern "C" fn rs_ike_tx_set_logged(
tx.logged.set(logged); tx.logged.set(logged);
} }
static mut ALPROTO_IKE : AppProto = ALPROTO_UNKNOWN; static mut ALPROTO_IKE: AppProto = ALPROTO_UNKNOWN;
// Parser name as a C style string. // Parser name as a C style string.
const PARSER_NAME: &'static [u8] = b"ike\0"; const PARSER_NAME: &'static [u8] = b"ike\0";
@ -399,33 +397,33 @@ export_tx_data_get!(rs_ike_get_tx_data, IKETransaction);
pub unsafe extern "C" fn rs_ike_register_parser() { pub unsafe extern "C" fn rs_ike_register_parser() {
let default_port = CString::new("500").unwrap(); let default_port = CString::new("500").unwrap();
let parser = RustParser { let parser = RustParser {
name : PARSER_NAME.as_ptr() as *const std::os::raw::c_char, name: PARSER_NAME.as_ptr() as *const std::os::raw::c_char,
default_port : default_port.as_ptr(), default_port: default_port.as_ptr(),
ipproto : core::IPPROTO_UDP, ipproto: core::IPPROTO_UDP,
probe_ts : Some(rs_ike_probing_parser), probe_ts: Some(rs_ike_probing_parser),
probe_tc : Some(rs_ike_probing_parser), probe_tc: Some(rs_ike_probing_parser),
min_depth : 0, min_depth: 0,
max_depth : 16, max_depth: 16,
state_new : rs_ike_state_new, state_new: rs_ike_state_new,
state_free : rs_ike_state_free, state_free: rs_ike_state_free,
tx_free : rs_ike_state_tx_free, tx_free: rs_ike_state_tx_free,
parse_ts : rs_ike_parse_request, parse_ts: rs_ike_parse_request,
parse_tc : rs_ike_parse_response, parse_tc: rs_ike_parse_response,
get_tx_count : rs_ike_state_get_tx_count, get_tx_count: rs_ike_state_get_tx_count,
get_tx : rs_ike_state_get_tx, get_tx: rs_ike_state_get_tx,
tx_comp_st_ts : 1, tx_comp_st_ts: 1,
tx_comp_st_tc : 1, tx_comp_st_tc: 1,
tx_get_progress : rs_ike_tx_get_alstate_progress, tx_get_progress: rs_ike_tx_get_alstate_progress,
get_eventinfo : Some(IkeEvent::get_event_info), get_eventinfo: Some(IkeEvent::get_event_info),
get_eventinfo_byid : Some(IkeEvent::get_event_info_by_id), get_eventinfo_byid: Some(IkeEvent::get_event_info_by_id),
localstorage_new : None, localstorage_new: None,
localstorage_free : None, localstorage_free: None,
get_files : None, get_files: None,
get_tx_iterator : Some(applayer::state_get_tx_iterator::<IKEState, IKETransaction>), get_tx_iterator: Some(applayer::state_get_tx_iterator::<IKEState, IKETransaction>),
get_tx_data : rs_ike_get_tx_data, get_tx_data: rs_ike_get_tx_data,
apply_tx_config : None, apply_tx_config: None,
flags : APP_LAYER_PARSER_OPT_UNIDIR_TXS, flags: APP_LAYER_PARSER_OPT_UNIDIR_TXS,
truncate : None, truncate: None,
get_frame_id_by_name: None, get_frame_id_by_name: None,
get_frame_name_by_id: None, get_frame_name_by_id: None,
}; };

@ -19,9 +19,9 @@ use super::ike::{IKEState, IKETransaction};
use super::ipsec_parser::IKEV2_FLAG_INITIATOR; use super::ipsec_parser::IKEV2_FLAG_INITIATOR;
use crate::ike::parser::{ExchangeType, IsakmpPayloadType, SaAttribute}; use crate::ike::parser::{ExchangeType, IsakmpPayloadType, SaAttribute};
use crate::jsonbuilder::{JsonBuilder, JsonError}; use crate::jsonbuilder::{JsonBuilder, JsonError};
use num_traits::FromPrimitive;
use std; use std;
use std::convert::TryFrom; use std::convert::TryFrom;
use num_traits::FromPrimitive;
const LOG_EXTENDED: u32 = 0x01; const LOG_EXTENDED: u32 = 0x01;

@ -261,18 +261,17 @@ pub fn parse_isakmp_header(i: &[u8]) -> IResult<&[u8], IsakmpHeader> {
let (i, flags) = be_u8(i)?; let (i, flags) = be_u8(i)?;
let (i, msg_id) = be_u32(i)?; let (i, msg_id) = be_u32(i)?;
let (i, length) = be_u32(i)?; let (i, length) = be_u32(i)?;
let hdr = let hdr = IsakmpHeader {
IsakmpHeader { init_spi,
init_spi, resp_spi,
resp_spi, next_payload,
next_payload, maj_ver: vers.0,
maj_ver: vers.0, min_ver: vers.1,
min_ver: vers.1, exch_type,
exch_type, flags,
flags, msg_id,
msg_id, length,
length, };
};
Ok((i, hdr)) Ok((i, hdr))
} }
@ -280,15 +279,17 @@ pub fn parse_security_association(i: &[u8]) -> IResult<&[u8], SecurityAssociatio
let start_i = i; let start_i = i;
let (i, domain_of_interpretation) = be_u32(i)?; let (i, domain_of_interpretation) = be_u32(i)?;
let (i, situation) = cond(domain_of_interpretation == 1, take(4_usize))(i)?; let (i, situation) = cond(domain_of_interpretation == 1, take(4_usize))(i)?;
let (i, data) = cond( let (i, data) = cond(domain_of_interpretation == 1 && start_i.len() >= 8, |b| {
domain_of_interpretation == 1 && start_i.len() >= 8, take(start_i.len() - 8)(b)
|b| take(start_i.len() - 8)(b) })(i)?;
)(i)?; Ok((
Ok((i, SecurityAssociationPayload { i,
domain_of_interpretation, SecurityAssociationPayload {
situation, domain_of_interpretation,
data situation,
})) data,
},
))
} }
pub fn parse_key_exchange(i: &[u8], length: u16) -> IResult<&[u8], KeyExchangePayload> { pub fn parse_key_exchange(i: &[u8], length: u16) -> IResult<&[u8], KeyExchangePayload> {
@ -303,10 +304,9 @@ pub fn parse_proposal(i: &[u8]) -> IResult<&[u8], ProposalPayload> {
let (i, spi_size) = be_u8(i)?; let (i, spi_size) = be_u8(i)?;
let (i, number_transforms) = be_u8(i)?; let (i, number_transforms) = be_u8(i)?;
let (i, spi) = take(spi_size as usize)(i)?; let (i, spi) = take(spi_size as usize)(i)?;
let (i, payload_data) = cond( let (i, payload_data) = cond((start_i.len() - 4) >= spi_size.into(), |b| {
(start_i.len() - 4) >= spi_size.into(), take((start_i.len() - 4) - spi_size as usize)(b)
|b| take((start_i.len() - 4) - spi_size as usize)(b) })(i)?;
)(i)?;
let payload = ProposalPayload { let payload = ProposalPayload {
proposal_number, proposal_number,
proposal_type, proposal_type,
@ -323,11 +323,14 @@ pub fn parse_transform(i: &[u8], length: u16) -> IResult<&[u8], TransformPayload
let (i, transform_type) = be_u8(i)?; let (i, transform_type) = be_u8(i)?;
let (i, _) = be_u16(i)?; let (i, _) = be_u16(i)?;
let (i, payload_data) = cond(length >= 4, |b| take(length - 4)(b))(i)?; let (i, payload_data) = cond(length >= 4, |b| take(length - 4)(b))(i)?;
Ok((i, TransformPayload { Ok((
transform_number, i,
transform_type, TransformPayload {
sa_attributes: payload_data.unwrap_or_default(), transform_number,
})) transform_type,
sa_attributes: payload_data.unwrap_or_default(),
},
))
} }
pub fn parse_vendor_id(i: &[u8], length: u16) -> IResult<&[u8], VendorPayload> { pub fn parse_vendor_id(i: &[u8], length: u16) -> IResult<&[u8], VendorPayload> {
@ -438,17 +441,18 @@ fn get_group_description(v: u16) -> AttributeValue {
pub fn parse_sa_attribute(i: &[u8]) -> IResult<&[u8], Vec<SaAttribute>> { pub fn parse_sa_attribute(i: &[u8]) -> IResult<&[u8], Vec<SaAttribute>> {
fn parse_attribute(i: &[u8]) -> IResult<&[u8], SaAttribute> { fn parse_attribute(i: &[u8]) -> IResult<&[u8], SaAttribute> {
let (i, b) = be_u16(i)?; let (i, b) = be_u16(i)?;
let format = ( let format = ((b >> 15) as u8, b & 0x7f_ff);
(b >> 15) as u8,
b & 0x7f_ff
);
let (i, attribute_length_or_value) = be_u16(i)?; // depends on format bit) = 1 -> value | 0 -> number of following bytes let (i, attribute_length_or_value) = be_u16(i)?; // depends on format bit) = 1 -> value | 0 -> number of following bytes
let (i, numeric_variable_value) = cond(format.0 == 0 && attribute_length_or_value == 4, be_u32) (i)?; // interpret as number let (i, numeric_variable_value) =
let (i, variable_attribute_value) = cond(format.0 == 0 && attribute_length_or_value != 4, take(attribute_length_or_value))(i)?; cond(format.0 == 0 && attribute_length_or_value == 4, be_u32)(i)?; // interpret as number
let (i, variable_attribute_value) = cond(
format.0 == 0 && attribute_length_or_value != 4,
take(attribute_length_or_value),
)(i)?;
let attr = SaAttribute { let attr = SaAttribute {
attribute_format: format.0, attribute_format: format.0,
attribute_type: get_attribute_type(format.1), attribute_type: get_attribute_type(format.1),
attribute_value : match format.1 { attribute_value: match format.1 {
1 => get_encryption_algorithm(attribute_length_or_value), 1 => get_encryption_algorithm(attribute_length_or_value),
2 => get_hash_algorithm(attribute_length_or_value), 2 => get_hash_algorithm(attribute_length_or_value),
3 => get_authentication_method(attribute_length_or_value), 3 => get_authentication_method(attribute_length_or_value),
@ -456,23 +460,20 @@ pub fn parse_sa_attribute(i: &[u8]) -> IResult<&[u8], Vec<SaAttribute>> {
11 => match attribute_length_or_value { 11 => match attribute_length_or_value {
1 => AttributeValue::LifeTypeSeconds, 1 => AttributeValue::LifeTypeSeconds,
2 => AttributeValue::LifeTypeKilobytes, 2 => AttributeValue::LifeTypeKilobytes,
_ => AttributeValue::Unknown _ => AttributeValue::Unknown,
} },
_ => AttributeValue::Unknown _ => AttributeValue::Unknown,
}, },
numeric_value: match format.0 { numeric_value: match format.0 {
1 => Some(attribute_length_or_value as u32), 1 => Some(attribute_length_or_value as u32),
0 => { 0 => numeric_variable_value,
numeric_variable_value
},
_ => None, _ => None,
}, },
hex_value: match format.0 { hex_value: match format.0 {
0 => { 0 => variable_attribute_value
variable_attribute_value.map(|_variable_attribute_value| to_hex(_variable_attribute_value)) .map(|_variable_attribute_value| to_hex(_variable_attribute_value)),
}
_ => None, _ => None,
} },
}; };
Ok((i, attr)) Ok((i, attr))
} }
@ -489,14 +490,17 @@ pub fn parse_ikev1_payload_list(i: &[u8]) -> IResult<&[u8], Vec<IsakmpPayload>>
let (i, reserved) = be_u8(i)?; let (i, reserved) = be_u8(i)?;
let (i, payload_length) = be_u16(i)?; let (i, payload_length) = be_u16(i)?;
let (i, payload_data) = cond(payload_length >= 4, |b| take(payload_length - 4)(b))(i)?; let (i, payload_data) = cond(payload_length >= 4, |b| take(payload_length - 4)(b))(i)?;
Ok((i, IsakmpPayload { Ok((
payload_header: IsakmpPayloadHeader { i,
next_payload, IsakmpPayload {
reserved, payload_header: IsakmpPayloadHeader {
payload_length next_payload,
reserved,
payload_length,
},
data: payload_data.unwrap_or_default(),
}, },
data: payload_data.unwrap_or_default(), ))
}))
} }
many0(complete(parse_payload))(i) many0(complete(parse_payload))(i)
} }

Loading…
Cancel
Save