]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #1582 in SNORT/snort3 from ~MDAGON/snort3:rm_inspector_ptr to...
authorTom Peters (thopeter) <thopeter@cisco.com>
Fri, 19 Apr 2019 18:24:18 +0000 (14:24 -0400)
committerTom Peters (thopeter) <thopeter@cisco.com>
Fri, 19 Apr 2019 18:24:18 +0000 (14:24 -0400)
Squashed commit of the following:

commit 08accc17ea648f31d2f1972af76508ea5465aaf2
Author: Maya Dagon <mdagon@cisco.com>
Date:   Thu Apr 4 09:25:01 2019 -0400

    appid: remove inspector reference from detectors

31 files changed:
src/flow/flow.h
src/network_inspectors/appid/appid_config.cc
src/network_inspectors/appid/appid_config.h
src/network_inspectors/appid/appid_discovery.cc
src/network_inspectors/appid/appid_discovery.h
src/network_inspectors/appid/appid_inspector.cc
src/network_inspectors/appid/appid_session.cc
src/network_inspectors/appid/appid_session.h
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_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/lua_detector_api.cc
src/network_inspectors/appid/lua_detector_flow_api.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/service_ftp.cc
src/network_inspectors/appid/service_plugins/service_rexec.cc
src/network_inspectors/appid/service_plugins/service_rpc.cc
src/network_inspectors/appid/service_plugins/service_rshell.cc
src/network_inspectors/appid/service_plugins/service_snmp.cc
src/network_inspectors/appid/service_plugins/service_ssl.cc
src/network_inspectors/appid/service_plugins/service_ssl.h
src/network_inspectors/appid/service_plugins/service_tftp.cc
src/network_inspectors/appid/test/appid_debug_test.cc
src/network_inspectors/appid/test/appid_discovery_test.cc
src/network_inspectors/appid/test/appid_http_session_test.cc
src/network_inspectors/appid/test/appid_mock_session.h
src/network_inspectors/appid/test/service_state_test.cc
src/network_inspectors/appid/tp_appid_utils.cc

index 9d378bb3822143c012fa317f9d09a1bec8ccb33e..48ca0df581a754ad05b2495d8747789981b6bf0d 100644 (file)
@@ -118,6 +118,7 @@ public:
 
     void update_allocations(size_t);
     void update_deallocations(size_t);
+    Inspector* get_handler() {return handler;}
 
     // return fixed size (could be an approx avg)
     // this must be fixed for life of flow data instance
index c5c04099ad36cda9f9f9d51b4ba0f74568f05f95..da2f6a5b077b7fee47544185c383f0dbbee261e2 100644 (file)
@@ -102,6 +102,10 @@ AppIdModuleConfig::~AppIdModuleConfig()
 
 // FIXIT-M: RELOAD - move initialization back to AppIdConfig class constructor
 AppInfoManager& AppIdConfig::app_info_mgr = AppInfoManager::get_instance();
+std::array<AppId, APP_ID_PORT_ARRAY_SIZE> AppIdConfig::tcp_port_only = {APP_ID_NONE};
+std::array<AppId, APP_ID_PORT_ARRAY_SIZE> AppIdConfig::udp_port_only = {APP_ID_NONE};
+std::array<AppId, 256> AppIdConfig::ip_protocol = {APP_ID_NONE};
+
 
 AppIdConfig::AppIdConfig(AppIdModuleConfig* config)
     : mod_config(config)
@@ -111,15 +115,6 @@ AppIdConfig::AppIdConfig(AppIdModuleConfig* config)
         net_list_by_zone[ i ] = nullptr;
 #endif
 
-    for ( unsigned i = 0; i < 65535; i++ )
-    {
-        tcp_port_only[ i ] = APP_ID_NONE;
-        udp_port_only[ i ] = APP_ID_NONE;
-    }
-
-    for ( unsigned i = 0; i < 255; i++ )
-        ip_protocol[ i ] = APP_ID_NONE;
-
     for ( unsigned i = 0; i < APP_ID_PORT_ARRAY_SIZE; i++ )
     {
         tcp_port_exclusions_src[ i ] = nullptr;
@@ -750,17 +745,17 @@ void AppIdConfig::set_safe_search_enforcement(bool enabled)
     mod_config->safe_search_enabled = enabled;
 }
 
