From: Bhagya Tholpady (bbantwal) Date: Mon, 30 Nov 2020 23:41:02 +0000 (+0000) Subject: Merge pull request #2634 in SNORT/snort3 from ~OSERHIIE/snort3:bug_CSCvv38951 to... X-Git-Tag: 3.0.3-6~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0232f1364081eb266fd502583ee4485dc86dc976;p=thirdparty%2Fsnort3.git Merge pull request #2634 in SNORT/snort3 from ~OSERHIIE/snort3:bug_CSCvv38951 to master Squashed commit of the following: commit b4a2526daa76194707d882be2656afc89fd164b0 Author: Oleksandr Serhiienko 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 --- diff --git a/src/managers/inspector_manager.cc b/src/managers/inspector_manager.cc index 0f9432bd8..bcb164d92 100644 --- a/src/managers/inspector_manager.cc +++ b/src/managers/inspector_manager.cc @@ -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::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; diff --git a/src/managers/inspector_manager.h b/src/managers/inspector_manager.h index a3d6b5728..377dc1354 100644 --- a/src/managers/inspector_manager.h +++ b/src/managers/inspector_manager.h @@ -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(); diff --git a/src/network_inspectors/binder/binder.cc b/src/network_inspectors/binder/binder.cc index c1cc5dd1a..a714cc466 100644 --- a/src/network_inspectors/binder/binder.cc +++ b/src/network_inspectors/binder/binder.cc @@ -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)