]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #1753 in SNORT/snort3 from ~BBANTWAL/snort3:snort2lua_base64_data_...
authorSteve Chew (stechew) <stechew@cisco.com>
Tue, 24 Sep 2019 18:01:41 +0000 (14:01 -0400)
committerSteve Chew (stechew) <stechew@cisco.com>
Tue, 24 Sep 2019 18:01:41 +0000 (14:01 -0400)
Squashed commit of the following:

commit 231cbf77f0673e00669d6d57410478d6ae1b8955
Author: Bhagya Tholpady <bbantwal@cisco.com>
Date:   Thu Sep 19 13:06:10 2019 -0400

    snort2lua: reset the sticky buffer name while converting unchanged sticky rule options and file_data

tools/snort2lua/data/data_types/dt_rule.cc
tools/snort2lua/data/data_types/dt_rule.h
tools/snort2lua/data/dt_rule_api.cc
tools/snort2lua/data/dt_rule_api.h
tools/snort2lua/rule_states/rule_file_data.cc
tools/snort2lua/rule_states/rule_unchanged.cc

index b18790727e5eaa8af77ea237a1ba5e4055b09af1..75b995a359b2ad9f68e760683a9ac37794b793cc 100644 (file)
@@ -114,6 +114,11 @@ void Rule::add_suboption(const std::string& keyword)
 void Rule::add_suboption(const std::string& keyword, const std::string& val)
 { options.back()->add_suboption(keyword, val); }
 
+void Rule::reset_sticky()
+{
+    sticky_buffer.clear();
+}
+
 void Rule::set_curr_options_buffer(const std::string& new_buffer, bool add_option)
 {
     /* set the buffer if
index fa2cf8f017c94e0ffa9cd4af5e78a21d3141fe95..b0a5921933c225763a7822f6a1461087c122b2e2 100644 (file)
@@ -40,6 +40,7 @@ public:
     void update_option(const std::string& keyword, const std::string& val);
     void add_suboption(const std::string& keyword);
     void add_suboption(const std::string& keyword, const std::string& val);
+    void reset_sticky(void);
     void set_curr_options_buffer(const std::string& buffer, bool add_option);
     void update_rule_action(const std::string&);
     void set_rule_old_action(const std::string&);
index 807c892ecd14fcac6e55f61ec0ffd11c75ba9a0f..c7e1834e40c515999bfa4150e56cbca7e1cfb9b0 100644 (file)
@@ -232,6 +232,14 @@ void RuleApi::add_suboption(const std::string& keyword,
         DataApi::developer_error("Add some header data before adding content!!");
 }
 
+void RuleApi::reset_sticky(void)
+{
+    if (curr_rule)
+        curr_rule->reset_sticky();
+    else
+        DataApi::developer_error("Add a rule before resetting the sticky buffer!!");
+}
+
 void RuleApi::set_curr_options_buffer(const std::string& buffer, bool add_option)
 {
     if (curr_rule)
index 5c6747d8d3ce6575693996e6cf9746a995a20b5b..a9d27ac7a81de1a0bca6326d6b3d43755cc90376 100644 (file)
@@ -71,6 +71,7 @@ public:
     void update_option(const std::string& keyword, const std::string& val);
     void add_suboption(const std::string& keyword);
     void add_suboption(const std::string& keyword, const std::string& val);
+    void reset_sticky(void);
     void set_curr_options_buffer(const std::string& buffer, bool add_option=false);
     void set_rule_old_action(const std::string&);
     std::string& get_rule_old_action();
index d10a6297ed6dd08f4a5195aa24d4bc1e2fc45e8d..faf7c52dad1354abfdfa783d8ab127a10fad7fec 100644 (file)
@@ -44,6 +44,7 @@ bool FileData::convert(std::istringstream& data_stream)
     std::streamoff pos = data_stream.tellg();
 
     rule_api.add_option("file_data");
+    rule_api.reset_sticky();
     args = util::get_rule_option_args(data_stream);
 
     // if there are no arguments, the option had a colon before a semicolon.
index b16eba3ac1102b65659cd7899f24424b92112507..26bb88eb6da2a3cf1530a5e8b08dfc2affa73aa7 100644 (file)
@@ -34,7 +34,7 @@ namespace rules
  *  Examples are below the line marked 'FINISHED TEMPLATES'.
  */
 
-template<const std::string* rule_name, bool has_suboptions>
+template<const std::string* rule_name, bool has_suboptions, bool sticky>
 class UnchangedRuleOption : public ConversionState
 {
 public:
@@ -52,14 +52,17 @@ public:
             rule_api.add_option(*rule_name);
         }
 
+        if (sticky)
+            rule_api.reset_sticky();
+
         return set_next_rule_state(stream);
     }
 };
 
