]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2777 in SNORT/snort3 from ~SHRARANG/snort3:appid_sub_policy to...
authorShravan Rangarajuvenkata (shrarang) <shrarang@cisco.com>
Fri, 5 Mar 2021 23:45:37 +0000 (23:45 +0000)
committerShravan Rangarajuvenkata (shrarang) <shrarang@cisco.com>
Fri, 5 Mar 2021 23:45:37 +0000 (23:45 +0000)
Squashed commit of the following:

commit 48ee239ce9197dcf6746dea9e77145e968a14322
Author: Shravan Rangaraju <shrarang@cisco.com>
Date:   Thu Mar 4 15:37:49 2021 -0500

    appid: get uri from http event even when http host is not present

commit d1f81e06c96812def7e556f563bb011490ce2be4
Author: Shravan Rangaraju <shrarang@cisco.com>
Date:   Wed Mar 3 17:29:35 2021 -0500

    appid: always get appid inspector from default inspection policy

31 files changed:
src/network_inspectors/appid/appid_config.cc
src/network_inspectors/appid/appid_config.h
src/network_inspectors/appid/appid_detector.cc
src/network_inspectors/appid/appid_detector.h
src/network_inspectors/appid/appid_discovery.cc
src/network_inspectors/appid/appid_discovery.h
src/network_inspectors/appid/appid_http_event_handler.cc
src/network_inspectors/appid/appid_http_event_handler.h
src/network_inspectors/appid/appid_inspector.cc
src/network_inspectors/appid/appid_module.cc
src/network_inspectors/appid/appid_session.cc
src/network_inspectors/appid/appid_session.h
src/network_inspectors/appid/appid_stats.cc
src/network_inspectors/appid/client_plugins/client_discovery.cc
src/network_inspectors/appid/client_plugins/client_discovery.h
src/network_inspectors/appid/detector_plugins/detector_pattern.cc
src/network_inspectors/appid/detector_plugins/detector_pattern.h
src/network_inspectors/appid/detector_plugins/detector_sip.cc
src/network_inspectors/appid/detector_plugins/detector_sip.h
src/network_inspectors/appid/detector_plugins/test/detector_plugins_mock.h
src/network_inspectors/appid/detector_plugins/test/http_url_patterns_test.cc
src/network_inspectors/appid/service_plugins/service_discovery.cc
src/network_inspectors/appid/service_plugins/service_discovery.h
src/network_inspectors/appid/service_plugins/test/service_netbios_test.cc
src/network_inspectors/appid/service_plugins/test/service_plugin_mock.h
src/network_inspectors/appid/test/appid_detector_test.cc
src/network_inspectors/appid/test/appid_discovery_test.cc
src/network_inspectors/appid/test/appid_http_event_test.cc
src/network_inspectors/appid/test/appid_mock_definitions.h
src/network_inspectors/appid/test/service_state_test.cc
src/network_inspectors/appid/test/tp_lib_handler_test.cc

index 5fe5daa6df429ba7d5630ab010349f8cea1e85c6..b0249f74634d235c8135b4ae1f1d9d4e6073a0fa 100644 (file)
@@ -100,7 +100,7 @@ void AppIdContext::pterm()
     odp_thread_local_ctxt = nullptr;
 }
 