-bool AppIdConfig::init_appid(SnortConfig* sc, AppIdInspector *ins)
+bool AppIdConfig::init_appid(SnortConfig* sc)
 {
     // FIXIT-M: RELOAD - Get rid of "once" flag
     // Handle the if condition in AppIdConfig::init_appid
     static bool once = false;
     if (!once)
-    {      
+    {   
         AppIdConfig::app_info_mgr.init_appid_info_table(mod_config, sc);
         HostPortCache::initialize();
         HttpPatternMatchers* http_matchers = HttpPatternMatchers::get_instance();
-        AppIdDiscovery::initialize_plugins(ins);
+        AppIdDiscovery::initialize_plugins();
         init_length_app_cache();
         LuaDetectorManager::initialize(*this, 1);
         PatternServiceDetector::finalize_service_port_patterns();
index fc6809a1cf4e7e8a5251462159e2a3def5c21021..ca059ce36fea999da83101162adb60dddba6220f 100644 (file)
@@ -109,7 +109,7 @@ public:
     AppIdConfig(AppIdModuleConfig*);
     ~AppIdConfig();
 
-    bool init_appid(snort::SnortConfig*, AppIdInspector*);
+    bool init_appid(snort::SnortConfig*);
     static void pterm();
     void cleanup();
     void show();
@@ -123,9 +123,12 @@ public:
     NetworkSet* net_list = nullptr;
     std::array<NetworkSet*, MAX_ZONES> net_list_by_zone;
 #endif
-    std::array<AppId, APP_ID_PORT_ARRAY_SIZE> tcp_port_only;     // port-only TCP services
-    std::array<AppId, APP_ID_PORT_ARRAY_SIZE> udp_port_only;     // port-only UDP services
-    std::array<AppId, 255> ip_protocol;         // non-TCP / UDP protocol services
+
+    //FIXIT-L remove static when reload is supported (once flag removed)
+    static std::array<AppId, APP_ID_PORT_ARRAY_SIZE> tcp_port_only;     // port-only TCP services
+    static std::array<AppId, APP_ID_PORT_ARRAY_SIZE> udp_port_only;     // port-only UDP services
+    static std::array<AppId, 256> ip_protocol;         // non-TCP / UDP protocol services
+
     SF_LIST client_app_args;                    // List of Client App arguments
     // for each potential port, an sflist of PortExclusion structs
     AppIdPortExclusions tcp_port_exclusions_src;
index 0f967d3ee2e2a8a0918b85d6bfe4a7491bc7e1ad..de56aa8d545feeb8407b329b0344ae10fad5c4e5 100644 (file)
@@ -52,8 +52,7 @@
 
 using namespace snort;
 
-AppIdDiscovery::AppIdDiscovery(AppIdInspector& ins)
-    : inspector(ins)
+AppIdDiscovery::AppIdDiscovery()
 {
     tcp_patterns = new SearchTool("ac_full", true);
     udp_patterns = new SearchTool("ac_full", true);
@@ -76,10 +75,10 @@ AppIdDiscovery::~AppIdDiscovery()
         delete kv.second;
 }
 
-void AppIdDiscovery::initialize_plugins(AppIdInspector* ins)
+void AppIdDiscovery::initialize_plugins()
 {
-    ServiceDiscovery::get_instance(ins);
-    ClientDiscovery::get_instance(ins);
+    ServiceDiscovery::get_instance();
+    ClientDiscovery::get_instance();
 }
 
 void AppIdDiscovery::finalize_plugins()
@@ -728,7 +727,7 @@ bool AppIdDiscovery::do_pre_discovery(Packet* p, AppIdSession** p_asd, AppIdInsp
     // TMP session and that is not being freed before creating the new one below
     if ( !asd || asd->common.flow_type == APPID_FLOW_TYPE_TMP )
     {
-        *p_asd = asd = AppIdSession::allocate_session(p, protocol, direction, inspector);
+        *p_asd = asd = AppIdSession::allocate_session(p, protocol, direction, &inspector);
         if (p->flow->get_session_flags() & SSNFLAG_MIDSTREAM)
         {
             asd->set_session_flags(APPID_SESSION_MID);
index 1f2240c9bcf63476cf1893587399829c7d62f645..bbc3a4322910f94a76cde2750fc743079e7258e0 100644 (file)
@@ -88,13 +88,13 @@ typedef AppIdDetectors::iterator AppIdDetectorsIterator;
 class AppIdDiscovery
 {
 public:
-    AppIdDiscovery(AppIdInspector& ins);
+    AppIdDiscovery();
     virtual ~AppIdDiscovery();
 
     AppIdDiscovery(const AppIdDiscovery&) = delete;
     AppIdDiscovery& operator=(const AppIdDiscovery&) = delete;
 
-    static void initialize_plugins(AppIdInspector* ins);
+    static void initialize_plugins();
     static void finalize_plugins();
     static void release_plugins();
     static void tterm();
@@ -122,11 +122,7 @@ public:
         return &udp_detectors;
     }
 
-    AppIdInspector& get_inspector()
-    { return inspector; }
-
 protected:
-    AppIdInspector& inspector;
     AppIdDetectors tcp_detectors;
     AppIdDetectors udp_detectors;
     snort::SearchTool* tcp_patterns = nullptr;
index 808fd76c70ebc29933a1f07062d6b398730f642e..2473f0294352305d9771799b645b1e307da207f0 100644 (file)
@@ -113,7 +113,7 @@ bool AppIdInspector::configure(SnortConfig* sc)
     my_seh = SipEventHandler::create();
     my_seh->subscribe();
 
-    active_config->init_appid(sc, this);
+    active_config->init_appid(sc);
 
 #ifdef ENABLE_APPID_THIRD_PARTY
     if (!TPLibHandler::have_tp())
index f587222a12a0c8cf1604d42cd8b77a0acfd5c7a9..2255ee18f715a06de0c14f1b5550db842a8c2a7d 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "log/messages.h"
 #include "main/snort_config.h"
+#include "managers/inspector_manager.h"
 #include "profiler/profiler.h"
 #include "protocols/packet.h"
 #include "protocols/tcp.h"
@@ -71,8 +72,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)
+    AppidSessionDirection direction, AppIdInspector* inspector)
 {
     uint16_t port = 0;
 
@@ -81,7 +81,7 @@ AppIdSession* AppIdSession::allocate_session(const Packet* p, IpProtocol proto,
     if ( ( proto == IpProtocol::TCP || proto == IpProtocol::UDP ) && ( 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);
+    AppIdSession* asd = new AppIdSession(proto, ip, port, *inspector);
     asd->flow = p->flow;
     asd->stats.first_packet_second = p->pkth->ts.tv_sec;
     asd->snort_protocol_id = snortId_for_unsynchronized;
@@ -92,7 +92,7 @@ AppIdSession* AppIdSession::allocate_session(const Packet* p, IpProtocol proto,
 AppIdSession::AppIdSession(IpProtocol proto, const SfIp* ip, uint16_t port,
     AppIdInspector& inspector)
     : FlowData(inspector_id, &inspector), config(inspector.get_appid_config()),
-    protocol(proto), inspector(inspector)
+    protocol(proto)
 {
     service_ip.clear();
     session_id = ++appid_flow_data_id;
@@ -169,7 +169,7 @@ static inline PktType get_pkt_type_from_ip_proto(IpProtocol proto)
 
 AppIdSession* AppIdSession::create_future_session(const Packet* ctrlPkt, const SfIp* cliIp,
     uint16_t cliPort, const SfIp* srvIp, uint16_t srvPort, IpProtocol proto,
-    SnortProtocolId snort_protocol_id, int /*flags*/, AppIdInspector& inspector)
+    SnortProtocolId snort_protocol_id, int /*flags*/)
 {
     char src_ip[INET6_ADDRSTRLEN];
     char dst_ip[INET6_ADDRSTRLEN];
@@ -177,9 +177,13 @@ AppIdSession* AppIdSession::create_future_session(const Packet* ctrlPkt, const S
 
     assert(type != PktType::NONE);
 
+    AppIdInspector* inspector = (AppIdInspector*)ctrlPkt->flow->flow_data->get_handler();
+    if ((inspector == nullptr) || strcmp(inspector->get_name(), MOD_NAME))
+        inspector = (AppIdInspector*)InspectorManager::get_inspector(MOD_NAME, true);
+
     // FIXIT-RC - port parameter passed in as 0 since we may not know client port, verify
 
-    AppIdSession* asd = new AppIdSession(proto, cliIp, 0, inspector);
+    AppIdSession* asd = new AppIdSession(proto, cliIp, 0, *inspector);
     asd->common.policyId = asd->config->appIdPolicyId;
 
     if ( Stream::set_snort_protocol_id_expected(ctrlPkt, type, proto, cliIp, cliPort, srvIp,
@@ -413,7 +417,7 @@ void AppIdSession::examine_ssl_metadata(Packet* p, AppidChangeBits& change_bits)
         {
             set_client_appid_data(client_id, nullptr, change_bits);
             set_payload_appid_data((AppId)payload_id, nullptr, change_bits);
-            setSSLSquelch(p, ret, (ret == 1 ? payload_id : client_id), inspector);
+            setSSLSquelch(p, ret, (ret == 1 ? payload_id : client_id));
         }
         scan_flags &= ~SCAN_SSL_HOST_FLAG;
     }
@@ -425,7 +429,7 @@ void AppIdSession::examine_ssl_metadata(Packet* p, AppidChangeBits& change_bits)
         {
             set_client_appid_data(client_id, nullptr, change_bits);
             set_payload_appid_data((AppId)payload_id, nullptr, change_bits);
-            setSSLSquelch(p, ret, (ret == 1 ? payload_id : client_id), inspector);
+            setSSLSquelch(p, ret, (ret == 1 ? payload_id : client_id));
         }
         tsession->set_tls_cname(nullptr, 0);
     }
@@ -437,7 +441,7 @@ void AppIdSession::examine_ssl_metadata(Packet* p, AppidChangeBits& change_bits)
         {
             set_client_appid_data(client_id, nullptr, change_bits);
             set_payload_appid_data((AppId)payload_id, nullptr, change_bits);
-            setSSLSquelch(p, ret, (ret == 1 ? payload_id : client_id), inspector);
+            setSSLSquelch(p, ret, (ret == 1 ? payload_id : client_id));
         }
         tsession->set_tls_org_unit(nullptr, 0);
     }
index 3665f6fc4f3a9b6b3736ead754e26d42170b8d9b..02ec271c256c36f7e99de81f69687772f6d694ae 100644 (file)
@@ -189,13 +189,10 @@ public:
     ~AppIdSession() override;
 
     static AppIdSession* allocate_session(const snort::Packet*, IpProtocol,
-        AppidSessionDirection, AppIdInspector&);
+        AppidSessionDirection, AppIdInspector*);
     static AppIdSession* create_future_session(const snort::Packet*, const snort::SfIp*, uint16_t,
         const snort::SfIp*,
-        uint16_t, IpProtocol, SnortProtocolId, int, AppIdInspector&);
-
-    AppIdInspector& get_inspector() const
-    { return inspector; }
+        uint16_t, IpProtocol, SnortProtocolId, int);
 
     size_t size_of() override
     { return sizeof(*this); }
@@ -365,7 +362,6 @@ private:
 
     static THREAD_LOCAL uint32_t appid_flow_data_id;
     AppId application_ids[APP_PROTOID_MAX];
-    AppIdInspector& inspector;
     bool tp_app_id_deferred = false;
     bool tp_payload_app_id_deferred = false;
 
index 41272420bb3c54d5248c70b32745c0123fb5ac56..0e5fc1c16c1a4252d3564c5bb83fd58964a83c6a 100644 (file)
@@ -61,8 +61,7 @@ static ProfileStats* get_profile(const char*)
 ClientDiscovery* ClientDiscovery::discovery_manager = nullptr;
 THREAD_LOCAL ClientAppMatch* match_free_list = nullptr;
 
-ClientDiscovery::ClientDiscovery(AppIdInspector& ins)
-    : AppIdDiscovery(ins)
+ClientDiscovery::ClientDiscovery()
 {
     initialize();
 }
@@ -82,12 +81,11 @@ void ClientDiscovery::release_thread_resources()
     }
 }
 
-ClientDiscovery& ClientDiscovery::get_instance(AppIdInspector* ins)
+ClientDiscovery& ClientDiscovery::get_instance()
 {
     if (!discovery_manager)
     {
-        assert(ins);
-        discovery_manager = new ClientDiscovery(*ins);
+        discovery_manager = new ClientDiscovery();
     }
 
     return *discovery_manager;
index 7b59f79af522e0d009aac87a6c0e92d24d81f142..aa180e2cd83da904c96e83fb6f65c49828c90d9a 100644 (file)
@@ -45,7 +45,7 @@ class ClientDiscovery : public AppIdDiscovery
 {
 public:
     ~ClientDiscovery() override;
-    static ClientDiscovery& get_instance(AppIdInspector* ins = nullptr);
+    static ClientDiscovery& get_instance();
     static void release_instance();
 
     void finalize_client_plugins();
@@ -54,7 +54,7 @@ public:
         AppidSessionDirection direction, AppidChangeBits& change_bits);
 
 private:
-    ClientDiscovery(AppIdInspector& ins);
+    ClientDiscovery();
     void initialize() override;
     void exec_client_detectors(AppIdSession&, snort::Packet*,
         AppidSessionDirection direction, AppidChangeBits& change_bits);
index 2fc7c824be7a81b378252943ce6152a0e01dd40d..372888cc60c422d9c856115cdc1c9ec4af48d9b2 100644 (file)
@@ -28,6 +28,7 @@
 #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;
@@ -157,7 +158,7 @@ SipUdpClientDetector::SipUdpClientDetector(ClientDiscovery* cdm)
         { APP_ID_SIP, APPINFO_FLAG_CLIENT_ADDITIONAL | APPINFO_FLAG_CLIENT_USER },
     };
 
-    handler->get_inspector().get_sip_event_handler().set_client(this);
+    SipEventHandler::set_client(this);
     handler->register_detector(name, this, proto);
 }
 
@@ -336,7 +337,7 @@ void SipServiceDetector::createRtpFlow(AppIdSession& asd, const Packet* pkt, con
 
     AppIdSession* fp = AppIdSession::create_future_session(
         pkt, cliIp, cliPort, srvIp, srvPort, proto, app_id,
-        APPID_EARLY_SESSION_FLAG_FW_RULE, handler->get_inspector());
+        APPID_EARLY_SESSION_FLAG_FW_RULE);
 
     if ( fp )
     {
@@ -356,7 +357,7 @@ void SipServiceDetector::createRtpFlow(AppIdSession& asd, const Packet* pkt, con
 
     AppIdSession* fp2 = AppIdSession::create_future_session(
         pkt, cliIp, cliPort + 1, srvIp, srvPort + 1, proto, app_id,
-        APPID_EARLY_SESSION_FLAG_FW_RULE, handler->get_inspector());
+        APPID_EARLY_SESSION_FLAG_FW_RULE);
 
     if ( fp2 )
     {
@@ -433,12 +434,7 @@ SipServiceDetector::SipServiceDetector(ServiceDiscovery* sd)
         { SIP_PORT, IpProtocol::TCP, false }
     };
 
-    // FIXIT-RC - detector instance in each packet thread is calling this
-    // single sip event handler, last guy end wins, works now because it is
-    // all the same but this is not right...
-    // Does this still apply?
-
-    handler->get_inspector().get_sip_event_handler().set_service(this);
+    SipEventHandler::set_service(this);
     handler->register_detector(name, this, proto);
 }
 
@@ -486,8 +482,8 @@ void SipEventHandler::handle(DataEvent& event, Flow* flow)
         const Packet* p = sip_event.get_packet();
         IpProtocol protocol = p->is_tcp() ? IpProtocol::TCP : IpProtocol::UDP;
         AppidSessionDirection direction = p->is_from_client() ? APP_ID_FROM_INITIATOR : APP_ID_FROM_RESPONDER;
-        asd = AppIdSession::allocate_session(p, protocol, direction,
-            client->get_handler().get_inspector());
+        AppIdInspector* inspector = (AppIdInspector*) InspectorManager::get_inspector(MOD_NAME, true);
+        asd = AppIdSession::allocate_session(p, protocol, direction, inspector);
     }
 
     AppidChangeBits change_bits;
index 812a8392c68a120cf4545ba7235f6d81959cdf18..bfb05e387ab6f45bbc942279aae0ff744207531d 100644 (file)
@@ -98,9 +98,9 @@ public:
         return new SipEventHandler;
     }
 
-    void set_client(SipUdpClientDetector* cd) { SipEventHandler::client = cd; }
-    void set_service(SipServiceDetector* sd) { SipEventHandler::service = sd; }
-
+    static void set_client(SipUdpClientDetector* cd) { SipEventHandler::client = cd; }
+    static void set_service(SipServiceDetector* sd) { SipEventHandler::service = sd; }
+  
     void subscribe()
     { snort::DataBus::subscribe(SIP_EVENT_TYPE_SIP_DIALOG_KEY, this); }
 
index e0d9db061b8fcd58e3d18a27de6c56c5190bd545..3ee0f460aab3b31a53fe576a7d2cb69860b16064 100644 (file)
@@ -142,7 +142,7 @@ snort::ProfileStats* AppIdModule::get_profile() const
 // Stubs for inspectors
 unsigned AppIdSession::inspector_id = 0;
 AppIdSession::AppIdSession(IpProtocol, const SfIp*, uint16_t, AppIdInspector& inspector)
-    : snort::FlowData(inspector_id, (snort::Inspector*)&inspector), inspector(inspector) { }
+    : snort::FlowData(inspector_id, (snort::Inspector*)&inspector) { }
 AppIdSession::~AppIdSession() = default;
 AppIdHttpSession::AppIdHttpSession(AppIdSession& asd)
     : asd(asd)
index 181d88700d27435e91c0bf20ef7216adfea399a5..4f63cc9a94a4f206fb36d3ad1022b397fb7a3a0b 100644 (file)
@@ -1547,13 +1547,12 @@ static int detector_port_only_service(lua_State* L)
     uint16_t port = lua_tointeger(L, ++index);
     uint8_t protocol = lua_tointeger(L, ++index);
 
-    AppIdConfig* config = ud->get_detector()->get_handler().get_inspector().get_appid_config();
     if (port == 0)
-        config->ip_protocol[protocol] = appId;
+        AppIdConfig::ip_protocol[protocol] = appId;
     else if (protocol == 6)
-        config->tcp_port_only[port] = appId;
+        AppIdConfig::tcp_port_only[port] = appId;
     else if (protocol == 17)
-        config->udp_port_only[port] = appId;
+        AppIdConfig::udp_port_only[port] = appId;
 
     AppInfoManager::get_instance().set_app_info_active(appId);
 
@@ -2288,7 +2287,7 @@ static int create_future_flow(lua_State* L)
 
     AppIdSession* fp = AppIdSession::create_future_session(lsd->ldp.pkt,  &client_addr,
         client_port, &server_addr, server_port, proto, snort_protocol_id,
-        APPID_EARLY_SESSION_FLAG_FW_RULE, ud->get_detector()->get_handler().get_inspector());
+        APPID_EARLY_SESSION_FLAG_FW_RULE);
     if (fp)
     {
         fp->service.set_id(service_id);
index 92ee6e528f2c3cae73ac012e1a1b625dec8f7451..54b1f96e5352153a67fc2483a919fade6304cfd5 100644 (file)
@@ -211,7 +211,7 @@ static int create_detector_flow(lua_State* L)
     LuaDetectorManager::add_detector_flow(detector_flow);
 
     detector_flow->asd = AppIdSession::create_future_session(lsd->ldp.pkt, &saddr, sport,
-        &daddr, dport, proto, 0, 0, ud->get_handler().get_inspector());
+        &daddr, dport, proto, 0, 0);
 
     if (!detector_flow->asd)
     {
index f35fcd473365c0525477c1a1e08b9657cb6c7504..8a9a0e21be1af776bf70446aa5fbfe48e156fe63 100644 (file)
@@ -95,18 +95,16 @@ static ProfileStats* get_profile(const char*)
 static ServiceDetector* ftp_service;
 ServiceDiscovery* ServiceDiscovery::discovery_manager = nullptr;
 
-ServiceDiscovery::ServiceDiscovery(AppIdInspector& ins)
-    : AppIdDiscovery(ins)
+ServiceDiscovery::ServiceDiscovery()
 {
     initialize();
 }
 
-ServiceDiscovery& ServiceDiscovery::get_instance(AppIdInspector* ins)
+ServiceDiscovery& ServiceDiscovery::get_instance()
 {
     if (!discovery_manager)
     {
-        assert(ins);
-        discovery_manager = new ServiceDiscovery(*ins);
+        discovery_manager = new ServiceDiscovery();
     }
 
     return *discovery_manager;
index f6bca06b193039c95646fe36d14d00248fad1c6a..90d44b3f36210cb026cde5265f0a26b2121629a3 100644 (file)
@@ -68,7 +68,7 @@ enum SESSION_SERVICE_SEARCH_STATE
 class ServiceDiscovery : public AppIdDiscovery
 {
 public:
-    static ServiceDiscovery& get_instance(AppIdInspector* ins = nullptr);
+    static ServiceDiscovery& get_instance();
     static void release_instance();
 
     void finalize_service_patterns();
@@ -86,7 +86,7 @@ public:
     static int add_ftp_service_state(AppIdSession&);
     void release_thread_resources();
 private:
-    ServiceDiscovery(AppIdInspector& ins);
+    ServiceDiscovery();
     void initialize() override;
     void get_next_service(const snort::Packet*, const AppidSessionDirection dir, AppIdSession&);
     void get_port_based_services(IpProtocol, uint16_t port, AppIdSession&);
index 5f5c0a143f258b981088681418fba0b2bec7fdb6..ff65e735eac4267203e1427c42b78ca09a5ed6d1 100644 (file)
@@ -818,7 +818,7 @@ void FtpServiceDetector::create_expected_session(AppIdSession& asd, const Packet
         ftp_data_snort_protocol_id = SnortConfig::get_conf()->proto_ref->find("ftp-data");
 
     AppIdSession* fp = AppIdSession::create_future_session(pkt, cliIp, cliPort, srvIp, srvPort,
-        proto, ftp_data_snort_protocol_id, flags, handler->get_inspector());
+        proto, ftp_data_snort_protocol_id, flags);
 
     if (fp) // initialize data session
     {
index 60b11a7c9a1721d11212f4132248d74c65faf9b6..a22591044b3282190a26c3443bb90167d5c8806b 100644 (file)
@@ -146,7 +146,7 @@ int RexecServiceDetector::validate(AppIdDiscoveryArgs& args)
             dip = args.pkt->ptrs.ip_api.get_dst();
             sip = args.pkt->ptrs.ip_api.get_src();
             AppIdSession* pf = AppIdSession::create_future_session(args.pkt, dip, 0, sip, (uint16_t)port,
-                IpProtocol::TCP, rexec_snort_protocol_id, APPID_EARLY_SESSION_FLAG_FW_RULE, handler->get_inspector());
+                IpProtocol::TCP, rexec_snort_protocol_id, APPID_EARLY_SESSION_FLAG_FW_RULE);
             if (pf)
             {
                 ServiceREXECData* tmp_rd = (ServiceREXECData*)snort_calloc(
index 77270eab0a2f0ef798f7e64c164be4eec076ca2e..429511d3b7e384ebcb4ef85a12ebf9b3c050d1c7 100644 (file)
@@ -411,8 +411,7 @@ int RpcServiceDetector::validate_packet(const uint8_t* data, uint16_t size, Appi
 
                         AppIdSession* pf = AppIdSession::create_future_session(
                             pkt, dip, 0, sip, (uint16_t)tmp,
-                            (IpProtocol)ntohl((uint32_t)rd->proto), sunrpc_snort_protocol_id, 0,
-                            handler->get_inspector());
+                            (IpProtocol)ntohl((uint32_t)rd->proto), sunrpc_snort_protocol_id, 0);
                         if (pf)
                         {
                             pf->add_flow_data_id((uint16_t)tmp, this);
index 624ab82566c50a872ca55235da005888347dcba4..8365ef5ae3d78b9b27137f229f6526e4233fb7d4 100644 (file)
@@ -148,8 +148,7 @@ int RshellServiceDetector::validate(AppIdDiscoveryArgs& args)
             const snort::SfIp* dip = args.pkt->ptrs.ip_api.get_dst();
             const snort::SfIp* sip = args.pkt->ptrs.ip_api.get_src();
             AppIdSession* pf = AppIdSession::create_future_session(args.pkt, dip, 0, sip,
-                (uint16_t)port, IpProtocol::TCP, rsh_error_snort_protocol_id, APPID_EARLY_SESSION_FLAG_FW_RULE,
-                handler->get_inspector());
+                (uint16_t)port, IpProtocol::TCP, rsh_error_snort_protocol_id, APPID_EARLY_SESSION_FLAG_FW_RULE);
             if (pf)
             {
                 pf->client_disco_state = APPID_DISCO_STATE_FINISHED;
index f9f1a34ac09c9c3f6c44349860cc2e0cf51b066b..b2f7bb80907fc4d947ae9bfb882db934a09f05be 100644 (file)
@@ -482,7 +482,7 @@ int SnmpServiceDetector::validate(AppIdDiscoveryArgs& args)
         const snort::SfIp* dip = args.pkt->ptrs.ip_api.get_dst();
         const snort::SfIp* sip = args.pkt->ptrs.ip_api.get_src();
         AppIdSession* pf = AppIdSession::create_future_session(args.pkt, dip, 0, sip,
-            args.pkt->ptrs.sp, args.asd.protocol, snmp_snort_protocol_id, 0, handler->get_inspector());
+            args.pkt->ptrs.sp, args.asd.protocol, snmp_snort_protocol_id, 0);
         if (pf)
         {
             tmp_sd = (ServiceSNMPData*)snort_calloc(sizeof(ServiceSNMPData));
index e24feb34325e64b3ee74a38a68ef0f269f152f79..b28c7e409550b417b5af6184ee4fcf46192851c8 100644 (file)
@@ -1109,7 +1109,7 @@ void ssl_detector_free_patterns()
     ssl_patterns_free(&service_ssl_config.DetectorSSLCnamePatternList);
 }
 
-bool setSSLSquelch(Packet* p, int type, AppId appId, AppIdInspector& inspector)
+bool setSSLSquelch(Packet* p, int type, AppId appId)
 {
     if (!AppInfoManager::get_instance().get_app_info_flags(appId, APPINFO_FLAG_SSL_SQUELCH))
         return false;
@@ -1120,7 +1120,7 @@ bool setSSLSquelch(Packet* p, int type, AppId appId, AppIdInspector& inspector)
     // FIXIT-H: Passing appId to create_future_session() is incorrect. We
     // need to pass the snort_protocol_id associated with appId.
     AppIdSession* asd = AppIdSession::create_future_session(
-        p, sip, 0, dip, p->ptrs.dp, IpProtocol::TCP, appId, 0, inspector);
+        p, sip, 0, dip, p->ptrs.dp, IpProtocol::TCP, appId, 0);
 
     if ( asd )
     {
index 9d4fdd6a70effee5cb60bafb94051377e57a2946..fad937107b67b19c0a731c1de0421bfed7811572 100644 (file)
@@ -43,7 +43,7 @@ int ssl_scan_cname(const uint8_t*, size_t, AppId*, AppId*);
 int ssl_add_cert_pattern(uint8_t*, size_t, uint8_t, AppId);
 int ssl_add_cname_pattern(uint8_t*, size_t, uint8_t, AppId);
 void ssl_detector_free_patterns();
-bool setSSLSquelch(snort::Packet*, int type, AppId, AppIdInspector& inspector);
+bool setSSLSquelch(snort::Packet*, int type, AppId);
 
 #endif
 
index 4ba84773072ad421796392a66af4eb363cecb8c5..9ca0f4949bb8674e24d24b031396c4b2751c198b 100644 (file)
@@ -191,8 +191,7 @@ int TftpServiceDetector::validate(AppIdDiscoveryArgs& args)
         dip = args.pkt->ptrs.ip_api.get_dst();
         sip = args.pkt->ptrs.ip_api.get_src();
         pf = AppIdSession::create_future_session(args.pkt, dip, 0, sip,
-            args.pkt->ptrs.sp, args.asd.protocol, tftp_snort_protocol_id, APPID_EARLY_SESSION_FLAG_FW_RULE,
-            handler->get_inspector());
+            args.pkt->ptrs.sp, args.asd.protocol, tftp_snort_protocol_id, APPID_EARLY_SESSION_FLAG_FW_RULE);
         if (pf)
         {
             data_add(*pf, tmp_td, &snort_free);
index da8e1dbccfc3fc1556fe0a407b883060d3b40f51..893eff60f557b08fcc9e8eb4a4ae2a3b299152e4 100644 (file)
@@ -52,7 +52,7 @@ public:
 };
 
 AppIdSession::AppIdSession(IpProtocol, const SfIp*, uint16_t, AppIdInspector& inspector)
-    : FlowData(0), inspector(inspector) { }
+    : FlowData(0) { }
 AppIdSession::~AppIdSession() = default;
 
 // Utility functions
index 2aac937d24fcaacdd9a386c301d775dcba7b0370..073c4547ca45b98fd786527d9a53f61ecaec98f6 100644 (file)
@@ -177,7 +177,7 @@ void AppIdSession::examine_rtmp_metadata(AppidChangeBits&) {}
 void AppIdSession::examine_ssl_metadata(Packet*, AppidChangeBits&) {}
 void AppIdSession::update_encrypted_app_id(AppId) {}
 AppIdSession* AppIdSession::allocate_session(const Packet*, IpProtocol,
-    AppidSessionDirection, AppIdInspector&)
+    AppidSessionDirection, AppIdInspector*)
 {
     return nullptr;
 }
@@ -199,33 +199,31 @@ int ServiceDiscovery::fail_service(AppIdSession&, const Packet*, AppidSessionDir
     ServiceDetector*, ServiceDiscoveryState*) { return 0; }
 int ServiceDiscovery::add_service_port(AppIdDetector*,
     const ServiceDetectorPort&) { return APPID_EINVALID; }
-ServiceDiscovery::ServiceDiscovery(AppIdInspector& ins)
-    : AppIdDiscovery(ins) {}
+ServiceDiscovery::ServiceDiscovery() {}
 void ServiceDiscovery::release_instance() {}
 void ServiceDiscovery::release_thread_resources() {}
 static AppIdModule* s_app_module = nullptr;
 static AppIdInspector* s_ins = nullptr;
 static ServiceDiscovery* s_discovery_manager = nullptr;
-ServiceDiscovery& ServiceDiscovery::get_instance(AppIdInspector*)
+ServiceDiscovery& ServiceDiscovery::get_instance()
 {
     if (!s_discovery_manager)
-        s_discovery_manager = new ServiceDiscovery(*s_ins);
+        s_discovery_manager = new ServiceDiscovery();
     return *s_discovery_manager;
 }
 
 // Stubs for ClientDiscovery
-ClientDiscovery::ClientDiscovery(AppIdInspector& ins)
-    : AppIdDiscovery(ins) {}
+ClientDiscovery::ClientDiscovery(){}
 ClientDiscovery::~ClientDiscovery() {}
 void ClientDiscovery::initialize() {}
 void ClientDiscovery::finalize_client_plugins() {}
 void ClientDiscovery::release_instance() {}
 void ClientDiscovery::release_thread_resources() {}
 static ClientDiscovery* c_discovery_manager = nullptr;
-ClientDiscovery& ClientDiscovery::get_instance(AppIdInspector*)
+ClientDiscovery& ClientDiscovery::get_instance()
 {
     if (!c_discovery_manager)
-        c_discovery_manager = new ClientDiscovery(*s_ins);
+        c_discovery_manager = new ClientDiscovery();
     return *c_discovery_manager;
 }
 bool ClientDiscovery::do_client_discovery(AppIdSession&, Packet*,
index 76f0c3d239e8edb6d936f7f85c6f27e45785f42b..cf6b31ae26d77c2b40a3a820cb65e0082adbf19f 100644 (file)
@@ -99,7 +99,7 @@ bool HttpPatternMatchers::get_appid_from_url(char*, const char*, char**,
 
 // AppIdSession mock functions
 AppIdSession::AppIdSession(IpProtocol, const SfIp*, uint16_t, AppIdInspector& inspector)
-    : FlowData(inspector_id, &inspector), inspector(inspector)
+    : FlowData(inspector_id, &inspector)
 {
 }
 
index c8a326a408408b3428a01ab91f92d3cd8e298ce0..5bc9334bcef10a5c4cce7b03146a9c6817f5fcf0 100644 (file)
@@ -69,7 +69,7 @@ public:
 };
 
 AppIdSession::AppIdSession(IpProtocol, const SfIp*, uint16_t, AppIdInspector& inspector)
-    : FlowData(inspector_id, &inspector), inspector(inspector)
+    : FlowData(inspector_id, &inspector)
 {
     common.flow_type = APPID_FLOW_TYPE_NORMAL;
     service_port = APPID_UT_SERVICE_PORT;
index 09fc20ea8197893acc8e6bf008bb1a1a2108be84..daaa8e5a6d0efa0ba7263ecad4ec06cf88e2df82 100644 (file)
@@ -72,9 +72,9 @@ THREAD_LOCAL AppIdStats appid_stats;
 void AppIdDebug::activate(const Flow*, const AppIdSession*, bool) { active = true; }
 
 AppIdSession::AppIdSession(IpProtocol, const SfIp*, uint16_t, AppIdInspector& inspector)
-    : FlowData(0), inspector(inspector) {}
+    : FlowData(0) {}
 AppIdSession::~AppIdSession() = default;
-AppIdDiscovery::AppIdDiscovery(AppIdInspector& ins) : inspector(ins) {}
+AppIdDiscovery::AppIdDiscovery() {}
 AppIdDiscovery::~AppIdDiscovery() {}
 void AppIdDiscovery::register_detector(const std::string&, AppIdDetector*,  IpProtocol) {}
 void AppIdDiscovery::add_pattern_data(AppIdDetector*, SearchTool*, int, const uint8_t* const,
@@ -101,12 +101,11 @@ int ServiceDiscovery::fail_service(AppIdSession&, const Packet*, AppidSessionDir
     ServiceDetector*, ServiceDiscoveryState*) { return 0; }
 int ServiceDiscovery::add_service_port(AppIdDetector*,
     const ServiceDetectorPort&) { return APPID_EINVALID; }
-ServiceDiscovery::ServiceDiscovery(AppIdInspector& ins)
-    : AppIdDiscovery(ins) {}
+ServiceDiscovery::ServiceDiscovery() {}
 
-ServiceDiscovery& ServiceDiscovery::get_instance(AppIdInspector* ins)
+ServiceDiscovery& ServiceDiscovery::get_instance()
 {
-    static ServiceDiscovery discovery_manager(*ins);
+    static ServiceDiscovery discovery_manager;
     return discovery_manager;
 }
 
@@ -127,8 +126,7 @@ TEST_GROUP(service_state_tests)
 TEST(service_state_tests, select_detector_by_brute_force)
 {
     ServiceDiscoveryState sds;
-    AppIdInspector ins;
-    ServiceDiscovery::get_instance(&ins);
+    ServiceDiscovery::get_instance();
 
     // Testing end of brute-force walk for supported and unsupported protocols
     test_log[0] = '\0';
@@ -150,8 +148,7 @@ TEST(service_state_tests, set_service_id_failed)
     AppIdInspector inspector;
     AppIdSession asd(IpProtocol::PROTO_NOT_SET, nullptr, 0, inspector);
     SfIp client_ip;
-    AppIdInspector ins;
-    ServiceDiscovery::get_instance(&ins);
+    ServiceDiscovery::get_instance();
 
     // Testing 3+ failures to exceed STATE_ID_NEEDED_DUPE_DETRACT_COUNT with valid_count = 0
     client_ip.set("1.2.3.4");
@@ -170,8 +167,7 @@ TEST(service_state_tests, set_service_id_failed_with_valid)
     AppIdInspector inspector;
     AppIdSession asd(IpProtocol::PROTO_NOT_SET, nullptr, 0, inspector);
     SfIp client_ip;
-    AppIdInspector ins;
-    ServiceDiscovery::get_instance(&ins);
+    ServiceDiscovery::get_instance();
 
     // Testing 3+ failures to exceed STATE_ID_NEEDED_DUPE_DETRACT_COUNT with valid_count > 1
     client_ip.set("1.2.3.4");
index e1c37c0f7d6d1119f20b9e7e0962a5e3e5b93ce5..a47a91ebbb430370a319fec220e288e704a17c08 100644 (file)
@@ -741,7 +741,7 @@ bool do_tp_discovery(AppIdSession& asd, IpProtocol protocol,
                     asd.get_session_flags(APPID_SESSION_SSL_SESSION) and
                     !(asd.scan_flags & SCAN_SSL_HOST_FLAG))
                 {
-                    setSSLSquelch(p, 1, tp_app_id, asd.get_inspector());
+                    setSSLSquelch(p, 1, tp_app_id);
                 }
 
                 if ( app_info_flags & APPINFO_FLAG_IGNORE )