]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #583 in SNORT/snort3 from snort2lua_appid_rule_option to master
authorRuss Combs (rucombs) <rucombs@cisco.com>
Tue, 9 Aug 2016 20:40:45 +0000 (16:40 -0400)
committerRuss Combs (rucombs) <rucombs@cisco.com>
Tue, 9 Aug 2016 20:40:45 +0000 (16:40 -0400)
Squashed commit of the following:

commit f2bf7513552b2afbed195612419aa288a10d6979
Author: davis mcpherson <davis.mcpherson@gmail.com>
Date:   Fri Aug 5 17:49:54 2016 -0400

    implement support for convert appid rule option

    free memory allocated for appid names loaded from rules with 'appids' rule option

    add ability to modifiy rule option name when converting to snort3 format

src/network_inspectors/appid/ips_appid_option.cc
tools/snort2lua/rule_states/rule_api.cc
tools/snort2lua/rule_states/rule_convert_comma_list.cc

index 44caaa4fe2eed39329c5854f1584d5c853580d7b..9ca3c21a53cddc0583ab5c9b7a5f2b431588baad 100644 (file)
@@ -78,7 +78,15 @@ class AppIdIpsOption : public IpsOption
 public:
     AppIdIpsOption(const AppIdRuleOptionData& c) :
         IpsOption(s_name)
-    { opt_data = c; }
+    {
+        opt_data = c;
+    }
+
+    ~AppIdIpsOption()
+    {
+        for (auto& appid_info : opt_data.appid_table)
+            snort_free( appid_info.appid_name);
+    }
 
     uint32_t hash() const override;
     bool operator==(const IpsOption&) const override;
@@ -229,7 +237,7 @@ bool AppIdOptionModule::set(const char*, Value& v, SnortConfig*)
             tok.erase(0, 1);
 
         if ( tok[tok.length()-1] == '"' )
-            tok.erase(tok.length()-1, 1);
+            tok.erase(tok.length() - 1, 1);
 
         appid_info.appid_name = snort_strdup(tok.c_str());
         appid_info.appid_ordinal = 0;
index 4e93ae3849de0a79e8fe70cb2ea17770e973aa6e..cb8280122e644bef362e7009b2aefafda78a121d 100644 (file)
@@ -25,6 +25,7 @@
 namespace rules
 {
 extern const ConvertMap* ack_map;
+extern const ConvertMap* appid_map;
 extern const ConvertMap* asn1_map;
 extern const ConvertMap* base64_data_map;
 extern const ConvertMap* base64_decode_map;
@@ -102,6 +103,7 @@ extern const ConvertMap* window_map;
 const std::vector<const ConvertMap*> rule_options_api =
 {
     ack_map,
+    appid_map,
     asn1_map,
     base64_data_map,
     base64_decode_map,
index ab9821829d20a7fda80828d8696d8c88c05712d5..e29b4048c20c1c672768ec121373426e6faa5136 100644 (file)
@@ -31,7 +31,7 @@ namespace rules
  * x,y,z to "x y z"
  */
 
-template<const std::string* rule_name>
+template<const std::string* converted_option_name>
 class CommaListRuleOption : public ConversionState
 {
 public:
@@ -50,16 +50,16 @@ public:
         }
         val.insert(0,1,'"');
         val.insert(val.end(),1,'"');
+        rule_api.add_option(*converted_option_name, val);
 
-        rule_api.add_option(*rule_name, val);
         return set_next_rule_state(stream);
     }
 };
 
-template<const std::string* rule_name>
+template<const std::string* converted_option_name>
 static ConversionState* comma_list_conversion_ctor(Converter& c)
 {
-    return new CommaListRuleOption<rule_name>(c);
+    return new CommaListRuleOption<converted_option_name>(c);
 }
 
 /************************************
@@ -69,7 +69,7 @@ static const std::string dnp3_ind = "dnp3_ind";
 static const ConvertMap dnp3_ind_api =
 {
     dnp3_ind,
-    comma_list_conversion_ctor<& dnp3_ind>,
+    comma_list_conversion_ctor<&dnp3_ind>,
 };
 
 const ConvertMap* dnp3_ind_map = &dnp3_ind_api;
@@ -81,10 +81,23 @@ static const std::string dce_opnum = "dce_opnum";
 static const ConvertMap dce_opnum_api =
 {
     dce_opnum,
-    comma_list_conversion_ctor<& dce_opnum>,
+    comma_list_conversion_ctor<&dce_opnum>,
 };
 
 const ConvertMap* dce_opnum_map = &dce_opnum_api;
 
+/************************************
+ *********  APPID **************
+ ************************************/
+static const std::string appid = "appid";
+static const std::string appids = "appids";
+static const ConvertMap appid_api =
+{
+    appid,
+    comma_list_conversion_ctor<&appids>,
+};
+
+const ConvertMap* appid_map = &appid_api;
+
 } // namespace rules