-bool AppIdContext::init_appid(SnortConfig* sc)
+bool AppIdContext::init_appid(SnortConfig* sc, AppIdInspector& inspector)
 {
     // do not reload ODP on reload_config()
     if (!odp_ctxt)
@@ -112,10 +112,10 @@ bool AppIdContext::init_appid(SnortConfig* sc)
     static bool once = false;
     if (!once)
     {
-        odp_ctxt->get_client_disco_mgr().initialize();
-        odp_ctxt->get_service_disco_mgr().initialize();
+        odp_ctxt->get_client_disco_mgr().initialize(inspector);
+        odp_ctxt->get_service_disco_mgr().initialize(inspector);
         odp_thread_local_ctxt->initialize(*this, true);
-        odp_ctxt->initialize();
+        odp_ctxt->initialize(inspector);
 
         // do not reload third party on reload_config()
         if (!tp_appid_ctxt)
@@ -158,10 +158,10 @@ OdpContext::OdpContext(const AppIdConfig& config, SnortConfig* sc)
     version = next_version++;
 }
 
-void OdpContext::initialize()
+void OdpContext::initialize(AppIdInspector& inspector)
 {
-    service_pattern_detector->finalize_service_port_patterns();
-    client_pattern_detector->finalize_client_port_patterns();
+    service_pattern_detector->finalize_service_port_patterns(inspector);
+    client_pattern_detector->finalize_client_port_patterns(inspector);
     service_disco_mgr.finalize_service_patterns();
     client_disco_mgr.finalize_client_patterns();
     http_matchers.finalize_patterns();
index 20bd67a7ad58bd225c86fd1158bd26f7008f7b71..08c51566230c4ad24bee9e03f15d8946b3fa5301 100644 (file)
@@ -62,6 +62,7 @@ enum SnortProtoIdIndex
     PROTO_INDEX_MAX
 };
 
+class AppIdInspector;
 class PatternClientDetector;
 class PatternServiceDetector;
 
@@ -118,7 +119,7 @@ public:
     uint16_t max_packet_service_fail_ignore_bytes = MIN_MAX_PKT_BEFORE_SERVICE_FAIL_IGNORE_BYTES;
 
     OdpContext(const AppIdConfig&, snort::SnortConfig*);
-    void initialize();
+    void initialize(AppIdInspector& inspector);
     void reload();
 
     uint32_t get_version() const
@@ -261,7 +262,7 @@ public:
 
     void create_odp_ctxt();
     void create_tp_appid_ctxt();
-    bool init_appid(snort::SnortConfig*);
+    bool init_appid(snort::SnortConfig*, AppIdInspector&);
     static void pterm();
     void show() const;
 
index 93479451c45be2963ac44958668da17a684a6b5f..6cdffa05d9df736ace471a3fc2f0297643aa61d4 100644 (file)
@@ -25,7 +25,6 @@
 
 #include "appid_detector.h"
 
-#include "managers/inspector_manager.h"
 #include "protocols/packet.h"
 
 #include "app_info_table.h"
@@ -36,7 +35,7 @@
 
 using namespace snort;
 
-int AppIdDetector::initialize()
+int AppIdDetector::initialize(AppIdInspector& inspector)
 {
     if ( !tcp_patterns.empty() )
         for (auto& pat : tcp_patterns)
@@ -48,9 +47,7 @@ int AppIdDetector::initialize()
 
     if (!appid_registry.empty())
     {
-        AppIdInspector* inspector = (AppIdInspector*) InspectorManager::get_inspector(MOD_NAME);
-        assert(inspector);
-        AppIdContext& ctxt = inspector->get_ctxt();
+        AppIdContext& ctxt = inspector.get_ctxt();
         for (auto& id : appid_registry)
             register_appid(id.appId, id.additionalInfo, ctxt.get_odp_ctxt());
       }
index 62bc2831b44e9cfe5b20ce44e71275def86ab81a..9123d7e6eaa5dd83e9d55e2b0bd167b6e6fdb5f9 100644 (file)
@@ -32,6 +32,7 @@
 #include "service_state.h"
 
 class AppIdContext;
+class AppIdInspector;
 class LuaStateDescriptor;
 
 namespace snort
@@ -110,7 +111,7 @@ public:
     AppIdDetector() = default;
     virtual ~AppIdDetector() = default;
 
-    virtual int initialize();
+    virtual int initialize(AppIdInspector&);
     virtual void reload();
     virtual void do_custom_init() { }
     virtual void do_custom_reload() { }
index 27be6db79e9eedac01e5e571c3636f25c7dc521a..799b14f4e602931244b04ef2321b61f02139716e 100644 (file)
@@ -391,7 +391,7 @@ bool AppIdDiscovery::do_pre_discovery(Packet* p, AppIdSession*& asd, AppIdInspec
 
     if (!asd)
     {
-        asd = AppIdSession::allocate_session(p, protocol, direction, &inspector, odp_ctxt);
+        asd = AppIdSession::allocate_session(p, protocol, direction, inspector, odp_ctxt);
         if (p->flow->get_session_flags() & SSNFLAG_MIDSTREAM)
         {
             flow_flags |= APPID_SESSION_MID;
index ef790892c3eba865d05b7cdcb712b1d16cbc97b2..7611dffa9610208bd87ce32dbc56b35a45e0a47e 100644 (file)
@@ -102,7 +102,7 @@ public:
 
     static void tterm();
 
-    virtual void initialize() = 0;
+    virtual void initialize(AppIdInspector&) = 0;
     virtual void reload() = 0;
     virtual void register_detector(const std::string&, AppIdDetector*,  IpProtocol);
     virtual void add_pattern_data(AppIdDetector*, snort::SearchTool&, int position,
index c238a5e77c93dcec796bc9c46f2e3ae07d1ac307..4b6324dc751dddd9e64a580b325c0558a04e3c55 100644 (file)
@@ -30,7 +30,6 @@
 #include <cassert>
 
 #include "detection/detection_engine.h"
-#include "managers/inspector_manager.h"
 #include "app_info_table.h"
 #include "appid_debug.h"
 #include "appid_discovery.h"
@@ -54,12 +53,11 @@ void HttpEventHandler::handle(DataEvent& event, Flow* flow)
     if ( !asd )
     {
         // The event is received before appid has seen any packet, e.g., data on SYN
-        auto inspector = (AppIdInspector*) InspectorManager::get_inspector(MOD_NAME);
         asd = AppIdSession::allocate_session( p, p->get_ip_proto_next(), direction,
             inspector, *pkt_thread_odp_ctxt );
         if ( appidDebug->is_enabled() )
         {
-            appidDebug->activate(flow, asd, inspector->get_ctxt().config.log_all_sessions);
+            appidDebug->activate(flow, asd, inspector.get_ctxt().config.log_all_sessions);
             if ( appidDebug->is_active() )
                 LogMessage("AppIdDbg %s New AppId session at HTTP event\n",
                     appidDebug->get_debug_session());
@@ -117,13 +115,14 @@ void HttpEventHandler::handle(DataEvent& event, Flow* flow)
         {
             hsession->set_field(REQ_HOST_FID, header_start, header_length, change_bits);
             asd->scan_flags |= SCAN_HTTP_HOST_URL_FLAG;
+        }
 
-            header_start = http_event->get_uri(header_length);
-            if (header_length > 0)
-            {
-                hsession->set_field(REQ_URI_FID, header_start, header_length, change_bits);
-                hsession->update_url(change_bits);
-            }
+        header_start = http_event->get_uri(header_length);
+        if (header_length > 0)
+        {
+            hsession->set_field(REQ_URI_FID, header_start, header_length, change_bits);
+            asd->scan_flags |= SCAN_HTTP_URI_FLAG;
+            hsession->update_url(change_bits);
         }
 
         header_start = http_event->get_user_agent(header_length);
index 9ac4a1d9cbb3381ade99e7ea6d49a51dc18b1a7e..58edba1a9e53460cf903106926d9bd19d9daf9af 100644 (file)
@@ -33,6 +33,8 @@ namespace snort
 class Flow;
 }
 
+class AppIdInspector;
+
 class HttpEventHandler : public snort::DataHandler
 {
 public:
@@ -42,15 +44,15 @@ public:
         RESPONSE_EVENT,
     };
 
-    HttpEventHandler(HttpEventType type) : DataHandler(MOD_NAME)
-    {
-        event_type = type;
-    }
+    HttpEventHandler(HttpEventType type, AppIdInspector& inspector) :
+        DataHandler(MOD_NAME), event_type(type), inspector(inspector)
+    { }
 
     void handle(snort::DataEvent&, snort::Flow*) override;
 
 private:
     HttpEventType event_type;
+    AppIdInspector& inspector;
 };
 
 #endif
index 767a670babedfc8eae3595e3f2cdcf890f4a2e15..3f9b89e6ba65b35eb6b94820e2f11e5324071487 100644 (file)
@@ -118,16 +118,15 @@ bool AppIdInspector::configure(SnortConfig* sc)
 
     ctxt = new AppIdContext(const_cast<AppIdConfig&>(*config));
 
-    my_seh = SipEventHandler::create();
-    my_seh->subscribe(sc);
+    ctxt->init_appid(sc, *this);
 
-    ctxt->init_appid(sc);
+    DataBus::subscribe_global(SIP_EVENT_TYPE_SIP_DIALOG_KEY, new SipEventHandler(*this), sc);
 
     DataBus::subscribe_global(HTTP_REQUEST_HEADER_EVENT_KEY, new HttpEventHandler(
-        HttpEventHandler::REQUEST_EVENT), sc);
+        HttpEventHandler::REQUEST_EVENT, *this), sc);
 
     DataBus::subscribe_global(HTTP_RESPONSE_HEADER_EVENT_KEY, new HttpEventHandler(
-        HttpEventHandler::RESPONSE_EVENT), sc);
+        HttpEventHandler::RESPONSE_EVENT, *this), sc);
 
     DataBus::subscribe_global(DATA_DECRYPT_EVENT, new DataDecryptEventHandler(), sc);
 
index 56f8a5ff946c7a518d385ccbc9e7d6951d220633..1dd2346770475279bd49ea851435353e4415416e 100644 (file)
@@ -378,10 +378,10 @@ static int reload_detectors(lua_State* L)
     odp_thread_local_ctxt = new OdpThreadContext;
 
     OdpContext& odp_ctxt = ctxt.get_odp_ctxt();
-    odp_ctxt.get_client_disco_mgr().initialize();
-    odp_ctxt.get_service_disco_mgr().initialize();
+    odp_ctxt.get_client_disco_mgr().initialize(*inspector);
+    odp_ctxt.get_service_disco_mgr().initialize(*inspector);
     odp_thread_local_ctxt->initialize(ctxt, true, true);
-    odp_ctxt.initialize();
+    odp_ctxt.initialize(*inspector);
 
     bool from_shell = ( L != nullptr );
     current_request->respond("== swapping detectors configuration\n", from_shell);
index d196ad623fc38b30c4be678e33f52b5b5eeb9bc6..e946f0eaa1f7bd43900190e1d9ca9873ce92f342 100644 (file)
@@ -73,7 +73,7 @@ const uint8_t* service_strstr(const uint8_t* haystack, unsigned haystack_len,
 }
 
 AppIdSession* AppIdSession::allocate_session(const Packet* p, IpProtocol proto,
-    AppidSessionDirection direction, AppIdInspector* inspector, OdpContext& odp_context)
+    AppidSessionDirection direction, AppIdInspector& inspector, OdpContext& odp_context)
 {
     uint16_t port = 0;
 
@@ -83,7 +83,7 @@ AppIdSession* AppIdSession::allocate_session(const Packet* p, IpProtocol proto,
         (p->ptrs.sp != p->ptrs.dp))
         port = (direction == APP_ID_FROM_INITIATOR) ? p->ptrs.sp : p->ptrs.dp;
 
-    AppIdSession* asd = new AppIdSession(proto, ip, port, *inspector, odp_context,
+    AppIdSession* asd = new AppIdSession(proto, ip, port, inspector, odp_context,
         p->pkth->address_space_id);
     asd->flow = p->flow;
     asd->stats.first_packet_second = p->pkth->ts.tv_sec;
index fd5886da977876a2405dbdba610810b51c78387d..b9ac1cee41016e6054f2e264115dcfdb1eac8d2e 100644 (file)
@@ -238,7 +238,7 @@ public:
     ~AppIdSession() override;
 
     static AppIdSession* allocate_session(const snort::Packet*, IpProtocol,
-        AppidSessionDirection, AppIdInspector*, OdpContext&);
+        AppidSessionDirection, AppIdInspector&, OdpContext&);
     static AppIdSession* create_future_session(const snort::Packet*, const snort::SfIp*, uint16_t,
         const snort::SfIp*, uint16_t, IpProtocol, SnortProtocolId, bool swap_app_direction=false);
     void initialize_future_session(AppIdSession&, uint64_t, AppidSessionDirection);
index 80f49c0b2da6b334c8bd39603afed28aae80aa3a..7dd289e2d60c7e4d57cc3202244c2fa9c0a746ae 100644 (file)
@@ -27,7 +27,6 @@
 
 #include "log/text_log.h"
 #include "log/unified2.h"
-#include "managers/inspector_manager.h"
 #include "time/packet_time.h"
 
 #include "appid_config.h"
index a2b692c82c4141998079b3c2cfbc0f30962a6bd8..abb92018d621cd6d7364889314e9d532b9e0c340 100644 (file)
@@ -50,7 +50,7 @@ using namespace snort;
 
 #define MAX_CANDIDATE_CLIENTS 10
 
-void ClientDiscovery::initialize()
+void ClientDiscovery::initialize(AppIdInspector& inspector)
 {
     new BitClientDetector(this);
     new BitTrackerClientDetector(this);
@@ -68,10 +68,10 @@ void ClientDiscovery::initialize()
     new VncClientDetector(this);
 
     for ( auto kv : tcp_detectors )
-        kv.second->initialize();
+        kv.second->initialize(inspector);
 
     for ( auto kv : udp_detectors )
-        kv.second->initialize();
+        kv.second->initialize(inspector);
 }
 
 void ClientDiscovery::reload()
index 20b8d7ef9febc17160f419ef319728307da6e0ce..fec7a721506ab1ecd959859cc1f08a2ba9bc8871 100644 (file)
@@ -29,6 +29,7 @@
 #include "appid_types.h"
 
 class ClientDetector;
+class AppIdInspector;
 class AppIdSession;
 
 struct ClientAppMatch
@@ -41,7 +42,7 @@ struct ClientAppMatch
 class ClientDiscovery : public AppIdDiscovery
 {
 public:
-    void initialize() override;
+    void initialize(AppIdInspector&) override;
     void reload() override;
 
     void finalize_client_patterns();
index 39dc1debb49c386f211d4d7d81d6f5cbdaeb9619..292624d678c94795ff384f8444f06a03fdbd189f 100644 (file)
@@ -27,7 +27,6 @@
 
 #include "log/messages.h"
 #include "main/snort_debug.h"
-#include "managers/inspector_manager.h"
 #include "protocols/packet.h"
 #include "search_engines/search_tool.h"
 
@@ -73,7 +72,8 @@ static void free_pattern_service(PatternService* ps)
     }
 }
 
-static void read_patterns(PortPatternNode* portPatternList, PatternService** serviceList)
+static void read_patterns(PortPatternNode* portPatternList, PatternService** serviceList,
+    AppIdInspector& inspector)
 {
     PatternService* ps = nullptr;
     char* lastName = nullptr;
@@ -117,10 +117,7 @@ static void read_patterns(PortPatternNode* portPatternList, PatternService** ser
         pattern->next = ps->pattern;
         ps->pattern = pattern;
 
-        // FIXIT-M: Tp support ODP reload, store ODP context in PatternService
-        AppIdInspector* inspector = (AppIdInspector*) InspectorManager::get_inspector(MOD_NAME);
-        assert(inspector);
-        AppIdContext& ctxt = inspector->get_ctxt();
+        AppIdContext& ctxt = inspector.get_ctxt();
 
         ctxt.get_odp_ctxt().get_app_info_mgr().set_app_info_active(ps->id);
     }
@@ -404,9 +401,9 @@ void PatternServiceDetector::insert_service_port_pattern(PortPatternNode* pPatte
     }
 }
 
-void PatternServiceDetector::finalize_service_port_patterns()
+void PatternServiceDetector::finalize_service_port_patterns(AppIdInspector& inspector)
 {
-    read_patterns(lua_injected_patterns, &service_port_pattern);
+    read_patterns(lua_injected_patterns, &service_port_pattern, inspector);
     install_ports(service_port_pattern);
     create_service_pattern_trees();
     register_service_patterns();
@@ -638,9 +635,9 @@ void PatternClientDetector::register_client_patterns()
         udp_pattern_matcher->prep();
 }
 
-void PatternClientDetector::finalize_client_port_patterns()
+void PatternClientDetector::finalize_client_port_patterns(AppIdInspector& inspector)
 {
-    read_patterns(lua_injected_patterns, &service_port_pattern);
+    read_patterns(lua_injected_patterns, &service_port_pattern, inspector);
     create_client_pattern_trees();
     register_client_patterns();
     dump_patterns("Client", service_port_pattern);
index 2d82498fbe24b5351755bbfe1970834618e9f11f..19a02614af79651bb96f871e1eda56f9ef4a91b0 100644 (file)
@@ -31,6 +31,8 @@ namespace snort
 class SearchTool;
 }
 
+class AppIdInspector;
+
 struct PortPatternNode
 {
     AppId appId;
@@ -78,7 +80,7 @@ public:
     ~PatternClientDetector() override;
 
     void insert_client_port_pattern(PortPatternNode*);
-    void finalize_client_port_patterns();
+    void finalize_client_port_patterns(AppIdInspector&);
     void reload_client_port_patterns();
 
     int validate(AppIdDiscoveryArgs&) override;
@@ -100,7 +102,7 @@ public:
     ~PatternServiceDetector() override;
 
     void insert_service_port_pattern(PortPatternNode*);
-    void finalize_service_port_patterns();
+    void finalize_service_port_patterns(AppIdInspector&);
     void reload_service_port_patterns();
 
     int validate(AppIdDiscoveryArgs&) override;
index bb96532f242dd89c1cf44a3a513811fba6efc287..3a84871f7f1d5f2adaf81928ab52ac6bb0158c06 100644 (file)
@@ -28,7 +28,6 @@
 #include "appid_debug.h"
 #include "appid_inspector.h"
 #include "app_info_table.h"
-#include "managers/inspector_manager.h"
 #include "protocols/packet.h"
 
 using namespace snort;
@@ -331,8 +330,8 @@ void SipEventHandler::handle(DataEvent& event, Flow* flow)
     {
         IpProtocol protocol = p->is_tcp() ? IpProtocol::TCP : IpProtocol::UDP;
         AppidSessionDirection direction = p->is_from_client() ? APP_ID_FROM_INITIATOR : APP_ID_FROM_RESPONDER;
-        AppIdInspector* inspector = (AppIdInspector*) InspectorManager::get_inspector(MOD_NAME, true);
-        asd = AppIdSession::allocate_session(p, protocol, direction, inspector, inspector->get_ctxt().get_odp_ctxt());
+        asd = AppIdSession::allocate_session(p, protocol, direction, inspector,
+            inspector.get_ctxt().get_odp_ctxt());
     }
 
     AppidChangeBits change_bits;
index 9dddfef6b9d638d9563cc522a1e905c1f5990892..eb9af2c84065f66f8513424876f3902793c4e695 100644 (file)
@@ -34,6 +34,7 @@ namespace snort
 class Flow;
 }
 
+class AppIdInspector;
 class SipEventHandler;
 
 class SipUdpClientDetector : public ClientDetector
@@ -69,27 +70,22 @@ private:
 class SipEventHandler : public snort::DataHandler
 {
 public:
-
-    static SipEventHandler* create()
-    {
-        return new SipEventHandler;
-    }
+    SipEventHandler(AppIdInspector& inspector) :
+        DataHandler(MOD_NAME), inspector(inspector)
+    { }
 
     static void set_client(SipUdpClientDetector* cd) { SipEventHandler::client = cd; }
     static void set_service(SipServiceDetector* sd) { SipEventHandler::service = sd; }
 
-    void subscribe(snort::SnortConfig* sc)
-    { snort::DataBus::subscribe_global(SIP_EVENT_TYPE_SIP_DIALOG_KEY, this, sc); }
-
     void handle(snort::DataEvent&, snort::Flow*) override;
 
 private:
-    SipEventHandler() : DataHandler(MOD_NAME) { }
     void client_handler(SipEvent&, AppIdSession&, AppidChangeBits&);
     void service_handler(SipEvent&, AppIdSession&, AppidChangeBits&);
 
     static SipUdpClientDetector* client;
     static SipServiceDetector* service;
+    AppIdInspector& inspector;
 };
 #endif
 
index 801a262b40c0b2ba8e0df3dbe6b9ce388071aefa..e609912242690895800eb3187322a4bacccc990c 100644 (file)
@@ -216,7 +216,7 @@ void ServiceAppDescriptor::update_stats(AppId, bool){}
 void ClientAppDescriptor::update_user(AppId, const char*, AppidChangeBits&){}
 void ClientAppDescriptor::update_stats(AppId, bool) {}
 void PayloadAppDescriptor::update_stats(AppId, bool) {}
-void ServiceDiscovery::initialize() {}
+void ServiceDiscovery::initialize(AppIdInspector&) {}
 void ServiceDiscovery::reload() {}
 
 int ServiceDiscovery::add_service_port(AppIdDetector*, const ServiceDetectorPort&)
index 631d4af8d4e5bacf8eef981b39ca200cbae156a1..2f56788015fc0b408423a2b55c47a4f7a6852033 100644 (file)
@@ -65,7 +65,7 @@ void SearchTool::reload() { }
 
 void ApplicationDescriptor::set_id(const Packet&, AppIdSession&, AppidSessionDirection, AppId, AppidChangeBits&) { }
 AppIdDiscovery::~AppIdDiscovery() { }
-void ClientDiscovery::initialize() { }
+void ClientDiscovery::initialize(AppIdInspector&) { }
 void ClientDiscovery::reload() { }
 void AppIdDiscovery::register_detector(const string&, AppIdDetector*, IpProtocol) { }
 void AppIdDiscovery::add_pattern_data(AppIdDetector*, snort::SearchTool&, int, unsigned char const*, unsigned int, unsigned int) { }
index 0c7dfff80ac774f181b491f3e2e8a2d4ce5dcae8..b7f09b1706c5b02f8f36260f96bd8b6e9a57f44a 100644 (file)
@@ -35,6 +35,7 @@
 #include "appid_config.h"
 #include "appid_debug.h"
 #include "appid_dns_session.h"
+#include "appid_inspector.h"
 #include "appid_session.h"
 #include "detector_plugins/detector_dns.h"
 #include "detector_plugins/detector_imap.h"
@@ -84,7 +85,7 @@ using namespace snort;
 
 static ServiceDetector* ftp_service;
 
-void ServiceDiscovery::initialize()
+void ServiceDiscovery::initialize(AppIdInspector& inspector)
 {
     new BattleFieldServiceDetector(this);
     new BgpServiceDetector(this);
@@ -133,12 +134,12 @@ void ServiceDiscovery::initialize()
 
     for ( auto kv : tcp_detectors )
     {
-        kv.second->initialize();
+        kv.second->initialize(inspector);
         service_detector_list.emplace_back(kv.second);
     }
     for ( auto kv : udp_detectors )
     {
-        kv.second->initialize();
+        kv.second->initialize(inspector);
         service_detector_list.emplace_back(kv.second);
     }
 }
index e8d9ce5739fe773413abaa8987a1df2bd05ba3f5..a7719f252836ce0b8a9ec09183017659bd1cc70a 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "appid_types.h"
 
+class AppIdInspector;
 class AppIdSession;
 class ServiceDetector;
 class ServiceDiscoveryState;
@@ -63,7 +64,7 @@ class ServiceDiscovery : public AppIdDiscovery
 {
 public:
     ~ServiceDiscovery() override { }
-    void initialize() override;
+    void initialize(AppIdInspector&) override;
     void reload() override;
     void finalize_service_patterns();
     void reload_service_patterns();
index 2ec89eab0b54413c11dfb916d1ec282f46223787..145a1c7b2071e1d84af69bf9e9e650c57b25a260 100644 (file)
@@ -31,7 +31,7 @@
 #include <CppUTest/TestHarness.h>
 #include <CppUTestExt/MockSupport.h>
 
-void ServiceDiscovery::initialize() {}
+void ServiceDiscovery::initialize(AppIdInspector&) {}
 void ServiceDiscovery::reload() {}
 void ServiceDiscovery::finalize_service_patterns() {}
 void ServiceDiscovery::match_by_pattern(AppIdSession&, const Packet*, IpProtocol) {}
index 16edfde294920f3fdd32bacba4c1e30c73d05197..39b1b5fd192dbee291eb7cbeac491c82cd367fb1 100644 (file)
@@ -84,11 +84,11 @@ SslPatternMatchers::~SslPatternMatchers() { }
 SipPatternMatchers::~SipPatternMatchers() { }
 HttpPatternMatchers::~HttpPatternMatchers() { }
 DnsPatternMatchers::~DnsPatternMatchers() { }
-void ClientDiscovery::initialize() {}
+void ClientDiscovery::initialize(AppIdInspector&) {}
 void ClientDiscovery::reload() {}
 FpSMBData* smb_data = nullptr;
 
-int AppIdDetector::initialize(){return 0;}
+int AppIdDetector::initialize(AppIdInspector&){return 0;}
 void AppIdDetector::reload() { }
 int AppIdDetector::data_add(AppIdSession&, void*, AppIdFreeFCN){return 0;}
 void* AppIdDetector::data_get(AppIdSession&) {return nullptr;}
index f4e46aa2d27746e9674da80b73185c45938fe1a5..5a5028c0625b29898cbfeae2d12f2a097629c483 100644 (file)
@@ -38,8 +38,6 @@
 
 namespace snort
 {
-Inspector* InspectorManager::get_inspector(
-    char const*, bool, const snort::SnortConfig*) { return nullptr; }
 AppIdSessionApi::AppIdSessionApi(const AppIdSession*, const SfIp&) :
     StashGenericObject(STASH_GENERIC_OBJECT_APPID) {}
 }
index 6504b51a632ca4c6ff849c40e6e471f309416736..11e157c7ba3af5dd3ad7c44aad9612ae481c0bad 100644 (file)
@@ -205,7 +205,7 @@ void AppIdSession::update_encrypted_app_id(AppId) {}
 bool AppIdSession::is_tp_processing_done() const {return 0;}
 AppId AppIdSession::pick_ss_payload_app_id(AppId) const { return get_payload_id(); }
 AppIdSession* AppIdSession::allocate_session(const Packet*, IpProtocol,
-    AppidSessionDirection, AppIdInspector*, OdpContext&)
+    AppidSessionDirection, AppIdInspector&, OdpContext&)
 {
     return nullptr;
 }
@@ -219,7 +219,7 @@ void AppIdSession::publish_appid_event(AppidChangeBits& change_bits, const Packe
 void AppIdHttpSession::set_tun_dest(){}
 
 // Stubs for ServiceDiscovery
-void ServiceDiscovery::initialize() {}
+void ServiceDiscovery::initialize(AppIdInspector&) {}
 void ServiceDiscovery::reload() {}
 void ServiceDiscovery::finalize_service_patterns() {}
 void ServiceDiscovery::match_by_pattern(AppIdSession&, const Packet*, IpProtocol) {}
@@ -249,7 +249,7 @@ AppId HostTracker::get_appid(Port, IpProtocol, bool, bool)
 void HostTracker::remove_flows() {}
 
 // Stubs for ClientDiscovery
-void ClientDiscovery::initialize() {}
+void ClientDiscovery::initialize(AppIdInspector&) {}
 void ClientDiscovery::reload() {}
 void ClientDiscovery::finalize_client_patterns() {}
 static ClientDiscovery* c_discovery_manager = new ClientDiscovery();
index 02809c2e15231b419c6d2c72bad2c21e382d75a3..b9b9708f65a9b64d179b96fb103cd5448193edc7 100644 (file)
@@ -51,9 +51,6 @@ using namespace snort;
 namespace snort
 {
 AppIdApi appid_api;
-Inspector* InspectorManager::get_inspector(
-    char const*, bool, const snort::SnortConfig*) { return nullptr; }
-
 Packet::Packet(bool) { }
 Packet::~Packet() { }
 
@@ -85,7 +82,7 @@ class FakeHttpMsgHeader
 FakeHttpMsgHeader* fake_msg_header = nullptr;
 
 AppIdSession* AppIdSession::allocate_session(const Packet*, IpProtocol, AppidSessionDirection,
-    AppIdInspector*, OdpContext&)
+    AppIdInspector&, OdpContext&)
 {
     return nullptr;
 }
@@ -276,7 +273,7 @@ TEST_GROUP(appid_http_event)
 TEST(appid_http_event, handle_null_appid_data)
 {
     HttpEvent event(nullptr, false, 0);
-    HttpEventHandler event_handler(HttpEventHandler::REQUEST_EVENT);
+    HttpEventHandler event_handler(HttpEventHandler::REQUEST_EVENT, dummy_appid_inspector);
     mock().expectOneCall("get_appid_session");
     event_handler.handle(event, flow);
     mock().checkExpectations();
@@ -285,7 +282,7 @@ TEST(appid_http_event, handle_null_appid_data)
 TEST(appid_http_event, handle_null_msg_header)
 {
     HttpEvent event(nullptr, false, 0);
-    HttpEventHandler event_handler(HttpEventHandler::REQUEST_EVENT);
+    HttpEventHandler event_handler(HttpEventHandler::REQUEST_EVENT, dummy_appid_inspector);
 
     mock().strictOrder();
     mock().expectOneCall("get_appid_session");
@@ -317,7 +314,7 @@ static void run_event_handler(TestData test_data, TestData* expect_data = nullpt
 {
     HttpEvent event(nullptr, false, 0);
     FakeHttpMsgHeader http_msg_header;
-    HttpEventHandler event_handler(test_data.type);
+    HttpEventHandler event_handler(test_data.type, dummy_appid_inspector);
     fake_msg_header = &http_msg_header;
 
     host = test_data.host;
@@ -392,7 +389,7 @@ TEST(appid_http_event, handle_msg_header_cookie)
 TEST(appid_http_event, handle_msg_header_host_and_uri)
 {
     TestData test_data;
-    test_data.scan_flags = SCAN_HTTP_HOST_URL_FLAG;
+    test_data.scan_flags = SCAN_HTTP_HOST_URL_FLAG | SCAN_HTTP_URI_FLAG;
     test_data.host = HOST;
     test_data.uri = URI;
 
@@ -522,7 +519,7 @@ TEST(appid_http_event, handle_msg_header_all_request_headers)
     TestData test_data;
     test_data.type = HttpEventHandler::REQUEST_EVENT;
     test_data.scan_flags = SCAN_HTTP_VIA_FLAG | SCAN_HTTP_USER_AGENT_FLAG |
-        SCAN_HTTP_HOST_URL_FLAG;
+        SCAN_HTTP_HOST_URL_FLAG | SCAN_HTTP_URI_FLAG;
     test_data.uri = URI;
     test_data.cookie = COOKIE;
     test_data.host = HOST;
index 957c65750b526753c23a4adfe3df82fb84fb84e2..7b5e0a398e01c5faac5c3a3d07eb8d718b0f2054 100644 (file)
@@ -73,7 +73,7 @@ void ClientAppDescriptor::update_stats(AppId, bool) {}
 void PayloadAppDescriptor::update_stats(AppId, bool) {}
 
 AppIdDiscovery::~AppIdDiscovery() { }
-void ClientDiscovery::initialize() { }
+void ClientDiscovery::initialize(AppIdInspector&) { }
 void ClientDiscovery::reload() { }
 void AppIdDiscovery::register_detector(const string&, AppIdDetector*, IpProtocol) { }
 void AppIdDiscovery::add_pattern_data(AppIdDetector*, snort::SearchTool&, int, unsigned char const*, unsigned int, unsigned int) { }
@@ -100,7 +100,7 @@ int ServiceDiscovery::add_ftp_service_state(AppIdSession&)
     return 0;
 }
 
-void ServiceDiscovery::initialize() { }
+void ServiceDiscovery::initialize(AppIdInspector&) { }
 void ServiceDiscovery::reload() { }
 
 int ServiceDiscovery::add_service_port(AppIdDetector*, const ServiceDetectorPort&)
index ddea1ab07c2e3b5284d7a80abd5d9d337c9caae1..ae2db4a408ea8a99e5574df5ed056066534e5220 100644 (file)
@@ -92,7 +92,7 @@ AppIdSession::AppIdSession(IpProtocol, const SfIp* ip, uint16_t, AppIdInspector&
     api(*(new AppIdSessionApi(this, *ip))), odp_ctxt(stub_odp_ctxt) { }
 AppIdSession::~AppIdSession() = default;
 AppIdDiscovery::~AppIdDiscovery() {}
-void ClientDiscovery::initialize() { }
+void ClientDiscovery::initialize(AppIdInspector&) { }
 void ClientDiscovery::reload() { }
 void AppIdDiscovery::register_detector(const std::string&, AppIdDetector*,  IpProtocol) {}
 void AppIdDiscovery::add_pattern_data(AppIdDetector*, SearchTool&, int, const uint8_t* const,
@@ -103,7 +103,7 @@ void AppIdDiscovery::register_udp_pattern(AppIdDetector*, const uint8_t* const,
     int, unsigned) {}
 int AppIdDiscovery::add_service_port(AppIdDetector*,
     const ServiceDetectorPort&) { return APPID_EINVALID; }
-void ServiceDiscovery::initialize() {}
+void ServiceDiscovery::initialize(AppIdInspector&) {}
 void ServiceDiscovery::reload() {}
 void ServiceDiscovery::finalize_service_patterns() {}
 void ServiceDiscovery::match_by_pattern(AppIdSession&, const Packet*, IpProtocol) {}
index bd14e012346cdd5b1deefa58303cfbf08b545c84..5e1864f4e67d91dd67d4979120a0c46691d25810 100644 (file)
@@ -47,7 +47,7 @@ snort::SearchTool::SearchTool(char const*, bool) { }
 snort::SearchTool::~SearchTool() { }
 
 AppIdDiscovery::~AppIdDiscovery() { }
-void ClientDiscovery::initialize() { }
+void ClientDiscovery::initialize(AppIdInspector&) { }
 void ClientDiscovery::reload() { }
 void AppIdDiscovery::register_detector(const string&, AppIdDetector*, IpProtocol) { }
 void AppIdDiscovery::add_pattern_data(AppIdDetector*, snort::SearchTool&, int, unsigned char const*, unsigned int, unsigned int) { }
@@ -60,7 +60,7 @@ SipPatternMatchers::~SipPatternMatchers() { }
 SslPatternMatchers::~SslPatternMatchers() { }
 AppIdConfig::~AppIdConfig() { }
 OdpContext::OdpContext(const AppIdConfig&, snort::SnortConfig*) { }
-void ServiceDiscovery::initialize() { }
+void ServiceDiscovery::initialize(AppIdInspector&) { }
 void ServiceDiscovery::reload() { }
 int ServiceDiscovery::add_service_port(AppIdDetector*, const ServiceDetectorPort&)
 { return 0; }