]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2374 in SNORT/snort3 from ~BBANTWAL/snort3:set_binding_updates...
authorBhagya Tholpady (bbantwal) <bbantwal@cisco.com>
Thu, 6 Aug 2020 22:57:44 +0000 (22:57 +0000)
committerBhagya Tholpady (bbantwal) <bbantwal@cisco.com>
Thu, 6 Aug 2020 22:57:44 +0000 (22:57 +0000)
Squashed commit of the following:

commit 00890069e6d8e1a12b4279f8baabf27cf6e0b346
Author: Bhagya Tholpady <bbantwal@cisco.com>
Date:   Thu Jul 30 16:04:11 2020 -0400

    managers: print the instance type of the inspector module with --help-module

commit 25e31ddc1f33ba26a9ee12f8b1cd7e9dd67b1036
Author: Bhagya Tholpady <bbantwal@cisco.com>
Date:   Thu Jul 30 16:03:38 2020 -0400

    framework: add an api to check if the module can be bound in the binder

34 files changed:
src/framework/module.h
src/managers/module_manager.cc
src/network_inspectors/binder/binder.cc
src/service_inspectors/back_orifice/back_orifice.cc
src/service_inspectors/cip/cip_module.h
src/service_inspectors/dce_rpc/dce_http_proxy_module.h
src/service_inspectors/dce_rpc/dce_http_server_module.h
src/service_inspectors/dce_rpc/dce_smb_module.h
src/service_inspectors/dce_rpc/dce_tcp_module.h
src/service_inspectors/dce_rpc/dce_udp_module.h
src/service_inspectors/dnp3/dnp3_module.h
src/service_inspectors/dns/dns_module.h
src/service_inspectors/ftp_telnet/ftp_data.cc
src/service_inspectors/ftp_telnet/ftp_module.h
src/service_inspectors/ftp_telnet/telnet_module.h
src/service_inspectors/gtp/gtp_module.h
src/service_inspectors/http2_inspect/http2_module.h
src/service_inspectors/http_inspect/http_module.h
src/service_inspectors/imap/imap_module.h
src/service_inspectors/modbus/modbus_module.h
src/service_inspectors/pop/pop_module.h
src/service_inspectors/rpc_decode/rpc_module.h
src/service_inspectors/s7commplus/s7comm_module.h
src/service_inspectors/sip/sip_module.h
src/service_inspectors/smtp/smtp_module.h
src/service_inspectors/ssh/ssh_module.h
src/service_inspectors/ssl/ssl_module.h
src/service_inspectors/wizard/wiz_module.h
src/stream/file/file_module.h
src/stream/icmp/icmp_module.h
src/stream/ip/ip_module.h
src/stream/tcp/tcp_module.h
src/stream/udp/udp_module.h
src/stream/user/user_module.h

index 4908b4415f70b8c0e8341ce2bc1d908841170b00..9e973c47fa6bc508f554920c2b207d24c0f1a614 100644 (file)
@@ -191,6 +191,9 @@ public:
     virtual Usage get_usage() const
     { return CONTEXT; }
 
+    virtual bool is_bindable() const
+    { return false; }
+
 protected:
     Module(const char* name, const char* help);
     Module(const char* name, const char* help, const Parameter*, bool is_list = false);
index b27bd269dcea3375e7b506f1900da5c513f7806e..f3331d3b3bed9a7c5d8fae29889ab6a97b1c935c 100644 (file)
@@ -1027,6 +1027,18 @@ static const char* mod_use(Module::Usage use)
     return "error";
 }
 
