From: Russ Combs (rucombs) Date: Tue, 9 Aug 2016 20:40:45 +0000 (-0400) Subject: Merge pull request #583 in SNORT/snort3 from snort2lua_appid_rule_option to master X-Git-Tag: 3.0.0-233~310 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9ee40cd9e8d8b446b683ee1b107703fcd5f6950b;p=thirdparty%2Fsnort3.git Merge pull request #583 in SNORT/snort3 from snort2lua_appid_rule_option to master Squashed commit of the following: commit f2bf7513552b2afbed195612419aa288a10d6979 Author: davis mcpherson 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 --- diff --git a/src/network_inspectors/appid/ips_appid_option.cc b/src/network_inspectors/appid/ips_appid_option.cc index 44caaa4fe..9ca3c21a5 100644 --- a/src/network_inspectors/appid/ips_appid_option.cc +++ b/src/network_inspectors/appid/ips_appid_option.cc @@ -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; diff --git a/tools/snort2lua/rule_states/rule_api.cc b/tools/snort2lua/rule_states/rule_api.cc index 4e93ae384..cb8280122 100644 --- a/tools/snort2lua/rule_states/rule_api.cc +++ b/tools/snort2lua/rule_states/rule_api.cc @@ -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 rule_options_api = { ack_map, + appid_map, asn1_map, base64_data_map, base64_decode_map, diff --git a/tools/snort2lua/rule_states/rule_convert_comma_list.cc b/tools/snort2lua/rule_states/rule_convert_comma_list.cc index ab9821829..e29b4048c 100644 --- a/tools/snort2lua/rule_states/rule_convert_comma_list.cc +++ b/tools/snort2lua/rule_states/rule_convert_comma_list.cc @@ -31,7 +31,7 @@ namespace rules * x,y,z to "x y z" */ -template +template 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 +template static ConversionState* comma_list_conversion_ctor(Converter& c) { - return new CommaListRuleOption(c); + return new CommaListRuleOption(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