]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2213 in SNORT/snort3 from ~RUCOMBS/snort3:snort_conf to master
authorRuss Combs (rucombs) <rucombs@cisco.com>
Tue, 19 May 2020 12:26:26 +0000 (12:26 +0000)
committerRuss Combs (rucombs) <rucombs@cisco.com>
Tue, 19 May 2020 12:26:26 +0000 (12:26 +0000)
Squashed commit of the following:

commit 7107ad5aa179c81bcf297198c9565dbf7c1af453
Author: russ <rucombs@cisco.com>
Date:   Mon May 11 17:33:04 2020 -0400

    build: fix cppcheck warnings and typos

commit 514844215a86e5e683649392f7eb3317c667f678
Author: russ <rucombs@cisco.com>
Date:   Mon May 11 09:27:16 2020 -0400

    snort_config: constify Inspector::show and remove unnecessary logger args

commit 4f61396efb898de6054dd3068bd2784f313bdf06
Author: russ <rucombs@cisco.com>
Date:   Sun May 10 12:33:07 2020 -0400

    search_tool: refactor initialization

commit c24ff7a06b405b18b85c1317d4c42438ffcd8676
Author: russ <rucombs@cisco.com>
Date:   Sun May 10 11:28:29 2020 -0400

    mpse: constify snort config args

commit cff5647c6f32eb1321964b729aac16fcfedaee2d
Author: russ <rucombs@cisco.com>
Date:   Sat May 9 11:22:32 2020 -0400

    snort_config: minimize thread local access to snort_config

commit 48a6e0db8b675c3283befb04b13b6468c98ce570
Author: russ <rucombs@cisco.com>
Date:   Fri May 8 16:59:31 2020 -0400

    snort_config: use provided conf

commit d1329377a0c1a4fa5b333182c568da38c3b6b9a2
Author: russ <rucombs@cisco.com>
Date:   Tue Apr 28 15:01:35 2020 -0400

    snort_config: make const for packet threads

commit c47aabc1d11ff6208b5cb1a970a7c7f49033625d
Author: russ <rucombs@cisco.com>
Date:   Sun Apr 26 10:54:15 2020 -0400

    snort_config: pseudo packet initialization

commit bf4ac2a8d1910452c170577f62fa23c6856d81c0
Author: russ <rucombs@cisco.com>
Date:   Sun Apr 26 09:54:45 2020 -0400

    snort_config: refactor access methods

228 files changed:
src/codecs/ip/cd_auth.cc
src/codecs/ip/cd_dst_opts.cc
src/codecs/ip/cd_esp.cc
src/codecs/ip/cd_frag.cc
src/codecs/ip/cd_gre.cc
src/codecs/ip/cd_hop_opts.cc
src/codecs/ip/cd_icmp4.cc
src/codecs/ip/cd_icmp6.cc
src/codecs/ip/cd_ipv4.cc
src/codecs/ip/cd_ipv6.cc
src/codecs/ip/cd_mobility.cc
src/codecs/ip/cd_no_next.cc
src/codecs/ip/cd_routing.cc
src/codecs/ip/cd_tcp.cc
src/codecs/ip/cd_udp.cc
src/codecs/link/cd_mpls.cc
src/codecs/misc/cd_gtp.cc
src/codecs/misc/cd_icmp4_ip.cc
src/codecs/misc/cd_teredo.cc
src/codecs/misc/cd_vxlan.cc
src/codecs/root/cd_eth.cc
src/detection/detect.cc
src/detection/detection_engine.cc
src/detection/detection_util.cc
src/detection/detection_util.h
src/detection/fp_config.h
src/detection/fp_create.cc
src/detection/fp_detect.cc
src/detection/ips_context.cc
src/detection/ips_context.h
src/detection/regex_offload.cc
src/detection/regex_offload.h
src/detection/tag.cc
src/events/event.cc
src/file_api/file_cache.cc
src/file_api/file_config.cc
src/file_api/file_config.h
src/file_api/file_flows.cc
src/file_api/file_flows.h
src/file_api/file_log.cc
src/file_api/file_service.cc
src/file_api/file_service.h
src/filters/rate_filter.cc
src/filters/sfrf_test.cc
src/filters/sfthd_test.cc
src/filters/sfthreshold.cc
src/flow/expect_cache.cc
src/flow/flow_control.cc
src/flow/flow_key.cc
src/flow/flow_key.h
src/flow/test/flow_cache_test.cc
src/flow/test/flow_control_test.cc
src/flow/test/flow_test.cc
src/framework/codec.h
src/framework/data_bus.h
src/framework/inspector.h
src/framework/ips_action.h
src/framework/ips_option.h
src/framework/logger.h
src/framework/mpse.cc
src/framework/mpse.h
src/framework/mpse_batch.cc
src/framework/mpse_batch.h
src/framework/test/data_bus_test.cc
src/hash/test/ghash_test.cc
src/hash/test/xhash_test.cc
src/hash/test/zhash_test.cc
src/helpers/hyper_scratch_allocator.h
src/helpers/process.cc
src/helpers/test/hyper_search_test.cc
src/host_tracker/host_cache.h
src/host_tracker/test/host_cache_module_test.cc
src/ips_options/asn1_util.cc
src/ips_options/asn1_util.h
src/ips_options/ips_asn1.cc
src/ips_options/ips_flowbits.cc
src/ips_options/ips_pcre.cc
src/ips_options/ips_replace.cc
src/ips_options/test/ips_regex_test.cc
src/log/log_text.cc
src/log/messages.cc
src/loggers/alert_csv.cc
src/loggers/alert_fast.cc
src/loggers/alert_full.cc
src/loggers/alert_json.cc
src/loggers/alert_luajit.cc
src/loggers/alert_sf_socket.cc
src/loggers/alert_syslog.cc
src/loggers/alert_talos.cc
src/loggers/alert_unixsock.cc
src/loggers/log_codecs.cc
src/loggers/log_hext.cc
src/loggers/log_pcap.cc
src/loggers/unified2.cc
src/main.cc
src/main/analyzer.cc
src/main/analyzer.h
src/main/analyzer_command.cc
src/main/control_mgmt.cc
src/main/modules.cc
src/main/policy.cc
src/main/policy.h
src/main/shell.cc
src/main/snort.cc
src/main/snort_config.cc
src/main/snort_config.h
src/main/swapper.cc
src/main/swapper.h
src/main/thread.cc
src/managers/action_manager.cc
src/managers/action_manager.h
src/managers/codec_manager.cc
src/managers/codec_manager.h
src/managers/event_manager.cc
src/managers/inspector_manager.cc
src/managers/inspector_manager.h
src/managers/ips_manager.cc
src/managers/ips_manager.h
src/managers/module_manager.cc
src/managers/module_manager.h
src/managers/mpse_manager.cc
src/managers/mpse_manager.h
src/memory/memory_cap.cc
src/network_inspectors/appid/appid_inspector.cc
src/network_inspectors/appid/appid_inspector.h
src/network_inspectors/appid/detector_plugins/test/detector_plugins_mock.h
src/network_inspectors/appid/service_plugins/service_discovery.cc
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_tftp.cc
src/network_inspectors/appid/test/appid_api_test.cc
src/network_inspectors/appid/test/appid_detector_test.cc
src/network_inspectors/appid/test/appid_discovery_test.cc
src/network_inspectors/appid/test/appid_expected_flags_test.cc
src/network_inspectors/appid/test/appid_mock_inspector.h
src/network_inspectors/arp_spoof/arp_spoof.cc
src/network_inspectors/binder/binder.cc
src/network_inspectors/normalize/norm.cc
src/network_inspectors/normalize/normalize.cc
src/network_inspectors/packet_capture/packet_capture.cc
src/network_inspectors/perf_monitor/perf_monitor.cc
src/network_inspectors/perf_monitor/perf_monitor.h
src/network_inspectors/perf_monitor/perf_tracker.cc
src/network_inspectors/port_scan/port_scan.cc
src/network_inspectors/port_scan/ps_inspect.h
src/network_inspectors/reputation/reputation_inspect.cc
src/network_inspectors/reputation/reputation_inspect.h
src/network_inspectors/rna/rna_inspector.cc
src/network_inspectors/rna/rna_inspector.h
src/packet_io/active.cc
src/packet_io/active.h
src/packet_io/sfdaq.cc
src/packet_io/sfdaq_instance.cc
src/parser/parse_conf.cc
src/parser/parse_rule.cc
src/parser/parser.cc
src/piglet/piglet_manager.cc
src/piglet_plugins/pp_codec_data_iface.cc
src/piglet_plugins/pp_inspector_iface.cc
src/ports/port_var_table.cc
src/profiler/profiler.cc
src/profiler/rule_profiler.cc
src/protocols/packet.cc
src/protocols/packet_manager.cc
src/search_engines/ac_banded.cc
src/search_engines/ac_bnfa.cc
src/search_engines/ac_full.cc
src/search_engines/ac_sparse.cc
src/search_engines/ac_sparse_bands.cc
src/search_engines/ac_std.cc
src/search_engines/hyperscan.cc
src/search_engines/search_tool.cc
src/search_engines/search_tool.h
src/search_engines/test/hyperscan_test.cc
src/search_engines/test/search_tool_test.cc
src/service_inspectors/cip/cip.cc
src/service_inspectors/dce_rpc/dce_common.cc
src/service_inspectors/dce_rpc/dce_common.h
src/service_inspectors/dce_rpc/dce_smb.cc
src/service_inspectors/dce_rpc/dce_smb_module.cc
src/service_inspectors/dce_rpc/dce_smb_module.h
src/service_inspectors/dce_rpc/dce_tcp.cc
src/service_inspectors/dce_rpc/dce_tcp_module.cc
src/service_inspectors/dce_rpc/dce_tcp_module.h
src/service_inspectors/dce_rpc/dce_udp.cc
src/service_inspectors/dce_rpc/dce_udp_module.cc
src/service_inspectors/dce_rpc/dce_udp_module.h
src/service_inspectors/dnp3/dnp3.cc
src/service_inspectors/ftp_telnet/ftp.cc
src/service_inspectors/ftp_telnet/ftp_data.cc
src/service_inspectors/ftp_telnet/telnet.cc
src/service_inspectors/http_inspect/http_inspect.cc
src/service_inspectors/http_inspect/http_inspect.h
src/service_inspectors/imap/imap.cc
src/service_inspectors/pop/pop.cc
src/service_inspectors/sip/sip.cc
src/service_inspectors/smtp/smtp.cc
src/service_inspectors/ssh/ssh.cc
src/service_inspectors/ssl/ssl_inspector.cc
src/sfip/sf_ip.cc
src/sfip/sf_ip.h
src/stream/base/stream_base.cc
src/stream/file/stream_file.cc
src/stream/flush_bucket.cc
src/stream/icmp/icmp_session.cc
src/stream/icmp/stream_icmp.cc
src/stream/ip/ip_defrag.cc
src/stream/ip/ip_defrag.h
src/stream/ip/ip_session.cc
src/stream/ip/stream_ip.cc
src/stream/stream.cc
src/stream/tcp/ips_stream_reassemble.cc
src/stream/tcp/stream_tcp.cc
src/stream/tcp/tcp_reassembler.cc
src/stream/tcp/tcp_session.cc
src/stream/test/stream_splitter_test.cc
src/stream/udp/stream_udp.cc
src/stream/user/stream_user.cc
src/target_based/host_attributes.cc
src/trace/trace_api.cc
src/trace/trace_api.h
src/utils/stats.cc
src/utils/util.cc
src/utils/util_net.cc
src/utils/util_net.h

index ce449d9ecb5626d176d89181dcb6139831b23c04..0be8f51314242755c7e85a856a49972e1d1dde16 100644 (file)
@@ -104,7 +104,7 @@ bool AuthCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
     // must be called AFTER setting next_prot_id
     if (snort.ip_api.is_ip6())
     {
-        if ( SnortConfig::get_conf()->hit_ip6_maxopts(codec.ip6_extension_count) )
+        if ( codec.conf->hit_ip6_maxopts(codec.ip6_extension_count) )
         {
             codec_event(codec, DECODE_IP6_EXCESS_EXT_HDR);
             return false;
index 2681fc5cea0781d0df04ddbbd3972e54368bb7e6..db1fc8f74e1da7170f2a98cf98a46dd40bc3a406 100644 (file)
@@ -60,7 +60,7 @@ bool Ipv6DSTOptsCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
         return false;
     }
 
-    if ( SnortConfig::get_conf()->hit_ip6_maxopts(codec.ip6_extension_count) )
+    if ( codec.conf->hit_ip6_maxopts(codec.ip6_extension_count) )
         codec_event(codec, DECODE_IP6_EXCESS_EXT_HDR);
 
     if (dsthdr->ip6dest_nxt == IpProtocol::ROUTING)
index d2e1add93ae2a2f41dc49e1cd71b697f0338ca3a..211f30e066c4d02c7627228fc2931c88e1ad7f6e 100644 (file)
@@ -97,7 +97,7 @@ bool EspCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
     uint8_t pad_length;
     uint8_t ip_proto;
 
-    if (!SnortConfig::esp_decoding())
+    if (!codec.conf->esp_decoding())
         return false;
 
     /* The ESP header contains a crypto Initialization Vector (IV) and
@@ -126,7 +126,7 @@ bool EspCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
     // must be called AFTER setting next_prot_id
     if (snort.ip_api.is_ip6())
     {
-        if ( SnortConfig::get_conf()->hit_ip6_maxopts(codec.ip6_extension_count) )
+        if ( codec.conf->hit_ip6_maxopts(codec.ip6_extension_count) )
         {
             codec_event(codec, DECODE_IP6_EXCESS_EXT_HDR);
             return false;
index 4be6f2aaff2259f5a79faf26c7b20562f1a6c00c..2c903f06a09e346bd14e083e93da3f4b1628ba9c 100644 (file)
@@ -55,7 +55,7 @@ bool Ipv6FragCodec::decode(const RawData& raw, CodecData& codec, DecodeData& sno
         return false;
     }
 
-    if ( SnortConfig::get_conf()->hit_ip6_maxopts(codec.ip6_extension_count) )
+    if ( codec.conf->hit_ip6_maxopts(codec.ip6_extension_count) )
     {
         codec_event(codec, DECODE_IP6_EXCESS_EXT_HDR);
         return false;
index 407b6bd0aef5e5c1af48f694d69f980990aac78d..9af9a1159b4feb9690803448a4022c693f938a83 100644 (file)
@@ -269,7 +269,7 @@ bool GreCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
         return false;
     }
 
-    if (SnortConfig::tunnel_bypass_enabled(TUNNEL_GRE))
+    if (codec.conf->tunnel_bypass_enabled(TUNNEL_GRE))
         codec.tunnel_bypass = true;
 
     codec.lyr_len = len;
index 44e8b5aa1550adae1fe3f6072b8c5829c8916c47..ca0f55900be0a94e1691f76bffd9412fc84970d8 100644 (file)
@@ -64,7 +64,7 @@ bool Ipv6HopOptsCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
         return false;
     }
 
-    if ( SnortConfig::get_conf()->hit_ip6_maxopts(codec.ip6_extension_count) )
+    if ( codec.conf->hit_ip6_maxopts(codec.ip6_extension_count) )
     {
         codec_event(codec, DECODE_IP6_EXCESS_EXT_HDR);
         return false;
index 5c3e73eb6298cb6185500c986c6fafb12080e434..684de2cdb93c162380cafd173ff2ab83d016150f 100644 (file)
@@ -156,7 +156,7 @@ bool Icmp4Codec::decode(const RawData& raw, CodecData& codec,DecodeData& snort)
     const ICMPHdr* const icmph = reinterpret_cast<const ICMPHdr*>(raw.data);
     uint16_t len = 0;
 
-    if (SnortConfig::icmp_checksums() && !valid_checksum_from_daq(raw))
+    if (snort::get_network_policy()->icmp_checksums() && !valid_checksum_from_daq(raw))
     {
         uint16_t csum = checksum::cksum_add((const uint16_t*)icmph, raw.len);
 
index 20dbd9a5b93785018317680de8dfaa5a79484bb1..27f2f37ef1041fd76d49c675724a8bc754e3201b 100644 (file)
@@ -149,7 +149,7 @@ bool Icmp6Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
 
     const icmp::Icmp6Hdr* const icmp6h = reinterpret_cast<const icmp::Icmp6Hdr*>(raw.data);
 
-    if ( SnortConfig::icmp_checksums() && !valid_checksum_from_daq(raw))
+    if ( snort::get_network_policy()->icmp_checksums() && !valid_checksum_from_daq(raw))
     {
         checksum::Pseudoheader6 ph6;
         COPY4(ph6.hdr.sip, snort.ip_api.get_src()->get_ip6_ptr());
index 525f1cf0d9f36c3a9883b7c1cdac1ef0b393b32b..c1759bef1996f435dc9e8327ac6e81f5ad3b0331 100644 (file)
@@ -169,7 +169,7 @@ bool Ipv4Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
         return false;
     }
 
-    if ( SnortConfig::get_conf()->hit_ip_maxlayers(codec.ip_layer_cnt) )
+    if ( codec.conf->hit_ip_maxlayers(codec.ip_layer_cnt) )
     {
         codec_event(codec, DECODE_IP_MULTIPLE_ENCAPSULATION);
         return false;
@@ -226,7 +226,7 @@ bool Ipv4Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
         /* If the previous layer was not IP-in-IP, this is not a 4-in-6 tunnel */
         if ( codec.codec_flags & CODEC_NON_IP_TUNNEL )
             codec.codec_flags &= ~CODEC_NON_IP_TUNNEL;
-        else if ( SnortConfig::tunnel_bypass_enabled(TUNNEL_4IN6) )
+        else if ( codec.conf->tunnel_bypass_enabled(TUNNEL_4IN6) )
             codec.tunnel_bypass = true;
     }
     else if (snort.ip_api.is_ip4())
@@ -234,7 +234,7 @@ bool Ipv4Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
         /* If the previous layer was not IP-in-IP, this is not a 4-in-4 tunnel */
         if ( codec.codec_flags & CODEC_NON_IP_TUNNEL )
             codec.codec_flags &= ~CODEC_NON_IP_TUNNEL;
-        else if (SnortConfig::tunnel_bypass_enabled(TUNNEL_4IN4))
+        else if (codec.conf->tunnel_bypass_enabled(TUNNEL_4IN4))
             codec.tunnel_bypass = true;
     }
 
@@ -256,7 +256,7 @@ bool Ipv4Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
      */
     IP4AddrTests(iph, codec, snort);
 
-    if (SnortConfig::ip_checksums() && !valid_checksum_from_daq(raw))
+    if (snort::get_network_policy()->ip_checksums() && !valid_checksum_from_daq(raw))
     {
         // routers drop packets with bad IP checksums, we don't really need to check them...
         int16_t csum = checksum::ip_cksum((const uint16_t*)iph, hlen);
@@ -399,7 +399,7 @@ void Ipv4Codec::IP4AddrTests(
     if ( msb_src == ip::IP4_MULTICAST )
         codec_event(codec, DECODE_IP4_SRC_MULTICAST);
 
-    if ( SnortConfig::is_address_anomaly_check_enabled() )
+    if ( codec.conf->is_address_anomaly_check_enabled() )
     {
         if ( msb_src == ip::IP4_RESERVED || sfvar_ip_in(MulticastReservedIp, snort.ip_api.get_src()) )
             codec_event(codec, DECODE_IP4_SRC_RESERVED);
@@ -553,13 +553,12 @@ default_case:
  *********************  L O G G E R  ******************************
 *******************************************************************/
 
-void Ipv4Codec::log(TextLog* const text_log, const uint8_t* raw_pkt,
-    const uint16_t lyr_len)
+void Ipv4Codec::log(TextLog* const text_log, const uint8_t* raw_pkt, const uint16_t lyr_len)
 {
     const ip::IP4Hdr* const ip4h = reinterpret_cast<const ip::IP4Hdr*>(raw_pkt);
 
     // FIXIT-RC this does NOT obfuscate correctly
-    if (SnortConfig::obfuscate())
+    if (SnortConfig::get_conf()->obfuscate())
     {
         TextLog_Print(text_log, "xxx.xxx.xxx.xxx -> xxx.xxx.xxx.xxx");
     }
index f1f8432d4b01ec4378265fb13ba820cd06137fa8..90950b0f6dbb32964a6a16d5f17fc9d63e1dd8ae 100644 (file)
@@ -149,7 +149,7 @@ bool Ipv6Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
         return false;
     }
 
-    if ( SnortConfig::get_conf()->hit_ip_maxlayers(codec.ip_layer_cnt) )
+    if ( codec.conf->hit_ip_maxlayers(codec.ip_layer_cnt) )
     {
         codec_event(codec, DECODE_IP_MULTIPLE_ENCAPSULATION);
         return false;
@@ -187,7 +187,7 @@ bool Ipv6Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
         /* If the previous layer was not IP-in-IP, this is not a 6-in-4 tunnel */
         if ( codec.codec_flags & CODEC_NON_IP_TUNNEL )
             codec.codec_flags &= ~CODEC_NON_IP_TUNNEL;
-        else if ( SnortConfig::tunnel_bypass_enabled(TUNNEL_6IN4) )
+        else if ( codec.conf->tunnel_bypass_enabled(TUNNEL_6IN4) )
             codec.tunnel_bypass = true;
     }
     else if (snort.ip_api.is_ip6())
@@ -195,7 +195,7 @@ bool Ipv6Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
         /* If the previous layer was not IP-in-IP, this is not a 6-in-6 tunnel */
         if ( codec.codec_flags & CODEC_NON_IP_TUNNEL )
             codec.codec_flags &= ~CODEC_NON_IP_TUNNEL;
-        else if (SnortConfig::tunnel_bypass_enabled(TUNNEL_6IN6))
+        else if (codec.conf->tunnel_bypass_enabled(TUNNEL_6IN6))
             codec.tunnel_bypass = true;
     }
 
@@ -542,7 +542,7 @@ void Ipv6Codec::log(TextLog* const text_log, const uint8_t* raw_pkt,
     const ip::IP6Hdr* const ip6h = reinterpret_cast<const ip::IP6Hdr*>(raw_pkt);
 
     // FIXIT-RC this does NOT obfuscate correctly
-    if (SnortConfig::obfuscate())
+    if (SnortConfig::get_conf()->obfuscate())
     {
         TextLog_Print(text_log, "x:x:x:x::x:x:x:x -> x:x:x:x::x:x:x:x");
     }
index c7f2cc0bb3b00675721b0148c721c77395670d37..50d65da4f85899477d813817577b803da951c4b0 100644 (file)
@@ -60,7 +60,7 @@ void MobilityCodec::get_protocol_ids(std::vector<ProtocolId>& v)
 bool MobilityCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
 {
     const MobileIPV6Header* const mip6 = reinterpret_cast<const MobileIPV6Header*>(raw.data);
-    if ( SnortConfig::get_conf()->hit_ip6_maxopts(codec.ip6_extension_count) )
+    if ( codec.conf->hit_ip6_maxopts(codec.ip6_extension_count) )
     {
         codec_event(codec, DECODE_IP6_EXCESS_EXT_HDR);
         return false;
index de1ef8b8f46e91e6743325830d84540a44ada3b8..4301e5d56bfeabc2611a926186826b58773228e6 100644 (file)
@@ -49,7 +49,7 @@ bool Ipv6NoNextCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
     if (raw.len < ip::MIN_EXT_LEN)
         return false;
 
-    if ( SnortConfig::get_conf()->hit_ip6_maxopts(codec.ip6_extension_count) )
+    if ( codec.conf->hit_ip6_maxopts(codec.ip6_extension_count) )
     {
         codec_event(codec, DECODE_IP6_EXCESS_EXT_HDR);
         return false;
index 799d5b74485af595ae65573c319a55384e53b5dd..c8d16df0d0ced84ab3e8c4b0a7d8677823534880 100644 (file)
@@ -80,7 +80,7 @@ bool Ipv6RoutingCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
         return false;
     }
 
-    if ( SnortConfig::get_conf()->hit_ip6_maxopts(codec.ip6_extension_count) )
+    if ( codec.conf->hit_ip6_maxopts(codec.ip6_extension_count) )
     {
         codec_event(codec, DECODE_IP6_EXCESS_EXT_HDR);
         return false;
index 4bdcde16737564c88ff0c338453e02052f318a02..cf5893d101978efa15464437019fc090df0b055d 100644 (file)
@@ -218,7 +218,7 @@ bool TcpCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
         return false;
     }
 
-    if (SnortConfig::tcp_checksums() && !valid_checksum_from_daq(raw))
+    if (snort::get_network_policy()->tcp_checksums() && !valid_checksum_from_daq(raw))
     {
         PegCount* bad_cksum_cnt;
         bool valid;
@@ -528,7 +528,7 @@ void TcpCodec::flag_tests(const tcp::TCPHdr* const tcph,
             }
         }
 
-        if ( SnortConfig::is_address_anomaly_check_enabled() )
+        if ( codec.conf->is_address_anomaly_check_enabled() )
         {
             if ( sfvar_ip_in(SynToMulticastDstIp, snort.ip_api.get_dst()) )
                 codec_event(codec, DECODE_SYN_TO_MULTICAST);
index 8443a82adcd73fa3df77cecf31db84cb61c99b36..e6745b41e04e4a44633b35c3d4cb6278dcf4a6d8 100644 (file)
@@ -340,7 +340,7 @@ bool UdpCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
         return false;
     }
 
-    if (SnortConfig::udp_checksums() && !valid_checksum_from_daq(raw))
+    if (snort::get_network_policy()->udp_checksums() && !valid_checksum_from_daq(raw))
     {
         PegCount* bad_cksum_cnt;
         bool valid;
index 8acf8b171a99a3ba34f6b85590547ffba0c4e202..b31ef2a1dacf0eaa8956be72334929cbe8b1ad11 100644 (file)
@@ -191,14 +191,14 @@ bool MplsCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
             codec.proto_bits |= PROTO_BIT__MPLS;
             if (!iRet)
             {
-                iRet = SnortConfig::get_mpls_payload_type();
+                iRet = codec.conf->get_mpls_payload_type();
             }
         }
         tmpMplsHdr++;
         stack_len -= MPLS_HEADER_LEN;
 
-        if ((SnortConfig::get_mpls_stack_depth() != -1) &&
-            (chainLen++ >= SnortConfig::get_mpls_stack_depth()))
+        if ((codec.conf->get_mpls_stack_depth() != -1) &&
+            (chainLen++ >= codec.conf->get_mpls_stack_depth()))
         {
             codec_event(codec, DECODE_MPLS_LABEL_STACK);
 
@@ -207,7 +207,7 @@ bool MplsCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
         }
     }   /* while bos not 1, peel off more labels */
 
-    if (SnortConfig::tunnel_bypass_enabled(TUNNEL_MPLS))
+    if (codec.conf->tunnel_bypass_enabled(TUNNEL_MPLS))
         codec.tunnel_bypass = true;
 
     codec.lyr_len = (const uint8_t*)tmpMplsHdr - raw.data;
@@ -279,8 +279,8 @@ int MplsCodec::checkMplsHdr(const CodecData& codec, uint32_t label, uint8_t bos)
 
             /* when label == 2, IPv6 is expected;
              * when label == 0, IPv4 is expected */
-            if ( (label && ( SnortConfig::get_mpls_payload_type() != MPLS_PAYLOADTYPE_IPV6) )
-                || ( (!label) && (SnortConfig::get_mpls_payload_type() != MPLS_PAYLOADTYPE_IPV4)))
+            if ( (label && ( codec.conf->get_mpls_payload_type() != MPLS_PAYLOADTYPE_IPV6) )
+                || ( (!label) && (codec.conf->get_mpls_payload_type() != MPLS_PAYLOADTYPE_IPV4)))
             {
                 if ( !label )
                     codec_event(codec, DECODE_BAD_MPLS_LABEL0);
@@ -347,7 +347,7 @@ int MplsCodec::checkMplsHdr(const CodecData& codec, uint32_t label, uint8_t bos)
     }
     if ( !iRet )
     {
-        iRet = SnortConfig::get_mpls_payload_type();
+        iRet = codec.conf->get_mpls_payload_type();
     }
     return iRet;
 }
index ae9961c65db532f8c0115b746f051164d204d7c5..c2bd88b61e94aae6a3c0951efaa2715206df1035 100644 (file)
@@ -174,7 +174,7 @@ bool GtpCodec::decode(const RawData& raw, CodecData& codec, DecodeData& dd)
         return false;
     }
 
-    if ( SnortConfig::tunnel_bypass_enabled(TUNNEL_GTP) )
+    if ( codec.conf->tunnel_bypass_enabled(TUNNEL_GTP) )
         codec.tunnel_bypass = true;
 
     codec.lyr_len = len;
index 0b21f1a7e8011eee19dad3d710e378c6d858ff6c..e3c666dccd0951980aa128256554b292d173a6db 100644 (file)
@@ -151,7 +151,7 @@ void Icmp4IpCodec::log(TextLog* const text_log, const uint8_t* raw_pkt,
     //      the two are not necessarily the same.
 
     // FIXIT-RC this does NOT obfuscate correctly
-    if (SnortConfig::obfuscate())
+    if (SnortConfig::get_conf()->obfuscate())
     {
         TextLog_Print(text_log, "xxx.xxx.xxx.xxx -> xxx.xxx.xxx.xxx");
     }
index 63a6c4270d07d8cd5c774837296c68fa0cfc46ef..86dfd9fe025a76011aaa6f315940cefe11f73326 100644 (file)
@@ -87,7 +87,7 @@ bool TeredoCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort
         codec.proto_bits |= PROTO_BIT__TEREDO;
         codec.codec_flags |= CODEC_TEREDO_SEEN;  // for ipv6 codec
 
-        if ( SnortConfig::tunnel_bypass_enabled(TUNNEL_TEREDO) )
+        if ( codec.conf->tunnel_bypass_enabled(TUNNEL_TEREDO) )
             codec.tunnel_bypass = true;
 
         if ( (!teredo::is_teredo_port(snort.sp)) && (!teredo::is_teredo_port(snort.dp)) )
index d6d39c95138b9dd24f8431407ba4f8105f6e9cbf..e40221280a3d1b871a1d647ec6ffed8b83c33bdc 100644 (file)
@@ -68,7 +68,7 @@ bool VxlanCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
     if ( hdr->flags != 0x08 )
         return false;
 
-    if ( SnortConfig::tunnel_bypass_enabled(TUNNEL_VXLAN) )
+    if ( codec.conf->tunnel_bypass_enabled(TUNNEL_VXLAN) )
         codec.tunnel_bypass = true;
 
     codec.lyr_len = VXLAN_MIN_HDR_LEN;
index 4a722dd4c8b2b4ddc990c464b3c2522ec64e0129..b85ac22036571d1c1a3af9f55e9cc0802e68e18e 100644 (file)
@@ -169,12 +169,14 @@ bool EthCodec::encode(const uint8_t* const raw_in, const uint16_t /*raw_len*/,
         ho->ether_type = enc.ethertype_set() ?
             htons(to_utype(enc.next_ethertype)) : hi->ether_type;
 
+        const SnortConfig* sc = SnortConfig::get_conf();
+
         if ( enc.forward() )
         {
             memcpy(ho->ether_src, hi->ether_src, sizeof(ho->ether_src));
 
-            if ( SnortConfig::get_conf()->eth_dst )
-                memcpy(ho->ether_dst, SnortConfig::get_conf()->eth_dst, sizeof(ho->ether_dst));
+            if ( sc->eth_dst )
+                memcpy(ho->ether_dst, sc->eth_dst, sizeof(ho->ether_dst));
             else
                 memcpy(ho->ether_dst, hi->ether_dst, sizeof(ho->ether_dst));
         }
@@ -182,8 +184,8 @@ bool EthCodec::encode(const uint8_t* const raw_in, const uint16_t /*raw_len*/,
         {
             memcpy(ho->ether_src, hi->ether_dst, sizeof(ho->ether_src));
 
-            if ( SnortConfig::get_conf()->eth_dst )
-                memcpy(ho->ether_dst, SnortConfig::get_conf()->eth_dst, sizeof(ho->ether_dst));
+            if ( sc->eth_dst )
+                memcpy(ho->ether_dst, sc->eth_dst, sizeof(ho->ether_dst));
             else
                 memcpy(ho->ether_dst, hi->ether_src, sizeof(ho->ether_dst));
         }
index ddaa9c4ad587f5b7acf04b2a03bdbd52ffdef5b1..5f77ff9d10eb87449b1f1f53f294e76b79f7f1a1 100644 (file)
@@ -64,7 +64,7 @@ bool snort_log(Packet* p)
 
 void CallLogFuncs(Packet* p, ListHead* head, Event* event, const char* msg)
 {
-    event->event_id = event_id | SnortConfig::get_event_log_id();
+    event->event_id = event_id | p->context->conf->get_event_log_id();
 
     DetectionEngine::set_check_tags(false);
     pc.log_pkts++;
@@ -81,7 +81,7 @@ void CallLogFuncs(Packet* p, const OptTreeNode* otn, ListHead* head)
     event.sig_info = const_cast<SigInfo*>(&otn->sigInfo);
     event.ref_time.tv_sec = p->pkth->ts.tv_sec;
     event.ref_time.tv_usec = p->pkth->ts.tv_usec;
-    event.event_id = event_id | SnortConfig::get_event_log_id();
+    event.event_id = event_id | p->context->conf->get_event_log_id();
     event.event_reference = event.event_id;
 
     DetectionEngine::set_check_tags(false);
@@ -98,7 +98,7 @@ void CallAlertFuncs(Packet* p, const OptTreeNode* otn, ListHead* head)
     event.sig_info = const_cast<SigInfo*>(&otn->sigInfo);
     event.ref_time.tv_sec = p->pkth->ts.tv_sec;
     event.ref_time.tv_usec = p->pkth->ts.tv_usec;
-    event.event_id = event_id | SnortConfig::get_event_log_id();
+    event.event_id = event_id | p->context->conf->get_event_log_id();
     event.event_reference = event.event_id;
 
     pc.total_alert_pkts++;
index e02c61efdd2600102c1e83f644470d81013c7422..ce388726eb88747d76775dab70677641d2520aa6 100644 (file)
@@ -63,7 +63,7 @@ using namespace snort;
 
 void DetectionEngine::thread_init()
 {
-    SnortConfig* sc = SnortConfig::get_conf();
+    const SnortConfig* sc = SnortConfig::get_conf();
     FastPatternConfig* fp = sc->fast_pattern_config;
     const MpseApi* offload_search_api = fp->get_offload_search_api();
 
@@ -151,7 +151,8 @@ Packet* DetectionEngine::set_next_packet(Packet* parent)
     IpsContext* c = Analyzer::get_switcher()->get_next();
     if ( parent )
     {
-        c->snapshot_flow(parent->flow);
+        if ( parent->flow )
+            c->snapshot_flow(parent->flow);
         c->packet_number = parent->context->packet_number;
         c->wire_packet = parent->context->wire_packet;
     }
@@ -370,8 +371,6 @@ bool DetectionEngine::do_offload(Packet* p)
     assert(p == p->context->packet);
     assert(p->context == sw->get_context());
 
-    p->context->conf = SnortConfig::get_conf();
-
     debug_logf(detection_trace, TRACE_DETECTION_ENGINE,
         "%" PRIu64 " de::offload %" PRIu64 " (r=%d)\n",
         p->context->packet_number, p->context->context_num, offloader->count());
@@ -395,7 +394,7 @@ bool DetectionEngine::offload(Packet* p)
     ContextSwitcher* sw = Analyzer::get_switcher();
     fp_partial(p);
 
-    if ( p->dsize >= SnortConfig::get_conf()->offload_limit and
+    if ( p->dsize >= p->context->conf->offload_limit and
         p->context->searches.items.size() > 0 )
     {
         if ( offloader->available() )
@@ -575,8 +574,9 @@ bool DetectionEngine::inspect(Packet* p)
 
         if ( p->ptrs.decode_flags & DECODE_ERR_FLAGS )
         {
-            if ( SnortConfig::inline_mode() and
-                SnortConfig::checksum_drop(p->ptrs.decode_flags & DECODE_ERR_CKSUM_ALL) )
+            if ( p->context->conf->inline_mode() and
+                // FIXIT-H check specific proto checksum drop flags
+                snort::get_network_policy()->checksum_drops(p->ptrs.decode_flags & DECODE_ERR_CKSUM_ALL) )
             {
                 p->active->drop_packet(p);
             }
index 89badd227adce9130e8dc043b14726c290707127..8cd9f3ef2410322c4df6ec591eb884ad1a3523ee 100644 (file)
@@ -48,8 +48,10 @@ static void LogBuffer(const char* s, const uint8_t* p, unsigned n)
     if ( !p )
         return;
 
-    if ( n > SnortConfig::get_conf()->event_trace_max )
-        n = SnortConfig::get_conf()->event_trace_max;
+    const SnortConfig* sc = SnortConfig::get_conf();
+
+    if ( n > sc->event_trace_max )
+        n = sc->event_trace_max;
 
     for ( idx = 0; idx < n; idx++)
     {
@@ -104,7 +106,9 @@ void EventTrace_Log(const Packet* p, const OptTreeNode* otn, int action)
 
 void EventTrace_Init()
 {
-    if ( SnortConfig::get_conf()->event_trace_max > 0 )
+    const SnortConfig* sc = SnortConfig::get_conf();
+
+    if ( sc->event_trace_max > 0 )
     {
         time_t now = time(nullptr);
         char time_buf[26];
@@ -112,7 +116,7 @@ void EventTrace_Init()
 
         tlog = TextLog_Init ("event_trace.txt", 4*1024, 8*1024*1024);
         TextLog_Print(tlog, "\nTrace started at %s", time_buf);
-        TextLog_Print(tlog, "Trace max_data is %u bytes\n", SnortConfig::get_conf()->event_trace_max);
+        TextLog_Print(tlog, "Trace max_data is %u bytes\n", sc->event_trace_max);
     }
 }
 
index ad0243010eb474c63af45ccef80ce960ffc16fc1..123492e0ec2cf83e5f5f54dd0815dc17930b1cd7 100644 (file)
@@ -46,9 +46,9 @@ void EventTrace_Term();
 
 void EventTrace_Log(const snort::Packet*, const OptTreeNode*, int action);
 
-inline int EventTrace_IsEnabled()
+inline int EventTrace_IsEnabled(const snort::SnortConfig* sc)
 {
-    return ( snort::SnortConfig::get_conf()->event_trace_max > 0 );
+    return ( sc->event_trace_max > 0 );
 }
 
 #endif
index be0226335fcdddd3d1b161972e52deb4c6e41ac6..80d0934f0fa78a8f63832202578344cbd7d14675 100644 (file)
@@ -47,55 +47,55 @@ public:
     void set_debug_mode()
     { debug = true; }
 
-    bool get_debug_mode()
+    bool get_debug_mode() const
     { return debug; }
 
     void set_stream_insert(bool enable)
     { inspect_stream_insert = enable; }
 
-    bool get_stream_insert()
+    bool get_stream_insert() const
     { return inspect_stream_insert; }
 
     void set_max_queue_events(unsigned num_events)
     { max_queue_events = num_events; }
 
-    unsigned get_max_queue_events()
+    unsigned get_max_queue_events() const
     { return max_queue_events; }
 
     void set_bleed_over_port_limit(unsigned n)
     { bleedover_port_limit = n; }
 
-    int get_bleed_over_port_limit()
+    int get_bleed_over_port_limit() const
     { return bleedover_port_limit; }
 
-    int get_single_rule_group()
+    int get_single_rule_group() const
     { return portlists_flags & PL_SINGLE_RULE_GROUP; }
 
-    int get_bleed_over_warnings()
+    int get_bleed_over_warnings() const
     { return portlists_flags & PL_BLEEDOVER_WARNINGS_ENABLED; }
 
-    int get_debug_print_nc_rules()
+    int get_debug_print_nc_rules() const
     { return portlists_flags & PL_DEBUG_PRINT_NC_DETECT_RULES; }
 
-    int get_debug_print_rule_group_build_details()
+    int get_debug_print_rule_group_build_details() const
     { return portlists_flags & PL_DEBUG_PRINT_RULEGROUP_BUILD; }
 
-    int get_debug_print_rule_groups_compiled()
+    int get_debug_print_rule_groups_compiled() const
     { return portlists_flags & PL_DEBUG_PRINT_RULEGROUPS_COMPILED; }
 
-    int get_debug_print_rule_groups_uncompiled()
+    int get_debug_print_rule_groups_uncompiled() const
     { return portlists_flags & PL_DEBUG_PRINT_RULEGROUPS_UNCOMPILED; }
 
     void set_debug_print_fast_patterns(bool b)
     { debug_print_fast_pattern = b; }
 
-    bool get_debug_print_fast_patterns()
+    bool get_debug_print_fast_patterns() const
     { return debug_print_fast_pattern; }
 
     void set_split_any_any(bool enable)
     { split_any_any = enable; }
 
-    bool get_split_any_any()
+    bool get_split_any_any() const
     { return split_any_any; }
 
     void set_single_rule_group()
@@ -119,7 +119,7 @@ public:
     void set_search_opt(bool flag)
     { search_opt = flag; }
 
-    bool get_search_opt()
+    bool get_search_opt() const
     { return search_opt; }
 
     bool set_search_method(const char*);
@@ -132,25 +132,25 @@ public:
 
     void set_queue_limit(unsigned);
 
-    unsigned get_queue_limit()
+    unsigned get_queue_limit() const
     { return queue_limit; }
 
-    const snort::MpseApi* get_search_api()
+    const snort::MpseApi* get_search_api() const
     { return search_api; }
 
-    const snort::MpseApi* get_offload_search_api()
+    const snort::MpseApi* get_offload_search_api() const
     { return offload_search_api; }
 
-    bool get_trim()
+    bool get_trim() const
     { return trim; }
 
     void trimmed()
     { num_patterns_trimmed++; }
 
-    int get_num_patterns_trimmed()
+    int get_num_patterns_trimmed() const
     { return num_patterns_trimmed; }
 
-    int get_num_patterns_truncated()
+    int get_num_patterns_truncated() const
     { return num_patterns_truncated; }
 
     unsigned set_max(unsigned bytes);
index 0d933ff0f3ab5958b25392b8155bd161d0d94b38..c9e6bc96e1e55133e6f178d71e2467cec1e24057 100644 (file)
@@ -382,7 +382,7 @@ static int pmx_create_tree_offload(SnortConfig* sc, void* id, void** existing_tr
 }
 
 static int fpFinishPortGroupRule(
-    SnortConfig* sc, Mpse* mpse, OptTreeNode* otn, PatternMatchData* pmd,
+    Mpse* mpse, OptTreeNode* otn, PatternMatchData* pmd,
     FastPatternConfig* fp, Mpse::MpseType mpse_type, bool get_final_pat)
 {
     const char* pattern;
@@ -409,7 +409,7 @@ static int fpFinishPortGroupRule(
     Mpse::PatternDescriptor desc(
         pmd->is_no_case(), pmd->is_negated(), pmd->is_literal(), pmd->mpse_flags);
 
-    mpse->add_pattern(sc, (const uint8_t*)pattern, pattern_length, desc, pmx);
+    mpse->add_pattern((const uint8_t*)pattern, pattern_length, desc, pmx);
 
     return 0;
 }
@@ -496,10 +496,11 @@ static int fpFinishPortGroup(SnortConfig* sc, PortGroup* pg, FastPatternConfig*
     return 0;
 }
 
-static void fpAddAlternatePatterns(SnortConfig* sc, Mpse* mpse,
-    OptTreeNode* otn, PatternMatchData* pmd, FastPatternConfig* fp, Mpse::MpseType mpse_type)
+static void fpAddAlternatePatterns(
+    Mpse* mpse, OptTreeNode* otn, PatternMatchData* pmd, FastPatternConfig* fp,
+    Mpse::MpseType mpse_type)
 {
-    fpFinishPortGroupRule(sc, mpse, otn, pmd, fp, mpse_type, false);
+    fpFinishPortGroupRule(mpse, otn, pmd, fp, mpse_type, false);
 }
 
 static int fpAddPortGroupRule(
@@ -638,7 +639,7 @@ static int fpAddPortGroupRule(
                     add_nfp_rule = true;
 
                 // Now add patterns
-                if (fpFinishPortGroupRule(sc, pg->mpsegrp[main_pmd->pm_type]->normal_mpse,
+                if (fpFinishPortGroupRule(pg->mpsegrp[main_pmd->pm_type]->normal_mpse,
                         otn, main_pmd, fp, Mpse::MPSE_TYPE_NORMAL, true) == 0)
                 {
                     if (main_pmd->pattern_size > otn->longestPatternLen)
@@ -646,7 +647,7 @@ static int fpAddPortGroupRule(
 
                     // Add Alternative patterns
                     for (auto p : pmv)
-                        fpAddAlternatePatterns(sc, pg->mpsegrp[main_pmd->pm_type]->normal_mpse,
+                        fpAddAlternatePatterns(pg->mpsegrp[main_pmd->pm_type]->normal_mpse,
                             otn, p, fp, Mpse::MPSE_TYPE_NORMAL);
                 }
             }
@@ -658,7 +659,7 @@ static int fpAddPortGroupRule(
                     add_nfp_rule = true;
 
                 // Now add patterns
-                if (fpFinishPortGroupRule(sc, pg->mpsegrp[main_pmd->pm_type]->offload_mpse,
+                if (fpFinishPortGroupRule(pg->mpsegrp[main_pmd->pm_type]->offload_mpse,
                         otn, ol_pmd, fp, Mpse::MPSE_TYPE_OFFLOAD, true) == 0)
                 {
                     if (ol_pmd->pattern_size > otn->longestPatternLen)
@@ -666,7 +667,7 @@ static int fpAddPortGroupRule(
 
                     // Add Alternative patterns
                     for (auto p : pmv_ol)
-                        fpAddAlternatePatterns(sc, pg->mpsegrp[main_pmd->pm_type]->offload_mpse,
+                        fpAddAlternatePatterns(pg->mpsegrp[main_pmd->pm_type]->offload_mpse,
                             otn, p, fp, Mpse::MPSE_TYPE_OFFLOAD);
                 }
             }
index f9b42af21acc9122e4ce66061ba628746f2430cd..2fa764732ff9bef4aee5e55f9a47eb951db436ed 100644 (file)
@@ -94,12 +94,12 @@ THREAD_LOCAL ProfileStats rulePerfStats;
 static void fp_immediate(Packet*);
 static void fp_immediate(MpseGroup*, Packet*, const uint8_t*, unsigned);
 
-static inline void init_match_info(OtnxMatchData* omd)
+static inline void init_match_info(const IpsContext* c)
 {
-    for ( unsigned i = 0; i < SnortConfig::get_conf()->num_rule_types; i++ )
-        omd->matchInfo[i].iMatchCount = 0;
+    for ( unsigned i = 0; i < c->conf->num_rule_types; i++ )
+        c->otnx->matchInfo[i].iMatchCount = 0;
 
-    omd->have_match = false;
+    c->otnx->have_match = false;
 }
 
 // called by fpLogEvent(), which does the filtering etc.
@@ -107,7 +107,7 @@ static inline void init_match_info(OtnxMatchData* omd)
 static inline void fpLogOther(
     Packet* p, const RuleTreeNode* rtn, const OptTreeNode* otn, int action)
 {
-    if ( EventTrace_IsEnabled() )
+    if ( EventTrace_IsEnabled(p->context->conf) )
         EventTrace_Log(p, otn, action);
 
     if ( PacketTracer::is_active() )
@@ -158,7 +158,7 @@ int fpLogEvent(const RuleTreeNode* rtn, const OptTreeNode* otn, Packet* p)
     }
 
     if ((p->packet_flags & PKT_STREAM_UNEST_UNI) &&
-        SnortConfig::assure_established() &&
+        p->context->conf->assure_established() &&
         (!(p->packet_flags & PKT_REBUILT_STREAM)) &&
         !otn->stateless() )
     {
@@ -217,8 +217,10 @@ int fpLogEvent(const RuleTreeNode* rtn, const OptTreeNode* otn, Packet* p)
      * check the decoder/preprocessor events (they have been added to Event queue already).
      * If its order is lower than 'pass', it should have been passed.
      * This is consistent with other detection rules */
-    if ( (p->packet_flags & PKT_PASS_RULE)
-        && (SnortConfig::get_eval_index(rtn->action) > SnortConfig::get_eval_index(Actions::PASS)) )
+    const SnortConfig* sc = p->context->conf;
+
+    if ( (p->packet_flags & PKT_PASS_RULE) &&
+        (sc->get_eval_index(rtn->action) > sc->get_eval_index(Actions::PASS)) )
     {
         fpLogOther(p, rtn, otn, rtn->action);
         return 1;
@@ -260,8 +262,10 @@ int fpAddMatch(OtnxMatchData* omd, const OptTreeNode* otn)
     RuleTreeNode* rtn = getRuntimeRtnFromOtn(otn);
     unsigned evalIndex = rtn->listhead->ruleListNode->evalIndex;
 
+    const SnortConfig* sc = SnortConfig::get_conf();
+
     /* bounds check index */
-    if ( evalIndex >= SnortConfig::get_conf()->num_rule_types )
+    if ( evalIndex >= sc->num_rule_types )
     {
         pc.match_limit++;
         return 1;
@@ -272,7 +276,7 @@ int fpAddMatch(OtnxMatchData* omd, const OptTreeNode* otn)
     **  If we hit the max number of unique events for any rule type alert,
     **  log or pass, then we don't add it to the list.
     */
-    if ( pmi->iMatchCount >= SnortConfig::get_conf()->fast_pattern_config->get_max_queue_events() ||
+    if ( pmi->iMatchCount >= sc->fast_pattern_config->get_max_queue_events() ||
         pmi->iMatchCount >= MAX_EVENT_MATCH)
     {
         pc.match_limit++;
@@ -604,16 +608,16 @@ static inline int fpFinalSelectEvent(OtnxMatchData* omd, Packet* p)
         return 0;
 
     unsigned tcnt = 0;
-    EventQueueConfig* eq = SnortConfig::get_conf()->event_queue_config;
+    EventQueueConfig* eq = p->context->conf->event_queue_config;
     int (*compar)(const void *, const void *);
     compar = ( eq->order == SNORT_EVENTQ_PRIORITY )
         ? &sortOrderByPriority : sortOrderByContentLength;
 
-    for ( unsigned i = 0; i < SnortConfig::get_conf()->num_rule_types; i++ )
+    for ( unsigned i = 0; i < p->context->conf->num_rule_types; i++ )
     {
         /* bail if were not dumping events in all the action groups,
          * and we've already got some events */
-        if (!SnortConfig::process_all_events() && (tcnt > 0))
+        if (!p->context->conf->process_all_events() && (tcnt > 0))
             return 1;
 
         if ( omd->matchInfo[i].iMatchCount )
@@ -814,7 +818,7 @@ bool MpseStash::process(MpseMatch match, void* context)
 
 void fp_set_context(IpsContext& c)
 {
-    FastPatternConfig* fp = SnortConfig::get_conf()->fast_pattern_config;
+    FastPatternConfig* fp = c.conf->fast_pattern_config;
     c.stash = new MpseStash(fp->get_queue_limit());
     c.otnx = (OtnxMatchData*)snort_calloc(sizeof(OtnxMatchData));
     c.otnx->matchInfo = (MatchInfo*)snort_calloc(MAX_NUM_RULE_TYPES, sizeof(MatchInfo));
@@ -973,7 +977,7 @@ static inline void eval_fp(
 
     if ( DetectionEngine::content_enabled(p) )
     {
-        FastPatternConfig* fp = SnortConfig::get_conf()->fast_pattern_config;
+        FastPatternConfig* fp = p->context->conf->fast_pattern_config;
 
         if ( fp->get_stream_insert() || !(p->packet_flags & PKT_STREAM_INSERT) )
             if ( fp_search(port_group, p) )
@@ -995,7 +999,7 @@ static inline void eval_nfp(
     const uint8_t* tmp_payload = nullptr;
     uint16_t tmp_dsize = 0;
 
-    FastPatternConfig* fp = SnortConfig::get_conf()->fast_pattern_config;
+    FastPatternConfig* fp = p->context->conf->fast_pattern_config;
 
     if (ip_rule)
     {
@@ -1085,10 +1089,10 @@ static inline void fpEvalHeaderIp(Packet* p, FPTask task)
 {
     PortGroup* any = nullptr, * ip_group = nullptr;
 
-    if ( !prmFindRuleGroupIp(SnortConfig::get_conf()->prmIpRTNX, ANYPORT, &ip_group, &any) )
+    if ( !prmFindRuleGroupIp(p->context->conf->prmIpRTNX, ANYPORT, &ip_group, &any) )
         return;
 
-    if ( SnortConfig::get_conf()->fast_pattern_config->get_debug_print_nc_rules() )
+    if ( p->context->conf->fast_pattern_config->get_debug_print_nc_rules() )
         LogMessage("fpEvalHeaderIp: ip_group=%p, any=%p\n", (void*)ip_group, (void*)any);
 
     if ( ip_group )
@@ -1102,7 +1106,7 @@ static inline void fpEvalHeaderIcmp(Packet* p, FPTask task)
 {
     PortGroup* any = nullptr, * type = nullptr;
 
-    if ( !prmFindRuleGroupIcmp(SnortConfig::get_conf()->prmIcmpRTNX, p->ptrs.icmph->type, &type, &any) )
+    if ( !prmFindRuleGroupIcmp(p->context->conf->prmIcmpRTNX, p->ptrs.icmph->type, &type, &any) )
         return;
 
     if ( type )
@@ -1116,7 +1120,7 @@ static inline void fpEvalHeaderTcp(Packet* p, FPTask task)
 {
     PortGroup* src = nullptr, * dst = nullptr, * any = nullptr;
 
-    if ( !prmFindRuleGroupTcp(SnortConfig::get_conf()->prmTcpRTNX, p->ptrs.dp, p->ptrs.sp, &src, &dst, &any) )
+    if ( !prmFindRuleGroupTcp(p->context->conf->prmTcpRTNX, p->ptrs.dp, p->ptrs.sp, &src, &dst, &any) )
         return;
 
     if ( dst )
@@ -1133,7 +1137,7 @@ static inline void fpEvalHeaderUdp(Packet* p, FPTask task)
 {
     PortGroup* src = nullptr, * dst = nullptr, * any = nullptr;
 
-    if ( !prmFindRuleGroupUdp(SnortConfig::get_conf()->prmUdpRTNX, p->ptrs.dp, p->ptrs.sp, &src, &dst, &any) )
+    if ( !prmFindRuleGroupUdp(p->context->conf->prmUdpRTNX, p->ptrs.dp, p->ptrs.sp, &src, &dst, &any) )
         return;
 
     if ( dst )
@@ -1155,10 +1159,10 @@ static inline bool fpEvalHeaderSvc(Packet* p, FPTask task)
     if (snort_protocol_id != UNKNOWN_PROTOCOL_ID and snort_protocol_id != INVALID_PROTOCOL_ID)
     {
         if (p->is_from_server()) /* to cli */
-            svc = SnortConfig::get_conf()->sopgTable->get_port_group(false, snort_protocol_id);
+            svc = p->context->conf->sopgTable->get_port_group(false, snort_protocol_id);
 
         if (p->is_from_client()) /* to srv */
-            svc = SnortConfig::get_conf()->sopgTable->get_port_group(true, snort_protocol_id);
+            svc = p->context->conf->sopgTable->get_port_group(true, snort_protocol_id);
     }
 
     if ( svc )
@@ -1270,7 +1274,7 @@ void fp_partial(Packet* p)
     stash->enable_process();
     stash->init();
     stash->disable_process();
-    init_match_info(c->otnx);
+    init_match_info(c);
     c->searches.mf = rule_tree_queue;
     c->searches.context = c;
     assert(!c->searches.items.size());
index a5752c6164921854de68253489c6d93be29f76a3..1482f34e27359dbc846286fb438e201f72d31d67 100644 (file)
@@ -58,7 +58,8 @@ IpsContext::IpsContext(unsigned size) :
     pkth = new DAQ_PktHdr_t;
     buf = new uint8_t[buf_size];
 
-    const EventQueueConfig* qc = SnortConfig::get_conf()->event_queue_config;
+    conf = SnortConfig::get_conf();
+    const EventQueueConfig* qc = conf->event_queue_config;
     equeue = sfeventq_new(qc->max_events, qc->log_events, sizeof(EventNode));
 
     packet->context = this;
index 885f5de1c006d9dbbec5ab3dc640ef9c626950fd..18389b592e6fb21d5aa91af37b4f7ab5261c6051 100644 (file)
@@ -145,7 +145,7 @@ public:
     DAQ_PktHdr_t* pkth;
     uint8_t* buf;
 
-    SnortConfig* conf;
+    const SnortConfig* conf;
     MpseBatch searches;
     MpseStash* stash;
     OtnxMatchData* otnx;
index 2c0ba8201bad64c036b8c20e4a7782b9a6841ccd..05692aaad47e5e863eb8a3547dfa3890640733f9 100644 (file)
@@ -182,9 +182,10 @@ bool MpseRegexOffload::get(Packet*& p)
 ThreadRegexOffload::ThreadRegexOffload(unsigned max) : RegexOffload(max)
 {
     unsigned i = ThreadConfig::get_instance_max();
+    const SnortConfig* sc = SnortConfig::get_conf();
 
     for ( auto* req : idle )
-        req->thread = new std::thread(worker, req, SnortConfig::get_conf(), i++);
+        req->thread = new std::thread(worker, req, sc, i++);
 }
 
 ThreadRegexOffload::~ThreadRegexOffload()
@@ -266,7 +267,7 @@ bool ThreadRegexOffload::get(Packet*& p)
 }
 
 void ThreadRegexOffload::worker(
-    RegexRequest* req, SnortConfig* initial_config, unsigned id)
+    RegexRequest* req, const SnortConfig* initial_config, unsigned id)
 {
     set_instance_id(id);
     SnortConfig::set_conf(initial_config);
index d8b28305dea32f631c9d0699fdc81c1c0b995c49..b75d1023dd2569dfda256e149e1fbd2634ca71b5 100644 (file)
@@ -89,7 +89,7 @@ public:
     bool get(snort::Packet*&) override;
 
 private:
-    static void worker(RegexRequest*, snort::SnortConfig*, unsigned id);
+    static void worker(RegexRequest*, const snort::SnortConfig*, unsigned id);
 };
 
 #endif
index caa3c07581321b010a9045968d02992a150ce334..46a6ef9ac66538d9e7d9eb2e29719955fac68ea6 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "tag.h"
 
+#include "detection/ips_context.h"
 #include "events/event.h"
 #include "hash/hash_defs.h"
 #include "hash/xhash.h"
@@ -533,8 +534,8 @@ int CheckTagList(Packet* p, Event& event, void** log_list)
              * bandwidth sensors. */
             /* Use the global max.
                If its non-0, check count for this tag node */
-            if ( SnortConfig::get_tagged_packet_limit() &&
-                returned->pkt_count >= SnortConfig::get_tagged_packet_limit() )
+            if ( p->context->conf->get_tagged_packet_limit() &&
+                returned->pkt_count >= p->context->conf->get_tagged_packet_limit() )
             {
                 returned->metric = 0;
             }
@@ -548,7 +549,7 @@ int CheckTagList(Packet* p, Event& event, void** log_list)
             /* set event reference details */
             event.ref_time.tv_sec = returned->event_time.tv_sec;
             event.ref_time.tv_usec = returned->event_time.tv_usec;
-            event.event_reference = returned->event_id | SnortConfig::get_event_log_id();
+            event.event_reference = returned->event_id | p->context->conf->get_event_log_id();
             *log_list = returned->log_list;
         }
 
index ed601962343985d31118e267ece2f47840b08adc..f246406a3091cabd87dde3cbd9266be14de6cb2d 100644 (file)
@@ -41,7 +41,7 @@ void SetEvent(
     event.sig_info->priority = priority;
 
     /* this one gets set automatically */
-    event.event_id = ++event_id | SnortConfig::get_event_log_id();
+    event.event_id = ++event_id | SnortConfig::get_conf()->get_event_log_id();
 
     if (event_ref)
         event.event_reference = event_ref;
index 357e3874f74ff5a193ad7950461582c38af3e785..675472761f1b9103b6b3460d444beaa52096c4ea 100644 (file)
@@ -290,7 +290,7 @@ bool FileCache::apply_verdict(Packet* p, FileContext* file_ctx, FileVerdict verd
             timercmp(&file_ctx->pending_expire_time, &now, <))
         {
             //  Timed out while waiting for pending verdict.
-            FileConfig* fc = get_file_config(SnortConfig::get_conf());
+            FileConfig* fc = get_file_config(p->context->conf);
 
             //  Block session on timeout if configured, otherwise use the
             //  current action.
index fac4b68c0944d81f1d519c432081bee203f4eee7..09c5073db828e2ec8d9b60e84acb7d73d1836f30 100644 (file)
@@ -104,8 +104,11 @@ std::string file_type_name(uint32_t id)
         return "NA";
 }
 
-FileConfig* get_file_config(SnortConfig* sc)
+FileConfig* get_file_config(const SnortConfig* sc)
 {
+    if ( !sc )
+        sc = SnortConfig::get_conf();
+
     FileInspect* fi = (FileInspect*)InspectorManager::get_inspector(FILE_ID_NAME, true, sc);
 
     if (fi)
index 6e779f0882e2a7f606a63bc4b3b080e3707b2248..c750d1d02560c8f252d69d215696dcdef229f02d 100644 (file)
@@ -81,6 +81,6 @@ private:
 };
 
 std::string file_type_name(uint32_t id);
-FileConfig* get_file_config(snort::SnortConfig* sc = nullptr);
+FileConfig* get_file_config(const snort::SnortConfig* sc = nullptr);
 #endif
 
index 73ffdad3d0415224db2c36874368c62330a70ee2..b35a6b5e2393fb61355910887c85f4d2a9e15c3a 100644 (file)
@@ -194,8 +194,8 @@ FileContext* FileFlows::get_partially_processed_context(uint64_t file_id)
     return nullptr;
 }
 
-FileContext* FileFlows::get_file_context(uint64_t file_id, bool to_create,
-    uint64_t multi_file_processing_id)
+FileContext* FileFlows::get_file_context(
+    uint64_t file_id, bool to_create, uint64_t multi_file_processing_id)
 {
     // First check if this file is currently being processed
     if (!multi_file_processing_id)
@@ -415,7 +415,7 @@ static void file_config_show(const FileConfig* fc)
     ConfigLogger::log_value("verdict_delay", fc->verdict_delay);
 }
 
-void FileInspect::show(SnortConfig*)
+void FileInspect::show(const SnortConfig*) const
 {
     if ( config )
         file_config_show(config);
index ec8629a4002bcbff5329079b87b1c6389cb92d81..3e2563fec540ccbb353beb7f3d7645323b5b6dde 100644 (file)
@@ -47,7 +47,7 @@ public:
     ~FileInspect() override;
     void eval(Packet*) override { }
     bool configure(SnortConfig*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     FileConfig* config;
 };
 
index 54601a9de4b6907186f9ea3c396cd3a6699faec3..8c66a9c55a3d8692da54ee811fe37894e62f91e7 100644 (file)
@@ -206,7 +206,7 @@ class FileLog : public Inspector
 public:
     FileLog(const FileLogConfig& conf) { config = conf; }
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override { }
 
     bool configure(SnortConfig*) override
@@ -219,7 +219,7 @@ private:
     FileLogConfig config;
 };
 
-void FileLog::show(SnortConfig*)
+void FileLog::show(const SnortConfig*) const
 {
     ConfigLogger::log_flag("log_pkt_time", config.log_pkt_time);
     ConfigLogger::log_flag("log_sys_time", config.log_sys_time);
index 01eacf7a40be892fc7d78a6b7d41874caa54e51b..8f371ad000289f1365d29b3bb0ac0f4d39156492 100644 (file)
@@ -32,6 +32,7 @@
 #include "log/messages.h"
 #include "main/snort_config.h"
 #include "mime/file_mime_process.h"
+#include "search_engines/search_tool.h"
 
 #include "file_cache.h"
 #include "file_capture.h"
@@ -57,9 +58,12 @@ void FileService::init()
     FileFlows::init();
 }
 
-void FileService::post_init()
+void FileService::post_init(const SnortConfig* sc)
 {
+    SearchTool::set_conf(sc);
     MimeSession::init();
+    SearchTool::set_conf(nullptr);
+
     const FileConfig* const conf = get_file_config();
 
     if (!conf)
@@ -79,7 +83,7 @@ void FileService::post_init()
     }
 }
 
-void FileService::verify_reload(SnortConfig* sc)
+void FileService::verify_reload(const SnortConfig* sc)
 {
     const FileConfig* const conf = get_file_config(sc);
 
index 6d976255f7bebf6aac06c7f14eaf9ee258044c69..2b504d199a2abaca525e6e7b50b761f225a00c9d 100644 (file)
@@ -40,10 +40,10 @@ public:
     static void init();
 
     // Called after permission is dropped
-    static void post_init();
+    static void post_init(const SnortConfig*);
 
     // Called during reload
-    static void verify_reload(SnortConfig*);
+    static void verify_reload(const SnortConfig*);
 
     // This must be called when snort exits
     static void close();
index 3c8c392c991296f1f9ba4a615ad4e80eae2c78a7..0461302459d34719c1b3f88af6a5f9f28de3d599 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "rate_filter.h"
 
+#include "detection/ips_context.h"
 #include "detection/rules.h"
 #include "detection/treenodes.h"
 #include "hash/ghash.h"
@@ -124,12 +125,7 @@ int RateFilter_Test(const OptTreeNode* otn, Packet* p)
         dip = &cleared;
     }
 
-    if ((SnortConfig::get_conf() == nullptr) ||
-        (SnortConfig::get_conf()->rate_filter_config == nullptr))
-    {
-        /* this should not happen, see the create fcn */
-        return -1;
-    }
+    RateFilterConfig* rfc = p->context->conf->rate_filter_config;
 
     if ( EventIsInternal(gid) )
     {
@@ -137,12 +133,12 @@ int RateFilter_Test(const OptTreeNode* otn, Packet* p)
         // events and these require: src -> client, dst -> server.
         if ( p->is_from_server() )
         {
-            return SFRF_TestThreshold(SnortConfig::get_conf()->rate_filter_config, gid, sid,
-                dip, sip, p->pkth->ts.tv_sec, SFRF_COUNT_INCREMENT);
+            return SFRF_TestThreshold(
+                rfc, gid, sid, dip, sip, p->pkth->ts.tv_sec, SFRF_COUNT_INCREMENT);
         }
     }
 
-    return SFRF_TestThreshold(SnortConfig::get_conf()->rate_filter_config, gid, sid,
-        sip, dip, p->pkth->ts.tv_sec, SFRF_COUNT_INCREMENT);
+    return SFRF_TestThreshold(
+        rfc, gid, sid, sip, dip, p->pkth->ts.tv_sec, SFRF_COUNT_INCREMENT);
 }
 
index d449e52aa33dee56bdb27be5a82e8e993937bdbf..d250661c2dbef4e52fd5a5b8f6d7eb667881979e 100644 (file)
@@ -23,6 +23,7 @@
 #endif
 
 #include "catch/snort_catch.h"
+#include "main/snort_config.h"
 #include "parser/parse_ip.h"
 #include "sfip/sf_ip.h"
 
@@ -888,13 +889,13 @@ static void PrintTests()
 
 //---------------------------------------------------------------
 
-static void Init(unsigned cap)
+static void Init(const SnortConfig* sc, unsigned cap)
 {
     // FIXIT-L must set policies because they may have been invalidated
     // by prior tests with transient SnortConfigs.  better to fix sfrf
     // to use a SnortConfig parameter or make this a make check test
     // with a separate executable.
-    set_default_policy();
+    set_default_policy(sc);
     rfc = RateFilter_ConfigNew();
     rfc->memcap = cap;
 
@@ -987,7 +988,8 @@ static int CapCheck(int i)
 
 TEST_CASE("sfrf default memcap", "[sfrf]")
 {
-    Init(MEM_DEFAULT);
+    SnortConfig sc;
+    Init(&sc, MEM_DEFAULT);
 
     SECTION("setup")
     {
@@ -1004,7 +1006,8 @@ TEST_CASE("sfrf default memcap", "[sfrf]")
 
 TEST_CASE("sfrf minimum memcap", "[sfrf]")
 {
-    Init(MEM_MINIMUM);
+    SnortConfig sc;
+    Init(&sc, MEM_MINIMUM);
 
     SECTION("setup")
     {
index 8ce8b81e3b11553b6bd9cb0391c29c24ec949749..00f45708df0ab1d47a8ed1b85d1f17f31199586d 100644 (file)
@@ -23,6 +23,7 @@
 #endif
 
 #include "catch/snort_catch.h"
+#include "main/snort_config.h"
 #include "hash/xhash.h"
 #include "parser/parse_ip.h"
 #include "sfip/sf_ip.h"
@@ -739,13 +740,13 @@ static EventData pktData[] =
 
 //---------------------------------------------------------------
 
-static void Init(ThreshData* base, int max)
+static void Init(const SnortConfig* sc, ThreshData* base, int max)
 {
     // FIXIT-L must set policies because they may have been invalidated
     // by prior tests with transient SnortConfigs.  better to fix sfthd
     // to use a SnortConfig parameter or make this a make check test
     // with a separate executable.
-    set_default_policy();
+    set_default_policy(sc);
 
     int i;
     int id = 0;
@@ -771,24 +772,24 @@ static void Init(ThreshData* base, int max)
     }
 }
 
-static void InitDefault()
+static void InitDefault(const SnortConfig* sc)
 {
     pThdObjs = sfthd_objs_new();
     pThd = sfthd_new(MEM_DEFAULT, MEM_DEFAULT);
-    Init(thData, NUM_THDS);
+    Init(sc, thData, NUM_THDS);
 }
 
-static void InitMincap()
+static void InitMincap(const SnortConfig* sc)
 {
     pThdObjs = sfthd_objs_new();
     pThd = sfthd_new(MEM_MINIMUM, MEM_MINIMUM+1);
-    Init(thData, NUM_THDS);
+    Init(sc, thData, NUM_THDS);
 }
 
-static void InitDetect()
+static void InitDetect(const SnortConfig* sc)
 {
     dThd = sfthd_local_new(MEM_DEFAULT);
-    Init(ruleData, NUM_RULS);
+    Init(sc, ruleData, NUM_RULS);
 }
 
 static void Term()
@@ -914,7 +915,8 @@ static int PacketCheck(int i)
 
 TEST_CASE("sfthd normal", "[sfthd]")
 {
-    InitDefault();
+    SnortConfig sc;
+    InitDefault(&sc);
 
     SECTION("setup")
     {
@@ -931,7 +933,8 @@ TEST_CASE("sfthd normal", "[sfthd]")
 
 TEST_CASE("sfthd mincap", "[sfthd]")
 {
-    InitMincap();
+    SnortConfig sc;
+    InitMincap(&sc);
 
     SECTION("setup")
     {
@@ -948,7 +951,8 @@ TEST_CASE("sfthd mincap", "[sfthd]")
 
 TEST_CASE("sfthd detect", "[sfthd]")
 {
-    InitDetect();
+    SnortConfig sc;
+    InitDetect(&sc);
 
     SECTION("rules")
     {
index 15f071d6d7abb632ab2e06ced4cf67466ee1beb5..f7689ad718815398ccd5e245ce2c718168ca67bf 100644 (file)
@@ -144,12 +144,6 @@ int sfthreshold_create(
 int sfthreshold_test(unsigned gen_id, unsigned sig_id, const SfIp* sip,
     const SfIp* dip, long curtime, PolicyId policy_id)
 {
-    if ((SnortConfig::get_conf()->threshold_config == nullptr) ||
-        !SnortConfig::get_conf()->threshold_config->enabled)
-    {
-        return 0;
-    }
-
     if (!thd_checked)
     {
         thd_checked = 1;
index bcc8fc321b874e8716b247e72e19ef123ee00a51..12669293d379383771bf162173b726f6a1857d8b 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "expect_cache.h"
 
+#include "detection/ips_context.h"
 #include "hash/zhash.h"
 #include "packet_io/sfdaq_instance.h"
 #include "protocols/packet.h"
@@ -148,8 +149,8 @@ ExpectNode* ExpectCache::find_node_by_packet(Packet* p, FlowKey &key)
     PktType type = p->type();
     IpProtocol ip_proto = p->get_ip_proto_next();
 
-    bool reversed_key = key.init(type, ip_proto, dstIP, p->ptrs.dp, srcIP, p->ptrs.sp,
-            vlanId, mplsId, addressSpaceId);
+    bool reversed_key = key.init(p->context->conf, type, ip_proto, dstIP, p->ptrs.dp,
+        srcIP, p->ptrs.sp, vlanId, mplsId, addressSpaceId);
 
     /*
         Lookup order:
@@ -242,8 +243,8 @@ bool ExpectCache::process_expected(ExpectNode* node, FlowKey& key, Packet* p, Fl
 
     /* If this is 0, we're ignoring, otherwise setting id of new session */
     if (!node->snort_protocol_id)
-        ignoring = node->direction ? true : false;
-    else if (lws->ssn_state.snort_protocol_id != node->snort_protocol_id)
+        ignoring = node->direction != 0;
+    else
         lws->ssn_state.snort_protocol_id = node->snort_protocol_id;
 
     if (!node->count)
@@ -318,9 +319,10 @@ int ExpectCache::add_flow(const Packet *ctrlPkt, PktType type, IpProtocol ip_pro
     uint16_t vlanId = (ctrlPkt->proto_bits & PROTO_BIT__VLAN) ? layer::get_vlan_layer(ctrlPkt)->vid() : 0;
     uint32_t mplsId = (ctrlPkt->proto_bits & PROTO_BIT__MPLS) ? ctrlPkt->ptrs.mplsHdr.label : 0;
     uint16_t addressSpaceId = ctrlPkt->pkth->address_space_id;
+
     FlowKey key;
-    bool reversed_key = key.init(type, ip_proto, cliIP, cliPort, srvIP, srvPort,
-            vlanId, mplsId, addressSpaceId);
+    bool reversed_key = key.init(ctrlPkt->context->conf, type, ip_proto, cliIP, cliPort,
+        srvIP, srvPort, vlanId, mplsId, addressSpaceId);
 
     bool new_node = false;
     ExpectNode* node = static_cast<ExpectNode*> ( hash_table->get_user_data(&key) );
index ab6d8a573c70bff95c45e594c8b5a20b00e26918..7d069a8823810b4aa43a4e39c76e63dc5a8d018c 100644 (file)
@@ -176,18 +176,18 @@ void FlowControl::set_key(FlowKey* key, Packet* p)
 
     if ( (p->ptrs.decode_flags & DECODE_FRAG) )
     {
-        key->init(type, ip_proto, ip_api.get_src(), ip_api.get_dst(), ip_api.id(),
-            vlanId, mplsId, addressSpaceId);
+        key->init(p->context->conf, type, ip_proto, ip_api.get_src(),
+            ip_api.get_dst(), ip_api.id(), vlanId, mplsId, addressSpaceId);
     }
     else if ( type == PktType::ICMP )
     {
-        key->init(type, ip_proto, ip_api.get_src(), p->ptrs.icmph->type, ip_api.get_dst(), 0,
-            vlanId, mplsId, addressSpaceId);
+        key->init(p->context->conf, type, ip_proto, ip_api.get_src(), p->ptrs.icmph->type,
+            ip_api.get_dst(), 0, vlanId, mplsId, addressSpaceId);
     }
     else
     {
-        key->init(type, ip_proto, ip_api.get_src(), p->ptrs.sp, ip_api.get_dst(), p->ptrs.dp,
-            vlanId, mplsId, addressSpaceId);
+        key->init(p->context->conf, type, ip_proto, ip_api.get_src(), p->ptrs.sp,
+            ip_api.get_dst(), p->ptrs.dp, vlanId, mplsId, addressSpaceId);
     }
 }
 
@@ -332,7 +332,7 @@ static bool want_flow(PktType type, Packet* p)
         // guessing direction based on ports is misleading
         return false;
 
-    if ( !p->ptrs.tcph->is_syn_only() or SnortConfig::get_conf()->track_on_syn() )
+    if ( !p->ptrs.tcph->is_syn_only() or p->context->conf->track_on_syn() )
         return true;
 
     const unsigned DECODE_TCP_HS = DECODE_TCP_MSS | DECODE_TCP_TS | DECODE_TCP_WS;
@@ -408,9 +408,10 @@ unsigned FlowControl::process(Flow* flow, Packet* p)
 
     if ( flow->flow_state != Flow::FlowState::SETUP )
     {
-        set_inspection_policy(SnortConfig::get_conf(), flow->inspection_policy_id);
-        set_ips_policy(SnortConfig::get_conf(), flow->ips_policy_id);
-        set_network_policy(SnortConfig::get_conf(), flow->network_policy_id);
+        const SnortConfig* sc = SnortConfig::get_conf();
+        set_inspection_policy(sc, flow->inspection_policy_id);
+        set_ips_policy(sc, flow->ips_policy_id);
+        set_network_policy(sc, flow->network_policy_id);
     }
 
     else
index b0c10fa875cfca720c9255060d8c9f0ce9ff7dbf..9fe4ee2d4bd3e79404822bd26f8747a781355c8d 100644 (file)
@@ -92,7 +92,7 @@ static inline void update_icmp6(const SfIp*& srcIP, uint16_t& srcPort,
 // init foo
 //-------------------------------------------------------------------------
 inline bool FlowKey::init4(
-    IpProtocol ip_proto,
+    const SnortConfig* sc, IpProtocol ip_proto,
     const SfIp *srcIP, uint16_t srcPort,
     const SfIp *dstIP, uint16_t dstPort,
     uint32_t mplsId, bool order)
@@ -139,7 +139,7 @@ inline bool FlowKey::init4(
         port_h = srcPort;
         reversed = true;
     }
-    if (SnortConfig::mpls_overlapping_ip() &&
+    if (sc->mpls_overlapping_ip() &&
         ip::isPrivateIP(src) && ip::isPrivateIP(dst))
         mplsLabel = mplsId;
     else
@@ -149,7 +149,7 @@ inline bool FlowKey::init4(
 }
 
 inline bool FlowKey::init6(
-    IpProtocol ip_proto,
+    const SnortConfig* sc, IpProtocol ip_proto,
     const SfIp *srcIP, uint16_t srcPort,
     const SfIp *dstIP, uint16_t dstPort,
     uint32_t mplsId, bool order)
@@ -193,7 +193,7 @@ inline bool FlowKey::init6(
         reversed = true;
     }
 
-    if (SnortConfig::mpls_overlapping_ip())
+    if (sc->mpls_overlapping_ip())
         mplsLabel = mplsId;
     else
         mplsLabel = 0;
@@ -201,31 +201,32 @@ inline bool FlowKey::init6(
     return reversed;
 }
 
-void FlowKey::init_vlan(uint16_t vlanId)
+void FlowKey::init_vlan(const SnortConfig* sc, uint16_t vlanId)
 {
-    if (!SnortConfig::get_vlan_agnostic())
+    if (!sc->get_vlan_agnostic())
         vlan_tag = vlanId;
     else
         vlan_tag = 0;
 }
 
-void FlowKey::init_address_space(uint16_t addrSpaceId)
+void FlowKey::init_address_space(const SnortConfig* sc, uint16_t addrSpaceId)
 {
-    if (!SnortConfig::address_space_agnostic())
+    if (!sc->address_space_agnostic())
         addressSpaceId = addrSpaceId;
     else
         addressSpaceId = 0;
 }
 
-void FlowKey::init_mpls(uint32_t mplsId)
+void FlowKey::init_mpls(const SnortConfig* sc, uint32_t mplsId)
 {
-    if (SnortConfig::mpls_overlapping_ip())
+    if (sc->mpls_overlapping_ip())
         mplsLabel = mplsId;
     else
         mplsLabel = 0;
 }
 
 bool FlowKey::init(
+    const SnortConfig* sc,
     PktType type, IpProtocol ip_proto,
     const SfIp *srcIP, uint16_t srcPort,
     const SfIp *dstIP, uint16_t dstPort,
@@ -242,25 +243,26 @@ bool FlowKey::init(
     if (srcIP->is_ip4() && dstIP->is_ip4())
     {
         version = 4;
-        reversed = init4(ip_proto, srcIP, srcPort, dstIP, dstPort, mplsId);
+        reversed = init4(sc, ip_proto, srcIP, srcPort, dstIP, dstPort, mplsId);
     }
     else
     {
         version = 6;
-        reversed = init6(ip_proto, srcIP, srcPort, dstIP, dstPort, mplsId);
+        reversed = init6(sc, ip_proto, srcIP, srcPort, dstIP, dstPort, mplsId);
     }
 
     pkt_type = type;
     ip_protocol = (uint8_t)ip_proto;
 
-    init_vlan(vlanId);
-    init_address_space(addrSpaceId);
+    init_vlan(sc, vlanId);
+    init_address_space(sc, addrSpaceId);
     padding = 0;
 
     return reversed;
 }
 
 bool FlowKey::init(
+    const SnortConfig* sc,
     PktType type, IpProtocol ip_proto,
     const SfIp *srcIP, const SfIp *dstIP,
     uint32_t id, uint16_t vlanId,
@@ -274,20 +276,20 @@ bool FlowKey::init(
     if (srcIP->is_ip4() && dstIP->is_ip4())
     {
         version = 4;
-        init4(ip_proto, srcIP, srcPort, dstIP, dstPort, mplsId, false);
+        init4(sc, ip_proto, srcIP, srcPort, dstIP, dstPort, mplsId, false);
         ip_protocol = (uint8_t)ip_proto;
     }
     else
     {
         version = 6;
-        init6(ip_proto, srcIP, srcPort, dstIP, dstPort, mplsId, false);
+        init6(sc, ip_proto, srcIP, srcPort, dstIP, dstPort, mplsId, false);
         ip_protocol = 0;
     }
 
     pkt_type = type;
 
-    init_vlan(vlanId);
-    init_address_space(addrSpaceId);
+    init_vlan(sc, vlanId);
+    init_address_space(sc, addrSpaceId);
     padding = 0;
 
     return false;
index c85129dc0621b65854a6a480abac26e55c449eee..1333d174c877010b1671107e88e02d07f1802d37 100644 (file)
@@ -34,6 +34,7 @@ class HashKeyOperations;
 namespace snort
 {
 struct SfIp;
+struct SnortConfig;
 
 class FlowHashKeyOps : public HashKeyOperations
 {
@@ -67,33 +68,33 @@ struct SO_PUBLIC FlowKey
         The IP-only init() will always return false as we will not reorder its
         addresses at this time. */
     bool init(
-        PktType, IpProtocol,
+        const SnortConfig*, PktType, IpProtocol,
         const snort::SfIp *srcIP, uint16_t srcPort,
         const snort::SfIp *dstIP, uint16_t dstPort,
         uint16_t vlanId, uint32_t mplsId, uint16_t addrSpaceId);
 
     bool init(
-        PktType, IpProtocol,
+        const SnortConfig*, PktType, IpProtocol,
         const snort::SfIp *srcIP, const snort::SfIp *dstIP,
         uint32_t id, uint16_t vlanId,
         uint32_t mplsId, uint16_t addrSpaceId);
 
-    void init_mpls(uint32_t);
-    void init_vlan(uint16_t);
-    void init_address_space(uint16_t);
+    void init_mpls(const SnortConfig*, uint32_t);
+    void init_vlan(const SnortConfig*, uint16_t);
+    void init_address_space(const SnortConfig*, uint16_t);
 
     // If this data structure changes size, compare must be updated!
     static bool is_equal(const void* k1, const void* k2, size_t);
 
 private:
     bool init4(
-        IpProtocol,
+        const SnortConfig*, IpProtocol,
         const snort::SfIp *srcIP, uint16_t srcPort,
         const snort::SfIp *dstIP, uint16_t dstPort,
         uint32_t mplsId, bool order = true);
 
     bool init6(
-        IpProtocol,
+        const SnortConfig*, IpProtocol,
         const snort::SfIp *srcIP, uint16_t srcPort,
         const snort::SfIp *dstIP, uint16_t dstPort,
         uint32_t mplsId, bool order = true);
index 38a6b02c5d28d9000425e87af33af6ab172fc040..db8f0a1d2347089ffe48f6ab1a41979d12b4075d 100644 (file)
@@ -71,13 +71,13 @@ void Flow::init(PktType) { }
 void Flow::term() { }
 void Flow::reset(bool) { }
 void Flow::free_flow_data() { }
-void set_network_policy(SnortConfig*, unsigned) { }
+void set_network_policy(const SnortConfig*, unsigned) { }
 void DataBus::publish(const char*, const uint8_t*, unsigned, Flow*) { }
 void DataBus::publish(const char*, Packet*, Flow*) { }
-SnortConfig* SnortConfig::get_conf() { return nullptr; }
+const SnortConfig* SnortConfig::get_conf() { return nullptr; }
 void Flow::set_direction(Packet*) { }
-void set_inspection_policy(SnortConfig*, unsigned) { }
-void set_ips_policy(SnortConfig*, unsigned) { }
+void set_inspection_policy(const SnortConfig*, unsigned) { }
+void set_ips_policy(const SnortConfig*, unsigned) { }
 void Flow::set_mpls_layer_per_dir(Packet*) { }
 void DetectionEngine::disable_all(Packet*) { }
 void Stream::drop_traffic(const Packet*, char) { }
index 3fd3fd75e6939d364ac8ead81f0b16d260fe3217..da1fc84bbe5d135de12cfe8f4ad3a51d5a68a63f 100644 (file)
@@ -77,14 +77,14 @@ bool FlowCache::prune_one(PruneReason, bool) { return true; }
 unsigned FlowCache::delete_flows(unsigned) { return 0; }
 unsigned FlowCache::timeout(unsigned, time_t) { return 1; }
 void Flow::init(PktType) { }
-void set_network_policy(SnortConfig*, unsigned) { }
+void set_network_policy(const SnortConfig*, unsigned) { }
 void DataBus::publish(const char*, const uint8_t*, unsigned, Flow*) { }
 void DataBus::publish(const char*, Packet*, Flow*) { }
-SnortConfig* SnortConfig::get_conf() { return nullptr; }
+const SnortConfig* SnortConfig::get_conf() { return nullptr; }
 void FlowCache::unlink_uni(Flow*) { }
 void Flow::set_direction(Packet*) { }
-void set_inspection_policy(SnortConfig*, unsigned) { }
-void set_ips_policy(SnortConfig*, unsigned) { }
+void set_inspection_policy(const SnortConfig*, unsigned) { }
+void set_ips_policy(const SnortConfig*, unsigned) { }
 void Flow::set_mpls_layer_per_dir(Packet*) { }
 void DetectionEngine::disable_all(Packet*) { }
 void Stream::drop_traffic(const Packet*, char) { }
@@ -116,6 +116,7 @@ uint32_t IpApi::id() const { return 0; }
 }
 
 bool FlowKey::init(
+    const SnortConfig*,
     PktType, IpProtocol,
     const SfIp*, uint16_t,
     const SfIp*, uint16_t,
@@ -125,6 +126,7 @@ bool FlowKey::init(
 }
 
 bool FlowKey::init(
+    const SnortConfig*,
     PktType, IpProtocol,
     const SfIp*, const SfIp*,
     uint32_t, uint16_t,
index 4be31f0670229f99945af5420dd062eed39bde26..9af29567a9e5b77ffa8c7620fc276ba6c8baad38 100644 (file)
@@ -82,7 +82,7 @@ const Layer* layer::get_mpls_layer(const Packet* const) { return nullptr; }
 
 void DataBus::publish(const char*, Packet*, Flow*) {}
 
-SnortConfig* SnortConfig::get_conf() { return nullptr; }
+const SnortConfig* SnortConfig::get_conf() { return nullptr; }
 
 TEST_GROUP(nondefault_timeout)
 {
index c47b183851a20c3f10a51972816e4e29d3debe2a..ec11a9a92e4e4fd5131d8c64739188994b670675 100644 (file)
@@ -116,8 +116,12 @@ constexpr uint16_t CODEC_ETHER_NEXT = 0x1000;
 constexpr uint16_t CODEC_IPOPT_FLAGS = (CODEC_IPOPT_RR_SEEN |
     CODEC_IPOPT_RTRALT_SEEN | CODEC_IPOPT_LEN_THREE);
 
+struct SnortConfig;
+
 struct CodecData
 {
+    const SnortConfig* conf;
+
     /* This section will get reset before every decode() function call */
     ProtocolId next_prot_id;      /* protocol type of the next layer */
     uint16_t lyr_len;           /* The length of the valid part layer */
@@ -137,8 +141,9 @@ struct CodecData
     IpProtocol ip6_csum_proto;      /* initialized in cd_ipv6.cc.  Used for IPv6 checksums */
     bool tunnel_bypass;
 
-    CodecData(ProtocolId init_prot) : next_prot_id(init_prot), lyr_len(0),
-        invalid_bytes(0), proto_bits(0), codec_flags(0), ip_layer_cnt(0), tunnel_bypass(false)
+    CodecData(const SnortConfig* sc, ProtocolId init_prot) :
+        conf(sc), next_prot_id(init_prot), lyr_len(0), invalid_bytes(0),
+        proto_bits(0), codec_flags(0), ip_layer_cnt(0), tunnel_bypass(false)
     { }
 
     bool inline is_cooked() const
index 0209c27d82682c41e66923a4d405e0d64cbc3684..82ebd64895f3abef3ccacdde97fc467123f57803 100644 (file)
@@ -93,13 +93,19 @@ public:
     DataBus();
     ~DataBus();
 
+    // configure time methods - main thread only
     void clone(DataBus& from);
     void add_mapped_module(const char*);
 
+    // FIXIT-L ideally these would not be static or would take an inspection policy*
     static void subscribe(const char* key, DataHandler*);
     static void subscribe_global(const char* key, DataHandler*, SnortConfig*);
+
+    // FIXIT-L these should be called during cleanup
     static void unsubscribe(const char* key, DataHandler*);
     static void unsubscribe_global(const char* key, DataHandler*, SnortConfig*);
+
+    // runtime methods
     static void publish(const char* key, DataEvent&, Flow* = nullptr);
 
     // convenience methods
index a53c2a1343828a0ee5c913dbb534dce76fc90c03..1ff8e6d248faf096613ff242f80395d0094787da 100644 (file)
@@ -69,7 +69,7 @@ public:
     // access external dependencies here
     // return verification status
     virtual bool configure(SnortConfig*) { return true; }
-    virtual void show(SnortConfig*) { }
+    virtual void show(const SnortConfig*) const { }
 
     // Specific to Binders to notify them of an inspector being removed from the policy
     // FIXIT-L Probably shouldn't be part of the base Inspector class
index b9be2d6d1994c7b6cb8e9f812a31b045b5f5fcae..ca9cad0c848f31291b932b9c1cc9f655876183a6 100644 (file)
@@ -40,7 +40,6 @@
 namespace snort
 {
 struct Packet;
-struct SnortConfig;
 
 class SO_PUBLIC IpsAction : public ActiveAction
 {
index 7381f10ae57cee704cdd1c5b2192c0101fe5b6f0..9e514184e0a1dac97b37a1bb0f3a8437cc7af121 100644 (file)
@@ -121,7 +121,7 @@ enum RuleOptType
     OPT_TYPE_MAX
 };
 
-typedef void (* IpsOptFunc)(SnortConfig*);
+typedef void (* IpsOptFunc)(const SnortConfig*);
 
 typedef IpsOption* (* IpsNewFunc)(Module*, OptTreeNode*);
 typedef void (* IpsDelFunc)(IpsOption*);
index 40d3896b5f74028103a8c91b2cab993767d6c8be..f2d4333d19b814bb82295b6820c728251f4020f0 100644 (file)
@@ -72,7 +72,7 @@ private:
     const LogApi* api;
 };
 
-typedef Logger* (* LogNewFunc)(struct SnortConfig*, class Module*);
+typedef Logger* (* LogNewFunc)(class Module*);
 typedef void (* LogDelFunc)(Logger*);
 
 struct LogApi
index e04cb95cb986a461f280358cac15a7e087cf6efb..8686237fda3f043f75c0b091e0fe13e1be9bb675 100644 (file)
@@ -99,6 +99,7 @@ void Mpse::_search(MpseBatch& batch, MpseType mpse_type)
 
 Mpse::MpseRespType Mpse::poll_responses(MpseBatch*& batch, MpseType mpse_type)
 {
+    // FIXIT-L validate for reload during offload
     FastPatternConfig* fp = SnortConfig::get_conf()->fast_pattern_config;
     assert(fp);
 
index 9784168cb5c3d63c760f2bfa42eca315dc89aeed..3b083d737615cd246880c680cc9b39981523d274 100644 (file)
@@ -75,8 +75,7 @@ public:
     };
 
     virtual int add_pattern(
-        SnortConfig* sc, const uint8_t* pat, unsigned len,
-        const PatternDescriptor&, void* user) = 0;
+        const uint8_t* pat, unsigned len, const PatternDescriptor&, void* user) = 0;
 
     virtual int prep_patterns(SnortConfig*) = 0;
 
@@ -120,9 +119,7 @@ private:
 typedef void (* MpseOptFunc)(SnortConfig*);
 typedef void (* MpseExeFunc)();
 
-typedef Mpse* (* MpseNewFunc)(
-    SnortConfig* sc, class Module*, const MpseAgent*);
-
+typedef Mpse* (* MpseNewFunc)(const SnortConfig*, class Module*, const MpseAgent*);
 typedef void (* MpseDelFunc)(Mpse*);
 
 typedef Mpse::MpseRespType (* MpsePollFunc)(MpseBatch*&, Mpse::MpseType);
index d6a90a82d62293b23a97d7313a18d4474ca42e71..8f505e441f81941ce80e89e090b0ae50d521aa9f 100644 (file)
@@ -82,9 +82,9 @@ MpseGroup::~MpseGroup()
     }
 }
 
-bool MpseGroup::create_normal_mpse(SnortConfig* sc, const MpseAgent* agent)
+bool MpseGroup::create_normal_mpse(const SnortConfig* sc, const MpseAgent* agent)
 {
-    FastPatternConfig* fp = sc->fast_pattern_config;
+    const FastPatternConfig* fp = sc->fast_pattern_config;
     const MpseApi* search_api = nullptr;
 
     if (fp)
@@ -102,7 +102,7 @@ bool MpseGroup::create_normal_mpse(SnortConfig* sc, const MpseAgent* agent)
     }
 }
 
-bool MpseGroup::create_normal_mpse(SnortConfig* sc, const char* type)
+bool MpseGroup::create_normal_mpse(const SnortConfig* sc, const char* type)
 {
     if ( !type and sc->fast_pattern_config )
         type = sc->fast_pattern_config->get_search_method();
@@ -126,9 +126,9 @@ bool MpseGroup::create_normal_mpse(SnortConfig* sc, const char* type)
     }
 }
 
-bool MpseGroup::create_offload_mpse(SnortConfig* sc, const MpseAgent* agent)
+bool MpseGroup::create_offload_mpse(const SnortConfig* sc, const MpseAgent* agent)
 {
-    FastPatternConfig* fp = sc->fast_pattern_config;
+    const FastPatternConfig* fp = sc->fast_pattern_config;
     const MpseApi* search_api = nullptr;
     const MpseApi* offload_search_api = nullptr;
 
@@ -150,7 +150,7 @@ bool MpseGroup::create_offload_mpse(SnortConfig* sc, const MpseAgent* agent)
     }
 }
 
-bool MpseGroup::create_offload_mpse(SnortConfig* sc)
+bool MpseGroup::create_offload_mpse(const SnortConfig* sc)
 {
     const MpseApi* search_api = nullptr;
     const MpseApi* offload_search_api = nullptr;
index f6d7c6ce065f45c9fa2e3594e19f61bc783fbddb..0ecffbebccb19d89f76fe241b36a51342ed72e97 100644 (file)
@@ -50,11 +50,11 @@ public:
     Mpse* get_offload_mpse() const
     { return offload_mpse ? offload_mpse : normal_mpse; }
 
-    bool create_normal_mpse(SnortConfig*, const MpseAgent* agent);
-    bool create_normal_mpse(SnortConfig*, const char*);
+    bool create_normal_mpse(const SnortConfig*, const MpseAgent* agent);
+    bool create_normal_mpse(const SnortConfig*, const char*);
 
-    bool create_offload_mpse(SnortConfig*, const MpseAgent* agent);
-    bool create_offload_mpse(SnortConfig*);
+    bool create_offload_mpse(const SnortConfig*, const MpseAgent* agent);
+    bool create_offload_mpse(const SnortConfig*);
 
     inline bool can_fallback() const
     { return get_offload_mpse() != normal_mpse; }
index 14646ecbdab46fe3f158588ee7fae98dd148f599..b68ddfdb130a1fafa6fcd845f5d184ae09ca0a0c 100644 (file)
@@ -38,18 +38,21 @@ InspectionPolicy::~InspectionPolicy() {}
 namespace snort
 {
 SnortConfig::SnortConfig(snort::SnortConfig const*)
-{
-    global_dbus = new DataBus();
-}
-THREAD_LOCAL SnortConfig* snort_conf = nullptr;
-SnortConfig* SnortConfig::get_conf()
+{ global_dbus = new DataBus(); }
+
+THREAD_LOCAL const SnortConfig* snort_conf = nullptr;
+
+const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
+
+SnortConfig* SnortConfig::get_main_conf()
+{ return const_cast<SnortConfig*>(snort_conf); }
+
 SnortConfig::~SnortConfig()
-{
-    delete global_dbus;
-}
+{ delete global_dbus; }
 
 static  InspectionPolicy* my_inspection_policy = nullptr;
+
 InspectionPolicy* get_inspection_policy()
 { return my_inspection_policy; }
 }
@@ -105,7 +108,7 @@ TEST_GROUP(data_bus)
 
 TEST(data_bus, subscribe_global)
 {
-    SnortConfig* sc = SnortConfig::get_conf();
+    SnortConfig* sc = SnortConfig::get_main_conf();
     UTestHandler* h = new UTestHandler();
     DataBus::subscribe_global(DB_UTEST_EVENT, h, sc);
 
index f0543f88c96f01a1292cd39794963d31b25b3b54..370c08f6c21e9f0d0435832567d268cac6eabacd 100644 (file)
@@ -36,14 +36,15 @@ using namespace snort;
 
 // Stubs whose sole purpose is to make the test code link
 static SnortConfig my_config;
-THREAD_LOCAL SnortConfig *snort_conf = &my_config;
+THREAD_LOCAL SnortConfigsnort_conf = &my_config;
 
+// run_flags is used indirectly from HashFnc class by calling SnortConfig::static_hash()
 SnortConfig::SnortConfig(const SnortConfig* const)
-{ snort_conf->run_flags = 0;} // run_flags is used indirectly from HashFnc class by calling SnortConfig::static_hash()
+{ snort_conf->run_flags = 0;}
 
 SnortConfig::~SnortConfig() = default;
 
-SnortConfig* SnortConfig::get_conf()
+const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
 // user free function
index 96002f4e8f4718856c62fa6547fdbbc1fd45302f..b13b817ecfbe318069d0d31fe29d1156d0e781bb 100644 (file)
@@ -36,14 +36,15 @@ using namespace snort;
 
 // Stubs whose sole purpose is to make the test code link
 static SnortConfig my_config;
-THREAD_LOCAL SnortConfig *snort_conf = &my_config;
+THREAD_LOCAL SnortConfigsnort_conf = &my_config;
 
+// run_flags is used indirectly from HashFnc class by calling SnortConfig::static_hash()
 SnortConfig::SnortConfig(const SnortConfig* const)
-{ snort_conf->run_flags = 0;} // run_flags is used indirectly from HashFnc class by calling SnortConfig::static_hash()
+{ snort_conf->run_flags = 0;}
 
 SnortConfig::~SnortConfig() = default;
 
-SnortConfig* SnortConfig::get_conf()
+const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
 struct xhash_test_key
index 93e4817acbcffe5a1d47ffca253ab6eeba6acfa6..7a55cba0fa0c5fb6144b22a01c1503f1167a3067 100644 (file)
@@ -63,12 +63,13 @@ bool FlowHashKeyOps::key_compare(const void* k1, const void* k2, size_t len)
 static SnortConfig my_config;
 THREAD_LOCAL SnortConfig *snort_conf = &my_config;
 
+// run_flags is used indirectly from HashFnc class by calling SnortConfig::static_hash()
 SnortConfig::SnortConfig(const SnortConfig* const)
-{ snort_conf->run_flags = 0;} // run_flags is used indirectly from HashFnc class by calling SnortConfig::static_hash()
+{ snort_conf->run_flags = 0;}
 
 SnortConfig::~SnortConfig() = default;
 
-SnortConfig* SnortConfig::get_conf()
+const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
 const unsigned ZHASH_ROWS = 1000;
index 3fa245165b95f26d11991928b05074badf83dd4d..08bcb9524bba042c08ba5ec975c4efa544b4ed2c 100644 (file)
@@ -54,7 +54,7 @@ private:
     hs_scratch_t** get_addr(SnortConfig* sc, unsigned idx)
     { return (hs_scratch_t**)&sc->state[idx][scratch_id]; }
 
-    hs_scratch_t* get(SnortConfig* sc, unsigned idx)
+    hs_scratch_t* get(const SnortConfig* sc, unsigned idx)
     { return (hs_scratch_t*)sc->state[idx][scratch_id]; }
 
     void set(SnortConfig* sc, unsigned idx, void* pv)
index beef4049a513b843f459e040ef2ee23aa7cad37b..c5cb9f0c83a4526d1059288ca78026e187b71a4b 100644 (file)
@@ -122,7 +122,7 @@ static void exit_handler(int signal)
 
 static void dirty_handler(int signal)
 {
-    SnortConfig::get_conf()->dirty_pig = true;
+    SnortConfig::get_main_conf()->dirty_pig = true;
     exit_handler(signal);
 }
 
@@ -356,7 +356,7 @@ void daemonize()
     if ( errno )
         FatalError("failed to setsid - %s", get_error(errno));
 
-    if ( SnortConfig::log_quiet() or SnortConfig::log_syslog() )
+    if ( SnortConfig::get_conf()->log_quiet() or SnortConfig::get_conf()->log_syslog() )
         snuff_stdio();
 
     pid_t ppid = getppid();
index d4779e80f2d7459acc19547ffd5f2aab9ac829dd..bf4e692548a47f9e2515dd1dc392f3a95b47d2b5 100644 (file)
@@ -68,7 +68,7 @@ int SnortConfig::request_scratch(ScratchAllocator* s)
 void SnortConfig::release_scratch(int)
 { s_state.clear(); }
 
-SnortConfig* SnortConfig::get_conf()
+const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
 void ParseError(const char*, ...)
index 0f7a86a9cf8d5d3d9f13ecbf4cbc2233e7ab672f..553412aea386965f64d5e0f588a32d3418e946c9 100644 (file)
@@ -75,7 +75,7 @@ public:
 
     void print_config()
     {
-        if ( snort::SnortConfig::log_verbose() )
+        if ( snort::SnortConfig::get_conf()->log_verbose() )
         {
             std::lock_guard<std::mutex> cache_lock(cache_mutex);
 
index 4f1a5a94ab45970d050492e4a55225e5252cad42..649741fdb1f5b1499c635da8bd0ec3c4854f9fd0 100644 (file)
@@ -47,9 +47,15 @@ static char logged_message[LOG_MAX+1];
 
 namespace snort
 {
-SnortConfig* SnortConfig::get_conf() { return nullptr; }
-char* snort_strdup(const char* s) { return strdup(s); }
-Module* ModuleManager::get_module(const char*) { return nullptr; }
+const SnortConfig* SnortConfig::get_conf()
+{ return nullptr; }
+
+char* snort_strdup(const char* s)
+{ return strdup(s); }
+
+Module* ModuleManager::get_module(const char*)
+{ return nullptr; }
+
 void LogMessage(const char* format,...)
 {
     va_list args;
index 80455524b84b7ac885eb3088d57bec23917547e3..caa87fa913b64e43ebcd99a6f178a7516854b71c 100644 (file)
@@ -45,7 +45,7 @@
 
 #include "asn1_util.h"
 
-#include "main/snort_config.h"
+#include "main/thread.h"
 #include "utils/util.h"
 
 using namespace snort;
@@ -114,9 +114,9 @@ static ASN1_TYPE* asn1_node_alloc()
 **  @return none
 **
 */
-void asn1_init_mem(SnortConfig* sc)
+void asn1_init_mem(int asn1_mem)
 {
-    asn1_config.num_nodes = sc->asn1_mem;
+    asn1_config.num_nodes = asn1_mem;
 
     if (asn1_config.num_nodes > 0)
         asn1_config.mem = (ASN1_TYPE*)snort_calloc(asn1_config.num_nodes, sizeof(ASN1_TYPE));
@@ -134,7 +134,7 @@ void asn1_init_mem(SnortConfig* sc)
 **  @return none
 **
 */
-void asn1_free_mem(SnortConfig*)
+void asn1_free_mem()
 {
     if (asn1_config.mem != nullptr)
     {
index 88f0691902ebd629cc04ce0f0d6220b0d64c0642..4ff44a65f11018207f354bc898484de65e1b611c 100644 (file)
@@ -147,12 +147,12 @@ struct SnortConfig;
 #define ASN1_ERR_INVALID_ARG         (-7)
 #define ASN1_ERR_STACK               (-8)
 
-void asn1_init_mem(snort::SnortConfig*);
-void asn1_free_mem(snort::SnortConfig*);
+void asn1_init_mem(int asn1_mem);
+void asn1_free_mem();
+
 int asn1_decode(const unsigned char* data, unsigned int len, ASN1_TYPE** asn1_type);
 int asn1_print_types(ASN1_TYPE* asn1_type, void* user);
-int asn1_traverse(ASN1_TYPE* asn1, void* user,
-    int (* DetectFunc)(ASN1_TYPE*, void*));
+int asn1_traverse(ASN1_TYPE* asn1, void* user, int (* DetectFunc)(ASN1_TYPE*, void*));
 
 #endif
 
index 2abccf341d6d34a456e3c27efb62fd51b2c57d3f..02632fa81822842ce231614f79696cbb6821f5b0 100644 (file)
@@ -57,6 +57,7 @@
 #include "framework/ips_option.h"
 #include "framework/module.h"
 #include "hash/hash_key_operations.h"
+#include "main/snort_config.h"
 #include "profiler/profiler.h"
 #include "protocols/packet.h"
 
@@ -264,6 +265,12 @@ static void mod_dtor(Module* m)
     delete m;
 }
 
+static void asn1_init(const SnortConfig* sc)
+{ asn1_init_mem(sc->asn1_mem); }
+
+static void asn1_term(const SnortConfig*)
+{ asn1_free_mem(); }
+
 static IpsOption* asn1_ctor(Module* p, OptTreeNode*)
 {
     Asn1Module* m = (Asn1Module*)p;
@@ -291,8 +298,8 @@ static const IpsApi asn1_api =
     },
     OPT_TYPE_DETECTION,
     0, 0,
-    asn1_init_mem,
-    asn1_free_mem,
+    asn1_init,
+    asn1_term,
     nullptr,
     nullptr,
     asn1_ctor,
index ed6c72bbc9262de9cf4c8642784fc691874b97de..4f5e2264c8009ee36bee5e022b915a2ee4c7a5bc 100644 (file)
@@ -539,7 +539,7 @@ static void flowbits_dtor(IpsOption* p)
     delete p;
 }
 
-static void flowbits_verify(SnortConfig*)
+static void flowbits_verify(const SnortConfig*)
 {
     flowbits_verify();
 }
index 56f498996a555676a65a0c47d232accad9ebda4d..441bf7b2fd3b41d4a595b1fb193198eb1287202f 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <cassert>
 
+#include "detection/ips_context.h"
 #include "framework/cursor.h"
 #include "framework/ips_option.h"
 #include "framework/module.h"
@@ -272,45 +273,45 @@ static void pcre_parse(const SnortConfig* sc, const char* data, PcreData* pcre_d
 
     if (pcre_data->pe)
     {
-        if ((SnortConfig::get_pcre_match_limit() != 0) &&
+        if ((sc->get_pcre_match_limit() != 0) &&
             !(pcre_data->options & SNORT_OVERRIDE_MATCH_LIMIT))
         {
             if ( !(pcre_data->pe->flags & PCRE_EXTRA_MATCH_LIMIT) )
                 pcre_data->pe->flags |= PCRE_EXTRA_MATCH_LIMIT;
 
-            pcre_data->pe->match_limit = SnortConfig::get_pcre_match_limit();
+            pcre_data->pe->match_limit = sc->get_pcre_match_limit();
         }
 
-        if ((SnortConfig::get_pcre_match_limit_recursion() != 0) &&
+        if ((sc->get_pcre_match_limit_recursion() != 0) &&
             !(pcre_data->options & SNORT_OVERRIDE_MATCH_LIMIT))
         {
             if ( !(pcre_data->pe->flags & PCRE_EXTRA_MATCH_LIMIT_RECURSION) )
                 pcre_data->pe->flags |= PCRE_EXTRA_MATCH_LIMIT_RECURSION;
 
             pcre_data->pe->match_limit_recursion =
-                SnortConfig::get_pcre_match_limit_recursion();
+                sc->get_pcre_match_limit_recursion();
         }
     }
     else
     {
         if (!(pcre_data->options & SNORT_OVERRIDE_MATCH_LIMIT) &&
-            ((SnortConfig::get_pcre_match_limit() != 0) ||
-             (SnortConfig::get_pcre_match_limit_recursion() != 0)))
+            ((sc->get_pcre_match_limit() != 0) ||
+             (sc->get_pcre_match_limit_recursion() != 0)))
         {
             pcre_data->pe = (pcre_extra*)snort_calloc(sizeof(pcre_extra));
             pcre_data->free_pe = true;
 
-            if (SnortConfig::get_pcre_match_limit() != 0)
+            if (sc->get_pcre_match_limit() != 0)
             {
                 pcre_data->pe->flags |= PCRE_EXTRA_MATCH_LIMIT;
-                pcre_data->pe->match_limit = SnortConfig::get_pcre_match_limit();
+                pcre_data->pe->match_limit = sc->get_pcre_match_limit();
             }
 
-            if (SnortConfig::get_pcre_match_limit_recursion() != 0)
+            if (sc->get_pcre_match_limit_recursion() != 0)
             {
                 pcre_data->pe->flags |= PCRE_EXTRA_MATCH_LIMIT_RECURSION;
                 pcre_data->pe->match_limit_recursion =
-                    SnortConfig::get_pcre_match_limit_recursion();
+                    sc->get_pcre_match_limit_recursion();
             }
         }
     }
@@ -342,6 +343,7 @@ syntax:
  * found_offset will be set to -1 when the find is unsuccessful OR the routine is inverted
  */
 static bool pcre_search(
+    Packet* p,
     const PcreData* pcre_data,
     const uint8_t* buf,
     unsigned len,
@@ -352,7 +354,7 @@ static bool pcre_search(
 
     found_offset = -1;
 
-    std::vector<void *> ss = SnortConfig::get_conf()->state[get_instance_id()];
+    std::vector<void *> ss = p->context->conf->state[get_instance_id()];
     assert(ss[scratch_index]);
 
     int result = pcre_exec(
@@ -363,7 +365,7 @@ static bool pcre_search(
         start_offset,   /* start at offset 0 in the subject */
         0,              /* options(handled at compile time */
         (int*)ss[scratch_index], /* vector for substring information */
-        SnortConfig::get_conf()->pcre_ovector_size); /* number of elements in the vector */
+        p->context->conf->pcre_ovector_size); /* number of elements in the vector */
 
     if (result >= 0)
     {
@@ -547,12 +549,12 @@ bool PcreOption::operator==(const IpsOption& ips) const
     return false;
 }
 
-IpsOption::EvalStatus PcreOption::eval(Cursor& c, Packet*)
+IpsOption::EvalStatus PcreOption::eval(Cursor& c, Packet* p)
 {
     RuleProfile profile(pcrePerfStats);
 
     // short circuit this for testing pcre performance impact
-    if ( SnortConfig::no_pcre() )
+    if ( p->context->conf->no_pcre() )
         return NO_MATCH;
 
     unsigned pos = c.get_delta();
@@ -566,7 +568,7 @@ IpsOption::EvalStatus PcreOption::eval(Cursor& c, Packet*)
 
     int found_offset = -1; // where is the ending location of the pattern
 
-    if ( pcre_search(config, c.buffer()+adj, c.size()-adj, pos, found_offset) )
+    if ( pcre_search(p, config, c.buffer()+adj, c.size()-adj, pos, found_offset) )
     {
         if ( found_offset > 0 )
         {
@@ -678,8 +680,8 @@ private:
     Module* mod_regex = nullptr;
     std::string re;
 
-    static bool scratch_setup(SnortConfig* sc);
-    static void scratch_cleanup(SnortConfig* sc);
+    static bool scratch_setup(SnortConfig*);
+    static void scratch_cleanup(SnortConfig*);
 };
 
 PcreData* PcreModule::get_data()
index 50071f2ee35ddcaf935929594fd7f33b890b30b0..46111f6ed17bcb34ba2d2a0476bfd479f6d4e7ef 100644 (file)
@@ -50,9 +50,9 @@ static void replace_parse(const char* args, string& s)
         ParseError("can't negate replace string");
 }
 
-static bool replace_ok()
+static bool replace_ok(const SnortConfig* sc)
 {
-    if ( SnortConfig::inline_mode() and SFDAQ::can_replace() )
+    if ( sc->inline_mode() and SFDAQ::can_replace() )
         return true;
 
     static THREAD_LOCAL bool warned = false;
@@ -167,7 +167,7 @@ IpsOption::EvalStatus ReplaceOption::eval(Cursor& c, Packet* p)
     if ( c.get_pos() < repl.size() )
         return NO_MATCH;
 
-    if ( replace_ok() )
+    if ( replace_ok(p->context->conf) )
         store(c.get_pos() - repl.size());
 
     return MATCH;
index b3d5e45da5443ac3e8b65259604c99645c8dccdb..16bb918896122dfe25df2888c8f91cb0993eecf0 100644 (file)
@@ -70,7 +70,7 @@ int SnortConfig::request_scratch(ScratchAllocator* s)
 
 void SnortConfig::release_scratch(int) { }
 
-SnortConfig* SnortConfig::get_conf()
+const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
 Packet::Packet(bool) { }
index cbab0915a2583552b0f8be9ae7c1e5f6023f2ac2..3b21cb5cffbe7d0d322b312992d649b8693e10a6 100644 (file)
@@ -152,7 +152,7 @@ void Log2ndHeader(TextLog* log, Packet* p)
     if ( SFDAQ::get_base_protocol() == DLT_EN10MB )
         LogEthHeader(log, p);
 
-    else if ( SnortConfig::log_verbose() )
+    else if ( p->context->conf->log_verbose() )
         ErrorMessage("Datalink %i (not supported)\n", SFDAQ::get_base_protocol());
 }
 
@@ -265,13 +265,13 @@ void LogIpAddrs(TextLog* log, Packet* p)
         const char* ip_fmt = "%s -> %s";
         InetBuf src, dst;
 
-        if (SnortConfig::obfuscate())
+        if (p->context->conf->obfuscate())
         {
             ObfuscateIpToText(p->ptrs.ip_api.get_src(),
-                SnortConfig::get_conf()->homenet, SnortConfig::get_conf()->obfuscation_net, src);
+                p->context->conf->homenet, p->context->conf->obfuscation_net, src);
 
             ObfuscateIpToText(p->ptrs.ip_api.get_dst(),
-                SnortConfig::get_conf()->homenet, SnortConfig::get_conf()->obfuscation_net, dst);
+                p->context->conf->homenet, p->context->conf->obfuscation_net, dst);
 
             TextLog_Print(log, ip_fmt, src, dst);
         }
@@ -287,13 +287,13 @@ void LogIpAddrs(TextLog* log, Packet* p)
         const char* ip_fmt = "%s:%d -> %s:%d";
         InetBuf src, dst;
 
-        if (SnortConfig::obfuscate())
+        if (p->context->conf->obfuscate())
         {
             ObfuscateIpToText(p->ptrs.ip_api.get_src(),
-                SnortConfig::get_conf()->homenet, SnortConfig::get_conf()->obfuscation_net, src);
+                p->context->conf->homenet, p->context->conf->obfuscation_net, src);
 
             ObfuscateIpToText(p->ptrs.ip_api.get_dst(),
-                SnortConfig::get_conf()->homenet, SnortConfig::get_conf()->obfuscation_net, dst);
+                p->context->conf->homenet, p->context->conf->obfuscation_net, dst);
 
             TextLog_Print(log, ip_fmt, src, p->ptrs.sp, dst, p->ptrs.dp);
         }
@@ -320,7 +320,7 @@ void LogIPHeader(TextLog* log, Packet* p)
 
     LogIpAddrs(log, p);
 
-    if (!SnortConfig::output_datalink())
+    if (!p->context->conf->output_datalink())
     {
         TextLog_NewLine(log);
     }
@@ -692,14 +692,11 @@ static void LogEmbeddedICMPHeader(TextLog* log, const ICMPHdr* icmph)
  */
 static void LogICMPEmbeddedIP(TextLog* log, Packet* p)
 {
-    if (log == nullptr || p == nullptr)
-        return;
-
     // FIXIT-L -- Allocating a new Packet here is ridiculously excessive.
-    Packet* orig_p = new Packet;
-    Packet& op = *orig_p;
+    Packet* orig = DetectionEngine::set_next_packet(p);
+    orig->context->conf = p->context->conf;
 
-    if (!layer::set_api_ip_embed_icmp(p, op.ptrs.ip_api))
+    if (!layer::set_api_ip_embed_icmp(p, orig->ptrs.ip_api))
     {
         TextLog_Puts(log, "\nORIGINAL DATAGRAM TRUNCATED");
     }
@@ -709,38 +706,35 @@ static void LogICMPEmbeddedIP(TextLog* log, Packet* p)
         {
         case PROTO_BIT__TCP_EMBED_ICMP:
         {
-            const tcp::TCPHdr* const tcph = layer::get_tcp_embed_icmp(op.ptrs.ip_api);
+            const tcp::TCPHdr* const tcph = layer::get_tcp_embed_icmp(orig->ptrs.ip_api);
             if (tcph)
             {
-                orig_p->ptrs.sp = tcph->src_port();
-                orig_p->ptrs.dp = tcph->dst_port();
-                orig_p->ptrs.tcph = tcph;
-                orig_p->ptrs.set_pkt_type(PktType::TCP);
+                orig->ptrs.sp = tcph->src_port();
+                orig->ptrs.dp = tcph->dst_port();
+                orig->ptrs.tcph = tcph;
+                orig->ptrs.set_pkt_type(PktType::TCP);
 
                 TextLog_Print(log, "\n** ORIGINAL DATAGRAM DUMP:\n");
-                LogIPHeader(log, orig_p);
-
-                TextLog_Print(log, "Seq: 0x%lX\n",
-                    (u_long)ntohl(orig_p->ptrs.tcph->th_seq));
+                LogIPHeader(log, orig);
+                TextLog_Print(log, "Seq: 0x%lX\n", (u_long)ntohl(orig->ptrs.tcph->th_seq));
             }
             break;
         }
 
         case PROTO_BIT__UDP_EMBED_ICMP:
         {
-            const udp::UDPHdr* const udph = layer::get_udp_embed_icmp(op.ptrs.ip_api);
+            const udp::UDPHdr* const udph = layer::get_udp_embed_icmp(orig->ptrs.ip_api);
             if (udph)
             {
-                orig_p->ptrs.sp = udph->src_port();
-                orig_p->ptrs.dp = udph->dst_port();
-                orig_p->ptrs.udph = udph;
-                orig_p->ptrs.set_pkt_type(PktType::UDP);
+                orig->ptrs.sp = udph->src_port();
+                orig->ptrs.dp = udph->dst_port();
+                orig->ptrs.udph = udph;
+                orig->ptrs.set_pkt_type(PktType::UDP);
 
                 TextLog_Print(log, "\n** ORIGINAL DATAGRAM DUMP:\n");
-                LogIPHeader(log, orig_p);
-                TextLog_Print(log, "Len: %d  Csum: %d\n",
-                    udph->len() - udp::UDP_HEADER_LEN,
-                    udph->cksum());
+                LogIPHeader(log, orig);
+                TextLog_Print(
+                    log, "Len: %d  Csum: %d\n", udph->len() - udp::UDP_HEADER_LEN, udph->cksum());
             }
             break;
         }
@@ -748,10 +742,11 @@ static void LogICMPEmbeddedIP(TextLog* log, Packet* p)
         case PROTO_BIT__ICMP_EMBED_ICMP:
         {
             TextLog_Print(log, "\n** ORIGINAL DATAGRAM DUMP:\n");
-            LogIPHeader(log, orig_p);
+            LogIPHeader(log, orig);
 
-            const icmp::ICMPHdr* icmph = layer::get_icmp_embed_icmp(op.ptrs.ip_api);
-            if (icmph != nullptr)
+            const icmp::ICMPHdr* icmph = layer::get_icmp_embed_icmp(orig->ptrs.ip_api);
+
+            if (icmph)
                 LogEmbeddedICMPHeader(log, icmph);
             break;
         }
@@ -759,27 +754,22 @@ static void LogICMPEmbeddedIP(TextLog* log, Packet* p)
         default:
         {
             TextLog_Print(log, "\n** ORIGINAL DATAGRAM DUMP:\n");
-            LogIPHeader(log, orig_p);
+            LogIPHeader(log, orig);
 
             TextLog_Print(log, "Protocol: 0x%X (unknown or "
-                "header truncated)", orig_p->ptrs.ip_api.proto());
+                "header truncated)", orig->ptrs.ip_api.proto());
             break;
         }
         } /* switch */
 
         /* if more than 8 bytes of original IP payload sent */
-
         const int16_t more_bytes = p->dsize - 8;
+
         if (more_bytes > 0)
-        {
-            TextLog_Print(log, "(%d more bytes of original packet)\n",
-                more_bytes);
-        }
+            TextLog_Print(log, "(%d more bytes of original packet)\n", more_bytes);
 
         TextLog_Puts(log, "** END OF DUMP");
     }
-
-    delete orig_p;
 }
 
 /*--------------------------------------------------------------------
@@ -1126,7 +1116,7 @@ static void obfuscate(Packet* p, const uint8_t* data, int& ip_ob_start, int& ip_
     assert(p);
     ip_ob_start = ip_ob_end = -1;
 
-    if ( !SnortConfig::obfuscate() )
+    if ( !p->context->conf->obfuscate() )
         return;
 
     const ProtocolIndex ipv4_idx = PacketManager::proto_idx(ProtocolId::IPIP);
@@ -1177,7 +1167,7 @@ void LogNetData(
     }
 
     const HexAsciiLayout& hal = SnortConfig::get_conf()->output_wide_hex() ? hal_wide : hal_std;
-    const char* hdr_off = SnortConfig::verbose_byte_dump() ? hal.offset_hdr : "";
+    const char* hdr_off = p->context->conf->verbose_byte_dump() ? hal.offset_hdr : "";
 
     if ( !ins_name )
         ins_name = p->flow and p->flow->gadget ?  p->flow->gadget->get_name() : "snort";
@@ -1193,7 +1183,7 @@ void LogNetData(
     /* loop thru the whole buffer */
     while ( pb < end )
     {
-        if (SnortConfig::verbose_byte_dump())
+        if (p->context->conf->verbose_byte_dump())
         {
             TextLog_Print(log, hal.offset_fmt, offset);
             offset += hal.bytes_per_frame;
@@ -1246,7 +1236,7 @@ void LogNetData(
 
 void LogIPPkt(TextLog* log, Packet* p)
 {
-    if ( SnortConfig::output_datalink() )
+    if ( p->context->conf->output_datalink() )
     {
         Log2ndHeader(log, p);
 
@@ -1323,9 +1313,9 @@ void LogIPPkt(TextLog* log, Packet* p)
 void LogPayload(TextLog* log, Packet* p)
 {
     /* dump the application layer data */
-    if (SnortConfig::output_app_data() && !SnortConfig::verbose_byte_dump())
+    if (p->context->conf->output_app_data() && !p->context->conf->verbose_byte_dump())
     {
-        if (SnortConfig::output_char_data())
+        if (p->context->conf->output_char_data())
         {
             LogCharData(log, p->data, p->dsize);
 
@@ -1363,7 +1353,7 @@ void LogPayload(TextLog* log, Packet* p)
             }
         }
     }
-    else if (SnortConfig::verbose_byte_dump())
+    else if (p->context->conf->verbose_byte_dump())
     {
         LogNetData(log, p->pkt, p->pktlen, p);
     }
index b512ea03d60d67759b065c9eb453c0e043abd9e1..42e91a2d1b632134ed0bf3ffe9cb3f3ca26f4dab 100644 (file)
@@ -174,20 +174,29 @@ void ReloadError(const char* format, ...)
         FatalError("%s\n", buf);
 }
 
+static bool log_syslog()
+{
+    const SnortConfig* sc = SnortConfig::get_conf();
+    return sc and sc->log_syslog();
+}
+
+static bool log_quiet()
+{
+    const SnortConfig* sc = SnortConfig::get_conf();
+    return sc and sc->log_quiet();
+}
+
 static void WriteLogMessage(FILE* fh, bool prefer_fh, const char* format, va_list& ap)
 {
-    if ( SnortConfig::get_conf() && !prefer_fh )
+    if ( prefer_fh or !log_syslog() )
     {
-        if ( SnortConfig::log_syslog() )
-        {
-            char buf[STD_BUF+1];
-            vsnprintf(buf, STD_BUF, format, ap);
-            buf[STD_BUF] = '\0';
-            syslog(LOG_DAEMON | LOG_NOTICE, "%s", buf);
-            return;
-        }
+        vfprintf(fh, format, ap);
+        return;
     }
-    vfprintf(fh, format, ap);
+    char buf[STD_BUF+1];
+    vsnprintf(buf, STD_BUF, format, ap);
+    buf[STD_BUF] = '\0';
+    syslog(LOG_DAEMON | LOG_NOTICE, "%s", buf);
 }
 
 /*
@@ -202,7 +211,7 @@ static void WriteLogMessage(FILE* fh, bool prefer_fh, const char* format, va_lis
  */
 void LogMessage(const char* format,...)
 {
-    if ( SnortConfig::get_conf() and SnortConfig::log_quiet() )
+    if ( log_quiet() )
         return;
 
     va_list ap;
@@ -215,7 +224,7 @@ void LogMessage(const char* format,...)
 
 void LogMessage(FILE* fh, const char* format,...)
 {
-    if ( fh == stdout and SnortConfig::get_conf() and SnortConfig::log_quiet() )
+    if ( fh == stdout and log_quiet() )
         return;
 
     va_list ap;
@@ -242,7 +251,7 @@ void WarningMessage(const char* format,...)
 
     va_start(ap, format);
 
-    if ( SnortConfig::get_conf() and SnortConfig::log_syslog() )
+    if ( log_syslog() )
     {
         char buf[STD_BUF+1];
         vsnprintf(buf, STD_BUF, format, ap);
@@ -273,7 +282,7 @@ void ErrorMessage(const char* format,...)
 
     va_start(ap, format);
 
-    if ( SnortConfig::get_conf() and SnortConfig::log_syslog() )
+    if ( log_syslog() )
     {
         char buf[STD_BUF+1];
         vsnprintf(buf, STD_BUF, format, ap);
@@ -317,7 +326,7 @@ void ErrorMessage(const char* format,...)
 
     buf[STD_BUF] = '\0';
 
-    if ( SnortConfig::get_conf() and SnortConfig::log_syslog() )
+    if ( log_syslog() )
     {
         syslog(LOG_CONS | LOG_DAEMON | LOG_ERR, "FATAL ERROR: %s", buf);
     }
index f223b1a2ca3f2b02f5cccb373ce9ed8587ec15f8..41770da33ea15714a829d3dddc8ef74e39933a35 100644 (file)
@@ -654,7 +654,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* csv_ctor(SnortConfig*, Module* mod)
+static Logger* csv_ctor(Module* mod)
 { return new CsvLogger((CsvModule*)mod); }
 
 static void csv_dtor(Logger* p)
index 7f1a4383704b75f9160e75cd538b489a6a7264ad..78087545dc90edaf07e8c70897d4af8f340c2d1f 100644 (file)
@@ -227,7 +227,7 @@ void FastLogger::alert(Packet* p, const char* msg, const Event& event)
     TextLog_Print(fast_log, "[%u:%u:%u] ",
         event.sig_info->gid, event.sig_info->sid, event.sig_info->rev);
 
-    if (SnortConfig::alert_interface())
+    if (p->context->conf->alert_interface())
         TextLog_Print(fast_log, " <%s> ", SFDAQ::get_input_spec());
 
     if ( msg )
@@ -241,7 +241,7 @@ void FastLogger::alert(Packet* p, const char* msg, const Event& event)
     TextLog_Print(fast_log, "{%s} ", p->get_type());
     LogIpAddrs(fast_log, p);
 
-    if ( packet || SnortConfig::output_app_data() )
+    if ( packet || p->context->conf->output_app_data() )
     {
         log_data(p, event);
     }
@@ -333,7 +333,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* fast_ctor(SnortConfig*, Module* mod)
+static Logger* fast_ctor(Module* mod)
 { return new FastLogger((FastModule*)mod); }
 
 static void fast_dtor(Logger* p)
index 4de7f371274152e7c03bfcc52b2adb4f7fee190e..306fa520245cadcca82ff7be762d5bc3f9a243c9 100644 (file)
@@ -37,6 +37,7 @@
 #include "config.h"
 #endif
 
+#include "detection/ips_context.h"
 #include "detection/signature.h"
 #include "events/event.h"
 #include "framework/logger.h"
@@ -155,7 +156,7 @@ void FullLogger::alert(Packet* p, const char* msg, const Event& event)
     TextLog_Print(full_log, "[%u:%u:%u] ",
         event.sig_info->gid, event.sig_info->sid, event.sig_info->rev);
 
-    if (SnortConfig::alert_interface())
+    if (p->context->conf->alert_interface())
     {
         const char* iface = SFDAQ::get_input_spec();
         TextLog_Print(full_log, " <%s> ", iface);
@@ -171,7 +172,7 @@ void FullLogger::alert(Packet* p, const char* msg, const Event& event)
         TextLog_Puts(full_log, "[**]\n");
     }
 
-    if (p && p->has_ip())
+    if (p->has_ip())
     {
         LogPriorityData(full_log, event);
         TextLog_NewLine(full_log);
@@ -182,11 +183,11 @@ void FullLogger::alert(Packet* p, const char* msg, const Event& event)
     LogTimeStamp(full_log, p);
     TextLog_Putc(full_log, ' ');
 
-    if (p && p->has_ip())
+    if (p->has_ip())
     {
         /* print the packet header to the alert file */
 
-        if (SnortConfig::output_datalink())
+        if (p->context->conf->output_datalink())
         {
             Log2ndHeader(full_log, p);
         }
@@ -230,7 +231,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* full_ctor(SnortConfig*, Module* mod)
+static Logger* full_ctor(Module* mod)
 { return new FullLogger((FullModule*)mod); }
 
 static void full_dtor(Logger* p)
index 41255f18e135c5f4aaf487550d6cfe99ea05558b..6978b40e8b80e8a7b28d0d950ae76bebe4bb9e7c 100644 (file)
@@ -841,7 +841,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* json_ctor(SnortConfig*, Module* mod)
+static Logger* json_ctor(Module* mod)
 { return new JsonLogger((JsonModule*)mod); }
 
 static void json_dtor(Logger* p)
index 79e6c974d9ca758071ef0585b895cb335450b0b2..933ce1a74e8e12b29a9a590552ccfb3660382ce8 100644 (file)
@@ -200,7 +200,7 @@ static void mod_dtor(Module* m)
     delete m;
 }
 
-static Logger* log_ctor(SnortConfig*, Module* m)
+static Logger* log_ctor(Module* m)
 {
     const char* key = m->get_name();
     std::string* chunk = ScriptManager::get_chunk(key);
index 9c15e4b4a15ebd1e04ede6fcad79c262402c1588..cf0c8caf9241c46f8456f4b9038fc2248197e312 100644 (file)
@@ -249,9 +249,11 @@ static OptTreeNode* OptTreeNode_Search(uint32_t, uint32_t sid)
     if (sid == 0)
         return nullptr;
 
-    for (hashNode = SnortConfig::get_conf()->otn_map->find_first();
+    const SnortConfig* sc = SnortConfig::get_conf();
+
+    for (hashNode = sc->otn_map->find_first();
         hashNode;
-        hashNode = SnortConfig::get_conf()->otn_map->find_next())
+        hashNode = sc->otn_map->find_next())
     {
         OptTreeNode* otn = (OptTreeNode*)hashNode->data;
         RuleTreeNode* rtn = getRuntimeRtnFromOtn(otn);
@@ -384,7 +386,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* sf_sock_ctor(SnortConfig*, Module* mod)
+static Logger* sf_sock_ctor(Module* mod)
 { return new SfSocketLogger((SfSocketModule*)mod); }
 
 static void sf_sock_dtor(Logger* p)
index 1cc4f88ede5c2fef46f501c65869a4f5db8fa161..3fd09cd98f3279202e53777acddfce9a6379b80a 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <syslog.h>
 
+#include "detection/ips_context.h"
 #include "detection/signature.h"
 #include "events/event.h"
 #include "framework/logger.h"
@@ -93,8 +94,11 @@ static int get_level(unsigned lvl)
     return 0;
 }
 
-#define syslog_options \
-    "cons | ndelay | perror | pid"
+#ifdef LOG_PERROR
+#define syslog_options "cons | ndelay | perror | pid"
+#else
+#define syslog_options "cons | ndelay | pid"
+#endif
 
 static int get_options(const char* s)
 {
@@ -181,9 +185,9 @@ bool SyslogModule::begin(const char*, int, SnortConfig*)
     return true;
 }
 
-bool SyslogModule::end(const char*, int, SnortConfig*)
+bool SyslogModule::end(const char*, int, SnortConfig* sc)
 {
-    if ( SnortConfig::daemon_mode() )
+    if ( sc->daemon_mode() )
         options |= LOG_PID;
 
     return true;
@@ -222,7 +226,7 @@ static void AlertSyslog(
                 "[Priority: %u] ", event.sig_info->priority);
         }
 
-        if (SnortConfig::alert_interface())
+        if (p->context->conf->alert_interface())
         {
             SnortSnprintfAppend(event_string, sizeof(event_string),
                 "<%s> ", SFDAQ::get_input_spec());
@@ -249,13 +253,13 @@ static void AlertSyslog(
             const char* ip_fmt = "%s -> %s";
             InetBuf src, dst;
 
-            if (SnortConfig::obfuscate())
+            if (p->context->conf->obfuscate())
             {
-                ObfuscateIpToText(p->ptrs.ip_api.get_src(), SnortConfig::get_conf()->homenet,
-                    SnortConfig::get_conf()->obfuscation_net, src);
+                ObfuscateIpToText(p->ptrs.ip_api.get_src(), p->context->conf->get_conf()->homenet,
+                    p->context->conf->get_conf()->obfuscation_net, src);
 
-                ObfuscateIpToText(p->ptrs.ip_api.get_dst(), SnortConfig::get_conf()->homenet,
-                    SnortConfig::get_conf()->obfuscation_net, dst);
+                ObfuscateIpToText(p->ptrs.ip_api.get_dst(), p->context->conf->get_conf()->homenet,
+                    p->context->conf->get_conf()->obfuscation_net, dst);
 
                 SnortSnprintfAppend(event_string, sizeof(event_string), ip_fmt, src, dst);
             }
@@ -271,13 +275,13 @@ static void AlertSyslog(
             const char* ip_fmt = "%s:%d -> %s:%d";
             InetBuf src, dst;
 
-            if (SnortConfig::obfuscate())
+            if (p->context->conf->obfuscate())
             {
-                ObfuscateIpToText(p->ptrs.ip_api.get_src(), SnortConfig::get_conf()->homenet,
-                    SnortConfig::get_conf()->obfuscation_net, src);
+                ObfuscateIpToText(p->ptrs.ip_api.get_src(), p->context->conf->get_conf()->homenet,
+                    p->context->conf->get_conf()->obfuscation_net, src);
 
-                ObfuscateIpToText(p->ptrs.ip_api.get_dst(), SnortConfig::get_conf()->homenet,
-                    SnortConfig::get_conf()->obfuscation_net, dst);
+                ObfuscateIpToText(p->ptrs.ip_api.get_dst(), p->context->conf->get_conf()->homenet,
+                    p->context->conf->get_conf()->obfuscation_net, dst);
 
                 SnortSnprintfAppend(event_string, sizeof(event_string), ip_fmt,
                     src, p->ptrs.sp, dst, p->ptrs.dp);
@@ -338,7 +342,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* syslog_ctor(SnortConfig*, Module* mod)
+static Logger* syslog_ctor(Module* mod)
 { return new SyslogLogger((SyslogModule*)mod); }
 
 static void syslog_dtor(Logger* p)
index 807531dc51dab50b699f3f77c3e22712a24ef99e..b602d9ce463e02f0014006fc9385ff963c530475 100644 (file)
@@ -208,7 +208,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* talos_ctor(SnortConfig*, Module* mod)
+static Logger* talos_ctor(Module* mod)
 { return new TalosLogger((TalosModule*)mod); }
 
 static void talos_dtor(Logger* p)
index c20834853b9ea13fba26832ca88b306e6dfae59d..5c7936cf409ecac564eca71224475e4c8f76f79c 100644 (file)
@@ -271,7 +271,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* unix_sock_ctor(SnortConfig*, Module*)
+static Logger* unix_sock_ctor(Module*)
 { return new UnixSockLogger; }
 
 static void unix_sock_dtor(Logger* p)
index aac88c176492f7519755c8f2dcfc40d3073f2cd3..4a33a0c088f00836896ba29eb2f337ad6ea90ca9 100644 (file)
@@ -156,7 +156,7 @@ void CodecLogger::log(Packet* p, const char* msg, Event* e)
     PacketManager::log_protocols(test_file, p);
     TextLog_NewLine(test_file);
 
-    if ( p->dsize and SnortConfig::output_app_data() )
+    if ( p->dsize and p->context->conf->output_app_data() )
         LogNetData(test_file, p->data, p->dsize, p);
 
     TextLog_NewLine(test_file);
@@ -172,7 +172,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* codec_log_ctor(SnortConfig*, Module* mod)
+static Logger* codec_log_ctor(Module* mod)
 { return new CodecLogger((LogCodecModule*)mod); }
 
 static void codec_log_dtor(Logger* p)
index eea98a90172c16c07fafd39fe417233eefc86667..ce95f199821251d11f0e660abd39d5fbf886a5fa 100644 (file)
@@ -298,7 +298,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* hext_ctor(SnortConfig*, Module* mod)
+static Logger* hext_ctor(Module* mod)
 {
     return new HextLogger((HextModule*)mod);
 }
index 55a5569b7f83d2337557212f9dbacd059a4fe1de..ee774c158b7f67490547efffdad2d49d5f3f37aa 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <pcap.h>
 
+#include "detection/ips_context.h"
 #include "framework/logger.h"
 #include "framework/module.h"
 #include "log/messages.h"
@@ -140,7 +141,7 @@ static void LogTcpdumpSingle(
     pcap_dump((uint8_t*)context.dumpd, &pcaphdr, p->pkt);
     context.size += dumpSize;
 
-    if (!SnortConfig::line_buffered_logging())  // FIXIT-L misnomer
+    if (!p->context->conf->line_buffered_logging())  // FIXIT-L misnomer
     {
         fflush( (FILE*)context.dumpd);
     }
@@ -272,7 +273,7 @@ PcapLogger::~PcapLogger()
 
 void PcapLogger::open()
 {
-    TcpdumpInitLogFile(config, SnortConfig::output_no_timestamp());
+    TcpdumpInitLogFile(config, SnortConfig::get_conf()->output_no_timestamp());
 }
 
 void PcapLogger::close()
@@ -318,7 +319,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* tcpdump_ctor(SnortConfig*, Module* mod)
+static Logger* tcpdump_ctor(Module* mod)
 { return new PcapLogger((TcpdumpModule*)mod); }
 
 static void tcpdump_dtor(Logger* p)
index 940a8e4521b8091b14d3dcb4d83f2443f16522fe..9516f1d59f0c21d87102a659000542269921c6d2 100644 (file)
@@ -839,10 +839,10 @@ bool U2Module::set(const char*, Value& v, SnortConfig*)
     return true;
 }
 
-bool U2Module::begin(const char*, int, SnortConfig*)
+bool U2Module::begin(const char*, int, SnortConfig* sc)
 {
     limit = 0;
-    nostamp = SnortConfig::output_no_timestamp();
+    nostamp = sc->output_no_timestamp();
     legacy_events = false;
     return true;
 }
@@ -1006,7 +1006,7 @@ static Module* mod_ctor()
 static void mod_dtor(Module* m)
 { delete m; }
 
-static Logger* u2_ctor(SnortConfig*, Module* mod)
+static Logger* u2_ctor(Module* mod)
 { return new U2Logger((U2Module*)mod); }
 
 static void u2_dtor(Logger* p)
index f64bd5ed94ee14ee5b31b18913ccbdec3c13f308..9f3853e7613f382d979b287918890a40ec8b8513 100644 (file)
@@ -88,7 +88,7 @@ static const char* prompt = "o\")~ ";
 const char* get_prompt()
 { return prompt; }
 
-static bool use_shell(SnortConfig* sc)
+static bool use_shell(const SnortConfig* sc)
 {
 #ifdef SHELL
     return ( sc->run_flags & RUN_FLAG__SHELL );
@@ -148,8 +148,9 @@ private:
 
 bool Pig::prep(const char* source)
 {
-    SnortConfig* sc = SnortConfig::get_conf();
+    const SnortConfig* sc = SnortConfig::get_conf();
     SFDAQInstance *instance = new SFDAQInstance(source, idx, sc->daq_config);
+
     if (!SFDAQ::init_instance(instance, sc->bpf_filter))
     {
         delete instance;
@@ -170,7 +171,7 @@ void Pig::start()
     assert(!athread);
     LogMessage("++ [%u] %s\n", idx, analyzer->get_source());
 
-    Swapper* ps = new Swapper(SnortConfig::get_conf(), HostAttributes::get_host_attributes_table());
+    Swapper* ps = new Swapper(SnortConfig::get_main_conf(), HostAttributes::get_host_attributes_table());
     athread = new std::thread(std::ref(*analyzer), ps, ++run_num);
 }
 
@@ -347,7 +348,7 @@ int main_reload_config(lua_State* L)
     }
 
     current_request->respond(".. reloading configuration\n");
-    SnortConfig* old = SnortConfig::get_conf();
+    const SnortConfig* old = SnortConfig::get_conf();
     SnortConfig* sc = Snort::get_reload_config(fname, plugin_path);
 
     if ( !sc )
@@ -362,7 +363,6 @@ int main_reload_config(lua_State* L)
         else
             current_request->respond("== reload failed - bad config\n");
 
-        SnortConfig::set_parser_conf(nullptr);
         return 0;
     }
 
@@ -381,7 +381,6 @@ int main_reload_config(lua_State* L)
     current_request->respond(".. swapping configuration\n", from_shell);
     main_broadcast_command(new ACSwap(new Swapper(old, sc, old_tc, tc), current_request, from_shell), from_shell);
 
-    SnortConfig::set_parser_conf(nullptr);
     return 0;
 }
 
@@ -408,7 +407,7 @@ int main_reload_policy(lua_State* L)
         return 0;
     }
 
-    SnortConfig* old = SnortConfig::get_conf();
+    SnortConfig* old = SnortConfig::get_main_conf();
     SnortConfig* sc = Snort::get_updated_policy(old, fname, nullptr);
 
     if ( !sc )
@@ -449,7 +448,7 @@ int main_reload_module(lua_State* L)
         return 0;
     }
 
-    SnortConfig* old = SnortConfig::get_conf();
+    SnortConfig* old = SnortConfig::get_main_conf();
     SnortConfig* sc = Snort::get_updated_module(old, fname);
 
     if ( !sc )
@@ -496,7 +495,7 @@ int main_reload_hosts(lua_State* L)
     }
 
     proc_stats.attribute_table_overflow = 0;
-    HostAttributes::load_hosts_file(SnortConfig::get_conf(), fname);
+    HostAttributes::load_hosts_file(SnortConfig::get_main_conf(), fname);
 
     HostAttributesTable* old = HostAttributes::get_host_attributes_table();
     HostAttributesTable* tc = HostAttributes::activate();
@@ -540,7 +539,7 @@ int main_delete_inspector(lua_State* L)
         return 0;
     }
 
-    SnortConfig* old = SnortConfig::get_conf();
+    SnortConfig* old = SnortConfig::get_main_conf();
     SnortConfig* sc = Snort::get_updated_policy(old, nullptr, iname);
 
     if ( !sc )
@@ -742,20 +741,20 @@ static void service_check()
 // main foo
 //-------------------------------------------------------------------------
 
-static bool just_validate()
+static bool just_validate(const SnortConfig* sc)
 {
-    if ( SnortConfig::test_mode() )
+    if ( sc->test_mode() )
         return true;
 
-    if ( use_shell(SnortConfig::get_conf()) )
+    if ( use_shell(sc) )
         return false;
 
-    if ( SnortConfig::get_conf()->daq_config->module_configs.empty() )
+    if ( sc->daq_config->module_configs.empty() )
     {
-        if ( SnortConfig::read_mode() && !Trough::get_queue_size() )
+        if ( sc->read_mode() && !Trough::get_queue_size() )
             return true;
 
-        if ( !SnortConfig::read_mode() && !SFDAQ::get_input_spec(SnortConfig::get_conf()->daq_config, 0) )
+        if ( !sc->read_mode() && !SFDAQ::get_input_spec(sc->daq_config, 0) )
             return true;
     }
 
@@ -785,47 +784,49 @@ static bool set_mode()
     if ( unsigned k = get_parse_errors() )
         FatalError("see prior %u errors (%u warnings)\n", k, warnings);
 
-    if ( SnortConfig::conf_error_out() )
+    SnortConfig* sc = SnortConfig::get_main_conf();
+
+    if ( sc->conf_error_out() )
     {
         if ( warnings )
             FatalError("see prior %u warnings\n", warnings);
     }
 
-    if ( SnortConfig::dump_msg_map() )
+    if ( sc->dump_msg_map() )
     {
-        dump_msg_map(SnortConfig::get_conf());
+        dump_msg_map(sc);
         return false;
     }
 
-    if ( SnortConfig::dump_rule_deps() )
+    if ( sc->dump_rule_deps() )
     {
-        dump_rule_deps(SnortConfig::get_conf());
+        dump_rule_deps(sc);
         return false;
     }
 
-    if ( SnortConfig::dump_rule_meta() )
+    if ( sc->dump_rule_meta() )
     {
-        dump_rule_meta(SnortConfig::get_conf());
+        dump_rule_meta(sc);
         return false;
     }
 
-    if ( SnortConfig::dump_rule_state() )
+    if ( sc->dump_rule_state() )
     {
-        dump_rule_state(SnortConfig::get_conf());
+        dump_rule_state(sc);
         return false;
     }
 
-    if ( just_validate() )
+    if ( just_validate(sc) )
     {
         LogMessage("\nSnort successfully validated the configuration (with %u warnings).\n",
             warnings);
 
         // force test mode to exit w/o stats
-        SnortConfig::get_conf()->run_flags |= RUN_FLAG__TEST;
+        sc->run_flags |= RUN_FLAG__TEST;
         return false;
     }
 
-    if ( SnortConfig::get_conf()->run_flags & RUN_FLAG__PAUSE )
+    if ( sc->run_flags & RUN_FLAG__PAUSE )
     {
         LogMessage("Paused; resume to start packet processing\n");
         paused = true;
@@ -834,7 +835,7 @@ static bool set_mode()
         LogMessage("Commencing packet processing\n");
 
 #ifdef SHELL
-    if ( use_shell(SnortConfig::get_conf()) )
+    if ( use_shell(sc) )
     {
         LogMessage("Entering command shell\n");
         ControlMgmt::add_control(STDOUT_FILENO, true);
@@ -916,11 +917,11 @@ static void main_loop()
 {
     unsigned swine = 0, pending_privileges = 0;
 
-    if (SnortConfig::change_privileges())
+    if (SnortConfig::get_conf()->change_privileges())
         pending_privileges = max_pigs;
 
     // Preemptively prep all pigs in live traffic mode
-    if (!SnortConfig::read_mode())
+    if (!SnortConfig::get_conf()->read_mode())
     {
         for (unsigned i = 0; i < max_pigs; i++)
         {
index c2cd39392ec26a2d52825c6befe6162a12ace912..e381102de01313f422222906944539f52aa96150 100644 (file)
@@ -193,7 +193,7 @@ static bool process_packet(Packet* p)
     PacketTracer::activate(*p);
 
     // FIXIT-M should not need to set policies here
-    set_default_policy();
+    set_default_policy(p->context->conf);
     p->user_inspection_policy_id = get_inspection_policy()->user_policy_id;
     p->user_ips_policy_id = get_ips_policy()->user_policy_id;
     p->user_network_policy_id = get_network_policy()->user_policy_id;
@@ -272,7 +272,7 @@ static DAQ_Verdict distill_verdict(Packet* p)
             daq_stats.internal_blacklist++;
             verdict = DAQ_VERDICT_BLOCK;
         }
-        else if ( SnortConfig::inline_mode() || act->packet_force_dropped() )
+        else if ( p->context->conf->inline_mode() || act->packet_force_dropped() )
             verdict = DAQ_VERDICT_BLACKLIST;
         else
             verdict = DAQ_VERDICT_IGNORE;
@@ -387,7 +387,6 @@ void Analyzer::post_process_daq_pkt_msg(Packet* p)
 void Analyzer::process_daq_pkt_msg(DAQ_Msg_h msg, bool retry)
 {
     const DAQ_PktHdr_t* pkthdr = daq_msg_get_pkthdr(msg);
-    set_default_policy();
 
     pc.analyzed_pkts++;
 
@@ -396,19 +395,22 @@ void Analyzer::process_daq_pkt_msg(DAQ_Msg_h msg, bool retry)
 
     DetectionEngine::wait_for_context();
     switcher->start();
+
     Packet* p = switcher->get_context()->packet;
     oops_handler->set_current_packet(p);
     p->context->wire_packet = p;
     p->context->packet_number = get_packet_number();
+    set_default_policy(p->context->conf);
 
     DetectionEngine::reset();
-
     sfthreshold_reset();
     Active::clear_queue(p);
 
     p->daq_msg = msg;
     p->daq_instance = daq_instance;
+
     PacketManager::decode(p, pkthdr, daq_msg_get_data(msg), daq_msg_get_data_len(msg), false, retry);
+
     if (process_packet(p))
     {
         post_process_daq_pkt_msg(p);
@@ -590,7 +592,7 @@ void Analyzer::init_unprivileged()
     for ( unsigned i = 0; i < max_contexts; ++i )
         switcher->push(new IpsContext);
 
-    SnortConfig* sc = SnortConfig::get_conf();
+    const SnortConfig* sc = SnortConfig::get_conf();
 
     // This should be called as soon as possible
     // to handle all trace log messages
@@ -607,7 +609,7 @@ void Analyzer::init_unprivileged()
     detection_filter_init(sc->detection_filter_config);
 
     EventManager::open_outputs();
-    IpsManager::setup_options();
+    IpsManager::setup_options(sc);
     ActionManager::thread_init(sc);
     FileService::thread_init();
     SideChannelManager::thread_init();
@@ -624,7 +626,7 @@ void Analyzer::init_unprivileged()
     SFRF_Alloc(sc->rate_filter_config->memcap);
 }
 
-void Analyzer::reinit(SnortConfig* sc)
+void Analyzer::reinit(const SnortConfig* sc)
 {
     InspectorManager::thread_reinit(sc);
     ActionManager::thread_reinit(sc);
@@ -633,7 +635,7 @@ void Analyzer::reinit(SnortConfig* sc)
 
 void Analyzer::term()
 {
-    SnortConfig* sc = SnortConfig::get_conf();
+    const SnortConfig* sc = SnortConfig::get_conf();
 
     HighAvailabilityManager::thread_term_beginning();
 
@@ -650,11 +652,11 @@ void Analyzer::term()
 
     DetectionEngine::idle();
     InspectorManager::thread_stop(sc);
-    ModuleManager::accumulate(sc);
-    InspectorManager::thread_term(sc);
-    ActionManager::thread_term(sc);
+    ModuleManager::accumulate();
+    InspectorManager::thread_term();
+    ActionManager::thread_term();
 
-    IpsManager::clear_options();
+    IpsManager::clear_options(sc);
     EventManager::close_outputs();
     CodecManager::thread_term();
     HighAvailabilityManager::thread_term();
@@ -716,7 +718,7 @@ void Analyzer::operator()(Swapper* ps, uint16_t run_num)
     ps->apply(*this);
     delete ps;
 
-    if (SnortConfig::pcap_show())
+    if (SnortConfig::get_conf()->pcap_show())
         show_source();
 
     // init here to pin separately from packet threads
@@ -724,8 +726,8 @@ void Analyzer::operator()(Swapper* ps, uint16_t run_num)
 
     // Perform all packet thread initialization actions that need to be taken with escalated
     // privileges prior to starting the DAQ module.
-    SnortConfig::get_conf()->thread_config->implement_thread_affinity(STHREAD_TYPE_PACKET,
-        get_instance_id());
+    SnortConfig::get_conf()->thread_config->implement_thread_affinity(
+        STHREAD_TYPE_PACKET, get_instance_id());
 
     SFDAQ::set_local_instance(daq_instance);
     set_state(State::INITIALIZED);
index 36446cdab807fda658424c09c3b4b79c6ec62644..01f4111f4462ec51c71837aacdab5ee221950e6a 100644 (file)
@@ -104,7 +104,7 @@ public:
     void pause();
     void resume(uint64_t msg_cnt);
     void reload_daq();
-    void reinit(snort::SnortConfig*);
+    void reinit(const snort::SnortConfig*);
     void rotate();
     snort::SFDAQInstance* get_daq_instance() { return daq_instance; }
 
index 57f3c6b9470b096791a78cccb0a33c3b67942398..5528a3032ec22c4c106302f6e55af72c01de23e1 100644 (file)
@@ -81,7 +81,7 @@ bool ACGetStats::execute(Analyzer&, void**)
     // FIXIT-P This incurs locking on all threads to retrieve stats.  It
     // could be reimplemented to optimize for large thread counts by
     // retrieving stats in the command and accumulating in the main thread.
-    ModuleManager::accumulate(SnortConfig::get_conf());
+    ModuleManager::accumulate();
     return true;
 }
 
@@ -106,7 +106,7 @@ bool ACSwap::execute(Analyzer& analyzer, void** ac_state)
     {
         ps->apply(analyzer);
 
-        SnortConfig* sc = ps->get_new_conf();
+        const SnortConfig* sc = ps->get_new_conf();
         if ( sc )
         {
             std::list<ReloadResourceTuner*>* reload_tuners;
index fabb4f8d56dae16df8c44f39d4737e1f43086108..4aaf8b7893afdfb53941d941d61d1bc6296fa31f 100644 (file)
@@ -439,25 +439,27 @@ int ControlMgmt::socket_conn()
 int ControlMgmt::setup_socket_family()
 {
     int family = AF_UNSPEC;
-    if (SnortConfig::get_conf()->remote_control_port)
+    const SnortConfig* sc = SnortConfig::get_conf();
+
+    if (sc->remote_control_port)
     {
         memset(&in_addr, 0, sizeof(in_addr));
 
         in_addr.sin_family = AF_INET;
         in_addr.sin_addr.s_addr = htonl(0x7F000001);
-        in_addr.sin_port = htons(SnortConfig::get_conf()->remote_control_port);
+        in_addr.sin_port = htons(sc->remote_control_port);
         sock_addr = (struct sockaddr*)&in_addr;
         sock_addr_size = sizeof(in_addr);
         family = AF_INET;
     }
-    else if (!SnortConfig::get_conf()->remote_control_socket.empty())
+    else if (!sc->remote_control_socket.empty())
     {
         string fullpath;
-        const char* path_sep = strrchr(SnortConfig::get_conf()->remote_control_socket.c_str(), '/');
+        const char* path_sep = strrchr(sc->remote_control_socket.c_str(), '/');
         if (path_sep != nullptr)
-            fullpath = SnortConfig::get_conf()->remote_control_socket;
+            fullpath = sc->remote_control_socket;
         else
-            get_instance_file(fullpath, SnortConfig::get_conf()->remote_control_socket.c_str());
+            get_instance_file(fullpath, sc->remote_control_socket.c_str());
 
         memset(&unix_addr, 0, sizeof(unix_addr));
         unix_addr.sun_family = AF_UNIX;
index 8829d7f8c503415a326e1ab0a5c1b0001e6183cc..2241531b7848db92ff9f42595cf6ab333f3be547 100644 (file)
@@ -785,8 +785,10 @@ bool OutputModule::set(const char*, Value& v, SnortConfig* sc)
         sc->tagged_packet_limit = v.get_uint32();
 
     else if ( v.is("verbose") )
-        v.update_mask(sc->logging_flags, LOGGING_FLAG__VERBOSE);
-
+    {
+        if ( v.get_bool() )
+            v.update_mask(sc->logging_flags, LOGGING_FLAG__VERBOSE);
+    }
     else if ( v.is("wide_hex_dump") )
         v.update_mask(sc->output_flags, OUTPUT_FLAG__WIDE_HEX);
 
@@ -1327,8 +1329,10 @@ private:
 bool ProcessModule::set(const char*, Value& v, SnortConfig* sc)
 {
     if ( v.is("daemon") )
-        sc->set_daemon(v.get_bool());
-
+    {
+        if ( v.get_bool() )  // FIXIT-M fix cmd line vs conf conflicts
+            sc->set_daemon(true);
+    }
     else if ( v.is("chroot") )
         sc->set_chroot_dir(v.get_string());
 
index 60821a7a6dbfc438f8bb66f87a000a291542ba55..a698b25ca7eaf7564d530af4dd48e4d25139711b 100644 (file)
@@ -305,7 +305,7 @@ IpsPolicy* get_ips_policy(const SnortConfig* sc, unsigned i)
         sc->policy_map->get_ips_policy(i) : nullptr;
 }
 
-InspectionPolicy* get_default_inspection_policy(SnortConfig* sc)
+InspectionPolicy* get_default_inspection_policy(const SnortConfig* sc)
 { return sc->policy_map->get_inspection_policy(0); }
 
 void set_ips_policy(IpsPolicy* p)
@@ -314,23 +314,23 @@ void set_ips_policy(IpsPolicy* p)
 void set_network_policy(NetworkPolicy* p)
 { s_traffic_policy = p; }
 
-IpsPolicy* get_user_ips_policy(SnortConfig* sc, unsigned policy_id)
+IpsPolicy* get_user_ips_policy(const SnortConfig* sc, unsigned policy_id)
 {
     return sc->policy_map->get_user_ips(policy_id);
 }
 
-IpsPolicy* get_empty_ips_policy(SnortConfig* sc)
+IpsPolicy* get_empty_ips_policy(const SnortConfig* sc)
 {
     return sc->policy_map->get_empty_ips();
 }
 
-NetworkPolicy* get_user_network_policy(SnortConfig* sc, unsigned policy_id)
+NetworkPolicy* get_user_network_policy(const SnortConfig* sc, unsigned policy_id)
 {
     return sc->policy_map->get_user_network(policy_id);
 }
 } // namespace snort
 
-void set_network_policy(SnortConfig* sc, unsigned i)
+void set_network_policy(const SnortConfig* sc, unsigned i)
 {
     PolicyMap* pm = sc->policy_map;
 
@@ -341,7 +341,7 @@ void set_network_policy(SnortConfig* sc, unsigned i)
 void set_inspection_policy(InspectionPolicy* p)
 { s_inspection_policy = p; }
 
-void set_inspection_policy(SnortConfig* sc, unsigned i)
+void set_inspection_policy(const SnortConfig* sc, unsigned i)
 {
     PolicyMap* pm = sc->policy_map;
 
@@ -349,7 +349,7 @@ void set_inspection_policy(SnortConfig* sc, unsigned i)
         set_inspection_policy(pm->get_inspection_policy(i));
 }
 
-void set_ips_policy(SnortConfig* sc, unsigned i)
+void set_ips_policy(const SnortConfig* sc, unsigned i)
 {
     PolicyMap* pm = sc->policy_map;
 
@@ -357,7 +357,7 @@ void set_ips_policy(SnortConfig* sc, unsigned i)
         set_ips_policy(pm->get_ips_policy(i));
 }
 
-void set_policies(SnortConfig* sc, Shell* sh)
+void set_policies(const SnortConfig* sc, Shell* sh)
 {
     auto policies = sc->policy_map->get_policies(sh);
 
@@ -371,16 +371,13 @@ void set_policies(SnortConfig* sc, Shell* sh)
         set_network_policy(policies->network);
 }
 
-void set_default_policy(SnortConfig* sc)
+void set_default_policy(const SnortConfig* sc)
 {
     set_network_policy(sc->policy_map->get_network_policy(0));
     set_inspection_policy(sc->policy_map->get_inspection_policy(0));
     set_ips_policy(sc->policy_map->get_ips_policy(0));
 }
 
-void set_default_policy()
-{ set_default_policy(SnortConfig::get_conf()); }
-
 bool default_inspection_policy()
 {
     if ( !get_inspection_policy() )
index b7269712e7814e094196e98732afdf181237ce37..69cd276380328c9e238a4b9eec16f045ad37c5cd 100644 (file)
@@ -88,6 +88,21 @@ struct NetworkPolicy
 public:
     NetworkPolicy(PolicyId = 0);
 
+    bool checksum_drops(uint16_t codec_cksum_err_flag)
+    { return (checksum_drop & codec_cksum_err_flag) != 0; }
+
+    bool ip_checksums()
+    { return (checksum_eval & CHECKSUM_FLAG__IP) != 0; }
+
+    bool udp_checksums()
+    { return (checksum_eval & CHECKSUM_FLAG__UDP) != 0; }
+
+    bool tcp_checksums()
+    { return (checksum_eval & CHECKSUM_FLAG__TCP) != 0; }
+
+    bool icmp_checksums()
+    { return (checksum_eval & CHECKSUM_FLAG__ICMP) != 0; }
+
 public:
     PolicyId policy_id;
     uint32_t user_policy_id = 0;
@@ -280,24 +295,23 @@ SO_PUBLIC NetworkPolicy* get_network_policy();
 SO_PUBLIC InspectionPolicy* get_inspection_policy();
 SO_PUBLIC IpsPolicy* get_ips_policy();
 SO_PUBLIC IpsPolicy* get_ips_policy(const snort::SnortConfig*, unsigned i = 0);
-SO_PUBLIC InspectionPolicy* get_default_inspection_policy(snort::SnortConfig*);
-SO_PUBLIC void set_ips_policy(IpsPolicy* p);
-SO_PUBLIC void set_network_policy(NetworkPolicy* p);
-SO_PUBLIC IpsPolicy* get_user_ips_policy(snort::SnortConfig* sc, unsigned policy_id);
-SO_PUBLIC IpsPolicy* get_empty_ips_policy(snort::SnortConfig* sc);
-SO_PUBLIC NetworkPolicy* get_user_network_policy(snort::SnortConfig* sc, unsigned policy_id);
+SO_PUBLIC InspectionPolicy* get_default_inspection_policy(const snort::SnortConfig*);
+SO_PUBLIC void set_ips_policy(IpsPolicy*);
+SO_PUBLIC void set_network_policy(NetworkPolicy*);
+SO_PUBLIC IpsPolicy* get_user_ips_policy(const snort::SnortConfig*, unsigned policy_id);
+SO_PUBLIC IpsPolicy* get_empty_ips_policy(const snort::SnortConfig*);
+SO_PUBLIC NetworkPolicy* get_user_network_policy(const snort::SnortConfig*, unsigned policy_id);
 }
 
-void set_network_policy(snort::SnortConfig*, unsigned = 0);
+void set_network_policy(const snort::SnortConfig*, unsigned = 0);
 
 void set_inspection_policy(InspectionPolicy*);
-void set_inspection_policy(snort::SnortConfig*, unsigned = 0);
+void set_inspection_policy(const snort::SnortConfig*, unsigned = 0);
 
-void set_ips_policy(snort::SnortConfig*, unsigned = 0);
+void set_ips_policy(const snort::SnortConfig*, unsigned = 0);
 
-void set_policies(snort::SnortConfig*, Shell*);
-void set_default_policy();
-void set_default_policy(snort::SnortConfig*);
+void set_policies(const snort::SnortConfig*, Shell*);
+void set_default_policy(const snort::SnortConfig*);
 
 bool default_inspection_policy();
 bool only_inspection_policy();
index 742f3c0c0bab705f9aa09a9f0181dcc630b9bdb3..8992b195bbc1621379f612cb1f71775e78595821 100644 (file)
@@ -253,7 +253,7 @@ bool Shell::configure(SnortConfig* sc, bool is_fatal, bool is_root)
     if ( !overrides.empty() )
         load_string(lua, overrides.c_str());
 
-    if ( SnortConfig::log_verbose() )
+    if ( SnortConfig::get_conf()->log_verbose() )
         print_whitelist();
 
     load_string(lua, ModuleManager::get_lua_finalize());
index acdbb9808e269e5bb101651fa63d529834e8a987..0349a8d5bf0e606b3a65be984db9aa0fa5c1799e 100644 (file)
@@ -159,7 +159,7 @@ void Snort::init(int argc, char** argv)
 
     PluginManager::load_so_plugins(sc);
 
-    if ( snort_cmd_line_conf->logging_flags & LOGGING_FLAG__SHOW_PLUGINS )
+    if ( sc->logging_flags & LOGGING_FLAG__SHOW_PLUGINS )
     {
         ModuleManager::dump_modules();
         PluginManager::dump_plugins();
@@ -177,7 +177,7 @@ void Snort::init(int argc, char** argv)
 
     HighAvailabilityManager::configure(sc->ha_config);
 
-    if (SnortConfig::alert_before_pass())
+    if (sc->alert_before_pass())
         sc->rule_order = "reset block drop alert pass log";
 
     sc->setup();
@@ -188,11 +188,11 @@ void Snort::init(int argc, char** argv)
     // Must be after CodecManager::instantiate()
     if ( !InspectorManager::configure(sc) )
         ParseError("can't initialize inspectors");
-    else if ( SnortConfig::log_verbose() )
+    else if ( sc->log_verbose() )
         InspectorManager::print_config(sc);
 
     // Must be after InspectorManager::configure()
-    FileService::post_init();
+    FileService::post_init(sc);
 
     ModuleManager::reset_stats(sc);
 
@@ -256,20 +256,22 @@ void Snort::init(int argc, char** argv)
 
 bool Snort::drop_privileges()
 {
-    /* Enter the chroot jail if necessary. */
-    if (!SnortConfig::get_conf()->chroot_dir.empty() &&
-        !EnterChroot(SnortConfig::get_conf()->chroot_dir, SnortConfig::get_conf()->log_dir))
+    SnortConfig* sc = SnortConfig::get_main_conf();
+
+    // Enter the chroot jail if necessary.
+    if (!sc->chroot_dir.empty() && !EnterChroot(sc->chroot_dir, sc->log_dir))
         return false;
 
-    /* Drop privileges if requested. */
-    if (SnortConfig::get_uid() != -1 || SnortConfig::get_gid() != -1)
+    // Drop privileges if requested.
+    if (sc->get_uid() != -1 || sc->get_gid() != -1)
     {
         if (!SFDAQ::can_run_unprivileged())
         {
-            ParseError("Cannot drop privileges - at least one of the configured DAQ modules does not support unprivileged operation.\n");
+            ParseError("Cannot drop privileges - "
+                "at least one of the configured DAQ modules does not support unprivileged operation.\n");
             return false;
         }
-        if (!SetUidGid(SnortConfig::get_uid(), SnortConfig::get_gid()))
+        if (!SetUidGid(sc->get_uid(), sc->get_gid()))
             return false;
     }
 
@@ -283,7 +285,7 @@ void Snort::do_pidfile()
 {
     static bool pid_file_created = false;
 
-    if (SnortConfig::create_pid_file() && !pid_file_created)
+    if (SnortConfig::get_conf()->create_pid_file() && !pid_file_created)
     {
         CreatePidFile(snort_main_thread_pid);
         pid_file_created = true;
@@ -308,13 +310,15 @@ void Snort::term()
     if ( already_exiting )
         return;
 
+    const SnortConfig* sc = SnortConfig::get_conf();
+
     already_exiting = true;
     initializing = false;  // just in case we cut out early
 
     memory::MemoryCap::print();
 
     term_signals();
-    IpsManager::global_term(SnortConfig::get_conf());
+    IpsManager::global_term(sc);
     HostAttributes::cleanup();
 
 #ifdef PIGLET
@@ -325,14 +329,14 @@ void Snort::term()
     ClosePidFile();
 
     /* remove pid file */
-    if ( !SnortConfig::get_conf()->pid_filename.empty() )
+    if ( !sc->pid_filename.empty() )
     {
-        int ret = unlink(SnortConfig::get_conf()->pid_filename.c_str());
+        int ret = unlink(sc->pid_filename.c_str());
 
         if (ret != 0)
         {
             ErrorMessage("Could not remove pid file %s: %s\n",
-                SnortConfig::get_conf()->pid_filename.c_str(), get_error(errno));
+                sc->pid_filename.c_str(), get_error(errno));
         }
     }
 
@@ -347,20 +351,12 @@ void Snort::term()
     TraceApi::thread_term();
 
     /* free allocated memory */
-    if (SnortConfig::get_conf() == snort_cmd_line_conf)
-    {
-        delete snort_cmd_line_conf;
-        snort_cmd_line_conf = nullptr;
-        SnortConfig::set_conf(nullptr);
-    }
-    else
-    {
-        delete snort_cmd_line_conf;
-        snort_cmd_line_conf = nullptr;
+    if (sc != snort_cmd_line_conf)
+        delete sc;
 
-        delete SnortConfig::get_conf();
-        SnortConfig::set_conf(nullptr);
-    }
+    delete snort_cmd_line_conf;
+    snort_cmd_line_conf = nullptr;
+    SnortConfig::set_conf(nullptr);
 
     CleanupProtoNames();
     HighAvailabilityManager::term();
@@ -402,15 +398,16 @@ void Snort::setup(int argc, char* argv[])
     OpenLogger();
 
     init(argc, argv);
+    const SnortConfig* sc = SnortConfig::get_conf();
 
-    if ( SnortConfig::daemon_mode() )
+    if ( sc->daemon_mode() )
         daemonize();
 
     // this must follow daemonization
     snort_main_thread_pid = gettid();
 
     /* Change groups */
-    InitGroups(SnortConfig::get_uid(), SnortConfig::get_gid());
+    InitGroups(sc->get_uid(), sc->get_gid());
 
     set_quick_exit(false);
 
@@ -428,7 +425,7 @@ void Snort::cleanup()
     SFDAQ::term();
     FileService::close();
 
-    if ( !SnortConfig::test_mode() )  // FIXIT-M ideally the check is in one place
+    if ( !SnortConfig::get_conf()->test_mode() )  // FIXIT-M ideally the check is in one place
         PrintStatistics();
 
     CloseLogger();
@@ -482,12 +479,9 @@ SnortConfig* Snort::get_reload_config(const char* fname, const char* plugin_path
         return nullptr;
     }
 
-    if ( SnortConfig::log_verbose() )
+    if ( sc->log_verbose() )
         InspectorManager::print_config(sc);
 
-    if ((sc->file_mask != 0) && (sc->file_mask != SnortConfig::get_conf()->file_mask))
-        umask(sc->file_mask);
-
     // FIXIT-L is this still needed?
     /* Transfer any user defined rule type outputs to the new rule list */
     {
@@ -527,7 +521,8 @@ SnortConfig* Snort::get_reload_config(const char* fname, const char* plugin_path
     return sc;
 }
 
-SnortConfig* Snort::get_updated_policy(SnortConfig* other_conf, const char* fname, const char* iname)
+SnortConfig* Snort::get_updated_policy(
+    SnortConfig* other_conf, const char* fname, const char* iname)
 {
     reloading = true;
     reset_parse_errors();
index fb86664e6c67f2fb578e937d97cfb03925e47a3e..876c1b90d91f767f4c3b4c8bb17644c7ae0d2d0d 100644 (file)
@@ -83,8 +83,7 @@ using namespace snort;
 #define OUTPUT_U2   "unified2"
 #define OUTPUT_FAST "alert_fast"
 
-SnortConfig* parser_conf = nullptr;
-THREAD_LOCAL SnortConfig* snort_conf = nullptr;
+static THREAD_LOCAL const SnortConfig* snort_conf = nullptr;
 
 uint32_t SnortConfig::warning_flags = 0;
 
@@ -94,20 +93,20 @@ static std::vector<ScratchAllocator*> scratch_handlers;
 // private implementation
 //-------------------------------------------------------------------------
 
-static PolicyMode init_policy_mode(PolicyMode mode)
+static PolicyMode init_policy_mode(const SnortConfig* sc, PolicyMode mode)
 {
     switch ( mode )
     {
     case POLICY_MODE__PASSIVE:
-        if ( SnortConfig::adaptor_inline_test_mode() )
+        if ( sc->adaptor_inline_test_mode() )
             return POLICY_MODE__INLINE_TEST;
         break;
 
     case POLICY_MODE__INLINE:
-        if ( SnortConfig::adaptor_inline_test_mode() )
+        if ( sc->adaptor_inline_test_mode() )
             return POLICY_MODE__INLINE_TEST;
 
-        else if (!SnortConfig::adaptor_inline_mode())
+        else if (!sc->adaptor_inline_mode())
         {
             ParseWarning(WARN_DAQ, "adapter is in passive mode; switching policy mode to tap.");
             return POLICY_MODE__PASSIVE;
@@ -118,7 +117,7 @@ static PolicyMode init_policy_mode(PolicyMode mode)
         break;
 
     case POLICY_MODE__MAX:
-        if ( SnortConfig::adaptor_inline_mode() )
+        if ( sc->adaptor_inline_mode() )
             return POLICY_MODE__INLINE;
         else
             return POLICY_MODE__PASSIVE;
@@ -135,13 +134,13 @@ static void init_policies(SnortConfig* sc)
     for ( unsigned idx = 0; idx <  sc->policy_map->ips_policy_count(); ++idx )
     {
         ips_policy = sc->policy_map->get_ips_policy(idx);
-        ips_policy->policy_mode = init_policy_mode(ips_policy->policy_mode);
+        ips_policy->policy_mode = init_policy_mode(sc, ips_policy->policy_mode);
     }
 
     for ( unsigned idx = 0; idx < sc->policy_map->inspection_policy_count(); ++idx )
     {
         inspection_policy = sc->policy_map->get_inspection_policy(idx);
-        inspection_policy->policy_mode = init_policy_mode(inspection_policy->policy_mode);
+        inspection_policy->policy_mode = init_policy_mode(sc, inspection_policy->policy_mode);
     }
 }
 
@@ -184,10 +183,6 @@ void SnortConfig::init(const SnortConfig* const other_conf, ProtocolReference* p
         clone(other_conf);
         policy_map = new PolicyMap(other_conf->policy_map);
     }
-
-    set_inspection_policy(policy_map->get_inspection_policy());
-    set_ips_policy(policy_map->get_ips_policy());
-    set_network_policy(policy_map->get_network_policy());
 }
 
 //-------------------------------------------------------------------------
@@ -464,47 +459,48 @@ void SnortConfig::merge(SnortConfig* cmd_line)
     trace_config->merge_cmd_line(cmd_line->trace_config);
 }
 
-bool SnortConfig::verify()
+bool SnortConfig::verify() const
 {
     bool config_ok = false;
+    const SnortConfig* sc = get_conf();
 
-    if (get_conf()->asn1_mem != asn1_mem)
+    if ( sc->asn1_mem != asn1_mem )
         ReloadError("Changing detection.asn1_mem requires a restart.\n");
 
-    else if ( get_conf()->bpf_filter != bpf_filter )
+    else if ( sc->bpf_filter != bpf_filter )
         ReloadError("Changing packets.bfp_filter requires a restart.\n");
 
-    else if ( get_conf()->respond_attempts != respond_attempts )
+    else if ( sc->respond_attempts != respond_attempts )
         ReloadError("Changing active.attempts requires a restart.\n");
 
-    else if (  get_conf()->respond_device != respond_device )
+    else if (  sc->respond_device != respond_device )
         ReloadError("Changing active.device requires a restart.\n");
 
-    else if (get_conf()->chroot_dir != chroot_dir)
+    else if (sc->chroot_dir != chroot_dir)
         ReloadError("Changing process.chroot requires a restart.\n");
 
-    else if ((get_conf()->run_flags & RUN_FLAG__DAEMON) != (run_flags & RUN_FLAG__DAEMON))
+    else if ((sc->run_flags & RUN_FLAG__DAEMON) != (run_flags & RUN_FLAG__DAEMON))
         ReloadError("Changing process.daemon requires a restart.\n");
 
-    else if (get_conf()->orig_log_dir != orig_log_dir)
+    else if (sc->orig_log_dir != orig_log_dir)
         ReloadError("Changing output.logdir requires a restart.\n");
 
-    else if (get_conf()->group_id != group_id)
+    else if (sc->group_id != group_id)
         ReloadError("Changing process.setgid requires a restart.\n");
 
-    else if (get_conf()->user_id != user_id)
+    else if (sc->user_id != user_id)
         ReloadError("Changing process.setuid requires a restart.\n");
 
-    else if (get_conf()->daq_config->get_mru_size() != daq_config->get_mru_size())
+    else if (sc->daq_config->get_mru_size() != daq_config->get_mru_size())
         ReloadError("Changing daq.snaplen requires a restart.\n");
 
-    else if (get_conf()->threshold_config->memcap != threshold_config->memcap)
+    else if (sc->threshold_config->memcap != threshold_config->memcap)
         ReloadError("Changing alerts.event_filter_memcap requires a restart.\n");
 
-    else  if (get_conf()->rate_filter_config->memcap != rate_filter_config->memcap)
+    else  if (sc->rate_filter_config->memcap != rate_filter_config->memcap)
         ReloadError("Changing alerts.rate_filter_memcap requires a restart.\n");
 
-    else if (get_conf()->detection_filter_config->memcap != detection_filter_config->memcap)
+    else if (sc->detection_filter_config->memcap != detection_filter_config->memcap)
         ReloadError("Changing alerts.detection_filter_memcap requires a restart.\n");
 
     else
@@ -924,12 +920,28 @@ void SnortConfig::enable_syslog()
     syslog_configured = true;
 }
 
-bool SnortConfig::tunnel_bypass_enabled(uint16_t proto)
+bool SnortConfig::get_default_rule_state() const
 {
-    return (!((get_conf()->tunnel_mask & proto) or SFDAQ::get_tunnel_bypass(proto)));
+    switch ( get_ips_policy()->default_rule_state )
+    {
+    case IpsPolicy::INHERIT_ENABLE:
+        return global_default_rule_state;
+
+    case IpsPolicy::ENABLED:
+        return true;
+
+    case IpsPolicy::DISABLED:
+        return false;
+    }
+    return true;
 }
 
-SO_PUBLIC int SnortConfig::request_scratch(ScratchAllocator* s)
+bool SnortConfig::tunnel_bypass_enabled(uint16_t proto) const
+{
+    return !((tunnel_mask & proto) or SFDAQ::get_tunnel_bypass(proto));
+}
+
+int SnortConfig::request_scratch(ScratchAllocator* s)
 {
     scratch_handlers.emplace_back(s);
 
@@ -938,22 +950,19 @@ SO_PUBLIC int SnortConfig::request_scratch(ScratchAllocator* s)
     return scratch_handlers.size() - 1;
 }
 
-SO_PUBLIC void SnortConfig::release_scratch(int id)
+void SnortConfig::release_scratch(int id)
 {
     assert((unsigned)id < scratch_handlers.size());
     scratch_handlers[id] = nullptr;
 }
 
-SO_PUBLIC SnortConfig* SnortConfig::get_parser_conf()
-{ return parser_conf; }
-
-void SnortConfig::set_parser_conf(SnortConfig* sc)
-{ parser_conf = sc; }
+SnortConfig* SnortConfig::get_main_conf()
+{ return const_cast<SnortConfig*>(snort_conf); }
 
-SO_PUBLIC SnortConfig* SnortConfig::get_conf()
+const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
-void SnortConfig::set_conf(SnortConfig* sc)
+void SnortConfig::set_conf(const SnortConfig* sc)
 {
     snort_conf = sc;
 
index f58c5d72ab9093db6e657b3947a0f817a36529e0..5faf5edefd21df12b0f25f6972c68bd036b07227 100644 (file)
@@ -195,7 +195,7 @@ public:
 
     void setup();
     void post_setup();
-    bool verify();
+    bool verify() const;
 
     void merge(SnortConfig*);
     void clone(const SnortConfig* const);
@@ -474,250 +474,193 @@ public:
     void set_verbose(bool);
 
     //------------------------------------------------------
-    // Static convenience accessor methods
+    // accessor methods
 
-    static long int get_mpls_stack_depth()
-    { return get_conf()->mpls_stack_depth; }
+    long int get_mpls_stack_depth() const
+    { return mpls_stack_depth; }
 
-    static long int get_mpls_payload_type()
-    { return get_conf()->mpls_payload_type; }
+    long int get_mpls_payload_type() const
+    { return mpls_payload_type; }
 
-    static bool mpls_overlapping_ip()
-    { return get_conf()->run_flags & RUN_FLAG__MPLS_OVERLAPPING_IP; }
+    bool mpls_overlapping_ip() const
+    { return run_flags & RUN_FLAG__MPLS_OVERLAPPING_IP; }
 
-    static bool mpls_multicast()
-    { return get_conf()->run_flags & RUN_FLAG__MPLS_MULTICAST; }
+    bool mpls_multicast() const
+    { return run_flags & RUN_FLAG__MPLS_MULTICAST; }
 
-    static bool esp_decoding()
-    { return get_conf()->enable_esp; }
+    bool esp_decoding() const
+    { return enable_esp; }
 
-    static bool is_address_anomaly_check_enabled()
-    { return get_conf()->address_anomaly_check_enabled; }
+    bool is_address_anomaly_check_enabled() const
+    { return address_anomaly_check_enabled; }
 
     // mode related
-    static bool dump_msg_map()
-    { return get_conf()->run_flags & RUN_FLAG__DUMP_MSG_MAP; }
+    bool dump_msg_map() const
+    { return run_flags & RUN_FLAG__DUMP_MSG_MAP; }
 
-    static bool dump_rule_meta()
-    { return get_conf()->run_flags & RUN_FLAG__DUMP_RULE_META; }
+    bool dump_rule_meta() const
+    { return run_flags & RUN_FLAG__DUMP_RULE_META; }
 
-    static bool dump_rule_state()
-    { return get_conf()->run_flags & RUN_FLAG__DUMP_RULE_STATE; }
+    bool dump_rule_state() const
+    { return run_flags & RUN_FLAG__DUMP_RULE_STATE; }
 
-    static bool dump_rule_deps()
-    { return get_conf()->run_flags & RUN_FLAG__DUMP_RULE_DEPS; }
+    bool dump_rule_deps() const
+    { return run_flags & RUN_FLAG__DUMP_RULE_DEPS; }
 
-    static bool dump_rule_info()
-    {
-        const SnortConfig* sc = get_conf();
-        return sc->dump_msg_map() or sc->dump_rule_meta() or
-            sc->dump_rule_deps() or sc->dump_rule_state();
-    }
+    bool dump_rule_info() const
+    { return dump_msg_map() or dump_rule_meta() or dump_rule_deps() or dump_rule_state(); }
 
-    static bool test_mode()
-    { return get_conf()->run_flags & RUN_FLAG__TEST; }
+    bool test_mode() const
+    { return run_flags & RUN_FLAG__TEST; }
 
-    static bool mem_check()
-    { return get_conf()->run_flags & RUN_FLAG__MEM_CHECK; }
+    bool mem_check() const
+    { return run_flags & RUN_FLAG__MEM_CHECK; }
 
-    static bool daemon_mode()
-    { return get_conf()->run_flags & RUN_FLAG__DAEMON; }
+    bool daemon_mode() const
+    { return run_flags & RUN_FLAG__DAEMON; }
 
-    static bool read_mode()
-    { return get_conf()->run_flags & RUN_FLAG__READ; }
+    bool read_mode() const
+    { return run_flags & RUN_FLAG__READ; }
 
-    static bool inline_mode()
-    { return snort::get_ips_policy()->policy_mode == POLICY_MODE__INLINE; }
+    bool inline_mode() const
+    { return get_ips_policy()->policy_mode == POLICY_MODE__INLINE; }
 
-    static bool inline_test_mode()
-    { return snort::get_ips_policy()->policy_mode == POLICY_MODE__INLINE_TEST; }
+    bool inline_test_mode() const
+    { return get_ips_policy()->policy_mode == POLICY_MODE__INLINE_TEST; }
 
-    static bool show_file_codes()
-    { return get_conf()->run_flags & RUN_FLAG__SHOW_FILE_CODES; }
+    bool show_file_codes() const
+    { return run_flags & RUN_FLAG__SHOW_FILE_CODES; }
 
-    static bool adaptor_inline_mode()
-    { return get_conf()->run_flags & RUN_FLAG__INLINE; }
+    bool adaptor_inline_mode() const
+    { return run_flags & RUN_FLAG__INLINE; }
 
-    static bool adaptor_inline_test_mode()
-    { return get_conf()->run_flags & RUN_FLAG__INLINE_TEST; }
+    bool adaptor_inline_test_mode() const
+    { return run_flags & RUN_FLAG__INLINE_TEST; }
 
     // logging stuff
-    static bool log_syslog()
-    { return get_conf()->logging_flags & LOGGING_FLAG__SYSLOG; }
+    bool log_syslog() const
+    { return logging_flags & LOGGING_FLAG__SYSLOG; }
 
-    static bool log_verbose()
-    { return get_conf()->logging_flags & LOGGING_FLAG__VERBOSE; }
+    bool log_verbose() const
+    { return logging_flags & LOGGING_FLAG__VERBOSE; }
 
-    static bool log_quiet()
-    { return get_conf()->logging_flags & LOGGING_FLAG__QUIET; }
+    bool log_quiet() const
+    { return logging_flags & LOGGING_FLAG__QUIET; }
 
     // event stuff
-    static uint32_t get_event_log_id()
-    { return get_conf()->event_log_id; }
+    uint32_t get_event_log_id() const
+    { return event_log_id; }
 
-    static bool process_all_events()
-    { return get_conf()->event_queue_config->process_all_events; }
+    bool process_all_events() const
+    { return event_queue_config->process_all_events; }
 
-    static int get_eval_index(Actions::Type type)
-    { return get_conf()->evalOrder[type]; }
-
-    static bool get_default_rule_state()
-    {
-        switch ( get_ips_policy()->default_rule_state )
-        {
-            case IpsPolicy::INHERIT_ENABLE:
-                return get_conf()->global_default_rule_state;
-
-            case IpsPolicy::ENABLED:
-                return true;
-
-            case IpsPolicy::DISABLED:
-                return false;
-        }
-        return true;
-    }
-
-    SO_PUBLIC static bool tunnel_bypass_enabled(uint16_t proto);
-
-    // checksum stuff
-    static bool checksum_drop(uint16_t codec_cksum_err_flag)
-    { return snort::get_network_policy()->checksum_drop & codec_cksum_err_flag; }
-
-    static bool ip_checksums()
-    { return snort::get_network_policy()->checksum_eval & CHECKSUM_FLAG__IP; }
-
-    static bool ip_checksum_drops()
-    { return snort::get_network_policy()->checksum_drop & CHECKSUM_FLAG__IP; }
-
-    static bool udp_checksums()
-    { return snort::get_network_policy()->checksum_eval & CHECKSUM_FLAG__UDP; }
-
-    static bool udp_checksum_drops()
-    { return snort::get_network_policy()->checksum_drop & CHECKSUM_FLAG__UDP; }
-
-    static bool tcp_checksums()
-    { return snort::get_network_policy()->checksum_eval & CHECKSUM_FLAG__TCP; }
-
-    static bool tcp_checksum_drops()
-    { return snort::get_network_policy()->checksum_drop & CHECKSUM_FLAG__TCP; }
-
-    static bool icmp_checksums()
-    { return snort::get_network_policy()->checksum_eval & CHECKSUM_FLAG__ICMP; }
-
-    static bool icmp_checksum_drops()
-    { return snort::get_network_policy()->checksum_drop & CHECKSUM_FLAG__ICMP; }
+    int get_eval_index(Actions::Type type) const
+    { return evalOrder[type]; }
 
     // output stuff
-    static bool output_include_year()
-    { return get_conf()->output_flags & OUTPUT_FLAG__INCLUDE_YEAR; }
+    bool output_include_year() const
+    { return output_flags & OUTPUT_FLAG__INCLUDE_YEAR; }
 
-    static bool output_use_utc()
-    { return get_conf()->output_flags & OUTPUT_FLAG__USE_UTC; }
+    bool output_use_utc() const
+    { return output_flags & OUTPUT_FLAG__USE_UTC; }
 
-    static bool output_datalink()
-    { return get_conf()->output_flags & OUTPUT_FLAG__SHOW_DATA_LINK; }
+    bool output_datalink() const
+    { return output_flags & OUTPUT_FLAG__SHOW_DATA_LINK; }
 
-    static bool verbose_byte_dump()
-    { return get_conf()->output_flags & OUTPUT_FLAG__VERBOSE_DUMP; }
+    bool verbose_byte_dump() const
+    { return output_flags & OUTPUT_FLAG__VERBOSE_DUMP; }
 
-    static bool obfuscate()
-    { return get_conf()->output_flags & OUTPUT_FLAG__OBFUSCATE; }
+    bool obfuscate() const
+    { return output_flags & OUTPUT_FLAG__OBFUSCATE; }
 
-    static bool output_app_data()
-    { return get_conf()->output_flags & OUTPUT_FLAG__APP_DATA; }
+    bool output_app_data() const
+    { return output_flags & OUTPUT_FLAG__APP_DATA; }
 
-    static bool output_char_data()
-    { return get_conf()->output_flags & OUTPUT_FLAG__CHAR_DATA; }
+    bool output_char_data() const
+    { return output_flags & OUTPUT_FLAG__CHAR_DATA; }
 
-    static bool alert_interface()
-    { return get_conf()->output_flags & OUTPUT_FLAG__ALERT_IFACE; }
+    bool alert_interface() const
+    { return output_flags & OUTPUT_FLAG__ALERT_IFACE; }
 
-    static bool output_no_timestamp()
-    { return get_conf()->output_flags & OUTPUT_FLAG__NO_TIMESTAMP; }
+    bool output_no_timestamp() const
+    { return output_flags & OUTPUT_FLAG__NO_TIMESTAMP; }
 
-    static bool line_buffered_logging()
-    { return get_conf()->output_flags & OUTPUT_FLAG__LINE_BUFFER; }
+    bool line_buffered_logging() const
+    { return output_flags & OUTPUT_FLAG__LINE_BUFFER; }
 
-    static bool output_wide_hex()
-    { return get_conf()->output_flags & OUTPUT_FLAG__WIDE_HEX; }
+    bool output_wide_hex() const
+    { return output_flags & OUTPUT_FLAG__WIDE_HEX; }
 
-    static bool alert_refs()
-    { return get_conf()->output_flags & OUTPUT_FLAG__ALERT_REFS; }
+    bool alert_refs() const
+    { return output_flags & OUTPUT_FLAG__ALERT_REFS; }
 
     // run flags
-    static bool no_lock_pid_file()
-    { return get_conf()->run_flags & RUN_FLAG__NO_LOCK_PID_FILE; }
+    bool no_lock_pid_file() const
+    { return run_flags & RUN_FLAG__NO_LOCK_PID_FILE; }
 
-    static bool create_pid_file()
-    { return get_conf()->run_flags & RUN_FLAG__CREATE_PID_FILE; }
+    bool create_pid_file() const
+    { return run_flags & RUN_FLAG__CREATE_PID_FILE; }
 
-    static bool pcap_show()
-    { return get_conf()->run_flags & RUN_FLAG__PCAP_SHOW; }
+    bool pcap_show() const
+    { return run_flags & RUN_FLAG__PCAP_SHOW; }
 
-    static bool treat_drop_as_alert()
-    { return get_conf()->run_flags & RUN_FLAG__TREAT_DROP_AS_ALERT; }
+    bool treat_drop_as_alert() const
+    { return run_flags & RUN_FLAG__TREAT_DROP_AS_ALERT; }
 
-    static bool treat_drop_as_ignore()
-    { return get_conf()->run_flags & RUN_FLAG__TREAT_DROP_AS_IGNORE; }
+    bool treat_drop_as_ignore() const
+    { return run_flags & RUN_FLAG__TREAT_DROP_AS_IGNORE; }
 
-    static bool alert_before_pass()
-    { return get_conf()->run_flags & RUN_FLAG__ALERT_BEFORE_PASS; }
+    bool alert_before_pass() const
+    { return run_flags & RUN_FLAG__ALERT_BEFORE_PASS; }
 
-    static bool no_pcre()
-    { return get_conf()->run_flags & RUN_FLAG__NO_PCRE; }
+    bool no_pcre() const
+    { return run_flags & RUN_FLAG__NO_PCRE; }
 
-    static bool conf_error_out()
-    { return get_conf()->run_flags & RUN_FLAG__CONF_ERROR_OUT; }
+    bool conf_error_out() const
+    { return run_flags & RUN_FLAG__CONF_ERROR_OUT; }
 
-    static bool assure_established()
-    { return get_conf()->run_flags & RUN_FLAG__ASSURE_EST; }
-
-    // FIXIT-L snort_conf needed for static hash before initialized
-    static bool static_hash()
-    { return get_conf() && get_conf()->run_flags & RUN_FLAG__STATIC_HASH; }
+    bool assure_established() const
+    { return run_flags & RUN_FLAG__ASSURE_EST; }
 
     // other stuff
-    static uint8_t min_ttl()
-    { return snort::get_network_policy()->min_ttl; }
+    uint8_t min_ttl() const
+    { return get_network_policy()->min_ttl; }
 
-    static uint8_t new_ttl()
-    { return snort::get_network_policy()->new_ttl; }
+    uint8_t new_ttl() const
+    { return get_network_policy()->new_ttl; }
 
-    static long int get_pcre_match_limit()
-    { return get_conf()->pcre_match_limit; }
+    long int get_pcre_match_limit() const
+    { return pcre_match_limit; }
 
-    static long int get_pcre_match_limit_recursion()
-    { return get_conf()->pcre_match_limit_recursion; }
+    long int get_pcre_match_limit_recursion() const
+    { return pcre_match_limit_recursion; }
 
-    static const ProfilerConfig* get_profiler()
-    { return get_conf()->profiler; }
+    const ProfilerConfig* get_profiler() const
+    { return profiler; }
 
-    static long int get_tagged_packet_limit()
-    { return get_conf()->tagged_packet_limit; }
+    long int get_tagged_packet_limit() const
+    { return tagged_packet_limit; }
 
-    static uint32_t get_max_attribute_hosts()
-    { return get_conf()->max_attribute_hosts; }
+    uint32_t get_max_attribute_hosts() const
+    { return max_attribute_hosts; }
 
-    static uint32_t get_max_services_per_host()
-    { return get_conf()->max_attribute_services_per_host; }
+    uint32_t get_max_services_per_host() const
+    { return max_attribute_services_per_host; }
 
-    static int get_uid()
-    { return get_conf()->user_id; }
+    int get_uid() const
+    { return user_id; }
 
-    static int get_gid()
-    { return get_conf()->group_id; }
+    int get_gid() const
+    { return group_id; }
 
-    static bool get_vlan_agnostic()
-    { return get_conf()->vlan_agnostic; }
+    bool get_vlan_agnostic() const
+    { return vlan_agnostic; }
 
-    static bool address_space_agnostic()
-    { return get_conf()->addressspace_agnostic; }
+    bool address_space_agnostic() const
+    { return addressspace_agnostic; }
 
-    static bool change_privileges()
-    {
-        return get_conf()->user_id != -1 || get_conf()->group_id != -1 ||
-            !get_conf()->chroot_dir.empty();
-    }
+    bool change_privileges() const
+    { return user_id != -1 || group_id != -1 || !chroot_dir.empty(); }
 
     bool track_on_syn() const
     { return (run_flags & RUN_FLAG__TRACK_ON_SYN) != 0; }
@@ -731,26 +674,36 @@ public:
     void set_run_flags(RunFlag flag)
     { run_flags |= flag; }
 
+    const std::list<ReloadResourceTuner*>& get_reload_resource_tuners() const
+    { return reload_tuners; }
+
+    void clear_reload_resource_tuner_list()
+    { reload_tuners.clear(); }
+
+    bool get_default_rule_state() const;
+
+    SO_PUBLIC bool tunnel_bypass_enabled(uint16_t proto) const;
+
+    // FIXIT-L snort_conf needed for static hash before initialized
+    static bool static_hash()
+    { return get_conf() && get_conf()->run_flags & RUN_FLAG__STATIC_HASH; }
+
     // This requests an entry in the scratch space vector and calls setup /
     // cleanup as appropriate
     SO_PUBLIC static int request_scratch(ScratchAllocator*);
     SO_PUBLIC static void release_scratch(int);
 
-    // Use this to access current thread's conf from other units
-    static void set_conf(SnortConfig*);
-    static void set_parser_conf(SnortConfig*);
+    // runtime access to const config - especially for packet threads
+    // prefer access via packet->context->conf
+    SO_PUBLIC static const SnortConfig* get_conf();
 
-    SO_PUBLIC static SnortConfig* get_conf();
-    SO_PUBLIC static SnortConfig* get_parser_conf();  // main thread only!
+    // runtime access to mutable config - main thread only, and only special cases
+    SO_PUBLIC static SnortConfig* get_main_conf();
 
     SO_PUBLIC void register_reload_resource_tuner(ReloadResourceTuner& rrt)
     { reload_tuners.push_back(&rrt); }
 
-    const std::list<ReloadResourceTuner*>& get_reload_resource_tuners() const
-    { return reload_tuners; }
-
-    void clear_reload_resource_tuner_list()
-    { reload_tuners.clear(); }
+    static void set_conf(const SnortConfig*);
 };
 }
 
index 0bd66a70e7b3043f4e7fcaa6eca5ebec348cb5dd..cdbe3469bffad3bb0329d94f088822b0185148ee 100644 (file)
@@ -42,7 +42,7 @@ Swapper::Swapper(SnortConfig* s, HostAttributesTable* t)
     new_attribs = t;
 }
 
-Swapper::Swapper(SnortConfig* sold, SnortConfig* snew)
+Swapper::Swapper(const SnortConfig* sold, SnortConfig* snew)
 {
     old_conf = sold;
     new_conf = snew;
@@ -51,7 +51,9 @@ Swapper::Swapper(SnortConfig* sold, SnortConfig* snew)
     new_attribs = nullptr;
 }
 
-Swapper::Swapper(SnortConfig* sold, SnortConfig* snew, HostAttributesTable* told, HostAttributesTable* tnew)
+Swapper::Swapper(
+    const SnortConfig* sold, SnortConfig* snew,
+    HostAttributesTable* told, HostAttributesTable* tnew)
 {
     old_conf = sold;
     new_conf = snew;
index a91d98fa26018135196eeb81aae60956ce2c1f09..bc222d07c51cacce5d307ed8be6c721f2b7949a8 100644 (file)
@@ -34,8 +34,11 @@ class Swapper
 {
 public:
     Swapper(snort::SnortConfig*, HostAttributesTable*);
-    Swapper(snort::SnortConfig*, snort::SnortConfig*);
-    Swapper(snort::SnortConfig*, snort::SnortConfig*, HostAttributesTable*, HostAttributesTable*);
+    Swapper(const snort::SnortConfig* sold, snort::SnortConfig* snew);
+
+    Swapper(const snort::SnortConfig* sold, snort::SnortConfig* snew,
+        HostAttributesTable*, HostAttributesTable*);
+
     Swapper(HostAttributesTable*, HostAttributesTable*);
     ~Swapper();
 
@@ -46,7 +49,7 @@ public:
     static void set_reload_in_progress(bool rip) { reload_in_progress = rip; }
 
 private:
-    snort::SnortConfig* old_conf;
+    const snort::SnortConfig* old_conf;
     snort::SnortConfig* new_conf;
 
     HostAttributesTable* old_attribs;
index 37ae19cfb1b0280a5f5153719419a20d3e6b5a30..d4ff0f838f53946095cae03f399c3f5749f3e74c 100644 (file)
@@ -72,29 +72,30 @@ SThreadType get_thread_type()
 
 const char* get_instance_file(std::string& file, const char* name)
 {
+    const SnortConfig* sc = SnortConfig::get_conf();
+
     bool sep = false;
-    file = !SnortConfig::get_conf()->log_dir.empty() ?
-        SnortConfig::get_conf()->log_dir : "./";
+    file = !sc->log_dir.empty() ?  sc->log_dir : "./";
 
     if ( file.back() != '/' )
         file += '/';
 
-    if ( !SnortConfig::get_conf()->run_prefix.empty() )
+    if ( !sc->run_prefix.empty() )
     {
-        file += SnortConfig::get_conf()->run_prefix;
+        file += sc->run_prefix;
         sep = true;
     }
 
-    if ( (ThreadConfig::get_instance_max() > 1) || SnortConfig::get_conf()->id_zero )
+    if ( (ThreadConfig::get_instance_max() > 1) || sc->id_zero )
     {
         char id[8];
         snprintf(id, sizeof(id), "%u",
-            get_instance_id() + SnortConfig::get_conf()->id_offset);
+            get_instance_id() + sc->id_offset);
         file += id;
         sep = true;
     }
 
-    if ( SnortConfig::get_conf()->id_subdir )
+    if ( sc->id_subdir )
     {
         file += '/';
         struct stat s;
index 18ffc445cff6b0a392a00b96bb47fa3601acad63..c85d87cb9c3a8dbae5caf519ada1707d2797f656 100644 (file)
@@ -188,7 +188,7 @@ static ActionClass& get_thread_local_action_class(const ActionApi* api)
     return s_tl_actors->back();
 }
 
-void ActionManager::thread_init(SnortConfig* sc)
+void ActionManager::thread_init(const SnortConfig* sc)
 {
     // Initial build out of this thread's configured plugin registry
     s_tl_actors = new ACList;
@@ -201,7 +201,7 @@ void ActionManager::thread_init(SnortConfig* sc)
     }
 }
 
-void ActionManager::thread_reinit(SnortConfig* sc)
+void ActionManager::thread_reinit(const SnortConfig* sc)
 {
     // Update this thread's configured plugin registry with any newly configured inspectors
     for ( auto& p : sc->ips_actions_config->clist )
@@ -217,7 +217,7 @@ void ActionManager::thread_reinit(SnortConfig* sc)
     Active::thread_init(sc);
 }
 
-void ActionManager::thread_term(SnortConfig*)
+void ActionManager::thread_term()
 {
     if (s_tl_actors)
     {
index 21ebce884977e289bc06a99126e379011521a085..bfb95fad5b90591283d1dd61027670c4883d13d3 100644 (file)
@@ -68,9 +68,9 @@ public:
 
     static void instantiate(const snort::ActionApi*, snort::Module*, snort::SnortConfig*);
 
-    static void thread_init(snort::SnortConfig*);
-    static void thread_reinit(snort::SnortConfig*);
-    static void thread_term(snort::SnortConfig*);
+    static void thread_init(const snort::SnortConfig*);
+    static void thread_reinit(const snort::SnortConfig*);
+    static void thread_term();
 
 #ifdef PIGLET
     static IpsActionWrapper* instantiate(const char*, snort::Module*);
index 44926a09d82db649fb8830331fc9449ad72e17ef..c031114429407912b97572cfb3b90da3c67efe57 100644 (file)
@@ -190,7 +190,7 @@ void CodecManager::instantiate()
         instantiate(wrap, nullptr, nullptr);
 }
 
-void CodecManager::thread_init(SnortConfig* sc)
+void CodecManager::thread_init(const SnortConfig* sc)
 {
     max_layers = sc->num_layers;
 
index d62871d42d9cabf10df796e244b017a4230804fb..17a16452a62b47c92cb4f21022b6364e549337f4 100644 (file)
@@ -81,7 +81,7 @@ public:
     // destroy all global codec related information
     static void release_plugins();
     // initialize the current threads DLT and Packet struct
-    static void thread_init(snort::SnortConfig*);
+    static void thread_init(const snort::SnortConfig*);
     // destroy thread_local data
     static void thread_term();
     // print all of the codec plugins
index 0aee3cdd4d4fdccf5aace063eb9e5b465e0308db..cea97932df429245a99635555f7230731cdf76e7 100644 (file)
@@ -156,7 +156,7 @@ void EventManager::copy_outputs(OutputSet* dst, OutputSet* src)
 // configuration
 
 void EventManager::instantiate(
-    Output* p, Module* mod, SnortConfig* sc)
+    Output* p, Module* mod, SnortConfig*)
 {
     bool enabled = false;
 
@@ -169,7 +169,7 @@ void EventManager::instantiate(
     if ( !enabled )
         return;
 
-    p->handler = p->api->ctor(sc, mod);
+    p->handler = p->api->ctor(mod);
     assert(p->handler);
 
     p->handler->set_api(p->api);
@@ -271,13 +271,13 @@ static const LogApi* find_api(const char* name)
     return nullptr;
 }
 
-LoggerWrapper* EventManager::instantiate(const char* name, Module* m, SnortConfig* sc)
+LoggerWrapper* EventManager::instantiate(const char* name, Module* m, SnortConfig*)
 {
     auto api = find_api(name);
     if ( !api || !api->ctor )
         return nullptr;
 
-    auto p = api->ctor(sc, m);
+    auto p = api->ctor(m);
     if ( !p )
         return nullptr;
 
index 45f5c51aa9a5707cf10f2bb2fc4db3315b02a3eb..cbf257edecd774596c61370245904e450a98993c 100644 (file)
@@ -37,6 +37,7 @@
 #include "main/snort.h"
 #include "main/snort_config.h"
 #include "main/thread_config.h"
+#include "search_engines/search_tool.h"
 #include "protocols/packet.h"
 #include "target_based/snort_protocols.h"
 
@@ -556,14 +557,16 @@ bool InspectorManager::inspector_exists_in_any_policy(const char* key, SnortConf
 }
 
 // FIXIT-P cache get_inspector() returns or provide indexed lookup
-Inspector* InspectorManager::get_inspector(const char* key, bool dflt_only, SnortConfig* sc)
+Inspector* InspectorManager::get_inspector(const char* key, bool dflt_only, const SnortConfig* sc)
 {
     InspectionPolicy* pi;
 
-    if (dflt_only && (sc != nullptr))
+    if ( dflt_only )
+    {
+        if ( !sc )
+            sc = SnortConfig::get_conf();
         pi = get_default_inspection_policy(sc);
-    else if (dflt_only)
-        pi = get_default_inspection_policy(SnortConfig::get_conf());
+    }
     else
         pi = get_inspection_policy();
 
@@ -685,7 +688,7 @@ static PHGlobal& get_thread_local_plugin(const InspectApi& api)
     return s_tl_handlers->back();
 }
 
-void InspectorManager::thread_init(SnortConfig* sc)
+void InspectorManager::thread_init(const SnortConfig* sc)
 {
     Inspector::slot = get_instance_id();
 
@@ -700,7 +703,7 @@ void InspectorManager::thread_init(SnortConfig* sc)
     }
 
     // pin->tinit() only called for default policy
-    set_default_policy();
+    set_default_policy(sc);
     InspectionPolicy* pi = get_inspection_policy();
 
     if ( pi && pi->framework_policy )
@@ -717,7 +720,7 @@ void InspectorManager::thread_init(SnortConfig* sc)
     }
 }
 
-void InspectorManager::thread_reinit(SnortConfig* sc)
+void InspectorManager::thread_reinit(const SnortConfig* sc)
 {
     // Update this thread's configured plugin registry with any newly configured inspectors
     for ( auto* p : sc->framework_config->clist )
@@ -749,14 +752,14 @@ void InspectorManager::thread_reinit(SnortConfig* sc)
     }
 }
 
-void InspectorManager::thread_stop(SnortConfig*)
+void InspectorManager::thread_stop(const SnortConfig* sc)
 {
     // If thread_init() was never called, we have nothing to do.
     if ( !s_tl_handlers )
         return;
 
     // pin->tterm() only called for default policy
-    set_default_policy();
+    set_default_policy(sc);
     InspectionPolicy* pi = get_inspection_policy();
 
     // FIXIT-RC Any inspectors that were once configured/instantiated but
@@ -777,7 +780,7 @@ void InspectorManager::thread_stop(SnortConfig*)
     }
 }
 
-void InspectorManager::thread_term(SnortConfig*)
+void InspectorManager::thread_term()
 {
     // If thread_init() was never called, we have nothing to do.
     if ( !s_tl_handlers )
@@ -969,6 +972,8 @@ bool InspectorManager::configure(SnortConfig* sc, bool cloned)
     }
     bool ok = true;
 
+    SearchTool::set_conf(sc);
+
     for ( unsigned idx = 0; idx < sc->policy_map->inspection_policy_count(); ++idx )
     {
         if ( cloned and idx )
@@ -981,6 +986,7 @@ bool InspectorManager::configure(SnortConfig* sc, bool cloned)
     }
 
     set_inspection_policy(sc);
+    SearchTool::set_conf(nullptr);
 
     return ok;
 }
@@ -1110,7 +1116,7 @@ void InspectorManager::execute(Packet* p)
     if ( p->disable_inspect )
         return;
 
-    SnortConfig* sc = SnortConfig::get_conf();
+    const SnortConfig* sc = p->context->conf;
     FrameworkPolicy* fp_dft = get_default_inspection_policy(sc)->framework_policy;
 
     if ( !p->flow )
@@ -1149,7 +1155,7 @@ void InspectorManager::execute(Packet* p)
 
 void InspectorManager::probe(Packet* p)
 {
-    InspectionPolicy* policy = SnortConfig::get_conf()->policy_map->get_inspection_policy(0);
+    InspectionPolicy* policy = p->context->conf->policy_map->get_inspection_policy(0);
     FrameworkPolicy* fp = policy->framework_policy;
     ::execute(p, fp->probe.vec, fp->probe.num);
 }
index e71850039b97e8fbd0cfc7b0397e4113f7bcf86b..ffd9bb46cd21f9ce241998c837d0e3525a5ba567 100644 (file)
@@ -56,12 +56,13 @@ public:
     static void instantiate(
         const InspectApi*, Module*, SnortConfig*, const char* name = nullptr);
 
-    static bool delete_inspector(SnortConfig* sc, const char* iname);
+    static bool delete_inspector(SnortConfig*, const char* iname);
     static void free_inspector(Inspector*);
     static InspectSsnFunc get_session(uint16_t proto);
 
-    SO_PUBLIC static Inspector* get_inspector(const char* key, bool dflt_only = false,
-        SnortConfig* sc = nullptr);
+    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 Binder* get_binder();
@@ -72,10 +73,11 @@ public:
     static bool configure(SnortConfig*, bool cloned = false);
     static void print_config(SnortConfig*);
 
-    static void thread_init(SnortConfig*);
-    static void thread_reinit(SnortConfig*);
-    static void thread_stop(SnortConfig*);
-    static void thread_term(SnortConfig*);
+    static void thread_init(const SnortConfig*);
+    static void thread_reinit(const SnortConfig*);
+
+    static void thread_stop(const SnortConfig*);
+    static void thread_term();
 
     static void release_policy(FrameworkPolicy*);
     static void dispatch_meta(FrameworkPolicy*, int type, const uint8_t* data);
index 321b9deaf346ddf397d968344b6b282e37222c01..494132d81e9454b4ce9eb46fac0086ce7ed4392f 100644 (file)
@@ -331,11 +331,11 @@ bool IpsManager::option_end(
 
 //-------------------------------------------------------------------------
 
-void IpsManager::global_init(SnortConfig*)
+void IpsManager::global_init(const SnortConfig*)
 {
 }
 
-void IpsManager::global_term(SnortConfig* sc)
+void IpsManager::global_term(const SnortConfig* sc)
 {
     for ( auto& p : s_options )
         if ( p.second->init && p.second->api->pterm )
@@ -354,18 +354,18 @@ void IpsManager::reset_options()
     IpsOption::set_buffer("pkt_data");
 }
 
-void IpsManager::setup_options()
+void IpsManager::setup_options(const SnortConfig* sc)
 {
     for ( auto& p : s_options )
         if ( p.second->init && p.second->api->tinit )
-            p.second->api->tinit(SnortConfig::get_conf());
+            p.second->api->tinit(sc);
 }
 
-void IpsManager::clear_options()
+void IpsManager::clear_options(const SnortConfig* sc)
 {
     for ( auto& p : s_options )
         if ( p.second->init && p.second->api->tterm )
-            p.second->api->tterm(SnortConfig::get_conf());
+            p.second->api->tterm(sc);
 }
 
 bool IpsManager::verify(SnortConfig* sc)
index 54a665c523b9f0c0cbabc818590ad6d6b2422ee2..f00ab25010bd599786fe0a7f3fe9ba327b6eea8c 100644 (file)
@@ -60,19 +60,25 @@ public:
     static void dump_plugins();
     static void release_plugins();
     static void instantiate(const snort::IpsApi*, snort::Module*, snort::SnortConfig*);
+
     static bool option_begin(snort::SnortConfig*, const char* key, SnortProtocolId);
     static bool option_set(
         snort::SnortConfig*, const char* key, const char* opt, const char* val);
     static bool option_end(
         snort::SnortConfig*, OptTreeNode*, SnortProtocolId, const char* key, snort::RuleOptType&);
+
     static void delete_option(snort::IpsOption*);
     static const char* get_option_keyword();
+
     SO_PUBLIC static const snort::IpsApi* get_option_api(const char* keyword);
-    static void global_init(snort::SnortConfig*);
-    static void global_term(snort::SnortConfig*);
+
+    static void global_init(const snort::SnortConfig*);
+    static void global_term(const snort::SnortConfig*);
+
     static void reset_options();
-    static void setup_options();
-    static void clear_options();
+    static void setup_options(const snort::SnortConfig*);
+    static void clear_options(const snort::SnortConfig*);
+
     static bool verify(snort::SnortConfig*);
 
 #ifdef PIGLET
index 85540579e8f965d74cdfb769092c01df23ecb0a2..93d63a800b25d27af705d7f397869cc3c4a29661 100644 (file)
@@ -1357,7 +1357,7 @@ void ModuleManager::load_rules(SnortConfig* sc)
     }
 }
 
-void ModuleManager::dump_stats(SnortConfig*, const char* skip, bool dynamic)
+void ModuleManager::dump_stats(const char* skip, bool dynamic)
 {
     auto mod_hooks = get_all_modhooks();
     mod_hooks.sort(comp_mods);
@@ -1375,7 +1375,7 @@ void ModuleManager::dump_stats(SnortConfig*, const char* skip, bool dynamic)
     }
 }
 
-void ModuleManager::accumulate(SnortConfig*)
+void ModuleManager::accumulate()
 {
     auto mod_hooks = get_all_modhooks();
 
index c522d92c47fa2ed49db43211a1e8530a2605bd91..5bf4657fdc5291c87d0871c69481c55bd552c70f 100644 (file)
@@ -83,9 +83,9 @@ public:
     static void reset_errors();
     static unsigned get_errors();
 
-    static void dump_stats(SnortConfig*, const char* skip = nullptr, bool dynamic = false);
+    static void dump_stats(const char* skip = nullptr, bool dynamic = false);
 
-    static void accumulate(SnortConfig*);
+    static void accumulate();
     static void accumulate_offload(const char* name);
     static void reset_stats(SnortConfig*);
 
index d9928dbfd9aabf9f20a74e26b3a656c1885aeb55..9cb739a643c9250a7777b724cbe7ee72835122a7 100644 (file)
@@ -89,7 +89,7 @@ const MpseApi* MpseManager::get_search_api(const char* name)
 }
 
 Mpse* MpseManager::get_search_engine(
-    SnortConfig* sc, const MpseApi* api, const MpseAgent* agent)
+    const SnortConfig* sc, const MpseApi* api, const MpseAgent* agent)
 {
     Module* mod = ModuleManager::get_module(api->base.name);
     Mpse* eng = api->ctor(sc, mod, agent);
@@ -97,31 +97,6 @@ Mpse* MpseManager::get_search_engine(
     return eng;
 }
 
-Mpse* MpseManager::get_search_engine(const char* type)
-{
-    SnortConfig* sc = SnortConfig::get_conf();
-
-    if ( !type and sc->fast_pattern_config )
-        type = sc->fast_pattern_config->get_search_method();
-
-    if ( !type )
-        type = "ac_bnfa";
-
-    const MpseApi* api = get_search_api(type);
-
-    if ( !api )
-        return nullptr;
-
-    Module* mod = ModuleManager::get_module(api->base.name);
-    Mpse* eng = api->ctor(nullptr, mod, nullptr);
-    eng->set_api(api);
-
-    if ( sc->fast_pattern_config and sc->fast_pattern_config->get_search_opt() )
-        eng->set_opt(1);
-
-    return eng;
-}
-
 void MpseManager::delete_search_engine(Mpse* eng)
 {
     const MpseApi* api = eng->get_api();
index 0a04cd2b8a47749cc7cf60a9567c15e2f29b533f..0e721ffbbe23b6e7fe0d42d24725f5b1b2710498 100644 (file)
@@ -67,9 +67,8 @@ public:
     static const snort::MpseApi* get_search_api(const char* type);
     static void delete_search_engine(snort::Mpse*);
 
-    static snort::Mpse* get_search_engine(const char*);
     static snort::Mpse* get_search_engine(
-        snort::SnortConfig* sc,const snort::MpseApi* api, const struct MpseAgent*);
+        const snort::SnortConfig* sc,const snort::MpseApi* api, const struct MpseAgent*);
 
     static void activate_search_engine(const snort::MpseApi*, snort::SnortConfig*);
     static void setup_search_engine(const snort::MpseApi*, snort::SnortConfig*);
index dfc954acee85469d082062dbfc999befd76baf80..9cbe0f35ab1630aea875383c131e0f06b77b1b63 100644 (file)
@@ -201,10 +201,12 @@ void MemoryCap::print()
     if ( !MemoryModule::is_active() )
         return;
 
-    if ( SnortConfig::log_verbose() or mem_stats.allocations )
+    bool verbose = SnortConfig::get_conf()->log_verbose();
+
+    if ( verbose or mem_stats.allocations )
         LogLabel("memory (heap)");
 
-    if ( SnortConfig::log_verbose() )
+    if ( verbose )
     {
         LogMessage("    thread cap: %zu\n", thread_cap);
         LogMessage("    thread preemptive threshold: %zu\n", preemptive_threshold);
index 1d681293b26a2b146285da1cf1b5023f32a8a873..71df6fc1106b06e61bb0ba5e55735b303f964afa 100644 (file)
@@ -127,7 +127,7 @@ bool AppIdInspector::configure(SnortConfig* sc)
     return true;
 }
 
-void AppIdInspector::show(SnortConfig*)
+void AppIdInspector::show(const SnortConfig*) const
 {
     config->show();
 }
index 0e1779b4b7e6a40080803c5edd742c2b8a2e20e8..3ea39a28f0244fd67d97005c290e70b8cc5fbe66 100644 (file)
@@ -42,7 +42,7 @@ public:
     ~AppIdInspector() override;
 
     bool configure(snort::SnortConfig*) override;
-    void show(snort::SnortConfig*) override;
+    void show(const snort::SnortConfig*) const override;
     void tinit() override;
     void tterm() override;
     void eval(snort::Packet*) override;
index ee874d50b04658e6a9b49f2f52489169341e61d5..855df582c7a99dd4feade697253b93c58ed5cf5a 100644 (file)
@@ -97,7 +97,7 @@ public:
     ~AppIdInspector() override = default;
     void eval(Packet*) override { }
     bool configure(snort::SnortConfig*) override { return true; }
-    void show(snort::SnortConfig*) override { }
+    void show(const SnortConfig*) const override { }
     void tinit() override { }
     void tterm() override { }
 };
index a6238b2776c68f4de988e1c095df0c9746451285..9b3fbd2fe7c65c1474688b26a0ea19cba1999e38 100644 (file)
@@ -670,13 +670,13 @@ bool ServiceDiscovery::do_service_discovery(AppIdSession& asd, Packet* p,
             }
         }
 
-        /* If the session appears to only have the client sending data then 
+        /* If the session appears to only have the client sending data then
            we must mark the service unknown to prevent pending forever. */
         if (asd.service_disco_state == APPID_DISCO_STATE_STATEFUL &&
             asd.service.get_id() == APP_ID_NONE && asd.is_svc_taking_too_much_time())
         {
                 asd.stop_service_inspection(p, direction);
-                asd.service.set_id(APP_ID_UNKNOWN, asd.ctxt.get_odp_ctxt());   
+                asd.service.set_id(APP_ID_UNKNOWN, asd.ctxt.get_odp_ctxt());
                 return isTpAppidDiscoveryDone;
         }
 
index f88e81a24f104c51bbdb2dc5f6f32fb64c7034ff..357359e7f9d03d2c85b50831cdbba73288d4bcd6 100644 (file)
@@ -25,6 +25,8 @@
 
 #include "service_ftp.h"
 
+#include "detection/ips_context.h"
+
 #include "appid_inspector.h"
 #include "app_info_table.h"
 #include "protocols/packet.h"
@@ -883,7 +885,7 @@ void FtpServiceDetector::create_expected_session(AppIdSession& asd, const Packet
     // FIXIT-M - Avoid thread locals
     static THREAD_LOCAL SnortProtocolId ftp_data_snort_protocol_id = UNKNOWN_PROTOCOL_ID;
     if(ftp_data_snort_protocol_id == UNKNOWN_PROTOCOL_ID)
-        ftp_data_snort_protocol_id = SnortConfig::get_conf()->proto_ref->find("ftp-data");
+        ftp_data_snort_protocol_id = pkt->context->conf->proto_ref->find("ftp-data");
 
     AppIdSession* fp = AppIdSession::create_future_session(pkt, cliIp, cliPort, srvIp, srvPort,
         protocol, ftp_data_snort_protocol_id, flags);
index 8f6b41c6d2e88d42d6724f19710c9ded4dd131af..e301ba252d061bfda8485f8ce6a7dbc5b1bf9e8e 100644 (file)
@@ -25,6 +25,8 @@
 
 #include "service_rexec.h"
 
+#include "detection/ips_context.h"
+
 #include "appid_debug.h"
 #include "appid_inspector.h"
 #include "app_info_table.h"
@@ -140,7 +142,7 @@ int RexecServiceDetector::validate(AppIdDiscoveryArgs& args)
     {
     case REXEC_STATE_PORT:
         if(rexec_snort_protocol_id == UNKNOWN_PROTOCOL_ID)
-            rexec_snort_protocol_id = SnortConfig::get_conf()->proto_ref->find("rexec");
+            rexec_snort_protocol_id = args.pkt->context->conf->proto_ref->find("rexec");
 
         if (args.dir != APP_ID_FROM_INITIATOR)
             goto bail;
index 97641314d9373d40873193137b8c17e45cfce9ec..8be459026776dc27b0f1936c7c2fd718c0eb9518 100644 (file)
 #include <rpc/rpcent.h>
 #endif
 
-#include "appid_inspector.h"
-#include "app_info_table.h"
+#include "detection/ips_context.h"
 #include "log/messages.h"
 #include "protocols/packet.h"
 
+#include "appid_inspector.h"
+#include "app_info_table.h"
+
 using namespace snort;
 
 
@@ -403,7 +405,7 @@ int RpcServiceDetector::validate_packet(const uint8_t* data, uint16_t size, Appi
                         static THREAD_LOCAL SnortProtocolId sunrpc_snort_protocol_id = UNKNOWN_PROTOCOL_ID;
 
                         if(sunrpc_snort_protocol_id == UNKNOWN_PROTOCOL_ID)
-                            sunrpc_snort_protocol_id = SnortConfig::get_conf()->proto_ref->find("sunrpc");
+                            sunrpc_snort_protocol_id = pkt->context->conf->proto_ref->find("sunrpc");
 
                         const SfIp* dip = pkt->ptrs.ip_api.get_dst();
                         const SfIp* sip = pkt->ptrs.ip_api.get_src();
index e2624e11893ca82d3788b3f148be61c731b3d719..b261b2e2186803f6f39b5d554f22c500ae1cff10 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "service_rshell.h"
 
+#include "detection/ips_context.h"
 #include "protocols/packet.h"
 
 #include "app_info_table.h"
@@ -155,7 +156,7 @@ int RshellServiceDetector::validate(AppIdDiscoveryArgs& args)
         if (port)
         {
             if(rsh_error_snort_protocol_id == UNKNOWN_PROTOCOL_ID)
-                rsh_error_snort_protocol_id = SnortConfig::get_conf()->proto_ref->find("rsh-error");
+                rsh_error_snort_protocol_id = args.pkt->context->conf->proto_ref->find("rsh-error");
 
             const SfIp* dip = args.pkt->ptrs.ip_api.get_dst();
             const SfIp* sip = args.pkt->ptrs.ip_api.get_src();
index 98ac2784a1ddb7753a369d8b1395f3eee295457e..b6c15f7975c2c42af7cb0871f31fd76433a3294b 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "service_snmp.h"
 
+#include "detection/ips_context.h"
 #include "log/messages.h"
 #include "protocols/packet.h"
 
@@ -74,20 +75,6 @@ enum SNMPPDUType
     SNMP_PDU_TRAPV2
 };
 
-#pragma pack(1)
-
-struct ServiceSNMPHeader
-{
-    uint16_t opcode;
-    union
-    {
-        uint16_t block;
-        uint16_t errorcode;
-    } d;
-};
-
-#pragma pack()
-
 static const uint8_t SNMP_PATTERN_2[] = { 0x02, 0x01, 0x00, 0x04 };
 static const uint8_t SNMP_PATTERN_3[] = { 0x02, 0x01, 0x01, 0x04 };
 static const uint8_t SNMP_PATTERN_4[] = { 0x02, 0x01, 0x03, 0x30 };
@@ -479,7 +466,7 @@ int SnmpServiceDetector::validate(AppIdDiscoveryArgs& args)
 
         /*adding expected connection in case the server doesn't send from 161*/
         if(snmp_snort_protocol_id == UNKNOWN_PROTOCOL_ID)
-            snmp_snort_protocol_id = SnortConfig::get_conf()->proto_ref->find("snmp");
+            snmp_snort_protocol_id = args.pkt->context->conf->proto_ref->find("snmp");
 
         const SfIp* dip = args.pkt->ptrs.ip_api.get_dst();
         const SfIp* sip = args.pkt->ptrs.ip_api.get_src();
index c8448d11da4d7db6c84e7d6be7cf7a1ccfee992b..8abfd2db47d3aa4fce9f2dda8781ff938c5d0a9e 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "service_tftp.h"
 
+#include "detection/ips_context.h"
 #include "protocols/packet.h"
 
 #include "app_info_table.h"
@@ -184,7 +185,7 @@ int TftpServiceDetector::validate(AppIdDiscoveryArgs& args)
             goto bail;
 
         if(tftp_snort_protocol_id == UNKNOWN_PROTOCOL_ID)
-            tftp_snort_protocol_id = SnortConfig::get_conf()->proto_ref->find("tftp");
+            tftp_snort_protocol_id = args.pkt->context->conf->proto_ref->find("tftp");
 
         tmp_td = (ServiceTFTPData*)snort_calloc(sizeof(ServiceTFTPData));
         tmp_td->state = TFTP_STATE_TRANSFER;
index 9cc07e1c56e672d86fc7ecadb1b03afeee367b09..89791988b7e882b83ae5f723d654371bc11051c1 100644 (file)
@@ -49,7 +49,7 @@ using namespace snort;
 namespace snort
 {
 
-class Inspector* InspectorManager::get_inspector(char const*, bool, SnortConfig*)
+class Inspector* InspectorManager::get_inspector(char const*, bool, const SnortConfig*)
 { return nullptr; }
 }
 
index fa864cd15c8ebc9d1e9b0ec76a4e19a1a8fb3273..923a5b944c1dc6e731d25a436b28e48cab0a11ad 100644 (file)
 #include <CppUTest/CommandLineTestRunner.h>
 #include <CppUTest/TestHarness.h>
 
-snort::Inspector* snort::InspectorManager::get_inspector(char const*, bool, snort::SnortConfig*) { return nullptr; }
-void ApplicationDescriptor::set_id(const Packet&, AppIdSession&, AppidSessionDirection, AppId, AppidChangeBits&) { }
+snort::Inspector* snort::InspectorManager::get_inspector(
+    char const*, bool, const snort::SnortConfig*) { return nullptr; }
+
+void ApplicationDescriptor::set_id(
+    const Packet&, AppIdSession&, AppidSessionDirection, AppId, AppidChangeBits&) { }
+
 void AppIdHttpSession::set_http_change_bits(AppidChangeBits&, HttpFieldIds) {}
 
 class TestDetector : public AppIdDetector
index c8e0dd1721ccb93427b39426821bdcb8deb6be60..3521a4cf9879368f0acd918152ad7d30ad08efb6 100644 (file)
@@ -168,7 +168,7 @@ AppIdInspector::AppIdInspector(AppIdModule&) { ctxt = &stub_ctxt; }
 AppIdInspector::~AppIdInspector() = default;
 void AppIdInspector::eval(Packet*) { }
 bool AppIdInspector::configure(SnortConfig*) { return true; }
-void AppIdInspector::show(SnortConfig*) { }
+void AppIdInspector::show(const SnortConfig*) const { }
 void AppIdInspector::tinit() { }
 void AppIdInspector::tterm() { }
 AppIdContext& AppIdInspector::get_ctxt() const
index 60ad0ce91656182d879626035a1a3bb9635a9c84..175c69215982b1c00d3fb3e7d01608dd6eba1242 100644 (file)
 #include <CppUTest/CommandLineTestRunner.h>
 #include <CppUTest/TestHarness.h>
 
-snort::Inspector* snort::InspectorManager::get_inspector(char const*, bool, snort::SnortConfig*) { return nullptr; }
-void ApplicationDescriptor::set_id(const Packet&, AppIdSession&, AppidSessionDirection, AppId, AppidChangeBits&) { }
+snort::Inspector* snort::InspectorManager::get_inspector(
+    char const*, bool, const snort::SnortConfig*) { return nullptr; }
+
+void ApplicationDescriptor::set_id(
+    const Packet&, AppIdSession&, AppidSessionDirection, AppId, AppidChangeBits&) { }
+
 void AppIdHttpSession::set_http_change_bits(AppidChangeBits&, HttpFieldIds) {}
 
 class MockServiceDetector : public ServiceDetector
index 9d30adce667ec51f1df2e1802462d246a8312c72..66eb7a794aa69bc9dc4a618f1ec360711ce04cc6 100644 (file)
@@ -64,7 +64,7 @@ AppIdInspector::AppIdInspector(AppIdModule& ) { }
 AppIdInspector::~AppIdInspector() { }
 void AppIdInspector::eval(snort::Packet*) { }
 bool AppIdInspector::configure(snort::SnortConfig*) { return true; }
-void AppIdInspector::show(snort::SnortConfig*) { }
+void AppIdInspector::show(const SnortConfig*) const { }
 void AppIdInspector::tinit() { }
 void AppIdInspector::tterm() { }
 AppIdContext& AppIdInspector::get_ctxt() const { return *ctxt; }
index 26fe8d6e5ea05cb9472b019f1077f7b40e48de1a..eb9aa32eefcb1759919f435b27d062a0c7f4af93 100644 (file)
@@ -143,7 +143,7 @@ public:
     ArpSpoof(ArpSpoofModule*);
     ~ArpSpoof() override;
 
-    void show(snort::SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
 
 private:
@@ -160,7 +160,7 @@ ArpSpoof::~ArpSpoof ()
     delete config;
 }
 
-void ArpSpoof::show(SnortConfig*)
+void ArpSpoof::show(const SnortConfig*) const
 {
     if ( config )
         arp_config_show(config);
index 2f102f21027ee52a0e9697b9ab310f066ffc1c7c..50756ad548314b36d5d1c45ad000821a50ce612e 100644 (file)
@@ -452,8 +452,9 @@ static Inspector* get_gadget(Flow* flow)
 
 static Inspector* get_gadget_by_id(const char* service)
 {
-    const SnortProtocolId id = SnortConfig::get_conf()->proto_ref->find(service);
-    const char* s = SnortConfig::get_conf()->proto_ref->get_name(id);
+    const SnortConfig* sc = SnortConfig::get_conf();
+    const SnortProtocolId id = sc->proto_ref->find(service);
+    const char* s = sc->proto_ref->get_name(id);
     return InspectorManager::get_inspector_by_service(s);
 }
 
@@ -825,7 +826,7 @@ public:
     void remove_inspector_binding(SnortConfig*, const char*) override;
 
     bool configure(SnortConfig*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
 
     void eval(Packet*) override { }
 
@@ -945,7 +946,7 @@ bool Binder::configure(SnortConfig* sc)
     return true;
 }
 
-void Binder::show(SnortConfig*)
+void Binder::show(const SnortConfig*) const
 {
     std::once_flag once;
 
@@ -1137,6 +1138,8 @@ void Binder::get_bindings(Flow* flow, Stuff& stuff, Packet* p, const char* servi
     //          It gets potentially hairy if people start specifying overlapping policy types in
     //          overlapping rules.
     bool inspection_set = false, ips_set = false;
+    const SnortConfig* sc = SnortConfig::get_conf();
+
     for ( unsigned i = 0; i < sz; i++ )
     {
         Binding* pb = bindings[i];
@@ -1151,7 +1154,7 @@ void Binder::get_bindings(Flow* flow, Stuff& stuff, Packet* p, const char* servi
 
         if ( pb->use.inspection_index and !inspection_set )
         {
-            set_inspection_policy(SnortConfig::get_conf(), pb->use.inspection_index - 1);
+            set_inspection_policy(sc, pb->use.inspection_index - 1);
             if (!service)
                 flow->inspection_policy_id = pb->use.inspection_index - 1;
             inspection_set = true;
@@ -1159,7 +1162,7 @@ void Binder::get_bindings(Flow* flow, Stuff& stuff, Packet* p, const char* servi
 
         if ( pb->use.ips_index and !ips_set )
         {
-            set_ips_policy(SnortConfig::get_conf(), pb->use.ips_index - 1);
+            set_ips_policy(sc, pb->use.ips_index - 1);
             if (!service)
                 flow->ips_policy_id = pb->use.ips_index - 1;
             ips_set = true;
index 09f2f2bb4eae70dd574129fbf50ecf6ed9a099f1..025e5d877aa9944b3c4a6af02aa2f220306a3ad0 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "norm.h"
 
+#include "detection/ips_context.h"
 #include "main/snort_config.h"
 #include "packet_io/sfdaq.h"
 #include "protocols/icmp4.h"
@@ -247,11 +248,11 @@ static int Norm_IP4(
     }
     if ( Norm_IsEnabled(c, NORM_IP4_TTL) )
     {
-        if ( h->ip_ttl < SnortConfig::min_ttl() )
+        if ( h->ip_ttl < p->context->conf->min_ttl() )
         {
             if ( mode == NORM_MODE_ON )
             {
-                h->ip_ttl = SnortConfig::new_ttl();
+                h->ip_ttl = p->context->conf->new_ttl();
                 p->ptrs.decode_flags &= ~DECODE_ERR_BAD_TTL;
                 changes++;
             }
@@ -304,13 +305,13 @@ static int Norm_IP6(
         ip::IP6Hdr* h =
             reinterpret_cast<ip::IP6Hdr*>(const_cast<uint8_t*>(p->layers[layer].start));
 
-        if ( h->ip6_hoplim < SnortConfig::min_ttl() )
+        if ( h->ip6_hoplim < p->context->conf->min_ttl() )
         {
             const NormMode mode = get_norm_mode(p);
 
             if ( mode == NORM_MODE_ON )
             {
-                h->ip6_hoplim = SnortConfig::new_ttl();
+                h->ip6_hoplim = p->context->conf->new_ttl();
                 p->ptrs.decode_flags &= ~DECODE_ERR_BAD_TTL;
                 changes++;
             }
index 2da195ff8fda474da03c49d88eeb90bd763c1bcd..4ded34b7197043b6ff78e8ec39b6d22e6ea45036 100644 (file)
@@ -209,7 +209,7 @@ public:
     Normalizer(const NormalizerConfig&);
 
     bool configure(SnortConfig*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
 
 private:
@@ -266,7 +266,7 @@ NormMode Normalize_GetMode(NormFlags nf)
     return NORM_MODE_TEST;
 }
 
-void Normalizer::show(SnortConfig*)
+void Normalizer::show(const SnortConfig*) const
 {
     print_ip4(&config);
     print_ip6(&config);
index 925a3b027b713e5d1d9c51be47a67f5524ba49f4..d90256217a009e8525b4cbf0f6bada8d8b84a042 100644 (file)
@@ -168,7 +168,7 @@ public:
     PacketCapture(CaptureModule*);
 
     // non-static functions
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
     void tterm() override { capture_term(); }
 
@@ -197,7 +197,7 @@ bool PacketCapture::capture_init()
     return false;
 }
 
-void PacketCapture::show(SnortConfig*)
+void PacketCapture::show(const SnortConfig*) const
 {
     ConfigLogger::log_flag("enable", config.enabled);
     if ( config.enabled )
index 4f5e931186a61adf6b462ce0ebf3edf4adef9fa7..9329970d412a5e149f2154c2b1cf47c5207a0230 100644 (file)
@@ -157,7 +157,7 @@ static const char* to_string(const PerfFormat& pf)
     return "";
 }
 
-void PerfMonitor::show(SnortConfig*)
+void PerfMonitor::show(const SnortConfig*) const
 {
     ConfigLogger::log_flag("base", config->perf_flags & PERF_BASE);
     ConfigLogger::log_flag("cpu", config->perf_flags & PERF_CPU);
index 4f8cb3f2c65f89d38f7cc20721682531fe6c78cf..939f73739d04e314af22f62ebf8acaf536167c70 100644 (file)
@@ -39,7 +39,7 @@ public:
     ~PerfMonitor() override { delete config; }
 
     bool configure(snort::SnortConfig*) override;
-    void show(snort::SnortConfig*) override;
+    void show(const snort::SnortConfig*) const override;
 
     void eval(snort::Packet*) override;
     bool ready_to_process(snort::Packet* p);
index cc9efa40940466ac98b0a376d90620f50099a9a8..10ab1d07d814e8be0743b1164684bd8603d0f903 100644 (file)
@@ -132,13 +132,13 @@ bool PerfTracker::open(bool append)
                         file_name, mode, get_error(errno));
                 }
 
-                if (chown(file_name, SnortConfig::get_uid(),
-                    SnortConfig::get_gid()) != 0)
+                const SnortConfig* sc = SnortConfig::get_conf();
+
+                if (chown(file_name, sc->get_uid(), sc->get_gid()) != 0)
                 {
                     WarningMessage("perfmonitor: Unable to change permissions of "
                         "stats file '%s' to user:%d and group:%d: %s.\n",
-                        file_name, SnortConfig::get_uid(), SnortConfig::get_gid(),
-                        get_error(errno));
+                        file_name, sc->get_uid(), sc->get_gid(), get_error(errno));
                 }
             }
         }
index e2435f7c6ba5df489c373578a5f0d37a584e021e..938d7aaebfc7e8fd9b238c16fdbc55e8896f2527 100644 (file)
@@ -431,7 +431,7 @@ void PortScan::tterm()
     ps_cleanup();
 }
 
-void PortScan::show(SnortConfig*)
+void PortScan::show(const SnortConfig*) const
 {
     if ( config )
         portscan_config_show(config);
index 00d1dedaa86e22d65dac20dfa2d77fbaeaec5a84..b75dfc01f90a443e1e150f923a9526fa72a9e137 100644 (file)
@@ -42,7 +42,7 @@ public:
     PortScan(class PortScanModule*);
     ~PortScan() override;
 
-    void show(snort::SnortConfig*) override;
+    void show(const snort::SnortConfig*) const override;
     void eval(snort::Packet*) override;
 
     void tinit() override;
index 1813009e88b32eac8fca803a0a0121aab23ccf93..48d4f4e933972dba00eb7c4d5fea8d12f4fa0e8f 100644 (file)
@@ -411,7 +411,7 @@ Reputation::Reputation(ReputationConfig* pc)
     reputationstats.memory_allocated = sfrt_flat_usage(conf->ip_list);
 }
 
-void Reputation::show(SnortConfig*)
+void Reputation::show(const SnortConfig*) const
 {
     ConfigLogger::log_value("blacklist", config.blacklist_path.c_str());
     ConfigLogger::log_value("list_dir", config.list_dir.c_str());
index d094eda108cf036c1e04d16c6ad1fed28d0ad5a7..e4e219dc4fc636847054a7985f92a51d9a81a184 100644 (file)
@@ -28,7 +28,7 @@ class Reputation : public snort::Inspector
 public:
     Reputation(ReputationConfig*);
 
-    void show(snort::SnortConfig*) override;
+    void show(const snort::SnortConfig*) const override;
     void eval(snort::Packet*) override;
 
 private:
index 19fbb97bae5fb03911cf7abeeefc5814826a849a..015e247a32b3c5c9720f69cf9d2091f6ece6c8ab 100644 (file)
@@ -100,7 +100,7 @@ void RnaInspector::eval(Packet* p)
     UNUSED(p);
 }
 
-void RnaInspector::show(SnortConfig*)
+void RnaInspector::show(const SnortConfig*) const
 {
     if ( mod_conf )
     {
index 37d62e479f6ffbc7c0767b0d8a101703709ddb4c..69b45f09271ebc9f971a816b98b7083003a9f26d 100644 (file)
@@ -39,7 +39,7 @@ public:
 
     bool configure(snort::SnortConfig*) override;
     void eval(snort::Packet*) override;
-    void show(snort::SnortConfig*) override;
+    void show(const snort::SnortConfig*) const override;
     void tinit() override;
     void tterm() override;
 
index 0c958542f8546e6fbd6d4a2bc3d119605293871e..8834349015b97238f8720da6f860be60cb65a90e 100644 (file)
@@ -178,7 +178,7 @@ void Active::init(SnortConfig* sc)
         Active::set_enabled();
 }
 
-bool Active::thread_init(SnortConfig* sc)
+bool Active::thread_init(const SnortConfig* sc)
 {
     s_attempts = sc->respond_attempts;
 
@@ -190,7 +190,7 @@ bool Active::thread_init(SnortConfig* sc)
 
     if ( enabled && (!SFDAQ::can_inject() || !sc->respond_device.empty()) )
     {
-        if ( SnortConfig::read_mode() || !open(sc->respond_device.c_str()) )
+        if ( sc->read_mode() || !open(sc->respond_device.c_str()) )
         {
             ParseWarning(WARN_DAQ, "active responses disabled since DAQ "
                 "can't inject packets.");
@@ -521,12 +521,12 @@ void Active::update_status(const Packet* p, bool force)
 
     else if ( active_status != AST_FORCE)
     {
-        if ( SnortConfig::inline_mode() )
+        if ( p->context->conf->inline_mode() )
         {
             if ( !SFDAQ::forwarding_packet(p->pkth) )
                 active_status = AST_WOULD;
         }
-        else if ( SnortConfig::inline_test_mode() )
+        else if ( p->context->conf->inline_test_mode() )
         {
             active_status = AST_WOULD;
         }
@@ -629,7 +629,7 @@ void Active::block_session(Packet* p, bool force)
     active_action = ACT_BLOCK;
     update_status(p, force);
 
-    if ( force or SnortConfig::inline_mode() or SnortConfig::treat_drop_as_ignore() )
+    if ( force or p->context->conf->inline_mode() or p->context->conf->treat_drop_as_ignore() )
         Stream::block_flow(p);
 
     p->disable_inspect = true;
@@ -645,7 +645,7 @@ void Active::reset_session(Packet* p, ActiveAction* reject, bool force)
     update_status(p, force);
     active_action = ACT_RESET;
 
-    if ( force or SnortConfig::inline_mode() or SnortConfig::treat_drop_as_ignore() )
+    if ( force or p->context->conf->inline_mode() or p->context->conf->treat_drop_as_ignore() )
         Stream::drop_flow(p);
 
     if ( enabled )
index 52fdefdc80dc94bee4cb703cc13b73ae872dac4b..1ee25b2e510fba3b5f63dcdac9c913c9b757a442 100644 (file)
@@ -59,7 +59,7 @@ public:
 public:
 
     static void init(SnortConfig*);
-    static bool thread_init(SnortConfig*);
+    static bool thread_init(const SnortConfig*);
     static void thread_term();
 
     static void set_enabled(bool on_off = true)
index a8389e7495afabe42e764219f4028d8f97503548..aee331289f0975c0066c18f60b53c4785460b1bc 100644 (file)
@@ -219,10 +219,12 @@ bool SFDAQ::init(const SFDAQConfig* cfg, unsigned total_instances)
 
     int rval;
 
-    if (SnortConfig::adaptor_inline_mode())
+    if (SnortConfig::get_conf()->adaptor_inline_mode())
         default_daq_mode = DAQ_MODE_INLINE;
-    else if (SnortConfig::read_mode())
+
+    else if (SnortConfig::get_conf()->read_mode())
         default_daq_mode = DAQ_MODE_READ_FILE;
+
     else
         default_daq_mode = DAQ_MODE_PASSIVE;
 
index 860ed0886632752d4a5da1f845cf92bdd10f23c4..561dbaac3a7392ec344752d648cdcadad35e7e03 100644 (file)
@@ -57,7 +57,7 @@ static bool DAQ_ValidateInstance(DAQ_Instance_h instance)
 {
     uint32_t caps = daq_instance_get_capabilities(instance);
 
-    if (!SnortConfig::adaptor_inline_mode())
+    if (!SnortConfig::get_conf()->adaptor_inline_mode())
         return true;
 
     if (!(caps & DAQ_CAPA_BLOCK))
@@ -172,7 +172,7 @@ bool SFDAQInstance::start()
     pool_size = mpool_info.size;
     pool_available = mpool_info.available;
     assert(pool_size == pool_available);
-    if (SnortConfig::log_verbose())
+    if (SnortConfig::get_conf()->log_verbose())
     {
         LogMessage("Instance %d daq pool size: %d\n", get_instance_id(), pool_size);
         LogMessage("Instance %d daq batch size: %d\n", get_instance_id(), batch_size);
index 6bcc38d176473ad5e2b05d0b9e6f134b50ccf72b..134619305936bd853ad5bd3357defb36f7750c38 100644 (file)
@@ -84,7 +84,7 @@ void get_parse_location(const char*& file, unsigned& line)
 
 static void print_parse_file(const char* msg, Location& loc)
 {
-    if ( SnortConfig::show_file_codes() )
+    if ( SnortConfig::get_conf()->show_file_codes() )
         LogMessage("%s %s:%s:\n", msg, (loc.code ? loc.code : "?"), loc.file.c_str());
 
     else
@@ -270,15 +270,14 @@ void add_service_to_otn(SnortConfig* sc, OptTreeNode* otn, const char* svc_name)
 // or we are going to just alert instead of drop,
 // or we are going to ignore session data instead of drop.
 // the alert case is tested for separately with SnortConfig::treat_drop_as_alert().
-static inline int ScKeepDropRules()
+static inline int keep_drop_rules(const SnortConfig* sc)
 {
-    return ( SnortConfig::inline_mode() or SnortConfig::adaptor_inline_mode() or
-        SnortConfig::treat_drop_as_ignore() );
+    return ( sc->inline_mode() or sc->adaptor_inline_mode() or sc->treat_drop_as_ignore() );
 }
 
-static inline int ScLoadAsDropRules()
+static inline int load_as_drop_rules(const SnortConfig* sc)
 {
-    return ( SnortConfig::inline_test_mode() || SnortConfig::adaptor_inline_test_mode() );
+    return ( sc->inline_test_mode() || sc->adaptor_inline_test_mode() );
 }
 
 Actions::Type get_rule_type(const char* s)
@@ -288,15 +287,17 @@ Actions::Type get_rule_type(const char* s)
     if ( rt == Actions::NONE )
         rt = ActionManager::get_action_type(s);
 
+    const SnortConfig* sc = SnortConfig::get_conf();
+
     switch ( rt )
     {
     case Actions::DROP:
     case Actions::BLOCK:
     case Actions::RESET:
-        if ( SnortConfig::treat_drop_as_alert() )
+        if ( sc->treat_drop_as_alert() )
             return Actions::ALERT;
 
-        if ( ScKeepDropRules() || ScLoadAsDropRules() )
+        if ( keep_drop_rules(sc) || load_as_drop_rules(sc) )
             return rt;
 
         return Actions::NONE;
index 84beb206262c8257eb6559a6fe54b8de8ff1bc90..c0ecf5341f350b88fa2b804b6f90069d84e0259c 100644 (file)
@@ -957,7 +957,7 @@ void parse_rule_type(SnortConfig* sc, const char* s, RuleTreeNode& rtn)
         CreateRuleType(sc, s, rtn.action);
         rtn.listhead = get_rule_list(sc, s);
     }
-    if ( SnortConfig::get_default_rule_state() )
+    if ( sc->get_default_rule_state() )
         rtn.set_enabled();
 
     if ( !rtn.listhead )
@@ -1131,7 +1131,7 @@ OptTreeNode* parse_rule_open(SnortConfig* sc, RuleTreeNode& rtn, bool stub)
 
     otn->snort_protocol_id = rtn.snort_protocol_id;
 
-    if ( SnortConfig::get_default_rule_state() )
+    if ( sc->get_default_rule_state() )
         rtn.set_enabled();
 
     IpsManager::reset_options();
index 355ccf4b4e671b1308fb1fcfdfa08b5d1e18d6a0..9d8f7530c90d39d4d3f59b21ea90b190b0abecd3 100644 (file)
@@ -307,8 +307,9 @@ void parser_term(SnortConfig*)
 SnortConfig* ParseSnortConf(const SnortConfig* boot_conf, const char* fname, bool is_fatal)
 {
     SnortConfig* sc = new SnortConfig(SnortConfig::get_conf()->proto_ref);
-    SnortConfig::set_parser_conf(sc);
 
+    sc->run_flags = boot_conf->run_flags;
+    sc->output_flags = boot_conf->output_flags;
     sc->logging_flags = boot_conf->logging_flags;
     sc->tweaks = boot_conf->tweaks;
 
index 355d284919c16dcfb4f50bc0f35cf2daf137897e..1c1d82c8b961a1b2a954c4ed38026ef2f1b5634d 100644 (file)
@@ -103,11 +103,11 @@ static BasePlugin* instantiate(
     Module* m;
     if ( key == PT_IPS_OPTION || use_defaults )
         // FIXIT-L this is just a workaround, need to be able to get parsed rule module
-        m = ModuleManager::get_default_module(name.c_str(), SnortConfig::get_conf());
+        m = ModuleManager::get_default_module(name.c_str(), SnortConfig::get_main_conf());
     else
         m = ModuleManager::get_module(name.c_str());
 
-    auto piglet = piglet_api->ctor(lua, name, m, SnortConfig::get_conf());
+    auto piglet = piglet_api->ctor(lua, name, m, SnortConfig::get_main_conf());
 
     assert(piglet);
 
index 2f0ae41a505f8ce8bf56d09b367e8484acfb4f00..927d866db371a2229f4dfd0a478dbb13327320b6 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "framework/codec.h"
 #include "lua/lua_arg.h"
+#include "main/snort_config.h"
 
 using namespace snort;
 
@@ -66,7 +67,8 @@ static const luaL_Reg methods[] =
         {
             Lua::Args args(L);
 
-            auto& self = CodecDataIface.create(L, ProtocolId::ETHERTYPE_NOT_SET);
+            auto& self = CodecDataIface.create(
+                L, SnortConfig::get_conf(), ProtocolId::ETHERTYPE_NOT_SET);
 
             if ( args[1].is_table() )
                 args[1].check_table(set_fields, self);
index 1c8bd85a48e00c18524fa72cbee1f2cdcd95202f..b20add54411445374b216d7e9e4d4ba02a00480f 100644 (file)
@@ -55,7 +55,7 @@ static const luaL_Reg methods[] =
         {
             auto& self = InspectorIface.get(L);
             // FIXIT-L do we need an opaque SnortConfig interface?
-            bool result = self.configure(SnortConfig::get_conf());
+            bool result = self.configure(SnortConfig::get_main_conf());
             lua_pushboolean(L, result);
             return 1;
         }
index c7871d71c67f7fb9ac9fb9c730934ae1d473aceb..06dffaa3b97b350d79de841ed8375256222f2cf7 100644 (file)
@@ -93,7 +93,7 @@ PortObject* PortVarTableFind(PortVarTable* h, const char* name)
 
     PortObject* po = (PortObject*)h->find(name);
 
-    if ( !po and SnortConfig::dump_rule_info() and strstr(name, "PORT") )
+    if ( !po and SnortConfig::get_conf()->dump_rule_info() and strstr(name, "PORT") )
     {
         po = PortObjectNew();
         po->name = snort_strdup(name);
index 75def056d0f7a015ab74e71fd08f5c52300475c9..06d0696bcbf69be88e510770ecfe2812e52c0ea6 100644 (file)
@@ -117,7 +117,7 @@ void Profiler::show_stats()
 
     s_profiler_nodes.accumulate_flex();
 
-    const auto* config = SnortConfig::get_profiler();
+    const auto* config = SnortConfig::get_conf()->get_profiler();
     assert(config);
 
     show_time_profiler_stats(s_profiler_nodes, config->time);
index 715e37c90433c174cd2edfb0f9b431adfe8c4616..50e846116a2bfa0311a4252c9d6b9d8632764d55 100644 (file)
@@ -194,10 +194,11 @@ static void consolidate_otn_states(OtnState* states)
 
 static std::vector<View> build_entries()
 {
-    assert(SnortConfig::get_conf());
+    const SnortConfig* sc = SnortConfig::get_conf();
+    assert(sc);
 
-    detection_option_tree_update_otn_stats(SnortConfig::get_conf()->detection_option_tree_hash_table);
-    auto* otn_map = SnortConfig::get_conf()->otn_map;
+    detection_option_tree_update_otn_stats(sc->detection_option_tree_hash_table);
+    auto* otn_map = sc->otn_map;
 
     std::vector<View> entries;
 
@@ -313,8 +314,10 @@ void show_rule_profiler_stats(const RuleProfilerConfig& config)
 
 void reset_rule_profiler_stats()
 {
-    assert(SnortConfig::get_conf());
-    auto* otn_map = SnortConfig::get_conf()->otn_map;
+    const SnortConfig* sc = SnortConfig::get_conf();
+    assert(sc);
+
+    auto* otn_map = sc->otn_map;
 
     for ( auto* h = otn_map->find_first(); h; h = otn_map->find_next() )
     {
index 1acc69da347a97a6dc6a8281bb3eea963b6476d1..67e6dcb69716fda328f36e4d022ef869117e9a90 100644 (file)
@@ -257,7 +257,7 @@ uint16_t Packet::get_flow_vlan_id() const
 
     if (flow)
         vid = flow->key->vlan_tag;
-    else if ( !SnortConfig::get_vlan_agnostic() and (proto_bits & PROTO_BIT__VLAN) )
+    else if ( !context->conf->get_vlan_agnostic() and (proto_bits & PROTO_BIT__VLAN) )
         vid = layer::get_vlan_layer(this)->vid();
 
     return vid;
index 0d31e465deb468232b14894439f2d10914ebac7a..ffcd685d856347228e6730e6c9ddbecf19040cb7 100644 (file)
@@ -100,7 +100,7 @@ static inline void push_layer(Packet* p,
 void PacketManager::pop_teredo(Packet* p, RawData& raw)
 {
     p->proto_bits &= ~PROTO_BIT__TEREDO;
-    if ( SnortConfig::tunnel_bypass_enabled(TUNNEL_TEREDO) )
+    if ( p->context->conf->tunnel_bypass_enabled(TUNNEL_TEREDO) )
         p->active->clear_tunnel_bypass();
 
     const ProtocolIndex mapped_prot = CodecManager::s_proto_map[to_utype(ProtocolId::TEREDO)];
@@ -138,7 +138,7 @@ void PacketManager::decode(
     ProtocolId prev_prot_id = CodecManager::grinder_id;
 
     RawData raw(p->daq_msg, pkt, pktlen);
-    CodecData codec_data(ProtocolId::FINISHED_DECODE);
+    CodecData codec_data(p->context->conf, ProtocolId::FINISHED_DECODE);
 
     if ( cooked )
         codec_data.codec_flags |= CODEC_STREAM_REBUILT;
index 5603895f8fb65f099031cba0f0d9253d9b2bb469..9241b9e1efe0ae92a7dd26be7b67f19f3961e91e 100644 (file)
@@ -37,12 +37,8 @@ private:
     ACSM_STRUCT2* obj;
 
 public:
-    AcbMpse(
-        SnortConfig*, const MpseAgent* agent)
-        : Mpse("ac_banded")
-    {
-        obj = acsmNew2(agent, ACF_BANDED);
-    }
+    AcbMpse(const MpseAgent* agent) : Mpse("ac_banded")
+    { obj = acsmNew2(agent, ACF_BANDED); }
 
     ~AcbMpse() override
     { acsmFree2(obj); }
@@ -51,8 +47,7 @@ public:
     { obj->enable_dfa(); }
 
     int add_pattern(
-        SnortConfig*, const uint8_t* P, unsigned m,
-        const PatternDescriptor& desc, void* user) override
+        const uint8_t* P, unsigned m, const PatternDescriptor& desc, void* user) override
     {
         return acsmAddPattern2(obj, P, m, desc.no_case, desc.negated, user);
     }
@@ -87,9 +82,9 @@ public:
 //-------------------------------------------------------------------------
 
 static Mpse* acb_ctor(
-    SnortConfig* sc, class Module*, const MpseAgent* agent)
+    const SnortConfig*, class Module*, const MpseAgent* agent)
 {
-    return new AcbMpse(sc, agent);
+    return new AcbMpse(agent);
 }
 
 static void acb_dtor(Mpse* p)
index 376c0f1f879f6313bccb3f74ca3f4e43f3f7f9ab..89b0378a0f3938d90220b38bbde346f9e082dba8 100644 (file)
@@ -46,8 +46,7 @@ private:
     bnfa_struct_t* obj;
 
 public:
-    AcBnfaMpse(SnortConfig*, const MpseAgent* agent)
-        : Mpse("ac_bnfa")
+    AcBnfaMpse(const MpseAgent* agent) : Mpse("ac_bnfa")
     {
         obj=bnfaNew(agent);
         if ( obj ) obj->bnfaMethod = 1;
@@ -66,8 +65,7 @@ public:
     }
 
     int add_pattern(
-        SnortConfig*, const uint8_t* P, unsigned m,
-        const PatternDescriptor& desc, void* user) override
+        const uint8_t* P, unsigned m, const PatternDescriptor& desc, void* user) override
     {
         return bnfaAddPattern(obj, P, m, desc.no_case, desc.negated, user);
     }
@@ -105,9 +103,9 @@ public:
 //-------------------------------------------------------------------------
 
 static Mpse* bnfa_ctor(
-    SnortConfig* sc, class Module*, const MpseAgent* agent)
+    const SnortConfig*, class Module*, const MpseAgent* agent)
 {
-    return new AcBnfaMpse(sc, agent);
+    return new AcBnfaMpse(agent);
 }
 
 static void bnfa_dtor(Mpse* p)
index b17519368fdbfb0a8d29d83bd8af17e193e4e6a9..0340548d6796fd7461ba33d5f4f32f26e64e011f 100644 (file)
@@ -37,11 +37,8 @@ private:
     ACSM_STRUCT2* obj;
 
 public:
-    AcfMpse(SnortConfig*, const MpseAgent* agent)
-        : Mpse("ac_full")
-    {
-        obj = acsmNew2(agent, ACF_FULL);
-    }
+    AcfMpse(const MpseAgent* agent) : Mpse("ac_full")
+    { obj = acsmNew2(agent, ACF_FULL); }
 
     ~AcfMpse() override
     { acsmFree2(obj); }
@@ -53,8 +50,7 @@ public:
     }
 
     int add_pattern(
-        SnortConfig*, const uint8_t* P, unsigned m,
-        const PatternDescriptor& desc, void* user) override
+        const uint8_t* P, unsigned m, const PatternDescriptor& desc, void* user) override
     {
         return acsmAddPattern2(obj, P, m, desc.no_case, desc.negated, user);
     }
@@ -94,9 +90,9 @@ public:
 //-------------------------------------------------------------------------
 
 static Mpse* acf_ctor(
-    SnortConfig* sc, class Module*, const MpseAgent* agent)
+    const SnortConfig*, class Module*, const MpseAgent* agent)
 {
-    return new AcfMpse(sc, agent);
+    return new AcfMpse(agent);
 }
 
 static void acf_dtor(Mpse* p)
index 22e80c035ae9573769cedc8491882b01a17e1b54..e5cfd6071f461bc8792b6f9e28676b1a6cc7abb8 100644 (file)
@@ -37,11 +37,8 @@ private:
     ACSM_STRUCT2* obj;
 
 public:
-    AcsMpse(SnortConfig*, const MpseAgent* agent)
-        : Mpse("ac_sparse")
-    {
-        obj = acsmNew2(agent, ACF_SPARSE);
-    }
+    AcsMpse(const MpseAgent* agent) : Mpse("ac_sparse")
+    { obj = acsmNew2(agent, ACF_SPARSE); }
 
     ~AcsMpse() override
     { if (obj) acsmFree2(obj); }
@@ -50,8 +47,7 @@ public:
     { obj->enable_dfa(); }
 
     int add_pattern(
-        SnortConfig*, const uint8_t* P, unsigned m,
-        const PatternDescriptor& desc, void* user) override
+        const uint8_t* P, unsigned m, const PatternDescriptor& desc, void* user) override
     {
         return acsmAddPattern2(obj, P, m, desc.no_case, desc.negated, user);
     }
@@ -81,9 +77,9 @@ public:
 //-------------------------------------------------------------------------
 
 static Mpse* acs_ctor(
-    SnortConfig* sc, class Module*, const MpseAgent* agent)
+    const SnortConfig*, class Module*, const MpseAgent* agent)
 {
-    return new AcsMpse(sc, agent);
+    return new AcsMpse(agent);
 }
 
 static void acs_dtor(Mpse* p)
index 85f969b934b75b3a2bf2b9fc5da04fc9acc930b1..7e12be9ae237fdd69f45c3a2665f8ddc8c28c21c 100644 (file)
@@ -37,11 +37,8 @@ private:
     ACSM_STRUCT2* obj;
 
 public:
-    AcsbMpse(SnortConfig*, const MpseAgent* agent)
-        : Mpse("ac_sparse_bands")
-    {
-        obj = acsmNew2(agent, ACF_SPARSE_BANDS);
-    }
+    AcsbMpse(const MpseAgent* agent) : Mpse("ac_sparse_bands")
+    { obj = acsmNew2(agent, ACF_SPARSE_BANDS); }
 
     ~AcsbMpse() override
     { acsmFree2(obj); }
@@ -50,8 +47,7 @@ public:
     { obj->enable_dfa(); }
 
     int add_pattern(
-        SnortConfig*, const uint8_t* P, unsigned m,
-        const PatternDescriptor& desc, void* user) override
+        const uint8_t* P, unsigned m, const PatternDescriptor& desc, void* user) override
     {
         return acsmAddPattern2(obj, P, m, desc.no_case, desc.negated, user);
     }
@@ -81,9 +77,9 @@ public:
 //-------------------------------------------------------------------------
 
 static Mpse* acsb_ctor(
-    SnortConfig* sc, class Module*, const MpseAgent* agent)
+    const SnortConfig*, class Module*, const MpseAgent* agent)
 {
-    return new AcsbMpse(sc, agent);
+    return new AcsbMpse(agent);
 }
 
 static void acsb_dtor(Mpse* p)
index c641dacf820fe94e653f81f6019f0abcf56929ae..521b42e733c75d89add1c7dbfc3c4ec2c3f6bcc2 100644 (file)
@@ -37,16 +37,14 @@ private:
     ACSM_STRUCT* obj;
 
 public:
-    AcMpse(SnortConfig*, const MpseAgent* agent)
-        : Mpse("ac_std")
+    AcMpse(const MpseAgent* agent) : Mpse("ac_std")
     { obj = acsmNew(agent); }
 
     ~AcMpse() override
     { acsmFree(obj); }
 
     int add_pattern(
-        SnortConfig*, const uint8_t* P, unsigned m,
-        const PatternDescriptor& desc, void* user) override
+        const uint8_t* P, unsigned m, const PatternDescriptor& desc, void* user) override
     {
         return acsmAddPattern(obj, P, m, desc.no_case, desc.negated, user);
     }
@@ -73,9 +71,9 @@ public:
 //-------------------------------------------------------------------------
 
 static Mpse* ac_ctor(
-    SnortConfig* sc, class Module*, const MpseAgent* agent)
+    const SnortConfig*, class Module*, const MpseAgent* agent)
 {
-    return new AcMpse(sc, agent);
+    return new AcMpse(agent);
 }
 
 static void ac_dtor(Mpse* p)
index 712a512057ab86130faf4111c1279f3efad614f1..b04f92f35e30515ee6829cbc4b00b999a83ceb41 100644 (file)
@@ -126,7 +126,7 @@ struct ScanContext
 class HyperscanMpse : public Mpse
 {
 public:
-    HyperscanMpse(SnortConfig*, const MpseAgent* a)
+    HyperscanMpse(const MpseAgent* a)
         : Mpse("hyperscan")
     {
         agent = a;
@@ -143,8 +143,7 @@ public:
     }
 
     int add_pattern(
-        SnortConfig*, const uint8_t* pat, unsigned len,
-        const PatternDescriptor& desc, void* user) override
+        const uint8_t* pat, unsigned len, const PatternDescriptor& desc, void* user) override
     {
         Pattern p(pat, len, desc, user);
         pvector.emplace_back(p);
@@ -378,12 +377,12 @@ static void mod_dtor(Module* p)
 { delete p; }
 
 static Mpse* hs_ctor(
-    SnortConfig* sc, class Module*, const MpseAgent* a)
+    const SnortConfig* sc, class Module*, const MpseAgent* a)
 {
     if ( s_scratch.empty() )
         s_scratch.resize(sc->num_slots, nullptr);
 
-    return new HyperscanMpse(sc, a);
+    return new HyperscanMpse(a);
 }
 
 static void hs_dtor(Mpse* p)
index 513aa4f122c1c547597ff7c67b61cef591234524..e385a125a92b2a16c4c9c93eee075bbb618e5c9d 100644 (file)
@@ -31,6 +31,8 @@
 
 namespace snort
 {
+const SnortConfig* SearchTool::conf = nullptr;
+
 SearchTool::SearchTool(const char* method, bool dfa)
 {
     mpsegrp = new MpseGroup;
@@ -42,10 +44,9 @@ SearchTool::SearchTool(const char* method, bool dfa)
     // pattern offload search method.  If a method is passed in then an offload
     // search engine will not be created
 
-    SnortConfig* sc = SnortConfig::get_parser_conf();
-    assert(sc);
+    assert(conf);
 
-    if (mpsegrp->create_normal_mpse(sc, method))
+    if (mpsegrp->create_normal_mpse(conf, method))
     {
         if( dfa )
             mpsegrp->normal_mpse->set_opt(1);
@@ -53,7 +54,7 @@ SearchTool::SearchTool(const char* method, bool dfa)
 
     if (method == nullptr)
     {
-        if (mpsegrp->create_offload_mpse(sc))
+        if (mpsegrp->create_offload_mpse(conf))
         {
             if ( dfa )
                 mpsegrp->offload_mpse->set_opt(1);
@@ -69,28 +70,23 @@ SearchTool::~SearchTool()
 }
 
 void SearchTool::add(const char* pat, unsigned len, int id, bool no_case)
-{
-    add((const uint8_t*)pat, len, id, no_case);
-}
+{ add((const uint8_t*)pat, len, id, no_case); }
 
 void SearchTool::add(const char* pat, unsigned len, void* id, bool no_case)
-{
-    add((const uint8_t*)pat, len, id, no_case);
-}
+{ add((const uint8_t*)pat, len, id, no_case); }
 
 void SearchTool::add(const uint8_t* pat, unsigned len, int id, bool no_case)
-{
-    add(pat, len, (void*)(long)id, no_case);
-}
+{ add(pat, len, (void*)(long)id, no_case); }
 
 void SearchTool::add(const uint8_t* pat, unsigned len, void* id, bool no_case)
 {
     Mpse::PatternDescriptor desc(no_case, false, true);
 
     if ( mpsegrp->normal_mpse )
-        mpsegrp->normal_mpse->add_pattern(nullptr,  pat, len, desc, id);
+        mpsegrp->normal_mpse->add_pattern(pat, len, desc, id);
+
     if ( mpsegrp->offload_mpse )
-        mpsegrp->offload_mpse->add_pattern(nullptr,  pat, len, desc, id);
+        mpsegrp->offload_mpse->add_pattern(pat, len, desc, id);
 
     if ( len > max_len )
         max_len = len;
@@ -105,16 +101,11 @@ void SearchTool::prep()
 }
 
 int SearchTool::find(
-    const char* str,
-    unsigned len,
-    MpseMatch mf,
-    int& state,
-    bool confine,
-    void* user_data)
+    const char* str, unsigned len, MpseMatch mf, int& state, bool confine, void* user_data)
 {
     int num = 0;
-    SnortConfig* sc = SnortConfig::get_conf();
-    FastPatternConfig* fp = sc->fast_pattern_config;
+    const SnortConfig* sc = SnortConfig::get_conf();
+    const FastPatternConfig* fp = sc->fast_pattern_config;
 
     if ( confine && max_len > 0 )
     {
@@ -143,26 +134,18 @@ int SearchTool::find(
 }
 
 int SearchTool::find(
-    const char* str,
-    unsigned len,
-    MpseMatch mf,
-    bool confine,
-    void* user_data)
+    const char* str, unsigned len, MpseMatch mf, bool confine, void* user_data)
 {
     int state = 0;
     return find(str, len, mf, state, confine, user_data);
 }
 
 int SearchTool::find_all(
-    const char* str,
-    unsigned len,
-    MpseMatch mf,
-    bool confine,
-    void* user_data)
+    const char* str, unsigned len, MpseMatch mf, bool confine, void* user_data)
 {
     int num = 0;
-    SnortConfig* sc = SnortConfig::get_conf();
-    FastPatternConfig* fp = sc->fast_pattern_config;
+    const SnortConfig* sc = SnortConfig::get_conf();
+    const FastPatternConfig* fp = sc->fast_pattern_config;
 
     if ( confine && max_len > 0 )
     {
index a99f62891aa93fda4fd7fa85f149fa50092ca95d..abb247f1ecfbe5880904ba003452c1bc4ad9b87a 100644 (file)
@@ -27,6 +27,11 @@ namespace snort
 class SO_PUBLIC SearchTool
 {
 public:
+    // FIXIT-L SnortConfig should be passed to ctor, a lot of appid plumbing
+    // for now set_conf must be called before instantiation
+    static void set_conf(const SnortConfig* sc)
+    { conf = sc; }
+
     SearchTool(const char* method = nullptr, bool dfa = false);
     ~SearchTool();
 
@@ -49,6 +54,7 @@ public:
         bool confine = false, void* user_data = nullptr);
 
 private:
+    static const SnortConfig* conf;
     class MpseGroup* mpsegrp;
     unsigned max_len;
 };
index 3458e1b03d7faf2e7b778c1560bfffa40a829885..e509d2062733ffa21866ad94084f21271ae93e1d 100644 (file)
@@ -118,7 +118,7 @@ int SnortConfig::request_scratch(ScratchAllocator* s)
 
 void SnortConfig::release_scratch(int) { }
 
-SnortConfig* SnortConfig::get_conf()
+const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
 static unsigned parse_errors = 0;
@@ -260,7 +260,7 @@ TEST(mpse_hs_match, single)
 {
     Mpse::PatternDescriptor desc;
 
-    CHECK(hs->add_pattern(nullptr, (const uint8_t*)"foo", 3, desc, s_user) == 0);
+    CHECK(hs->add_pattern((const uint8_t*)"foo", 3, desc, s_user) == 0);
     CHECK(hs->prep_patterns(snort_conf) == 0);
     CHECK(hs->get_pattern_count() == 1);
 
@@ -275,7 +275,7 @@ TEST(mpse_hs_match, nocase)
 {
     Mpse::PatternDescriptor desc(true, true, false);
 
-    CHECK(hs->add_pattern(nullptr, (const uint8_t*)"foo", 3, desc, s_user) == 0);
+    CHECK(hs->add_pattern((const uint8_t*)"foo", 3, desc, s_user) == 0);
     CHECK(hs->prep_patterns(snort_conf) == 0);
     CHECK(hs->get_pattern_count() == 1);
 
@@ -291,7 +291,7 @@ TEST(mpse_hs_match, other)
 {
     Mpse::PatternDescriptor desc(false, true, false);
 
-    CHECK(hs->add_pattern(nullptr, (const uint8_t*)"foo", 3, desc, s_user) == 0);
+    CHECK(hs->add_pattern((const uint8_t*)"foo", 3, desc, s_user) == 0);
     CHECK(hs->prep_patterns(snort_conf) == 0);
     CHECK(hs->get_pattern_count() == 1);
 
@@ -307,9 +307,9 @@ TEST(mpse_hs_match, multi)
 {
     Mpse::PatternDescriptor desc;
 
-    CHECK(hs->add_pattern(nullptr, (const uint8_t*)"foo", 3, desc, s_user) == 0);
-    CHECK(hs->add_pattern(nullptr, (const uint8_t*)"bar", 3, desc, s_user) == 0);
-    CHECK(hs->add_pattern(nullptr, (const uint8_t*)"baz", 3, desc, s_user) == 0);
+    CHECK(hs->add_pattern((const uint8_t*)"foo", 3, desc, s_user) == 0);
+    CHECK(hs->add_pattern((const uint8_t*)"bar", 3, desc, s_user) == 0);
+    CHECK(hs->add_pattern((const uint8_t*)"baz", 3, desc, s_user) == 0);
 
     CHECK(hs->prep_patterns(snort_conf) == 0);
     CHECK(hs->get_pattern_count() == 3);
@@ -326,8 +326,7 @@ TEST(mpse_hs_match, regex)
 {
     Mpse::PatternDescriptor desc;
 
-    CHECK(hs->add_pattern(
-            nullptr, (const uint8_t*)"(foo)|(bar)|(baz)", 17, desc, s_user) == 0);
+    CHECK(hs->add_pattern((const uint8_t*)"(foo)|(bar)|(baz)", 17, desc, s_user) == 0);
 
     CHECK(hs->prep_patterns(snort_conf) == 0);
     CHECK(hs->get_pattern_count() == 1);
@@ -344,8 +343,7 @@ TEST(mpse_hs_match, pcre)
     Mpse::PatternDescriptor desc;
 
     // from sid 23286
-    CHECK(hs->add_pattern(
-            nullptr, (const uint8_t*)"\\.definition\\s*\\(", 21, desc, s_user) == 0);
+    CHECK(hs->add_pattern((const uint8_t*)"\\.definition\\s*\\(", 21, desc, s_user) == 0);
 
     CHECK(hs->prep_patterns(snort_conf) == 0);
     CHECK(hs->get_pattern_count() == 1);
@@ -405,8 +403,8 @@ TEST(mpse_hs_multi, single)
 {
     Mpse::PatternDescriptor desc;
 
-    CHECK(hs1->add_pattern(nullptr, (const uint8_t*)"uba", 3, desc, s_user) == 0);
-    CHECK(hs2->add_pattern(nullptr, (const uint8_t*)"tuba", 4, desc, s_user) == 0);
+    CHECK(hs1->add_pattern((const uint8_t*)"uba", 3, desc, s_user) == 0);
+    CHECK(hs2->add_pattern((const uint8_t*)"tuba", 4, desc, s_user) == 0);
 
     CHECK(hs1->prep_patterns(snort_conf) == 0);
     CHECK(hs2->prep_patterns(snort_conf) == 0);
index 68319c8c091b44c0f06ef6c543947a532b04d163..ecdb9fce098b42dda98014778fc4d34ba418d21d 100644 (file)
@@ -62,10 +62,7 @@ SnortConfig::SnortConfig(const SnortConfig* const)
 
 SnortConfig::~SnortConfig() = default;
 
-SnortConfig* SnortConfig::get_conf()
-{ return snort_conf; }
-
-SnortConfig* SnortConfig::get_parser_conf()
+const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
 unsigned get_instance_id()
@@ -157,28 +154,6 @@ extern const BaseApi* se_ac_bnfa;
 extern const BaseApi* se_ac_full;
 Mpse* mpse = nullptr;
 
-Mpse* MpseManager::get_search_engine(const char *type)
-{
-    const MpseApi* api;
-
-    if ( !strcmp(type, "ac_bnfa") )
-        api = (const MpseApi*) se_ac_bnfa;
-
-    else if ( !strcmp(type, "ac_full") )
-        api = (const MpseApi*) se_ac_full;
-
-    else
-        return nullptr;
-
-    api->init();
-    mpse = api->ctor(snort_conf, nullptr, &s_agent);
-
-    CHECK(mpse);
-
-    mpse->set_api(api);
-    return mpse;
-}
-
 void MpseManager::delete_search_engine(Mpse* eng)
 {
     const MpseApi* api = eng->get_api();
@@ -199,14 +174,31 @@ MpseGroup::~MpseGroup()
     }
 }
 
-bool MpseGroup::create_normal_mpse(SnortConfig*, const char* type)
+bool MpseGroup::create_normal_mpse(const SnortConfig*, const char* type)
 {
-    normal_mpse = MpseManager::get_search_engine(type);
+    const MpseApi* api;
+
+    if ( !strcmp(type, "ac_bnfa") )
+        api = (const MpseApi*) se_ac_bnfa;
+
+    else if ( !strcmp(type, "ac_full") )
+        api = (const MpseApi*) se_ac_full;
+
+    else
+        return false;
+
+    api->init();
+    mpse = api->ctor(snort_conf, nullptr, &s_agent);
+
+    CHECK(mpse);
+
+    mpse->set_api(api);
+    normal_mpse = mpse;
 
     return true;
 }
 
-bool MpseGroup::create_offload_mpse(SnortConfig*)
+bool MpseGroup::create_offload_mpse(const SnortConfig*)
 {
     offload_mpse = nullptr;
     return false;
@@ -248,7 +240,9 @@ TEST_GROUP(search_tool_bnfa)
     void setup() override
     {
         CHECK(se_ac_bnfa);
+        SearchTool::set_conf(snort_conf);
         stool = new SearchTool("ac_bnfa");
+        SearchTool::set_conf(nullptr);
 
         CHECK(stool->mpsegrp->normal_mpse);
 
@@ -338,7 +332,9 @@ TEST_GROUP(search_tool_full)
     void setup() override
     {
         CHECK(se_ac_full);
+        SearchTool::set_conf(snort_conf);
         stool = new SearchTool("ac_full", true);
+        SearchTool::set_conf(nullptr);
 
         CHECK(stool->mpsegrp->normal_mpse);
 
index 4ffc824ccdeadbab61c0bd7286c67332c3e416b7..28a23abc6a5ea65a50732787c2368addec345508 100644 (file)
@@ -252,7 +252,7 @@ public:
     Cip(CipProtoConf*);
     ~Cip() override;
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
 
     class StreamSplitter* get_splitter(bool c2s) override
@@ -278,7 +278,7 @@ Cip::~Cip()
     }
 }
 
-void Cip::show(SnortConfig*)
+void Cip::show(const SnortConfig*) const
 {
     if (!config)
         return;
index 257f7a7f4211ec581c0bed1fb9af6ce53d0003d7..a687227ca72185114667f832e818bd424840646f 100644 (file)
@@ -116,14 +116,14 @@ bool dce2_set_co_config(Value& v, dce2CoProtoConf& co)
     return true;
 }
 
-void print_dce2_common_config(dce2CommonProtoConf& common)
+void print_dce2_common_config(const dce2CommonProtoConf& common)
 {
     ConfigLogger::log_flag("limit_alerts", common.limit_alerts);
     ConfigLogger::log_flag("disable_defrag", common.disable_defrag);
     ConfigLogger::log_value("max_frag_len", common.max_frag_len);
 }
 
-void print_dce2_co_config(dce2CoProtoConf& co)
+void print_dce2_co_config(const dce2CoProtoConf& co)
 {
     print_dce2_common_config(co.common);
 
index 94f4740bec4733ab70af38ffedd9cd74daf6e9e9..6b8bad3b5d1ad395f8f391e4f5f87144089ac8b2 100644 (file)
@@ -396,9 +396,9 @@ inline void dce_alert(uint32_t gid, uint32_t sid, dce2CommonStats* stats, DCE2_S
 }
 
 bool dce2_set_common_config(snort::Value&, dce2CommonProtoConf&);
-void print_dce2_common_config(dce2CommonProtoConf&);
+void print_dce2_common_config(const dce2CommonProtoConf&);
 bool dce2_set_co_config(snort::Value&, dce2CoProtoConf&);
-void print_dce2_co_config(dce2CoProtoConf&);
+void print_dce2_co_config(const dce2CoProtoConf&);
 bool dce2_paf_abort(DCE2_SsnData*);
 void DCE2_Detect(DCE2_SsnData*);
 snort::Packet* DCE2_GetRpkt(snort::Packet*, DCE2_RpktType, const uint8_t*, uint32_t);
index 9fc6e14650ca8c0e0c45a899a30f11f0d55f7d0b..c093e980242942c96426ad8754705a1432bcc700 100644 (file)
@@ -321,7 +321,7 @@ public:
     Dce2Smb(const dce2SmbProtoConf&);
     ~Dce2Smb() override;
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
     void clear(Packet*) override;
 
@@ -348,7 +348,7 @@ Dce2Smb::~Dce2Smb()
     }
 }
 
-void Dce2Smb::show(SnortConfig*)
+void Dce2Smb::show(const SnortConfig*) const
 {
     print_dce2_smb_conf(config);
 }
index f3f0cc25398c695bed016fc83ef0011f4f8967ed..2c8dc15f55585731d93c114588015f973540fcca 100644 (file)
@@ -424,7 +424,7 @@ void Dce2SmbModule::get_data(dce2SmbProtoConf& dce2_smb_config)
     config.smb_invalid_shares = nullptr;
 }
 
-void print_dce2_smb_conf(dce2SmbProtoConf& config)
+void print_dce2_smb_conf(const dce2SmbProtoConf& config)
 {
     print_dce2_co_config(config.common);
 
index 86e0061eae872f96e4ee7290c8518f30803cb871..9dbacd0d4eaa336e69721e99b64dc472282ff265 100644 (file)
@@ -91,7 +91,7 @@ private:
     dce2SmbProtoConf config;
 };
 
-void print_dce2_smb_conf(dce2SmbProtoConf& config);
+void print_dce2_smb_conf(const dce2SmbProtoConf&);
 
 inline int64_t DCE2_ScSmbFileDepth(const dce2SmbProtoConf* sc)
 {
index f90dc68cd97476190551904146b44f1282a5c783..88c8877f085d11a534d54ee5c1e9efea5e78971b 100644 (file)
@@ -110,7 +110,7 @@ class Dce2Tcp : public Inspector
 public:
     Dce2Tcp(const dce2TcpProtoConf&);
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
     void clear(Packet*) override;
     StreamSplitter* get_splitter(bool c2s) override
@@ -127,7 +127,7 @@ Dce2Tcp::Dce2Tcp(const dce2TcpProtoConf& pc)
     config = pc;
 }
 
-void Dce2Tcp::show(SnortConfig*)
+void Dce2Tcp::show(const SnortConfig*) const
 {
     print_dce2_tcp_conf(config);
 }
index 798d3aa722167b6302e88099edfb2081c37ff942..1dfc2f3a25896feb29cee85acfac8755aea89f5a 100644 (file)
@@ -155,7 +155,7 @@ void Dce2TcpModule::get_data(dce2TcpProtoConf& dce2_tcp_config)
     dce2_tcp_config = config;
 }
 
-void print_dce2_tcp_conf(dce2TcpProtoConf& config)
+void print_dce2_tcp_conf(const dce2TcpProtoConf& config)
 {
     print_dce2_co_config(config.common);
 }
index 555a8719132ddfb0cd9fb414780af18068aa8ffd..56bbade41b4876992455be6343e12f6eae7be57c 100644 (file)
@@ -57,7 +57,7 @@ private:
     dce2TcpProtoConf config;
 };
 
-void print_dce2_tcp_conf(dce2TcpProtoConf& config);
+void print_dce2_tcp_conf(const dce2TcpProtoConf& config);
 
 #endif
 
index b8de97093dc82f841648a130191f0cb0fbfb3afb..222b2bc55df61209306bd0b6011980ef3ac64345 100644 (file)
@@ -109,7 +109,7 @@ class Dce2Udp : public Inspector
 {
 public:
     Dce2Udp(const dce2UdpProtoConf&);
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
     void clear(Packet*) override;
 
@@ -122,7 +122,7 @@ Dce2Udp::Dce2Udp(const dce2UdpProtoConf& pc)
     config = pc;
 }
 
-void Dce2Udp::show(SnortConfig*)
+void Dce2Udp::show(const SnortConfig*) const
 {
     print_dce2_udp_conf(config);
 }
index 8f32459d632a819e05d356f8367c3735163af488..c38c3c957be17e5ca4fb01576a70b38d0e16fc7f 100644 (file)
@@ -127,7 +127,7 @@ void Dce2UdpModule::get_data(dce2UdpProtoConf& dce2_udp_config)
     dce2_udp_config = config;
 }
 
-void print_dce2_udp_conf(dce2UdpProtoConf& config)
+void print_dce2_udp_conf(const dce2UdpProtoConf& config)
 {
     print_dce2_common_config(config.common);
 }
index 4c953ec46066bc58399c0ae25eb8b0d49503ad6f..27d36228e228200d1d31ce5588fcfaaab81302b1 100644 (file)
@@ -73,7 +73,7 @@ private:
     dce2UdpProtoConf config;
 };
 
-void print_dce2_udp_conf(dce2UdpProtoConf& config);
+void print_dce2_udp_conf(const dce2UdpProtoConf&);
 
 #endif
 
index d41d6af23b87cf072d096fed029600cdf9da6090..2327c89021856624e1d3cd37ec994074a0b4bfae 100644 (file)
@@ -219,7 +219,7 @@ class Dnp3 : public Inspector
 public:
     Dnp3(const dnp3ProtoConf&);
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
     bool get_buf(InspectionBuffer::Type, Packet*, InspectionBuffer&) override;
     void clear(Packet*) override;
@@ -239,7 +239,7 @@ Dnp3::Dnp3(const dnp3ProtoConf& pc)
 }
 
 
-void Dnp3::show(SnortConfig*)
+void Dnp3::show(const SnortConfig*) const
 {
     ConfigLogger::log_flag("check_crc", config.check_crc);
 }
index b89a4bb8003db427a6a618546ca05d8c517b3dc9..26648beb3bf367fcc0a71f70cae8ebfba291f388 100644 (file)
@@ -194,13 +194,13 @@ public:
     ~FtpClient() override
     { delete ftp_client; }
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override { }
 
     FTP_CLIENT_PROTO_CONF* ftp_client;
 };
 
-void FtpClient::show(SnortConfig*)
+void FtpClient::show(const SnortConfig*) const
 {
     if ( ftp_client )
         print_conf_client(ftp_client);
@@ -213,7 +213,7 @@ public:
     ~FtpServer() override;
 
     bool configure(SnortConfig*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
     StreamSplitter* get_splitter(bool) override;
 
@@ -242,7 +242,7 @@ bool FtpServer::configure(SnortConfig* sc)
     return !FTPCheckConfigs(sc, ftp_server);
 }
 
-void FtpServer::show(SnortConfig*)
+void FtpServer::show(const SnortConfig*) const
 {
     if ( ftp_server )
         print_conf_server(ftp_server);
index ccd2731c96812539061b6c0f4d705f18c3e9bc23..45388297ad945d0a32a9b8a4811dc41eb04e204d 100644 (file)
@@ -103,7 +103,7 @@ static void FTPDataProcess(
     // and no IPS rules are configured.
     if ( !status )
     {
-        IpsPolicy* empty_policy = snort::get_empty_ips_policy(SnortConfig::get_conf());
+        IpsPolicy* empty_policy = snort::get_empty_ips_policy(p->context->conf);
         if ( empty_policy->policy_id == p->flow->ips_policy_id )
         {
             if ( PacketTracer::is_active() )
index 27b01eccf599986d115d54054197c4c49fa65aa5..98ec7088d62741d25c7aaa9dab23b03fdaa3b1d9 100644 (file)
@@ -185,7 +185,7 @@ public:
     ~Telnet() override;
 
     bool configure(SnortConfig*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
 
     bool get_buf(InspectionBuffer::Type, Packet*, InspectionBuffer&) override;
@@ -211,7 +211,7 @@ bool Telnet::configure(SnortConfig* sc)
     return !TelnetCheckConfigs(sc, config);
 }
 
-void Telnet::show(SnortConfig*)
+void Telnet::show(const SnortConfig*) const
 {
     if ( !config )
         return;
index 544110994f5caa1a09a2d51c34545096b9eb996d..198d4aaa78a1e8613d500de1d6e068033ca24c45 100644 (file)
@@ -118,7 +118,7 @@ bool HttpInspect::configure(SnortConfig* )
     return true;
 }
 
-void HttpInspect::show(snort::SnortConfig*)
+void HttpInspect::show(const SnortConfig*) const
 {
     assert(params);
 
index 1c51e1474b8df31d8e419c625d4a8ba3032bbeec..593f21aed52ed348681f2648a9dcc3467b027ec3 100644 (file)
@@ -51,7 +51,7 @@ public:
     bool get_fp_buf(snort::InspectionBuffer::Type ibt, snort::Packet* p,
         snort::InspectionBuffer& b) override;
     bool configure(snort::SnortConfig*) override;
-    void show(snort::SnortConfig*) override;
+    void show(const snort::SnortConfig*) const override;
     void eval(snort::Packet* p) override;
     void clear(snort::Packet* p) override;
 
index 001f8e9c0851c68cdee73bedbf3f84414ef949f4..baeebf33d45eecca7cfa655e1df8c6da78240cbc 100644 (file)
@@ -694,7 +694,7 @@ public:
     ~Imap() override;
 
     bool configure(SnortConfig*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
 
     StreamSplitter* get_splitter(bool c2s) override
@@ -732,7 +732,7 @@ bool Imap::configure(SnortConfig*)
     return true;
 }
 
-void Imap::show(SnortConfig*)
+void Imap::show(const SnortConfig*) const
 {
     if ( config )
         config->decode_conf.show();
index 4819da9e86b502b31f4884badadf8933c0d65813..a68a436481c8c74dfdedb5e69765250217c5da04 100644 (file)
@@ -635,7 +635,7 @@ public:
     ~Pop() override;
 
     bool configure(SnortConfig*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
 
     StreamSplitter* get_splitter(bool c2s) override
@@ -673,7 +673,7 @@ bool Pop::configure(SnortConfig* )
     return true;
 }
 
-void Pop::show(SnortConfig*)
+void Pop::show(const SnortConfig*) const
 {
     if ( config )
         config->decode_conf.show();
index 6902a05f9daf20e42b419255c6d8e0e557548b0f..e557307cadf108a3262af05947823a3f2e456ca1 100644 (file)
@@ -192,7 +192,7 @@ public:
     Sip(SIP_PROTO_CONF*);
     ~Sip() override;
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
     bool get_buf(InspectionBuffer::Type, Packet*, InspectionBuffer&) override;
 
@@ -220,7 +220,7 @@ Sip::~Sip()
     }
 }
 
-void Sip::show(SnortConfig*)
+void Sip::show(const SnortConfig*) const
 {
     if ( !config )
         return;
index c6b0eb04ee2fc51bc33346ba41b422a5c696c3b2..4ce1d373ed04e7f81bdbc7e393227ac6083ed014 100644 (file)
@@ -1402,7 +1402,7 @@ public:
     ~Smtp() override;
 
     bool configure(SnortConfig*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
     bool get_buf(InspectionBuffer::Type, Packet*, InspectionBuffer&) override;
     void clear(Packet*) override;
@@ -1451,7 +1451,7 @@ bool Smtp::configure(SnortConfig*)
     return true;
 }
 
-void Smtp::show(SnortConfig*)
+void Smtp::show(const SnortConfig*) const
 {
     if ( config )
         config->show();
index 622978c57ee57c037da21136a14935b3b80fe47d..bb9ddb019624f40d7f1dd1c1fa846dafc754cac2 100644 (file)
@@ -725,7 +725,7 @@ public:
     Ssh(SSH_PROTO_CONF*);
     ~Ssh() override;
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
 
 private:
@@ -743,7 +743,7 @@ Ssh::~Ssh()
         delete config;
 }
 
-void Ssh::show(SnortConfig*)
+void Ssh::show(const SnortConfig*) const
 {
     if ( !config )
         return;
index 89a9d51a8107de29b975866bb538c38ebfbd27c6..cc1e1306d879e76c7c98321bfd56ad10d6571675 100644 (file)
@@ -410,7 +410,7 @@ public:
     Ssl(SSL_PROTO_CONF*);
     ~Ssl() override;
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     void eval(Packet*) override;
 
     StreamSplitter* get_splitter(bool c2s) override
@@ -431,7 +431,7 @@ Ssl::~Ssl()
         delete config;
 }
 
-void Ssl::show(SnortConfig*)
+void Ssl::show(const SnortConfig*) const
 {
     if ( !config )
         return;
index 52efa534803901725a690e81e30879963b78c5f8..97997805ee54ee82e67b5727c5bcf60a9d589c0f 100644 (file)
@@ -353,7 +353,7 @@ SfIpRet SfIp::set(const void* src)
 
 /* Obfuscates this IP with an obfuscation CIDR
     Makes this:  ob | (this & mask) */
-void SfIp::obfuscate(SfCidr* ob)
+void SfIp::obfuscate(const SfCidr* ob)
 {
     const uint32_t* ob_p;
     int index, i;
index 93f112adb3913470c1d76bf73521f24b2c295bcb..b5cd78cc7b6e2a663942be2654975ecd106b7db1 100644 (file)
@@ -94,7 +94,7 @@ struct SO_PUBLIC SfIp
     const char* ntop(char* buf, int bufsize) const;
     const char* ntop(SfIpString) const;
 
-    void obfuscate(SfCidr* ob);
+    void obfuscate(const SfCidr* ob);
 
 private:
     int cidr_mask(int val);
index 9d6b08097c4ed6d134450352f5d0e4f4cecd75e1..0270a2900bcd91a5ee154eb504a37b05d12355a0 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <functional>
 
+#include "detection/ips_context.h"
 #include "flow/expect_cache.h"
 #include "flow/flow_control.h"
 #include "flow/prune_stats.h"
@@ -153,7 +154,7 @@ class StreamBase : public Inspector
 {
 public:
     StreamBase(const StreamModuleConfig*);
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
 
     void tinit() override;
     void tterm() override;
@@ -213,7 +214,7 @@ void StreamBase::tterm()
     FlushBucket::clear();
 }
 
-void StreamBase::show(SnortConfig* sc)
+void StreamBase::show(const SnortConfig* sc) const
 {
     if ( sc )
         ConfigLogger::log_flag("ip_frags_only", sc->ip_frags_only());
@@ -234,7 +235,7 @@ void StreamBase::eval(Packet* p)
 
     case PktType::IP:
         if ( p->has_ip() and ((p->ptrs.decode_flags & DECODE_FRAG) or
-            !SnortConfig::get_conf()->ip_frags_only()) )
+            !p->context->conf->ip_frags_only()) )
         {
             bool new_flow = false;
             flow_con->process(PktType::IP, p, &new_flow);
index c9f2bb4f6c4f62faebb7dcc1200168d836d88a54..2d55785797b267c84eccf090185892621805c87c 100644 (file)
@@ -41,7 +41,7 @@ public:
     { config.upload = b; }
 
     NORETURN_ASSERT void eval(Packet*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
 
     StreamFileConfig config;
 };
@@ -52,7 +52,7 @@ NORETURN_ASSERT void StreamFile::eval(Packet*)
     assert(false);
 }
 
-void StreamFile::show(SnortConfig*)
+void StreamFile::show(const SnortConfig*) const
 {
     ConfigLogger::log_flag("upload", config.upload);
 }
index a8ab9f627c582ba29927223ad3f5f3db3d289d82..c1d4195f5fb6ae85f8da4752008ad443969b6aca 100644 (file)
@@ -43,8 +43,10 @@ void FlushBucket::set(unsigned sz)
 
     if ( sz )
         s_flush_bucket = new ConstFlushBucket(sz);
+
     else if ( SnortConfig::static_hash() )
         s_flush_bucket = new StaticFlushBucket;
+
     else
         s_flush_bucket = new RandomFlushBucket;
 
index 2df3afb8d527b7ae6c18e53ba454b05232daecda..2221afe8bfea0bbfab57f37816f76c8757bcacd3 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "icmp_session.h"
 
+#include "detection/ips_context.h"
 #include "flow/flow_key.h"
 #include "memory/memory_cap.h"
 #include "profiler/profiler_defs.h"
@@ -140,9 +141,10 @@ static int ProcessIcmpUnreach(Packet* p)
 
     // FIXIT-L see FlowKey::init*() - call those instead
     // or do mpls differently for ip4 and ip6
-    skey.init_vlan(vlan);
-    skey.init_address_space(0);
-    skey.init_mpls(0);
+    const SnortConfig* sc = p->context->conf;
+    skey.init_vlan(sc, vlan);
+    skey.init_address_space(sc, 0);
+    skey.init_mpls(sc, 0);
 
     switch (p->type())
     {
index 10dbcd8473ca38a3c08864c36d08ef5e4e0990a4..2074a7d78f4fac63d183e598e575dcc5dbe32a9d 100644 (file)
@@ -50,7 +50,7 @@ public:
     StreamIcmp(StreamIcmpConfig*);
     ~StreamIcmp() override;
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     NORETURN_ASSERT void eval(Packet*) override;
 
 public:
@@ -67,7 +67,7 @@ StreamIcmp::~StreamIcmp()
     delete config;
 }
 
-void StreamIcmp::show(SnortConfig*)
+void StreamIcmp::show(const SnortConfig*) const
 {
     if ( !config )
         return;
index 77481ddb27e3c76db95c5c9feb4a32ab3fe46ebc..d7498f24c10228a180e6c0f5bb82365f12a43cf8 100644 (file)
@@ -838,7 +838,7 @@ bool Defrag::configure(SnortConfig* sc)
     return true;
 }
 
-void Defrag::show(SnortConfig*)
+void Defrag::show() const
 {
     ConfigLogger::log_value("max_frags", engine.max_frags);
     ConfigLogger::log_value("max_overlaps", engine.max_overlaps);
@@ -1390,7 +1390,7 @@ left_overlap_last:
         }
     }
 
-    if ((uint16_t)fragLength > SnortConfig::get_conf()->daq_config->get_mru_size())
+    if ((uint16_t)fragLength > p->context->conf->daq_config->get_mru_size())
     {
         debug_logf(stream_ip_trace, "Overly large fragment %d 0x%x 0x%x %d\n",
             fragLength, p->ptrs.ip_api.dgram_len(), p->ptrs.ip_api.off(),
@@ -1750,7 +1750,7 @@ int Defrag::new_tracker(Packet* p, FragTracker* ft)
     fragStart = p->data;
 
     /* Just to double check */
-    if (!fragLength or fragLength > SnortConfig::get_conf()->daq_config->get_mru_size())
+    if (!fragLength or fragLength > p->context->conf->daq_config->get_mru_size())
     {
         debug_logf(stream_ip_trace, "Bad fragment length:%d(0x%x) off:0x%x(%d)\n",
             fragLength, p->ptrs.ip_api.dgram_len(), p->ptrs.ip_api.off(),
index 73b194d9cad7ec36ca429efaa7af7405259fdfd8..b69c96c4c706b94f24c7ac4cbcffdca9d331fa77 100644 (file)
@@ -40,7 +40,7 @@ public:
     Defrag(FragEngine&);
 
     bool configure(snort::SnortConfig*);
-    void show(snort::SnortConfig*);
+    void show() const;
 
     void process(snort::Packet*, FragTracker*);
     void cleanup(FragTracker*);
index eecb0c4aa6cfbde1614bc082d2523d34c448e11a..3a5004a6cb0b36f0b25e2e8d92ee971fd3949662 100644 (file)
@@ -248,7 +248,7 @@ public:
     ~StreamIp() override;
 
     bool configure(SnortConfig*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     NORETURN_ASSERT void eval(Packet*) override;
     StreamIpConfig* config;
     Defrag* defrag;
index 694efe0845ce575f88b11f903d95097b9c374f13..d7bfbfb00c28b1d9a6f0ad22ad14add6390e1403 100644 (file)
@@ -70,7 +70,7 @@ public:
     ~StreamIp() override;
 
     bool configure(SnortConfig*) override;
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
 
     NORETURN_ASSERT void eval(Packet*) override;
 
@@ -97,12 +97,12 @@ bool StreamIp::configure(SnortConfig* sc)
     return true;
 }
 
-void StreamIp::show(SnortConfig* sc)
+void StreamIp::show(const SnortConfig*) const
 {
     if ( !config )
         return;
 
-    defrag->show(sc);
+    defrag->show();
     ConfigLogger::log_value("session_timeout", config->session_timeout);
 }
 
index 2f96dd37df53163a1dd9f85a66137f78fbd094a1..603f3d5e8bd63714f57dc4755d3648198bc07d61 100644 (file)
@@ -89,7 +89,8 @@ Flow* Stream::get_flow(
     uint16_t vlan, uint32_t mplsId, uint16_t addressSpaceId)
 {
     FlowKey key;
-    key.init(type, proto, srcIP, srcPort, dstIP, dstPort, vlan, mplsId, addressSpaceId);
+    const SnortConfig* sc = SnortConfig::get_conf();
+    key.init(sc, type, proto, srcIP, srcPort, dstIP, dstPort, vlan, mplsId, addressSpaceId);
     return get_flow(&key);
 }
 
@@ -99,6 +100,7 @@ void Stream::populate_flow_key(Packet* p, FlowKey* key)
         return;
 
     key->init(
+        SnortConfig::get_conf(),
         p->type(), p->get_ip_proto_next(),
         p->ptrs.ip_api.get_src(), p->ptrs.sp,
         p->ptrs.ip_api.get_dst(), p->ptrs.dp,
@@ -330,8 +332,8 @@ void Stream::init_active_response(const Packet* p, Flow* flow)
 
     flow->response_count = 1;
 
-    if ( SnortConfig::get_conf()->max_responses > 1 )
-        flow->set_expire(p, SnortConfig::get_conf()->min_interval);
+    if ( p->context->conf->max_responses > 1 )
+        flow->set_expire(p, p->context->conf->min_interval);
 }
 
 void Stream::purge_flows()
@@ -558,7 +560,7 @@ uint8_t Stream::get_flow_ttl(Flow* flow, char dir, bool outer)
 // that we only send in the still active direction(s).
 static void active_response(Packet* p, Flow* lwssn)
 {
-    uint8_t max = SnortConfig::get_conf()->max_responses;
+    uint8_t max = p->context->conf->max_responses;
 
     if ( p->is_from_client() )
         lwssn->session_state |= STREAM_STATE_DROP_CLIENT;
@@ -567,7 +569,7 @@ static void active_response(Packet* p, Flow* lwssn)
 
     if ( (lwssn->response_count < max) && lwssn->expired(p) )
     {
-        uint32_t delay = SnortConfig::get_conf()->min_interval;
+        uint32_t delay = p->context->conf->min_interval;
         EncodeFlags flags =
             ( (lwssn->session_state & STREAM_STATE_DROP_CLIENT) &&
             (lwssn->session_state & STREAM_STATE_DROP_SERVER) ) ?
index cafac897d82531b5e530f1b699cfdcf663192fbb..fdb3e52626eb58ed091e96af900b0ae676aac385 100644 (file)
@@ -302,7 +302,7 @@ TEST_CASE("IPS Stream Reassemble", "[ips_stream_reassemble][stream_tcp]")
 
     SECTION("reassembler initialization")
     {
-        bool status = reassembler->begin(nullptr, 0, SnortConfig::get_conf());
+        bool status = reassembler->begin(nullptr, 0, SnortConfig::get_main_conf());
         CHECK(status);
         CHECK( ( reassembler->srod.enable == 0 ) );
         CHECK( ( reassembler->srod.direction == 0 ) );
index 5fd23df43af9afc92ef7c47e1466ce181e8be32e..e149f5e7af34738f818a22b152a61439c670459d 100644 (file)
@@ -42,7 +42,7 @@ public:
     StreamTcp(TcpStreamConfig*);
     ~StreamTcp() override;
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     bool configure(SnortConfig*) override;
     void tinit() override;
     void tterm() override;
@@ -60,7 +60,7 @@ StreamTcp::StreamTcp (TcpStreamConfig* c)
 StreamTcp::~StreamTcp()
 { delete config; }
 
-void StreamTcp::show(SnortConfig*)
+void StreamTcp::show(const SnortConfig*) const
 {
     if ( !config )
         return;
index 7b39d13fcfdecfb6d553eb8a985a41e26acad755..3ea0de62f3ec7985684d15c407856f0c9b4b2c6f 100644 (file)
@@ -368,6 +368,8 @@ void TcpReassembler::show_rebuilt_packet(TcpReassemblerState& trs, Packet* pkt)
 {
     if ( trs.sos.session->config->flags & STREAM_CONFIG_SHOW_PACKETS )
     {
+        // FIXIT-L setting conf here is required because this is called before context start
+        pkt->context->conf = SnortConfig::get_conf();
         LogFlow(pkt);
         LogNetData(pkt->data, pkt->dsize, pkt);
     }
index 5d06521d09db321281da3257066243d7dd88bd93..b1f18b067dc85994fe6ca59565e039076bf997e4 100644 (file)
@@ -1026,7 +1026,8 @@ bool TcpSession::do_packet_analysis_pre_checks(Packet* p, TcpSegmentDescriptor&
 
     update_ignored_session(tsd);
     set_window_scale(*talker, *listener, tsd);
-    if ( SnortConfig::is_address_anomaly_check_enabled() )
+
+    if ( p->context->conf->is_address_anomaly_check_enabled() )
         check_for_session_hijack(tsd);
 
     return true;
@@ -1036,7 +1037,7 @@ bool TcpSession::validate_packet_established_session(TcpSegmentDescriptor& tsd)
 {
     pkt_action_mask |= listener->normalizer.handle_paws(tsd);
 
-    if ( SnortConfig::inline_mode() )
+    if ( tsd.get_pkt()->context->conf->inline_mode() )
        if ( tsd.get_tcph()->is_ack() && !listener->is_ack_valid(tsd.get_seg_ack()) )
            pkt_action_mask |= ACTION_BAD_PKT;
 
index 2937936f96147d711c7215a54e7f86be72a9938c..8ee9a620acdee250d6c412305049c8245ced2703 100644 (file)
@@ -38,7 +38,8 @@ using namespace snort;
 namespace snort
 {
 THREAD_LOCAL SnortConfig* snort_conf = nullptr;
-SnortConfig* SnortConfig::get_conf()
+
+const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
 static StreamSplitter* next_splitter = nullptr;
index f8444a5bc622738a662fba23143323172a9c8fba..3e3feb42f11da4af5310a6d265f8a78d454251f7 100644 (file)
@@ -49,7 +49,7 @@ public:
     StreamUdp(StreamUdpConfig*);
     ~StreamUdp() override;
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
     NORETURN_ASSERT void eval(Packet*) override;
 
 public:
@@ -66,7 +66,7 @@ StreamUdp::~StreamUdp()
     delete config;
 }
 
-void StreamUdp::show(SnortConfig*)
+void StreamUdp::show(const SnortConfig*) const
 {
     if ( !config )
         return;
index f747e188df4a42c4bb1106bbf68d2936590b0602..7fe7124432ccb18ee74c997d4586064a87398184 100644 (file)
@@ -49,7 +49,7 @@ public:
     StreamUser(StreamUserConfig*);
     ~StreamUser() override;
 
-    void show(SnortConfig*) override;
+    void show(const SnortConfig*) const override;
 
     NORETURN_ASSERT void eval(Packet*) override;
 
@@ -67,7 +67,7 @@ StreamUser::~StreamUser()
     delete config;
 }
 
-void StreamUser::show(SnortConfig*)
+void StreamUser::show(const SnortConfig*) const
 {
     if ( !config )
         return;
index 9cc37a7b80f3c291239cbd9f48d62471a317137c..de14a3145a6681c5f6c3d7c4a629966a931ed4b5 100644 (file)
@@ -136,7 +136,7 @@ void HostAttributeEntry::update_service
     }
 
     // application service not found, add it
-    if ( service_count >= SnortConfig::get_max_services_per_host() )
+    if ( service_count >= SnortConfig::get_conf()->get_max_services_per_host() )
         return;
 
     ApplicationEntry* app = new ApplicationEntry(port, protocol, snort_protocol_id);
@@ -158,7 +158,8 @@ void HostAttributes::load_hosts_file(SnortConfig* sc, const char* fname)
     delete next_cfg;
     next_cfg = new HostAttributesTable(sc->max_attribute_hosts);
 
-    Shell sh = Shell(fname);
+    Shell sh(fname);
+
     if ( !sh.configure(sc, false, true) )
     {
         delete next_cfg;
index 40b6abb5edfdbc8ab473e7d790987699c6b42eff..fd6f79f84eb5408e5682038bd7a497ed4b9d8805 100644 (file)
@@ -33,7 +33,7 @@ using namespace snort;
 
 static THREAD_LOCAL TraceLogger* g_trace_logger = nullptr;
 
-void TraceApi::thread_init(SnortConfig* sc)
+void TraceApi::thread_init(const SnortConfig* sc)
 {
     if ( sc->trace_config->logger_factory )
         g_trace_logger = sc->trace_config->logger_factory->instantiate();
@@ -47,7 +47,7 @@ void TraceApi::thread_term()
     g_trace_logger = nullptr;
 }
 
-void TraceApi::thread_reinit(SnortConfig* sc)
+void TraceApi::thread_reinit(const SnortConfig* sc)
 {
     sc->trace_config->setup_module_trace();
 }
index 06268b8cc94fad5bdc6d7053d6702d632af2a627..ffedd084860739cbe6a35cf3f713c4e5b6e26706 100644 (file)
@@ -29,8 +29,8 @@ struct SnortConfig;
 class TraceApi
 {
 public:
-    static void thread_init(SnortConfig* sc);
-    static void thread_reinit(SnortConfig* sc);
+    static void thread_init(const SnortConfig* sc);
+    static void thread_reinit(const SnortConfig* sc);
     static void thread_term();
 
     static void log(const char* log_msg, const char* name,
index 48a9ed2d1de83b2fcaecea6fbc9f1cd1e9ff0ad8..b83d5a72b1e4f1a3d03dbe38def7518a409f961e 100644 (file)
@@ -230,8 +230,8 @@ void DropStats()
 
     LogLabel("Module Statistics");
     const char* exclude = "daq snort";
-    ModuleManager::dump_stats(SnortConfig::get_conf(), exclude, false);
-    ModuleManager::dump_stats(SnortConfig::get_conf(), exclude, true);
+    ModuleManager::dump_stats(exclude, false);
+    ModuleManager::dump_stats(exclude, true);
 
     LogLabel("Summary Statistics");
     show_stats((PegCount*)&proc_stats, proc_names, array_size(proc_names)-1, "process");
@@ -245,17 +245,17 @@ void PrintStatistics()
     DropStats();
     timing_stats();
 
-    // FIXIT-L can do flag saving with RAII (much cleaner)
-    int save_quiet_flag = SnortConfig::get_conf()->logging_flags & LOGGING_FLAG__QUIET;
+    SnortConfig* sc = SnortConfig::get_main_conf();
 
-    SnortConfig::get_conf()->logging_flags &= ~LOGGING_FLAG__QUIET;
+    // FIXIT-L can do flag saving with RAII (much cleaner)
+    int save_quiet_flag = sc->logging_flags & LOGGING_FLAG__QUIET;
+    sc->logging_flags &= ~LOGGING_FLAG__QUIET;
 
     // once more for the main thread
     Profiler::consolidate_stats();
-
     Profiler::show_stats();
 
-    SnortConfig::get_conf()->logging_flags |= save_quiet_flag;
+    sc->logging_flags |= save_quiet_flag;
 }
 
 //-------------------------------------------------------------------------
index 905fa6f9f862a697d2f62fc89024cc09145d98f9..0694efbb100d1e047f9d26ecbaa3609695bafc19 100644 (file)
@@ -159,12 +159,13 @@ void ts_print(const struct timeval* tvp, char* timebuf)
         tvp = &tv;
     }
 
-    int localzone = SnortConfig::get_conf()->thiszone;
+    const SnortConfig* sc = SnortConfig::get_conf();
+    int localzone = sc->thiszone;
 
     /*
     **  If we're doing UTC, then make sure that the timezone is correct.
     */
-    if (SnortConfig::output_use_utc())
+    if (sc->output_use_utc())
         localzone = 0;
 
     int s = (tvp->tv_sec + localzone) % SECONDS_PER_DAY;
@@ -178,7 +179,7 @@ void ts_print(const struct timeval* tvp, char* timebuf)
         (void)SnortSnprintf(timebuf, TIMEBUF_SIZE, "%lu", tvp->tv_sec);
 
     }
-    else if (SnortConfig::output_include_year())
+    else if (sc->output_include_year())
     {
         int year = (lt->tm_year >= 100) ? (lt->tm_year - 100) : lt->tm_year;
 
@@ -240,14 +241,16 @@ static FILE* pid_file = nullptr;
 
 void CreatePidFile(pid_t pid)
 {
-    SnortConfig::get_conf()->pid_filename = SnortConfig::get_conf()->log_dir;
-    SnortConfig::get_conf()->pid_filename += "/snort.pid";
+    SnortConfig* sc = SnortConfig::get_main_conf();
+
+    sc->pid_filename = sc->log_dir;
+    sc->pid_filename += "/snort.pid";
 
     std::string pid_lockfilename;
 
-    if ( !SnortConfig::no_lock_pid_file() )
+    if ( !sc->no_lock_pid_file() )
     {
-        pid_lockfilename = SnortConfig::get_conf()->pid_filename;
+        pid_lockfilename = sc->pid_filename;
         pid_lockfilename += ".lck";
 
         /* First, lock the PID file */
@@ -267,18 +270,18 @@ void CreatePidFile(pid_t pid)
             {
                 ClosePidFile();
                 ParseError("Failed to Lock PID File \"%s\" for PID \"%d\"",
-                    SnortConfig::get_conf()->pid_filename.c_str(), (int)pid);
+                    sc->pid_filename.c_str(), (int)pid);
                 return;
             }
         }
     }
 
     /* Okay, were able to lock PID file, now open and write PID */
-    pid_file = fopen(SnortConfig::get_conf()->pid_filename.c_str(), "w");
+    pid_file = fopen(sc->pid_filename.c_str(), "w");
     if (pid_file)
     {
         LogMessage("Writing PID \"%d\" to file \"%s\"\n", (int)pid,
-            SnortConfig::get_conf()->pid_filename.c_str());
+            sc->pid_filename.c_str());
         fprintf(pid_file, "%d\n", (int)pid);
         fflush(pid_file);
     }
@@ -287,8 +290,8 @@ void CreatePidFile(pid_t pid)
         fclose(pid_lockfile);
         const char* error = get_error(errno);
         ErrorMessage("Failed to create pid file %s, Error: %s\n",
-            SnortConfig::get_conf()->pid_filename.c_str(), error);
-        SnortConfig::get_conf()->pid_filename.clear();
+            sc->pid_filename.c_str(), error);
+        sc->pid_filename.clear();
     }
     if ( !pid_lockfilename.empty() )
         unlink(pid_lockfilename.c_str());
@@ -523,7 +526,7 @@ static char* GetAbsolutePath(const char* dir, PathBuf& buf)
 }
 
 /**
- * Chroot and adjust the SnortConfig::get_conf()->log_dir reference
+ * Chroot and adjust the log_dir reference
  */
 bool EnterChroot(std::string& root_dir, std::string& log_dir)
 {
index a7b0ea50e95defc9cbda92a7d0a9088dba3f2319..6b0cbbf80a35cd5e147d5ed4c83dec613413bf67 100644 (file)
@@ -28,7 +28,7 @@
 
 namespace snort
 {
-char* ObfuscateIpToText(const SfIp* ip, const SfCidr& homenet, SfCidr& obfunet, InetBuf& ab)
+char* ObfuscateIpToText(const SfIp* ip, const SfCidr& homenet, const SfCidr& obfunet, InetBuf& ab)
 {
     ab[0] = 0;
 
index bdf01a611521fc3bcbacee221b27c6cafb9a2dce..09af96a056f10aace5006af13eb83584f1511cf6 100644 (file)
@@ -29,7 +29,7 @@ struct SfCidr;
 typedef char InetBuf[INET6_ADDRSTRLEN];
 
 SO_PUBLIC char* ObfuscateIpToText(
-    const struct SfIp*, const SfCidr& homenet, SfCidr& obfuscate_net, InetBuf&);
+    const struct SfIp*, const SfCidr& homenet, const SfCidr& obfuscate_net, InetBuf&);
 }
 #endif