]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2634 in SNORT/snort3 from ~OSERHIIE/snort3:bug_CSCvv38951 to...
authorBhagya Tholpady (bbantwal) <bbantwal@cisco.com>
Mon, 30 Nov 2020 23:41:02 +0000 (23:41 +0000)
committerBhagya Tholpady (bbantwal) <bbantwal@cisco.com>
Mon, 30 Nov 2020 23:41:02 +0000 (23:41 +0000)
Squashed commit of the following:

commit b4a2526daa76194707d882be2656afc89fd164b0
Author: Oleksandr Serhiienko <oserhiie@cisco.com>
Date:   Mon Nov 23 15:47:52 2020 +0200

    inspector_manager: search for an instance considering inspector type

        * inspector_manager: update instance search API to pass inspector type
        * binder: specify inspector type when getting an instance

src/managers/inspector_manager.cc
src/managers/inspector_manager.h
src/network_inspectors/binder/binder.cc

index 0f9432bd89ec087dc6605c436a5de233b4109e2e..bcb164d920fce7f9cdb2dc58bcdc77189815e55c 100644 (file)
@@ -423,13 +423,15 @@ static bool get_instance(
     return false;
 }
 
-static PHInstance* get_instance_by_service(FrameworkPolicy* fp, const char* keyword)
+static PHInstance* get_instance_by_service(FrameworkPolicy* fp, const char* keyword,
+    InspectorType type)
 {
     std::vector<PHInstance*>::iterator it;
 
     for ( it = fp->ilist.begin(); it != fp->ilist.end(); ++it )
     {
-        if ( (*it)->pp_class.api.service && !strcmp((*it)->pp_class.api.service, keyword) )
+        if ( (*it)->pp_class.api.service && !strcmp((*it)->pp_class.api.service, keyword) &&
+            (*it)->pp_class.api.type == type )
             return *it;
     }
     return nullptr;
@@ -555,14 +557,14 @@ Inspector* InspectorManager::get_inspector(const char* key, bool dflt_only, cons
     return p->handler;
 }
 
-Inspector* InspectorManager::get_inspector_by_service(const char* key)
+Inspector* InspectorManager::get_inspector_by_service(const char* key, InspectorType type)
 {
     InspectionPolicy* pi = get_inspection_policy();
 
     if ( !pi || !pi->framework_policy )
         return nullptr;
 
-    PHInstance* p = get_instance_by_service(pi->framework_policy, key);
+    PHInstance* p = get_instance_by_service(pi->framework_policy, key, type);
 
     if ( !p )
         return nullptr;
index a3d6b572818cf684b0f452bdeea8f6b261daa4b4..377dc1354ccc77a79c609a684187ad2b9c7ea5f6 100644 (file)
@@ -64,7 +64,7 @@ public:
     SO_PUBLIC static Inspector* get_inspector(
         const char* key, bool dflt_only = false, const SnortConfig* = nullptr);
 
-    SO_PUBLIC static Inspector* get_inspector_by_service(const char*);
+    SO_PUBLIC static Inspector* get_inspector_by_service(const char*, InspectorType type = IT_SERVICE);
 
     SO_PUBLIC static Binder* get_binder();
 
index c1cc5dd1a2205a065003e17e32e6e466d9667575..a714cc4668df61d313d5667b25366f9d3c35a750 100644 (file)
@@ -51,7 +51,7 @@ static Inspector* get_gadget(const Flow& flow)
     const SnortConfig* sc = SnortConfig::get_conf();
     const char* s = sc->proto_ref->get_name(flow.ssn_state.snort_protocol_id);
 
-    return InspectorManager::get_inspector_by_service(s);
+    return InspectorManager::get_inspector_by_service(s, IT_SERVICE);
 }
 
 static Inspector* get_gadget_by_service(const char* service)
@@ -60,7 +60,7 @@ static Inspector* get_gadget_by_service(const char* service)
     const SnortProtocolId id = sc->proto_ref->find(service);
     const char* s = sc->proto_ref->get_name(id);
 
-    return InspectorManager::get_inspector_by_service(s);
+    return InspectorManager::get_inspector_by_service(s, IT_SERVICE);
 }
 
 static std::string to_string(const sfip_var_t* list)