+static const char* mod_bind(const Module* m)
+{
+    if ( m->is_bindable() )
+        return "multiton";
+    else if (
+        (m->get_usage() == Module::GLOBAL) or
+        (m->get_usage() == Module::CONTEXT) )
+        return "global";
+
+    return "singleton";
+}
+
 void ModuleManager::show_module(const char* name)
 {
     if ( !name || !*name )
@@ -1054,6 +1066,9 @@ void ModuleManager::show_module(const char* name)
         cout << endl << "Type: "  << mod_type(mh->api) << endl;
         cout << endl << "Usage: "  << mod_use(m->get_usage()) << endl;
 
+        if ( mh->api and (mh->api->type == PT_INSPECTOR) )
+            cout << endl << "Instance Type: " << mod_bind(m) << endl;
+
         const Parameter* params = m->get_parameters();
         if ( params and params->type < Parameter::PT_MAX )
         {
index 8ed4c3cb68488543fa7d6b3d29709ef760f0b75a..7db2a0dabad6a101b90f2a950b26ca7ca3d2d58b 100644 (file)
@@ -1104,10 +1104,18 @@ void Binder::set_binding(SnortConfig* sc, Binding* pb)
     if (pb->use.action != BindUse::BA_INSPECT)
         return;
 
-    const char* key = pb->use.name.c_str();
-    Module* m = ModuleManager::get_module(key);
+    const char *mod_name = pb->use.type.c_str();
+    Module* m = ModuleManager::get_module(mod_name);
+
+    if ( m and !m->is_bindable() )
+    {
+        ParseError("can't bind %s", mod_name);
+        return;
+    }
+
     bool is_global = m ? m->get_usage() == Module::GLOBAL : false;
 
+    const char* key = pb->use.name.c_str();
     pb->use.object = InspectorManager::get_inspector(key, is_global, sc);
 
     if (pb->use.object)
index 3e5b07fcbb9603e8df44c511bab4c74def3db9d6..e614f28e8eafabc83073d476de26f0e56e181834 100644 (file)
@@ -195,6 +195,9 @@ public:
 
     Usage get_usage() const override
     { return INSPECT; }
+
+    bool is_bindable() const override
+    { return true; }
 };
 
 const PegInfo* BoModule::get_pegs() const
index f34fd272cac116ffff56b0a66db4d8d9c67d0b93..7c55f59fba08d99e27522b55ac9862727ab03ad8 100644 (file)
@@ -60,6 +60,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     CipProtoConf* get_data();
 
 private:
index df30a328179d08fae7396ae520fe892d5742ab0d..6b2688cc2626428cb6fc9f0e08bf1da267bc5d71 100644 (file)
@@ -41,6 +41,9 @@ public:
 
     Usage get_usage() const override
     { return INSPECT; }
+
+    bool is_bindable() const override
+    { return true; }
 };
 
 #define DCE_HTTP_PROXY_NAME "dce_http_proxy"
index 7871e68f6e5097dc104119b3f3e66207ded188be..6239a23ac117cd9349acce2f3cb63d1d252be3ee 100644 (file)
@@ -41,6 +41,9 @@ public:
 
     Usage get_usage() const override
     { return INSPECT; }
+
+    bool is_bindable() const override
+    { return true; }
 };
 
 #define DCE_HTTP_SERVER_NAME "dce_http_server"
index 98779b20be71fe88ddd0ce9c839128610de195f9..3d7b0be19e0da622e1a6ae9cd469d6b5968b3d1a 100644 (file)
@@ -86,6 +86,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     void set_trace(const snort::Trace*) const override;
     const snort::TraceOption* get_trace_options() const override;
 
index 56bbade41b4876992455be6343e12f6eae7be57c..86a776024707380ef327112f295be0d7a8440c5c 100644 (file)
@@ -53,6 +53,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
 private:
     dce2TcpProtoConf config;
 };
index 27d36228e228200d1d31ce5588fcfaaab81302b1..57e4360635bf3e5570869cb1453f436eb8c0688c 100644 (file)
@@ -66,6 +66,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     void set_trace(const snort::Trace*) const override;
     const snort::TraceOption* get_trace_options() const override;
 
index 8a6ff065a86dc51309c3b7be5131bbbc06079849..e6a4373d34f5024a9ffeaec08921f23c6ef3b301 100644 (file)
@@ -52,6 +52,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     void get_data(dnp3ProtoConf&);
 
 private:
index e9dd172abd5a38e054705d1a8600de52de5db2cf..b81ef47578454b904523cee204b5ec996f320cfc 100644 (file)
@@ -72,6 +72,9 @@ public:
 
     Usage get_usage() const override
     { return INSPECT; }
+
+    bool is_bindable() const override
+    { return true; }
 };
 
 #endif
index 9936e1c70ebee23390150a28efc104fed8c1456e..95627ec2126f75e209860c371de3710f07c2bf1e 100644 (file)
@@ -267,6 +267,9 @@ public:
 
     Usage get_usage() const override
     { return INSPECT; }
+
+    bool is_bindable() const override
+    { return true; }
 };
 
 const PegInfo* FtpDataModule::get_pegs() const
index 535e4e093bb4c20cdb888f5650053473aa5bed56..06597c950afc0d27b5f7812eeb7356323b878724 100644 (file)
@@ -70,6 +70,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
 private:
     FTP_CLIENT_PROTO_CONF* conf;
     std::vector<BounceTo*> bounce_to;
@@ -126,6 +129,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     FTP_SERVER_PROTO_CONF* get_data();
     const FtpCmd* get_cmd(unsigned idx);
 
index 648abceaec788592ea2206d21b99a29b2a8fd978..d8ef99194e32b65afe45df0942547136047cf33f 100644 (file)
@@ -61,6 +61,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     TELNET_PROTO_CONF* get_data();
 
 private:
index 5a568fda31644d5862acd76f287db9ed25265a59..b0c4f79508591c7589ff72d73cf7d0c19f0a5c95 100644 (file)
@@ -72,6 +72,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     void set_trace(const snort::Trace*) const override;
     const snort::TraceOption* get_trace_options() const override;
 
index e34c1e48692e78e86444044fa9bdc0afe0b00dd9..c2095c64a3bd0b1f9935541ad3ad6e5a76ee6b68 100644 (file)
@@ -79,6 +79,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
 private:
     static const snort::Parameter http2_params[];
     static const snort::RuleMap http2_events[];
