From: Russ Combs Date: Fri, 7 Aug 2015 14:40:36 +0000 (-0400) Subject: Squashed commit of the following: X-Git-Tag: 3.0.0-233~886 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7db3d57cdfd00517724fc98a99e7b5eee834cc7d;p=thirdparty%2Fsnort3.git Squashed commit of the following: commit cea192a5ee82ad5de3d06163d32e7c8740b72c54 Author: Russ Combs Date: Fri Aug 7 10:21:23 2015 -0400 fix parameter range for those depending on loaded plugins reported by Siti Farhana Binti Lokman --- diff --git a/doc/params.txt b/doc/params.txt index 641b90bad..aeadcd94a 100644 --- a/doc/params.txt +++ b/doc/params.txt @@ -9,6 +9,7 @@ The following types are used: * *bit_list*: a list of consecutive integer values from 1 to the range maximum * *bool*: true or false +* *dynamic*: a select type determined by loaded plugins * *enum*: a string selected from the given range * *implied*: an IPS rule option that takes no value but means true * *int*: a whole number in the given range diff --git a/src/framework/parameter.cc b/src/framework/parameter.cc index ca03785ea..eb4ee7c0b 100644 --- a/src/framework/parameter.cc +++ b/src/framework/parameter.cc @@ -371,6 +371,8 @@ bool Parameter::validate(Value& v) const return valid_multi(v, (const char*)range); case PT_ENUM: return valid_enum(v, (const char*)range); + case PT_DYNAMIC: + return valid_select(v, ((RangeQuery)range)()); // address values case PT_MAC: @@ -396,7 +398,7 @@ bool Parameter::validate(Value& v) const static const char* const pt2str[Parameter::PT_MAX] = { - "table", "list", + "table", "list", "dynamic", "bool", "int", "real", "port", "string", "select", "multi", "enum", "mac", "ip4", "addr", @@ -409,6 +411,23 @@ const char* Parameter::get_type() const return pt2str[type]; } +const char* Parameter::get_range() const +{ + switch ( type ) + { + case PT_TABLE: + case PT_LIST: + return nullptr; + + case PT_DYNAMIC: + return ((RangeQuery)range)(); + + default: + break; + } + return (char*)range; +} + bool Parameter::get_bool() const { if ( !deflt ) diff --git a/src/framework/parameter.h b/src/framework/parameter.h index a3c24742c..26e174d99 100644 --- a/src/framework/parameter.h +++ b/src/framework/parameter.h @@ -32,10 +32,13 @@ struct SO_PUBLIC Parameter { + typedef const char* (*RangeQuery)(); + enum Type { PT_TABLE, // range is Parameter*, no default PT_LIST, // range is Parameter*, no default + PT_DYNAMIC, // range is RangeQuery function ptr PT_BOOL, // if you are reading this, get more coffee PT_INT, // signed 64 bits or less determined by range PT_REAL, // double @@ -55,11 +58,12 @@ struct SO_PUBLIC Parameter }; const char* name; Type type; - const void* range; // nullptr|const char*|const Parameter* + const void* range; // nullptr|const char*|RangeQuery|const Parameter* const char* deflt; const char* help; const char* get_type() const; + const char* get_range() const; bool validate(class Value&) const; @@ -75,9 +79,6 @@ struct SO_PUBLIC Parameter bool is_quoted() const { return ( type > PT_PORT ); } - bool has_text_range() const - { return !is_table() and range != nullptr; } - bool get_bool() const; double get_number() const; const char* get_string() const; diff --git a/src/main/help.cc b/src/main/help.cc index ed2f4671e..8613d8262 100644 --- a/src/main/help.cc +++ b/src/main/help.cc @@ -102,12 +102,12 @@ void help_args(const char* pfx) cout << " " << Markup::escape(p->help); - if ( p->has_text_range() ) + if ( const char* r = p->get_range() ) { - if ( *((char*)p->range) == '(' ) - cout << " " << (char*)p->range; + if ( *r == '(' ) + cout << " " << r; else - cout << " (" << (char*)p->range << ")"; + cout << " (" << r << ")"; } cout << endl; } diff --git a/src/main/modules.cc b/src/main/modules.cc index a09959355..9834246e9 100644 --- a/src/main/modules.cc +++ b/src/main/modules.cc @@ -32,6 +32,7 @@ using namespace std; #include "framework/module.h" #include "managers/module_manager.h" +#include "managers/plugin_manager.h" #include "main.h" #include "main/snort.h" #include "main/snort_config.h" @@ -177,10 +178,8 @@ bool EventQueueModule::set(const char*, Value& v, SnortConfig* sc) // search engine module //------------------------------------------------------------------------- -// FIXIT-L valid search methods should be obtained from available mpse plugins -#define SEARCH_METHODS \ - "ac_banded | ac_bnfa | ac_bnfa_q | ac_full | ac_full_q | " \ - "ac_sparse | ac_sparse_bands | ac_std" +static const char* get_search_methods() +{ return PluginManager::get_available_plugins(PT_SEARCH_ENGINE); } static const Parameter search_engine_params[] = { @@ -220,7 +219,7 @@ static const Parameter search_engine_params[] = { "inspect_stream_inserts", Parameter::PT_BOOL, nullptr, "false", "inspect reassembled payload - disabling is good for performance, bad for detection" }, - { "search_method", Parameter::PT_SELECT, SEARCH_METHODS, "ac_bnfa_q", + { "search_method", Parameter::PT_DYNAMIC, (void*)get_search_methods, "ac_bnfa_q", "set fast pattern algorithm - choose available search engine" }, { "split_any_any", Parameter::PT_BOOL, nullptr, "false", diff --git a/src/main/snort_module.cc b/src/main/snort_module.cc index d186cacfb..6176a0804 100644 --- a/src/main/snort_module.cc +++ b/src/main/snort_module.cc @@ -35,9 +35,11 @@ using namespace std; #include "help.h" #include "shell.h" #include "detection/detect.h" +#include "framework/base_api.h" #include "framework/module.h" #include "framework/parameter.h" #include "managers/module_manager.h" +#include "managers/plugin_manager.h" #include "parser/config_file.h" #include "parser/parser.h" #include "parser/parse_utils.h" @@ -117,12 +119,15 @@ static void x2s(const char* s) // help as well. //------------------------------------------------------------------------- +static const char* get_alert_mode() +{ return PluginManager::get_available_plugins(PT_LOGGER); } + static const Parameter s_params[] = { { "-?", Parameter::PT_STRING, "(optional)", nullptr, "