-template<const std::string* rule_name,  bool has_suboptions = true>
+template<const std::string* rule_name,  bool has_suboptions = true, bool sticky = false>
 static ConversionState* unchanged_rule_ctor(Converter& c)
 {
-    return new UnchangedRuleOption<rule_name, has_suboptions>(c);
+    return new UnchangedRuleOption<rule_name, has_suboptions, sticky>(c);
 }
 
 /****************************************
@@ -438,7 +441,7 @@ static const std::string gtp_info = "gtp_info";
 static const ConvertMap rule_gtp_info =
 {
     gtp_info,
-    unchanged_rule_ctor<& gtp_info>,
+    unchanged_rule_ctor<& gtp_info, true, true>,
 };
 
 const ConvertMap* gtp_info_map = &rule_gtp_info;
@@ -477,7 +480,7 @@ static const std::string modbus_data = "modbus_data";
 static const ConvertMap rule_modbus_data =
 {
     modbus_data,
-    unchanged_rule_ctor<& modbus_data, false>,
+    unchanged_rule_ctor<& modbus_data, false, true>,
 };
 
 const ConvertMap* modbus_data_map = &rule_modbus_data;
@@ -516,7 +519,7 @@ static const std::string pkt_data = "pkt_data";
 static const ConvertMap rule_pkt_data =
 {
     pkt_data,
-    unchanged_rule_ctor<& pkt_data, false>,
+    unchanged_rule_ctor<& pkt_data, false, true>,
 };
 
 const ConvertMap* pkt_data_map = &rule_pkt_data;
@@ -542,7 +545,7 @@ static const std::string base64_data = "base64_data";
 static const ConvertMap rule_base64_data =
 {
     base64_data,
-    unchanged_rule_ctor<& base64_data, false>,
+    unchanged_rule_ctor<& base64_data, false, true>,
 };
 
 const ConvertMap* base64_data_map = &rule_base64_data;
@@ -594,7 +597,7 @@ static const std::string sip_body = "sip_body";
 static const ConvertMap rule_sip_body =
 {
     sip_body,
-    unchanged_rule_ctor<& sip_body, false>,
+    unchanged_rule_ctor<& sip_body, false, true>,
 };
 
 const ConvertMap* sip_body_map = &rule_sip_body;
@@ -607,7 +610,7 @@ static const std::string sip_header = "sip_header";
 static const ConvertMap rule_sip_header =
 {
     sip_header,
-    unchanged_rule_ctor<& sip_header, false>,
+    unchanged_rule_ctor<& sip_header, false, true>,
 };
 
 const ConvertMap* sip_header_map = &rule_sip_header;
@@ -659,7 +662,7 @@ static const std::string dnp3_data = "dnp3_data";
 static const ConvertMap rule_dnp3_data =
 {
     dnp3_data,
-    unchanged_rule_ctor<& dnp3_data, false>,
+    unchanged_rule_ctor<& dnp3_data, false, true>,
 };
 
 const ConvertMap* dnp3_data_map = &rule_dnp3_data;
@@ -685,7 +688,7 @@ static const std::string dce_stub_data = "dce_stub_data";
 static const ConvertMap rule_dce_stub_data =
 {
     dce_stub_data,
-    unchanged_rule_ctor<& dce_stub_data, false>,
+    unchanged_rule_ctor<& dce_stub_data, false, true>,
 };
 
 const ConvertMap* dce_stub_data_map = &rule_dce_stub_data;