From: Philippe Antoine Date: Tue, 18 Feb 2020 08:35:47 +0000 (+0100) Subject: parser: make rust probing parsers optional X-Git-Tag: suricata-6.0.0-beta1~739 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=666324656378f9d71938c10eb1b5a47ff1eabbe2;p=thirdparty%2Fsuricata.git parser: make rust probing parsers optional --- diff --git a/rust/src/applayertemplate/template.rs b/rust/src/applayertemplate/template.rs index bb02267f6c..b4fb74aa4b 100644 --- a/rust/src/applayertemplate/template.rs +++ b/rust/src/applayertemplate/template.rs @@ -518,8 +518,8 @@ pub unsafe extern "C" fn rs_template_register_parser() { name: PARSER_NAME.as_ptr() as *const std::os::raw::c_char, default_port: default_port.as_ptr(), ipproto: IPPROTO_TCP, - probe_ts: rs_template_probing_parser, - probe_tc: rs_template_probing_parser, + probe_ts: Some(rs_template_probing_parser), + probe_tc: Some(rs_template_probing_parser), min_depth: 0, max_depth: 16, state_new: rs_template_state_new, diff --git a/rust/src/dhcp/dhcp.rs b/rust/src/dhcp/dhcp.rs index 6aa576669d..a819b1bfaf 100644 --- a/rust/src/dhcp/dhcp.rs +++ b/rust/src/dhcp/dhcp.rs @@ -426,8 +426,8 @@ pub unsafe extern "C" fn rs_dhcp_register_parser() { name: PARSER_NAME.as_ptr() as *const std::os::raw::c_char, default_port : ports.as_ptr(), ipproto : IPPROTO_UDP, - probe_ts : rs_dhcp_probing_parser, - probe_tc : rs_dhcp_probing_parser, + probe_ts : Some(rs_dhcp_probing_parser), + probe_tc : Some(rs_dhcp_probing_parser), min_depth : 0, max_depth : 16, state_new : rs_dhcp_state_new, diff --git a/rust/src/ikev2/ikev2.rs b/rust/src/ikev2/ikev2.rs index 0eaf9bcf9d..0a659d7e98 100644 --- a/rust/src/ikev2/ikev2.rs +++ b/rust/src/ikev2/ikev2.rs @@ -704,8 +704,8 @@ pub unsafe extern "C" fn rs_register_ikev2_parser() { name : PARSER_NAME.as_ptr() as *const std::os::raw::c_char, default_port : default_port.as_ptr(), ipproto : core::IPPROTO_UDP, - probe_ts : rs_ikev2_probing_parser, - probe_tc : rs_ikev2_probing_parser, + probe_ts : Some(rs_ikev2_probing_parser), + probe_tc : Some(rs_ikev2_probing_parser), min_depth : 0, max_depth : 16, state_new : rs_ikev2_state_new, diff --git a/rust/src/krb/krb5.rs b/rust/src/krb/krb5.rs index 1c87449a6a..c2bf66fcce 100644 --- a/rust/src/krb/krb5.rs +++ b/rust/src/krb/krb5.rs @@ -647,8 +647,8 @@ pub unsafe extern "C" fn rs_register_krb5_parser() { name : PARSER_NAME.as_ptr() as *const std::os::raw::c_char, default_port : default_port.as_ptr(), ipproto : core::IPPROTO_UDP, - probe_ts : rs_krb5_probing_parser, - probe_tc : rs_krb5_probing_parser, + probe_ts : Some(rs_krb5_probing_parser), + probe_tc : Some(rs_krb5_probing_parser), min_depth : 0, max_depth : 16, state_new : rs_krb5_state_new, @@ -690,8 +690,8 @@ pub unsafe extern "C" fn rs_register_krb5_parser() { } // register TCP parser parser.ipproto = core::IPPROTO_TCP; - parser.probe_ts = rs_krb5_probing_parser_tcp; - parser.probe_tc = rs_krb5_probing_parser_tcp; + parser.probe_ts = Some(rs_krb5_probing_parser_tcp); + parser.probe_tc = Some(rs_krb5_probing_parser_tcp); parser.parse_ts = rs_krb5_parse_request_tcp; parser.parse_tc = rs_krb5_parse_response_tcp; let ip_proto_str = CString::new("tcp").unwrap(); diff --git a/rust/src/ntp/ntp.rs b/rust/src/ntp/ntp.rs index ad3b519e9c..4b53853208 100644 --- a/rust/src/ntp/ntp.rs +++ b/rust/src/ntp/ntp.rs @@ -403,8 +403,8 @@ pub unsafe extern "C" fn rs_register_ntp_parser() { name : PARSER_NAME.as_ptr() as *const std::os::raw::c_char, default_port : default_port.as_ptr(), ipproto : core::IPPROTO_UDP, - probe_ts : ntp_probing_parser, - probe_tc : ntp_probing_parser, + probe_ts : Some(ntp_probing_parser), + probe_tc : Some(ntp_probing_parser), min_depth : 0, max_depth : 16, state_new : rs_ntp_state_new, diff --git a/rust/src/parser.rs b/rust/src/parser.rs index 5dec9f2c32..e33f9bc9dd 100644 --- a/rust/src/parser.rs +++ b/rust/src/parser.rs @@ -38,9 +38,9 @@ pub struct RustParser { pub ipproto: c_int, /// Probing function, for packets going to server - pub probe_ts: ProbeFn, + pub probe_ts: Option, /// Probing function, for packets going to client - pub probe_tc: ProbeFn, + pub probe_tc: Option, /// Minimum frame depth for probing pub min_depth: u16, diff --git a/rust/src/rdp/rdp.rs b/rust/src/rdp/rdp.rs index 4a349fe18a..223e78b48c 100644 --- a/rust/src/rdp/rdp.rs +++ b/rust/src/rdp/rdp.rs @@ -505,8 +505,8 @@ pub unsafe extern "C" fn rs_rdp_register_parser() { name: PARSER_NAME.as_ptr() as *const std::os::raw::c_char, default_port: default_port.as_ptr(), ipproto: IPPROTO_TCP, - probe_ts: rs_rdp_probe_ts_tc, - probe_tc: rs_rdp_probe_ts_tc, + probe_ts: Some(rs_rdp_probe_ts_tc), + probe_tc: Some(rs_rdp_probe_ts_tc), min_depth: 0, max_depth: 16, state_new: rs_rdp_state_new, diff --git a/rust/src/sip/sip.rs b/rust/src/sip/sip.rs index 2c51e3c95d..f50b159267 100755 --- a/rust/src/sip/sip.rs +++ b/rust/src/sip/sip.rs @@ -396,8 +396,8 @@ pub unsafe extern "C" fn rs_sip_register_parser() { name: PARSER_NAME.as_ptr() as *const std::os::raw::c_char, default_port: default_port.as_ptr(), ipproto: core::IPPROTO_UDP, - probe_ts: rs_sip_probing_parser_ts, - probe_tc: rs_sip_probing_parser_tc, + probe_ts: Some(rs_sip_probing_parser_ts), + probe_tc: Some(rs_sip_probing_parser_tc), min_depth: 0, max_depth: 16, state_new: rs_sip_state_new, diff --git a/rust/src/snmp/snmp.rs b/rust/src/snmp/snmp.rs index a3c5307c28..954a388c91 100644 --- a/rust/src/snmp/snmp.rs +++ b/rust/src/snmp/snmp.rs @@ -586,8 +586,8 @@ pub unsafe extern "C" fn rs_register_snmp_parser() { name : PARSER_NAME.as_ptr() as *const std::os::raw::c_char, default_port : default_port.as_ptr(), ipproto : core::IPPROTO_UDP, - probe_ts : rs_snmp_probing_parser, - probe_tc : rs_snmp_probing_parser, + probe_ts : Some(rs_snmp_probing_parser), + probe_tc : Some(rs_snmp_probing_parser), min_depth : 0, max_depth : 16, state_new : rs_snmp_state_new, diff --git a/src/app-layer-register.c b/src/app-layer-register.c index 3fd73c46d7..17691d26ac 100644 --- a/src/app-layer-register.c +++ b/src/app-layer-register.c @@ -54,6 +54,10 @@ AppProto AppLayerRegisterProtocolDetection(const struct AppLayerParser *p, int e AppLayerProtoDetectRegisterProtocol(alproto, p->name); + if (p->ProbeTS == NULL || p->ProbeTC == NULL) { + return alproto; + } + if (RunmodeIsUnittests()) { SCLogDebug("Unittest mode, registering default configuration.");