]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
applayer: add flags to parser registration struct
authorJason Ish <jason.ish@oisf.net>
Mon, 13 Jul 2020 16:24:24 +0000 (10:24 -0600)
committerVictor Julien <victor@inliniac.net>
Wed, 7 Oct 2020 10:06:46 +0000 (12:06 +0200)
This will allow Rust parsers to register for gap handing from
Rust (some Rust parsers do handle gaps, but they set the flag
from C).

(cherry picked from commit 53aa967e0b89417f2714fcbcbb6463be6ce8282e)

rust/src/applayertemplate/template.rs
rust/src/dhcp/dhcp.rs
rust/src/ikev2/ikev2.rs
rust/src/krb/krb5.rs
rust/src/ntp/ntp.rs
rust/src/parser.rs
rust/src/rdp/rdp.rs
rust/src/sip/sip.rs
rust/src/snmp/snmp.rs
src/app-layer-register.c
src/app-layer-register.h

index bb02267f6c2ab3017bbe40f05fac060dd74896f2..760e67ced35e546d4485d5d3a752030f692d72e2 100644 (file)
@@ -546,6 +546,7 @@ pub unsafe extern "C" fn rs_template_register_parser() {
         get_tx_iterator: Some(rs_template_state_get_tx_iterator),
         get_tx_detect_flags: None,
         set_tx_detect_flags: None,
+        flags: 0,
     };
 
     let ip_proto_str = CString::new("tcp").unwrap();
index 6aa576669dca2fb029b028e959cb8c6af3929444..d09db6d1d8757c1834265c2bc5e2ceb0a13db058 100644 (file)
@@ -454,6 +454,7 @@ pub unsafe extern "C" fn rs_dhcp_register_parser() {
         get_tx_iterator    : Some(rs_dhcp_state_get_tx_iterator),
         set_tx_detect_flags: None,
         get_tx_detect_flags: None,
+        flags              : 0,
     };
 
     let ip_proto_str = CString::new("udp").unwrap();
index 0eaf9bcf9d504982a957c7ca41e940100d3f4af0..cac0a743a6f766aa1c2cd4fe12712ed930efd6f6 100644 (file)
@@ -732,6 +732,7 @@ pub unsafe extern "C" fn rs_register_ikev2_parser() {
         get_tx_iterator    : None,
         get_tx_detect_flags: None,
         set_tx_detect_flags: None,
+        flags              : 0,
     };
 
     let ip_proto_str = CString::new("udp").unwrap();
index 4efb7719fe0570cc382e332418016b50a2cf188e..0537d338bd7e942641544314a6cc1558051318ab 100644 (file)
@@ -681,6 +681,7 @@ pub unsafe extern "C" fn rs_register_krb5_parser() {
         get_tx_iterator    : None,
         get_tx_detect_flags: Some(rs_krb5_tx_detect_flags_get),
         set_tx_detect_flags: Some(rs_krb5_tx_detect_flags_set),
+        flags              : 0,
     };
     // register UDP parser
     let ip_proto_str = CString::new("udp").unwrap();
index ad3b519e9ce1fc98c55f89ac6afe1551179f52a7..b6cda16534e0ba3d659fb81809fc12f49d8c4c4a 100644 (file)
@@ -431,6 +431,7 @@ pub unsafe extern "C" fn rs_register_ntp_parser() {
         get_tx_iterator    : None,
         get_tx_detect_flags: None,
         set_tx_detect_flags: None,
+        flags              : 0,
     };
 
     let ip_proto_str = CString::new("udp").unwrap();
index 5dec9f2c32a3fef31b2bd6372dbf772601004d84..b518c0623e0e4b683101afdb2c1bfb910f76434a 100644 (file)
@@ -106,6 +106,8 @@ pub struct RustParser {
 
     // Function to get TX detect flags.
     pub get_tx_detect_flags: Option<GetTxDetectFlagsFn>,
+
+    pub flags: u32,
 }
 
 
index 3b66935413330d955886a32c2f9a09d35cd97c8e..d97315b0bcc1008e6312408bfa1b92ae8e2a317f 100644 (file)
@@ -533,6 +533,7 @@ pub unsafe extern "C" fn rs_rdp_register_parser() {
         get_tx_iterator: None,
         get_tx_detect_flags: None,
         set_tx_detect_flags: None,
+        flags: 0,
     };
 
     /* For 5.0 we want this disabled by default, so check that it
index b33526003d060574c483c84ee5dbc10317a809ed..81caa3f2374289b428f3607ae4c058a9778676ca 100755 (executable)
@@ -424,6 +424,7 @@ pub unsafe extern "C" fn rs_sip_register_parser() {
         get_tx_iterator: None,
         get_tx_detect_flags: None,
         set_tx_detect_flags: None,
+        flags: 0,
     };
 
     /* For 5.0 we want this disabled by default, so check that it
index a3c5307c283709a090a7c76fbf1d410036b56a1f..7b8dbeb0c380bc94a653f796822c95ff1f83baa7 100644 (file)
@@ -614,6 +614,7 @@ pub unsafe extern "C" fn rs_register_snmp_parser() {
         get_tx_iterator    : None,
         get_tx_detect_flags: Some(rs_snmp_get_tx_detect_flags),
         set_tx_detect_flags: Some(rs_snmp_set_tx_detect_flags),
+        flags              : 0,
     };
     let ip_proto_str = CString::new("udp").unwrap();
     if AppLayerProtoDetectConfProtoDetectionEnabled(ip_proto_str.as_ptr(), parser.name) != 0 {
index 3fd73c46d7f772ef6bac53e6cbdc0202487de45a..410f67b54e49222d3a9b6f3195820d457f597f03 100644 (file)
@@ -176,6 +176,12 @@ int AppLayerRegisterParser(const struct AppLayerParser *p, AppProto alproto)
                 p->GetTxDetectFlags, p->SetTxDetectFlags);
     }
 
+    if (p->flags) {
+        AppLayerParserRegisterOptionFlags(p->ip_proto, alproto,
+                p->flags);
+
+    }
+
     return 0;
 }
 
index fbba2f3303b637ebe3c7c897110ec50e7935b395..7f9765eeb9204bc00458e42c3e0adbebdb655731 100644 (file)
@@ -74,6 +74,8 @@ typedef struct AppLayerParser {
 
     void (*SetTxDetectFlags)(void *, uint8_t, uint64_t);
     uint64_t (*GetTxDetectFlags)(void *, uint8_t);
+
+    uint32_t flags;
 } AppLayerParser;
 
 /**