index ca97f9516d5e9134661e3faf97bac3ce6c94c6ab..c3abe40d1ace14ca2c77cb0c62067a6efd1b3ef6 100644 (file)
@@ -125,6 +125,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
 #ifdef REG_TEST
     static const PegInfo* get_peg_names() { return peg_names; }
     static const PegCount* get_peg_counts() { return peg_counts; }
index 9f2549d57b9badb2256c97b3eb0b7197777f6057..a77165ba11043c9991f08bb2cd218beb315a043b 100644 (file)
@@ -66,6 +66,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     IMAP_PROTO_CONF* get_data();
 
 private:
index 26a686165c2c8af0e6f59f8da293287cadb20998..cd4e63b2275e13ffcc55db811a7f4f9eb4e6c567 100644 (file)
@@ -52,6 +52,9 @@ public:
 
     Usage get_usage() const override
     { return INSPECT; }
+
+    bool is_bindable() const override
+    { return true; }
 };
 
 #endif
index 2ffc9ee3d3d730b5b286fe0f664946a120410c13..a1ddcd14fc5ecb8cd82b6e2faca07a7483e6900f 100644 (file)
@@ -66,6 +66,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     POP_PROTO_CONF* get_data();
 
 private:
index 7e86e9460e1efd26978606dc46ef8cd7bc65aecd..51de78f5ab4d934a607a43e676660c80d72696bc 100644 (file)
@@ -52,6 +52,9 @@ public:
 
     Usage get_usage() const override
     { return INSPECT; }
+
+    bool is_bindable() const override
+    { return true; }
 };
 
 #endif
index 04b04f87d73f368c06b3041159b0f61eff7c1733..5864294a2e3333baad59fd246ab744b71cdc3fd9 100644 (file)
@@ -53,6 +53,9 @@ public:
 
     Usage get_usage() const override
     { return INSPECT; }
+
+    bool is_bindable() const override
+    { return true; }
 };
 
 #endif
index 3e456818b11e0534a22d54a40d2091814a7282b1..b24397a042942e4d9ed57a5ca37ad14cb593053d 100644 (file)
@@ -87,6 +87,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     SIP_PROTO_CONF* get_data();
 
 private:
index ada745c15f217a8e6ab0fbaacedbb3623b640f51..6afaab1d16b912b1035adf1afa092577a98e0bb1 100644 (file)
@@ -99,6 +99,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
 private:
     void add_commands(snort::Value&, uint32_t flags);
 
index 795c33aa236d891808c4db57cf28113a608d4db8..716149efee7b5471387778546a062c57f2febbf5 100644 (file)
@@ -67,6 +67,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     SSH_PROTO_CONF* get_data();
 
 private:
index 3ba5d93364256b8f546524d3256d6a246da25dca..55d6c6b3cbab927e8defee2a7e0117b5d7c01e19 100644 (file)
@@ -63,6 +63,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     SSL_PROTO_CONF* get_data();
 
 private:
index 62db7629d6a64a865f93f4694e5179265fa29b23..6fe68ff5a8faefa36647c60a89149134cf1034b5 100644 (file)
@@ -61,6 +61,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     void set_trace(const snort::Trace*) const override;
     const snort::TraceOption* get_trace_options() const override;
 
index a94bff04fa6ef8b2f88300af7ab1f83e92f3b56d..e1b7e23432c6603946198df1944be7366e68bfe0 100644 (file)
@@ -49,6 +49,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
 public:
     bool upload;
 };
index e99625ed30eb4d7b27c847b2478f35995a63b61e..e540a2d4caf575608df9802a676799b8b89cbcbe 100644 (file)
@@ -62,6 +62,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     StreamIcmpConfig* get_data();
 
 private:
index b1f26214fc6f72975d4d337edbbc4af778813803..2d743209ffeecc9c9b84f9651c7329ff2b17768c 100644 (file)
@@ -116,6 +116,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     void set_trace(const snort::Trace*) const override;
     const snort::TraceOption* get_trace_options() const override;
 
index 489de0992d76d728dc2b26cbf2740660ad33004f..c87706e1c176e52f76fad568a2e8d0ef91a73320 100644 (file)
@@ -147,6 +147,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
 private:
     TcpStreamConfig* config;
 };
index 231c2dce15b5b5407aee287409ea8cfbb1a50be1..511b13a5e8277ac839aded2396a9088aea7a493e 100644 (file)
@@ -65,6 +65,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
 private:
     StreamUdpConfig* config;
 };
index f42f235b02568f44e0d20a2add5a2c55a93bd24c..76159c13bd55c4b1de72f2cc9140817fe3960a6f 100644 (file)
@@ -52,6 +52,9 @@ public:
     Usage get_usage() const override
     { return INSPECT; }
 
+    bool is_bindable() const override
+    { return true; }
+
     StreamUserConfig* get_data();
 
     void set_trace(const snort::Trace*) const override;