]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
refactor event queue into DetectionEngine
authorRuss Combs <rucombs@cisco.com>
Sat, 22 Oct 2016 01:26:26 +0000 (21:26 -0400)
committerRuss Combs <rucombs@cisco.com>
Wed, 18 Jan 2017 14:12:46 +0000 (09:12 -0500)
42 files changed:
extra/src/inspectors/dpx/dpx.cc
extra/src/inspectors/http_server/hi_events.cc
extra/src/inspectors/http_server/hi_stream_splitter.cc
src/detection/fp_detect.cc
src/events/event_queue.cc
src/events/event_queue.h
src/events/event_wrapper.cc
src/framework/codec.cc
src/latency/packet_latency.cc
src/latency/rule_latency.cc
src/network_inspectors/arp_spoof/arp_spoof.cc
src/network_inspectors/reputation/reputation_inspect.cc
src/protocols/packet_manager.cc
src/service_inspectors/back_orifice/back_orifice.cc
src/service_inspectors/dce_rpc/dce_common.h
src/service_inspectors/dnp3/dnp3.cc
src/service_inspectors/dnp3/dnp3_reassembly.cc
src/service_inspectors/dns/dns.cc
src/service_inspectors/ftp_telnet/pp_ftp.cc
src/service_inspectors/ftp_telnet/pp_telnet.cc
src/service_inspectors/gtp/gtp_parser.cc
src/service_inspectors/http_inspect/http_event_gen.h
src/service_inspectors/http_inspect/test/http_module_test.cc
src/service_inspectors/http_inspect/test/http_transaction_test.cc
src/service_inspectors/http_inspect/test/http_uri_norm_test.cc
src/service_inspectors/imap/imap.cc
src/service_inspectors/modbus/modbus.cc
src/service_inspectors/modbus/modbus_decode.cc
src/service_inspectors/modbus/modbus_paf.cc
src/service_inspectors/pop/pop.cc
src/service_inspectors/rpc_decode/rpc_decode.cc
src/service_inspectors/sip/sip.cc
src/service_inspectors/sip/sip_dialog.cc
src/service_inspectors/sip/sip_parser.cc
src/service_inspectors/smtp/smtp.cc
src/service_inspectors/smtp/smtp_paf.cc
src/service_inspectors/smtp/smtp_xlink2state.cc
src/service_inspectors/ssh/ssh.cc
src/service_inspectors/ssl/ssl_inspector.cc
src/stream/ip/ip_defrag.cc
src/stream/tcp/tcp_event_logger.cc
src/utils/stats.cc

index bfa863dbe8cfe4bf3016a4f231ef679a2bd57df2..c54feb380d7cb751aa81222f1dc20023d9eac549 100644 (file)
@@ -74,7 +74,7 @@ void Dpx::eval(Packet* p)
     assert(p->is_udp());
 
     if ( p->ptrs.dp == port && p->dsize > max )
-        SnortEventqAdd(DPX_GID, DPX_SID);
+        DetectionEngine::queue_event(DPX_GID, DPX_SID);
 
     ++dpxstats.total_packets;
 }
index e6f245787ed645cd6d0b43c7bb929139139604f5..7eff44ac14936eb58b670e731fcf4dd1c4b85b47 100644 (file)
@@ -27,6 +27,7 @@
 #include <assert.h>
 #include <strings.h>
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "main/thread.h"
 
@@ -45,7 +46,7 @@ static void queue(unsigned gid, uint64_t mask)
 
     while ( (sid = ffs(mask)) )
     {
-        SnortEventqAdd(gid, sid);
+        DetectionEngine::queue_event(gid, sid);
         mask ^= (1 << (sid-1));
     }
 }
index ef9ab821f709bd8314f058cab3bdc61c3a86937a..17038bba1588ecc6677f62beb125b74446f623e4 100644 (file)
 
 #include "hi_stream_splitter.h"
 
+<<<<<<< HEAD
 #include "events/event_queue.h"
 #include "main/snort_debug.h"
+=======
+#include "hi_events.h"
+#include "main/snort_debug.h"
+#include "detection/detection_engine.h"
+>>>>>>> refactor event queue into DetectionEngine
 #include "protocols/packet.h"
 #include "stream/stream.h"
 #include "utils/util.h"
@@ -654,30 +660,22 @@ static inline int xton(int c)
 
 static inline void hi_paf_event_post()
 {
-    SnortEventqAdd(
-        GID_HTTP_CLIENT,
-        HI_CLIENT_UNBOUNDED_POST);
+    DetectionEngine::queue_event(GID_HTTP_CLIENT, HI_CLIENT_UNBOUNDED_POST);
 }
 
 static inline void hi_paf_event_simple()
 {
-    SnortEventqAdd(
-        GID_HTTP_CLIENT,
-        HI_CLIENT_SIMPLE_REQUEST);
+    DetectionEngine::queue_event(GID_HTTP_CLIENT, HI_CLIENT_SIMPLE_REQUEST);
 }
 
 static inline void hi_paf_event_msg_size()
 {
-    SnortEventqAdd(
-        GID_HTTP_SERVER,
-        HI_CLISRV_MSG_SIZE_EXCEPTION);
+    DetectionEngine::queue_event(GID_HTTP_SERVER, HI_CLISRV_MSG_SIZE_EXCEPTION);
 }
 
 static inline void hi_paf_event_pipe()
 {
-    SnortEventqAdd(
-        GID_HTTP_CLIENT,
-        HI_CLIENT_PIPELINE_MAX);
+    DetectionEngine::queue_event(GID_HTTP_CLIENT, HI_CLIENT_PIPELINE_MAX);
 }
 
 static inline StreamSplitter::Status hi_exec(Hi5State* s, Action a, int c)
index d4abf7677ba89433cfa318182e8bd7146c4a39ee..3de73cc0b94d018d90c3a5c495ba4886a5aa1f4a 100644 (file)
@@ -40,6 +40,7 @@
 
 #include "fp_detect.h"
 
+#include "detection/detection_engine.h"
 #include "events/event.h"
 #include "filters/rate_filter.h"
 #include "filters/sfthreshold.h"
@@ -730,7 +731,7 @@ static inline int fpFinalSelectEvent(OTNX_MATCH_DATA* o, Packet* p)
                     /*
                     **  QueueEvent
                     */
-                    if ( SnortEventqAdd(otn) )
+                    if ( DetectionEngine::queue_event(otn) )
                         pc.queue_limit++;
 
                     tcnt++;
index 62d7fea46589131a1e4a7cbd72e9a5d36aef56bc..83b9176b8b29888f2d1d3722230a69c95adf0132 100644 (file)
@@ -35,7 +35,7 @@
 **           event (gid,sid pair).  This is now required to get events
 **           to be logged. The decoders and preprocessors are still
 **           configured independently, which allows them to inspect and
-**           call the alerting functions SnortEventqAdd, GenerateSnortEvent()
+**           call the alerting functions DetectionEngine::queue_event, GenerateSnortEvent()
 **           and GenerateEvent2() for portscan.cc.  The GenerateSnortEvent()
 **           function now finds and otn and calls fpLogEvent.
 **
@@ -48,7 +48,7 @@
 **           mapping, and then adjusts it's inspection or detection
 **           accordingly.
 **
-**           SnortEventqAdd() - only adds events that have an otn
+**           DetectionEngine::queue_event() - only adds events that have an otn
 **
 */
 
 static THREAD_LOCAL unsigned s_events = 0;
 
 //-------------------------------------------------
-/*
-**  Set default values
-*/
+
 EventQueueConfig* EventQueueConfigNew()
 {
-    EventQueueConfig* eqc =
-        (EventQueueConfig*)snort_calloc(sizeof(EventQueueConfig));
+    EventQueueConfig* eqc = (EventQueueConfig*)snort_calloc(sizeof(EventQueueConfig));
 
     eqc->max_events = 8;
     eqc->log_events = 3;
@@ -97,120 +94,3 @@ void EventQueueConfigFree(EventQueueConfig* eqc)
     snort_free(eqc);
 }
 
-// Return 0 if no OTN since -1 return indicates queue limit reached. See
-// fpFinalSelectEvent()
-int SnortEventqAdd(const OptTreeNode* otn)
-{
-    RuleTreeNode* rtn = getRtnFromOtn(otn);
-
-    if ( !rtn )
-    {
-        // If the rule isn't in the current policy,
-        // don't add it to the event queue.
-        return 0;
-    }
-
-    SF_EVENTQ* pq = DetectionEngine::get_event_queue();
-    EventNode* en = (EventNode*)sfeventq_event_alloc(pq);
-
-    if ( !en )
-        return -1;
-
-    en->otn = otn;
-    en->rtn = rtn;
-
-    if ( sfeventq_add(pq, en) )
-        return -1;
-
-    s_events++;
-    return 0;
-}
-
-// Preprocessors and decoder will call this function since
-// they don't have access to the OTN.
-int SnortEventqAdd(uint32_t gid, uint32_t sid, RuleType type)
-{
-    OptTreeNode* otn = GetOTN(gid, sid);
-
-    if ( !otn )
-        return 0;
-
-    SF_EVENTQ* pq = DetectionEngine::get_event_queue();
-    EventNode* en = (EventNode*)sfeventq_event_alloc(pq);
-
-    if ( !en )
-        return -1;
-
-    en->otn = otn;
-    en->rtn = nullptr;  // lookup later after ips policy selection
-    en->type = type;
-
-    if ( sfeventq_add(pq, en) )
-        return -1;
-
-    s_events++;
-    return 0;
-}
-
-bool event_is_enabled(uint32_t gid, uint32_t sid)
-{
-    OptTreeNode* otn = GetOTN(gid, sid);
-    return ( otn != nullptr );
-}
-
-static int LogSnortEvents(void* event, void* user)
-{
-    if ( !event || !user )
-        return 0;
-
-    EventNode* en = (EventNode*)event;
-
-    if ( !en->rtn )
-    {
-        en->rtn = getRtnFromOtn(en->otn);
-
-        if ( !en->rtn )
-            return 0;  // not enabled
-    }
-
-    if ( s_events > 0 )
-        s_events--;
-
-    fpLogEvent(en->rtn, en->otn, (Packet*)user);
-    sfthreshold_reset();
-
-    return 0;
-}
-
-/*
-**  We return whether we logged events or not.  We've add a eventq user
-**  structure so we can track whether the events logged were rule events
-**  or preprocessor/decoder events.  The reason being that we don't want
-**  to flush a TCP stream for preprocessor/decoder events, and cause
-**  early flushing of the stream.
-*/
-int SnortEventqLog(Packet* p)
-{
-    SF_EVENTQ* pq = DetectionEngine::get_event_queue();
-    sfeventq_action(pq, LogSnortEvents, (void*)p);
-    return 0;
-}
-
-static inline void reset_counts()
-{
-    pc.log_limit += s_events;
-    s_events = 0;
-}
-
-void SnortEventqResetCounts()
-{
-    reset_counts();
-}
-
-void SnortEventqReset()
-{
-    SF_EVENTQ* pq = DetectionEngine::get_event_queue();
-    sfeventq_reset(pq);
-    reset_counts();
-}
-
index cacffc322b0ea8c7897a312bbf225ff58374afb2..baf337739cf4eed234f2e8d8f6fc23dd10850180 100644 (file)
@@ -44,13 +44,5 @@ struct EventNode
 EventQueueConfig* EventQueueConfigNew();
 void EventQueueConfigFree(EventQueueConfig*);
 
-SO_PUBLIC void SnortEventqReset();
-void SnortEventqResetCounts();
-
-SO_PUBLIC int SnortEventqLog(struct Packet*);
-SO_PUBLIC int SnortEventqAdd(const struct OptTreeNode*);
-SO_PUBLIC int SnortEventqAdd(uint32_t gid, uint32_t sid, RuleType = RULE_TYPE__NONE);
-SO_PUBLIC bool event_is_enabled(uint32_t gid, uint32_t sid);
-
 #endif
 
index fc288b0db20611258b3ab5fd1ec1cd597dbdb141..c3020738f56ee4ed4c9973398cf97bf8d40a8ca3 100644 (file)
@@ -50,8 +50,8 @@
  * This function has been updated to find an otn and route the call to fpLogEvent
  * if possible.  This requires a rule be written for each decoder event,
  * and possibly some preporcessor events.  The bulk of eventing is handled vie the
- * SnortEventqAdd() and SnortEventLog() functions - whichalready  route the events to
- * the fpLogEvent()function.
+ * DetectionEngine::queue_event() and SnortEventLog() functions - whichalready
+ * route the events to the fpLogEvent()function.
  */
 uint32_t GenerateSnortEvent(Packet* p, uint32_t gid, uint32_t sid)
 {
index 9862d46ff3344189454ab8eebc8fe6570d1783bd..eef6c7bb175e4648ffc712aac761100cceeff59e 100644 (file)
@@ -24,6 +24,7 @@
 #include "codec.h"
 
 #include "codecs/codec_module.h"
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 
 EncState::EncState(const ip::IpApi& api, EncodeFlags f, IpProtocol pr,
@@ -81,7 +82,7 @@ void Codec::codec_event(const CodecData& codec, CodecSid sid)
     if ( codec.codec_flags & CODEC_STREAM_REBUILT )
         return;
 
-    SnortEventqAdd(GID_DECODE, sid);
+    DetectionEngine::queue_event(GID_DECODE, sid);
 }
 
 bool Codec::CheckIPV6HopOptions(const RawData& raw, CodecData& codec)
index b9cb496735338b1e183944a62cfb93c34245d8a0..516ba01f65eec3c2bd2554bc25124154a6bfd719 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "packet_latency.h"
 
+#include "detection/detection_engine.h"
 #include "log/messages.h"
 #include "main/snort_config.h"
 #include "protocols/packet.h"
@@ -193,7 +194,7 @@ static struct SnortConfigWrapper : public ConfigWrapper
 static struct SnortEventHandler : public EventHandler
 {
     void handle(const Event&) override
-    { SnortEventqAdd(GID_LATENCY, LATENCY_EVENT_PACKET_FASTPATHED); }
+    { DetectionEngine::queue_event(GID_LATENCY, LATENCY_EVENT_PACKET_FASTPATHED); }
 } event_handler;
 
 static struct SnortLogHandler : public EventHandler
index d437442402c97a5d1e5bb1f9ce0c8a1c30f894d4..1cce46fa5801f750d5dc38ad39c88041024e989f 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "rule_latency.h"
 
+#include "detection/detection_engine.h"
 #include "detection/detection_options.h"
 #include "detection/treenodes.h"
 #include "main/snort_config.h"
@@ -295,11 +296,11 @@ static struct SnortEventHandler : public EventHandler
         switch ( e.type )
         {
             case Event::EVENT_ENABLED:
-                SnortEventqAdd(GID_LATENCY, LATENCY_EVENT_RULE_TREE_ENABLED);
+                DetectionEngine::queue_event(GID_LATENCY, LATENCY_EVENT_RULE_TREE_ENABLED);
                 break;
 
             case Event::EVENT_SUSPENDED:
-                SnortEventqAdd(GID_LATENCY, LATENCY_EVENT_RULE_TREE_SUSPENDED);
+                DetectionEngine::queue_event(GID_LATENCY, LATENCY_EVENT_RULE_TREE_SUSPENDED);
                 break;
 
             default:
index 986592694aee88dfee99ba110b5e79d39763ff3a..5215154f5eee5e41c2c77bb6c1f3f271818c8b8a 100644 (file)
@@ -71,6 +71,7 @@
 #include "config.h"
 #endif
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "log/messages.h"
 #include "profiler/profiler.h"
@@ -187,40 +188,28 @@ void ArpSpoof::eval(Packet* p)
     case ARPOP_REQUEST:
         if (memcmp((u_char*)eh->ether_dst, (u_char*)bcast, 6) != 0)
         {
-            SnortEventqAdd(GID_ARP_SPOOF,
-                ARPSPOOF_UNICAST_ARP_REQUEST);
-
-            DebugMessage(DEBUG_INSPECTOR,
-                "MODNAME: Unicast request\n");
+            DetectionEngine::queue_event(GID_ARP_SPOOF, ARPSPOOF_UNICAST_ARP_REQUEST);
+            DebugMessage(DEBUG_INSPECTOR, "MODNAME: Unicast request\n");
         }
         else if (memcmp((u_char*)eh->ether_src,
             (u_char*)ah->arp_sha, 6) != 0)
         {
-            SnortEventqAdd(GID_ARP_SPOOF,
-                ARPSPOOF_ETHERFRAME_ARP_MISMATCH_SRC);
-
-            DebugMessage(DEBUG_INSPECTOR,
-                "MODNAME: Ethernet/ARP mismatch request\n");
+            DetectionEngine::queue_event(GID_ARP_SPOOF, ARPSPOOF_ETHERFRAME_ARP_MISMATCH_SRC);
+            DebugMessage(DEBUG_INSPECTOR, "MODNAME: Ethernet/ARP mismatch request\n");
         }
         break;
     case ARPOP_REPLY:
         if (memcmp((u_char*)eh->ether_src,
             (u_char*)ah->arp_sha, 6) != 0)
         {
-            SnortEventqAdd(GID_ARP_SPOOF,
-                ARPSPOOF_ETHERFRAME_ARP_MISMATCH_SRC);
-
-            DebugMessage(DEBUG_INSPECTOR,
-                "MODNAME: Ethernet/ARP mismatch reply src\n");
+            DetectionEngine::queue_event(GID_ARP_SPOOF, ARPSPOOF_ETHERFRAME_ARP_MISMATCH_SRC);
+            DebugMessage(DEBUG_INSPECTOR, "MODNAME: Ethernet/ARP mismatch reply src\n");
         }
         else if (memcmp((u_char*)eh->ether_dst,
             (u_char*)ah->arp_tha, 6) != 0)
         {
-            SnortEventqAdd(GID_ARP_SPOOF,
-                ARPSPOOF_ETHERFRAME_ARP_MISMATCH_DST);
-
-            DebugMessage(DEBUG_INSPECTOR,
-                "MODNAME: Ethernet/ARP mismatch reply dst\n");
+            DetectionEngine::queue_event(GID_ARP_SPOOF, ARPSPOOF_ETHERFRAME_ARP_MISMATCH_DST);
+            DebugMessage(DEBUG_INSPECTOR, "MODNAME: Ethernet/ARP mismatch reply dst\n");
         }
         break;
     }
@@ -242,10 +231,8 @@ void ArpSpoof::eval(Packet* p)
         // in p doesn't match the MAC address in ipme, then generate an alert
         if ( cmp_ether_src || cmp_arp_sha )
         {
-            SnortEventqAdd(GID_ARP_SPOOF, ARPSPOOF_ARP_CACHE_OVERWRITE_ATTACK);
-
-            DebugMessage(DEBUG_INSPECTOR,
-                "MODNAME: Attempted ARP cache overwrite attack\n");
+            DetectionEngine::queue_event(GID_ARP_SPOOF, ARPSPOOF_ARP_CACHE_OVERWRITE_ATTACK);
+            DebugMessage(DEBUG_INSPECTOR, "MODNAME: Attempted ARP cache overwrite attack\n");
         }
     }
 
index 914df82762c02ae5084cc6561f01ed30b3c01bf1..a96bdc17d1b53cb3e5aaee1259907fdcb9775abf 100644 (file)
@@ -297,7 +297,7 @@ static void snort_reputation(ReputationConfig* config, Packet* p)
 
     else if (BLACKLISTED == decision)
     {
-        SnortEventqAdd(GID_REPUTATION, REPUTATION_EVENT_BLACKLIST);
+        DetectionEngine::queue_event(GID_REPUTATION, REPUTATION_EVENT_BLACKLIST);
         Active::drop_packet(p, true);
         // disable all preproc analysis and detection for this packet
         DetectionEngine::disable_all();
@@ -312,12 +312,12 @@ static void snort_reputation(ReputationConfig* config, Packet* p)
     }
     else if (MONITORED == decision)
     {
-        SnortEventqAdd(GID_REPUTATION, REPUTATION_EVENT_MONITOR);
+        DetectionEngine::queue_event(GID_REPUTATION, REPUTATION_EVENT_MONITOR);
         reputationstats.monitored++;
     }
     else if (WHITELISTED_TRUST == decision)
     {
-        SnortEventqAdd(GID_REPUTATION, REPUTATION_EVENT_WHITELIST);
+        DetectionEngine::queue_event(GID_REPUTATION, REPUTATION_EVENT_WHITELIST);
         p->packet_flags |= PKT_IGNORE;
         DetectionEngine::disable_all();
         p->disable_inspect = true;
index 2d6704893a4550840c1708201dc2d4bd3b5ba5f7..07c94f64b5d0a94166dbf0187fbd2eb5b3055d5d 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "codecs/codec_module.h"
 #include "codecs/ip/checksum.h"
+#include "detection/detection_engine.h"
 #include "log/text_log.h"
 #include "main/snort_config.h"
 #include "main/snort_debug.h"
@@ -199,7 +200,7 @@ void PacketManager::decode(
         // If we have reached the MAX_LAYERS, we keep decoding
         // but no longer keep track of the layers.
         if ( p->num_layers == CodecManager::max_layers )
-            SnortEventqAdd(GID_DECODE, DECODE_TOO_MANY_LAYERS);
+            DetectionEngine::queue_event(GID_DECODE, DECODE_TOO_MANY_LAYERS);
         else
             push_layer(p, prev_prot_id, raw.data, codec_data.lyr_len);
 
@@ -274,7 +275,7 @@ void PacketManager::decode(
                     (to_utype(prev_prot_id) <= std::numeric_limits<uint8_t>::max()) &&
                     !(codec_data.codec_flags & CODEC_STREAM_REBUILT) )
                 {
-                    SnortEventqAdd(GID_DECODE, DECODE_IP_UNASSIGNED_PROTO);
+                    DetectionEngine::queue_event(GID_DECODE, DECODE_IP_UNASSIGNED_PROTO);
                 }
             }
         }
index ffd10416779a7e328617f8822f8c96e065d3e46d..31a0bf297e85baefa9005d41238bd5259c914a9f 100644 (file)
 #include "config.h"
 #endif
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "framework/inspector.h"
 #include "framework/module.h"
@@ -355,7 +356,7 @@ static int BoGetDirection(Packet* p, const char* pkt_data)
 
     if ( len >= BO_BUF_ATTACK_SIZE )
     {
-        SnortEventqAdd(GID_BO, BO_SNORT_BUFFER_ATTACK);
+        DetectionEngine::queue_event(GID_BO, BO_SNORT_BUFFER_ATTACK);
         return BO_FROM_UNKNOWN;
     }
 
@@ -519,18 +520,18 @@ void BackOrifice::eval(Packet* p)
 
             if ( bo_direction == BO_FROM_CLIENT )
             {
-                SnortEventqAdd(GID_BO, BO_CLIENT_TRAFFIC_DETECT);
+                DetectionEngine::queue_event(GID_BO, BO_CLIENT_TRAFFIC_DETECT);
                 DebugMessage(DEBUG_INSPECTOR, "Client packet\n");
             }
 
             else if ( bo_direction == BO_FROM_SERVER )
             {
-                SnortEventqAdd(GID_BO, BO_SERVER_TRAFFIC_DETECT);
+                DetectionEngine::queue_event(GID_BO, BO_SERVER_TRAFFIC_DETECT);
                 DebugMessage(DEBUG_INSPECTOR, "Server packet\n");
             }
 
             else
-                SnortEventqAdd(GID_BO, BO_TRAFFIC_DETECT);
+                DetectionEngine::queue_event(GID_BO, BO_TRAFFIC_DETECT);
         }
     }
 }
index 585f3052f42ce157f1de8b2c26f53d7e3a77c53b..bc4ea4ef95be8c03da7698f966f921fe442e60a9 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef DCE_COMMON_H
 #define DCE_COMMON_H
 
-#include "events/event_queue.h"
+#include "detection/detection_engine.h"
 #include "framework/counts.h"
 #include "framework/endianness.h"
 #include "framework/value.h"
@@ -388,7 +388,7 @@ inline bool DCE2_SsnIsServerSambaPolicy(DCE2_SsnData* sd)
 
 inline void dce_alert(uint32_t gid, uint32_t sid, dce2CommonStats* stats)
 {
-    SnortEventqAdd(gid,sid);
+    DetectionEngine::queue_event(gid,sid);
     stats->events++;
 }
 
index a64915c419ed9e50cc8f713055bdc956149a177d..eabd1051f2753a6cfbbc570b7be6ef9853498332 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "dnp3.h"
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "protocols/packet.h"
 
@@ -140,7 +141,7 @@ static bool dnp3_process_udp(dnp3ProtoConf& config, dnp3_session_data_t* dnp3_se
 
     if (truncated_pdu)
     {
-        SnortEventqAdd(GID_DNP3, DNP3_DROPPED_FRAME);
+        DetectionEngine::queue_event(GID_DNP3, DNP3_DROPPED_FRAME);
     }
 
     return true;
index d8dc520c51682637a4db022c4cf683a823ce8d92..27b5009463a237115c2d4b04ed7c9f7e7cbc884f 100644 (file)
@@ -161,7 +161,7 @@ static bool dnp3_reassemble_transport(dnp3_reassembly_data_t* rdata, char* buf,
 
             /* Raise an alert so it's clear the buffer was reset.
                Could signify device trouble. */
-            SnortEventqAdd(GID_DNP3, DNP3_REASSEMBLY_BUFFER_CLEARED);
+            DetectionEngine::queue_event(GID_DNP3, DNP3_REASSEMBLY_BUFFER_CLEARED);
         }
         else
         {
@@ -169,7 +169,7 @@ static bool dnp3_reassemble_transport(dnp3_reassembly_data_t* rdata, char* buf,
             if ((DNP3_TRANSPORT_SEQ(trans_header->control) == rdata->last_seq) &&
                 (DNP3_TRANSPORT_FIN(trans_header->control)))
             {
-                SnortEventqAdd(GID_DNP3, DNP3_DROPPED_SEGMENT);
+                DetectionEngine::queue_event(GID_DNP3, DNP3_DROPPED_SEGMENT);
                 rdata->state = DNP3_REASSEMBLY_STATE__DONE;
                 return false;
             }
@@ -178,7 +178,7 @@ static bool dnp3_reassemble_transport(dnp3_reassembly_data_t* rdata, char* buf,
             if (DNP3_TRANSPORT_SEQ(trans_header->control) !=
                 ((rdata->last_seq + 1) % 0x40 ))
             {
-                SnortEventqAdd(GID_DNP3, DNP3_DROPPED_SEGMENT);
+                DetectionEngine::queue_event(GID_DNP3, DNP3_DROPPED_SEGMENT);
                 return false;
             }
 
@@ -206,7 +206,7 @@ static void dnp3_check_reserved_function(dnp3_session_data_t* session)
 {
     if ( !(dnp3_func_is_defined( (uint16_t)session->func)) )
     {
-        SnortEventqAdd(GID_DNP3, DNP3_RESERVED_FUNCTION);
+        DetectionEngine::queue_event(GID_DNP3, DNP3_RESERVED_FUNCTION);
     }
 }
 
@@ -291,7 +291,7 @@ static bool dnp3_check_remove_crc(dnp3ProtoConf& config, uint8_t* pdu_start,
     if ((config.check_crc) &&
         (dnp3_check_crc((unsigned char*)pdu_start, sizeof(dnp3_link_header_t)+2) == false))
     {
-        SnortEventqAdd(GID_DNP3, DNP3_BAD_CRC);
+        DetectionEngine::queue_event(GID_DNP3, DNP3_BAD_CRC);
         return false;
     }
 
@@ -305,7 +305,7 @@ static bool dnp3_check_remove_crc(dnp3ProtoConf& config, uint8_t* pdu_start,
         if ((config.check_crc) &&
             (dnp3_check_crc((unsigned char*)cursor, (DNP3_CHUNK_SIZE+DNP3_CRC_SIZE)) == false))
         {
-            SnortEventqAdd(GID_DNP3, DNP3_BAD_CRC);
+            DetectionEngine::queue_event(GID_DNP3, DNP3_BAD_CRC);
             return false;
         }
 
@@ -320,7 +320,7 @@ static bool dnp3_check_remove_crc(dnp3ProtoConf& config, uint8_t* pdu_start,
     {
         if ((config.check_crc) && (dnp3_check_crc((unsigned char*)cursor, bytes_left) == false))
         {
-            SnortEventqAdd(GID_DNP3, DNP3_BAD_CRC);
+            DetectionEngine::queue_event(GID_DNP3, DNP3_BAD_CRC);
             return false;
         }
 
@@ -344,7 +344,7 @@ static bool dnp3_check_reserved_addrs(dnp3_link_header_t* link)
 
     if (bad_addr)
     {
-        SnortEventqAdd(GID_DNP3, DNP3_RESERVED_ADDRESS);
+        DetectionEngine::queue_event(GID_DNP3, DNP3_RESERVED_ADDRESS);
         return false;
     }
 
@@ -374,7 +374,7 @@ bool dnp3_full_reassembly(dnp3ProtoConf& config, dnp3_session_data_t* session, P
 
     if (link->len < DNP3_MIN_TRANSPORT_LEN)
     {
-        SnortEventqAdd(GID_DNP3, DNP3_DROPPED_FRAME);
+        DetectionEngine::queue_event(GID_DNP3, DNP3_DROPPED_FRAME);
         return false;
     }
 
index 7868b2588a73057287544673ec44291d448bb610..f98ab6a41b155f26f10ff8bc832cd7e142a6c133 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "dns.h"
 
-#include "events/event_queue.h"
+#include "detection/detection_engine.h"
 #include "log/messages.h"
 #include "profiler/profiler.h"
 #include "protocols/packet.h"
@@ -557,7 +557,7 @@ static uint16_t CheckRRTypeTXTVuln(
                 if (overflow_check > 0xFFFF)
                 {
                     /* Alert on obsolete DNS RR types */
-                    SnortEventqAdd(GID_DNS, DNS_EVENT_RDATA_OVERFLOW);
+                    DetectionEngine::queue_event(GID_DNS, DNS_EVENT_RDATA_OVERFLOW);
 
                     dnsSessionData->curr_txt.alerted = 1;
                 }
@@ -652,7 +652,7 @@ static uint16_t ParseDNSRData(
     case DNS_RR_TYPE_MD:
     case DNS_RR_TYPE_MF:
         /* Alert on obsolete DNS RR types */
-        SnortEventqAdd(GID_DNS, DNS_EVENT_OBSOLETE_TYPES);
+        DetectionEngine::queue_event(GID_DNS, DNS_EVENT_OBSOLETE_TYPES);
         bytes_unused = SkipDNSRData(data, bytes_unused, dnsSessionData);
         break;
 
@@ -662,7 +662,7 @@ static uint16_t ParseDNSRData(
     case DNS_RR_TYPE_NULL:
     case DNS_RR_TYPE_MINFO:
         /* Alert on experimental DNS RR types */
-        SnortEventqAdd(GID_DNS, DNS_EVENT_EXPERIMENTAL_TYPES);
+        DetectionEngine::queue_event(GID_DNS, DNS_EVENT_EXPERIMENTAL_TYPES);
         bytes_unused = SkipDNSRData(data, bytes_unused, dnsSessionData);
         break;
     case DNS_RR_TYPE_A:
index b310a13e5231e981a52ce512032576ec5c50f1e5..65375731452d909d38ebd4299222cfa612b21278 100644 (file)
@@ -40,6 +40,7 @@
 
 #include "pp_ftp.h"
 
+#include "detection/detection_engine.h"
 #include "detection/detection_util.h"
 #include "file_api/file_service.h"
 #include "protocols/packet.h"
@@ -594,7 +595,7 @@ static int validate_param(Packet* p,
             if (numPercents >= MAX_PERCENT_SIGNS)
             {
                 /* Alert on string format attack in parameter */
-                SnortEventqAdd(GID_FTP, FTP_PARAMETER_STR_FORMAT);
+                DetectionEngine::queue_event(GID_FTP, FTP_PARAMETER_STR_FORMAT);
                 return FTPP_ALERTED;
             }
         }
@@ -747,7 +748,7 @@ static int validate_param(Packet* p,
                 /* Alert on invalid IP address for PORT */
                 if (alert)
                 {
-                    SnortEventqAdd(GID_FTP, FTP_BOUNCE);
+                    DetectionEngine::queue_event(GID_FTP, FTP_BOUNCE);
                     /* Return here -- because we will likely want to
                      * inspect the data traffic over a bounced data
                      * connection */
@@ -934,7 +935,7 @@ int initialize_ftp(FTP_SESSION* session, Packet* p, int iMode)
     if (iRet != FTPP_SUCCESS && iRet != FTPP_NORMALIZED)
     {
         if (iRet == FTPP_ALERT)
-            SnortEventqAdd(GID_FTP, FTP_EVASIVE_TELNET_CMD);
+            DetectionEngine::queue_event(GID_FTP, FTP_EVASIVE_TELNET_CMD);
 
         return iRet;
     }
@@ -945,7 +946,7 @@ int initialize_ftp(FTP_SESSION* session, Packet* p, int iMode)
         if ( (iMode == FTPP_SI_CLIENT_MODE) ||
             (iMode == FTPP_SI_SERVER_MODE) )
         {
-            SnortEventqAdd(GID_FTP, FTP_TELNET_CMD);
+            DetectionEngine::queue_event(GID_FTP, FTP_TELNET_CMD);
             return FTPP_ALERT; /* Nothing else to do since we alerted */
         }
 
@@ -1237,9 +1238,8 @@ static int do_stateful_checks(FTP_SESSION* session, Packet* p,
             {
                 /* Could check that response msg includes "TLS" */
                 session->encr_state = AUTH_TLS_ENCRYPTED;
-                SnortEventqAdd(GID_FTP, FTP_ENCRYPTED);
-                DebugMessage(DEBUG_FTPTELNET,
-                    "FTP stream is now TLS encrypted\n");
+                DetectionEngine::queue_event(GID_FTP, FTP_ENCRYPTED);
+                DebugMessage(DEBUG_FTPTELNET, "FTP stream is now TLS encrypted\n");
             }
             break;
         case AUTH_SSL_CMD_ISSUED:
@@ -1247,18 +1247,16 @@ static int do_stateful_checks(FTP_SESSION* session, Packet* p,
             {
                 /* Could check that response msg includes "SSL" */
                 session->encr_state = AUTH_SSL_ENCRYPTED;
-                SnortEventqAdd(GID_FTP, FTP_ENCRYPTED);
-                DebugMessage(DEBUG_FTPTELNET,
-                    "FTP stream is now SSL encrypted\n");
+                DetectionEngine::queue_event(GID_FTP, FTP_ENCRYPTED);
+                DebugMessage(DEBUG_FTPTELNET, "FTP stream is now SSL encrypted\n");
             }
             break;
         case AUTH_UNKNOWN_CMD_ISSUED:
             if (rsp_code == 234)
             {
                 session->encr_state = AUTH_UNKNOWN_ENCRYPTED;
-                SnortEventqAdd(GID_FTP, FTP_ENCRYPTED);
-                DebugMessage(DEBUG_FTPTELNET,
-                    "FTP stream is now encrypted\n");
+                DetectionEngine::queue_event(GID_FTP, FTP_ENCRYPTED);
+                DebugMessage(DEBUG_FTPTELNET, "FTP stream is now encrypted\n");
             }
             break;
         }
@@ -1414,7 +1412,7 @@ int check_ftp(FTP_SESSION* ftpssn, Packet* p, int iMode)
                 if (ftpssn->encr_state == 0)
                 {
                     ftpssn->encr_state = AUTH_UNKNOWN_ENCRYPTED;
-                    SnortEventqAdd(GID_FTP, FTP_ENCRYPTED);
+                    DetectionEngine::queue_event(GID_FTP, FTP_ENCRYPTED);
 
                     if (!ftpssn->server_conf->check_encrypted_data)
                     {
@@ -1435,7 +1433,7 @@ int check_ftp(FTP_SESSION* ftpssn, Packet* p, int iMode)
                 if ( req->cmd_size > ftpssn->server_conf->max_cmd_len )
                 {
                     /* Alert, cmd not found */
-                    SnortEventqAdd(GID_FTP, FTP_INVALID_CMD);
+                    DetectionEngine::queue_event(GID_FTP, FTP_INVALID_CMD);
                     state = FTP_CMD_INV;
                 }
                 else
@@ -1447,7 +1445,7 @@ int check_ftp(FTP_SESSION* ftpssn, Packet* p, int iMode)
                     if ((iRet == FTPP_NOT_FOUND) || (CmdConf == nullptr))
                     {
                         /* Alert, cmd not found */
-                        SnortEventqAdd(GID_FTP, FTP_INVALID_CMD);
+                        DetectionEngine::queue_event(GID_FTP, FTP_INVALID_CMD);
                         state = FTP_CMD_INV;
                     }
                     else
@@ -1493,7 +1491,7 @@ int check_ftp(FTP_SESSION* ftpssn, Packet* p, int iMode)
                 if (ftpssn->encr_state == 0)
                 {
                     ftpssn->encr_state = AUTH_UNKNOWN_ENCRYPTED;
-                    SnortEventqAdd(GID_FTP, FTP_ENCRYPTED);
+                    DetectionEngine::queue_event(GID_FTP, FTP_ENCRYPTED);
 
                     if (!ftpssn->server_conf->check_encrypted_data)
                     {
@@ -1677,7 +1675,7 @@ int check_ftp(FTP_SESSION* ftpssn, Packet* p, int iMode)
                 (req->param_size > ftpssn->client_conf->max_resp_len))
             {
                 /* Alert on response message overflow */
-                SnortEventqAdd(GID_FTP, FTP_RESPONSE_LENGTH_OVERFLOW);
+                DetectionEngine::queue_event(GID_FTP, FTP_RESPONSE_LENGTH_OVERFLOW);
                 iRet = FTPP_ALERT;
             }
 
@@ -1696,7 +1694,7 @@ int check_ftp(FTP_SESSION* ftpssn, Packet* p, int iMode)
                 (req->param_size > ftpssn->client_conf->max_resp_len))
             {
                 /* Alert on response message overflow */
-                SnortEventqAdd(GID_FTP, FTP_RESPONSE_LENGTH_OVERFLOW);
+                DetectionEngine::queue_event(GID_FTP, FTP_RESPONSE_LENGTH_OVERFLOW);
                 iRet = FTPP_ALERT;
             }
             break;
@@ -1709,7 +1707,7 @@ int check_ftp(FTP_SESSION* ftpssn, Packet* p, int iMode)
                 (req->param_size > ftpssn->client_conf->max_resp_len))
             {
                 /* Alert on response message overflow */
-                SnortEventqAdd(GID_FTP, FTP_RESPONSE_LENGTH_OVERFLOW);
+                DetectionEngine::queue_event(GID_FTP, FTP_RESPONSE_LENGTH_OVERFLOW);
                 iRet = FTPP_ALERT;
             }
             break;
@@ -1726,7 +1724,7 @@ int check_ftp(FTP_SESSION* ftpssn, Packet* p, int iMode)
                 if ( req->param_size > max )
                 {
                     /* Alert on param length overrun */
-                    SnortEventqAdd(GID_FTP, FTP_PARAMETER_LENGTH_OVERFLOW);
+                    DetectionEngine::queue_event(GID_FTP, FTP_PARAMETER_LENGTH_OVERFLOW);
                     DebugFormat(DEBUG_FTPTELNET, "FTP command: %.*s"
                         "parameter length overrun %u > %u \n",
                         req->cmd_size, req->cmd_begin, req->param_size, max);
@@ -1825,7 +1823,7 @@ int check_ftp(FTP_SESSION* ftpssn, Packet* p, int iMode)
                     if (iRet < 0)
                     {
                         /* Set Alert on malformatted parameter */
-                        SnortEventqAdd(GID_FTP, FTP_MALFORMED_PARAMETER);
+                        DetectionEngine::queue_event(GID_FTP, FTP_MALFORMED_PARAMETER);
                         iRet = FTPP_ALERT;
                         break;
                     }
index 8158fc7f31aefe0151cb1b682b21d84b9ecb8a98..0d94f7955f6ab46e2fa89455d1327c83a13aa9e3 100644 (file)
@@ -47,6 +47,7 @@
 
 #include "pp_telnet.h"
 
+#include "detection/detection_engine.h"
 #include "detection/detection_util.h"
 #include "protocols/packet.h"
 #include "stream/stream.h"
@@ -142,7 +143,7 @@ int normalize_telnet(
                     if (tnssn)
                     {
                         tnssn->encr_state = 1;
-                        SnortEventqAdd(GID_TELNET, TELNET_ENCRYPTED);
+                        DetectionEngine::queue_event(GID_TELNET, TELNET_ENCRYPTED);
 
                         if (!tnssn->telnet_conf->check_encrypted_data)
                         {
@@ -249,7 +250,7 @@ int normalize_telnet(
                         tnssn->telnet_conf->ayt_threshold))
                     {
                         /* Alert on consecutive AYT commands */
-                        SnortEventqAdd(GID_TELNET, TELNET_AYT_OVERFLOW);
+                        DetectionEngine::queue_event(GID_TELNET, TELNET_AYT_OVERFLOW);
                         tnssn->consec_ayt = 0;
                         return FTPP_ALERT;
                     }
@@ -339,7 +340,7 @@ int normalize_telnet(
                     if (tnssn)
                     {
                         tnssn->encr_state = 1;
-                        SnortEventqAdd(GID_TELNET, TELNET_ENCRYPTED);
+                        DetectionEngine::queue_event(GID_TELNET, TELNET_ENCRYPTED);
 
                         if (!tnssn->telnet_conf->check_encrypted_data)
                         {
@@ -385,7 +386,7 @@ int normalize_telnet(
                 else
                 {
                     /* Alert on SB without SE */
-                    SnortEventqAdd(GID_TELNET, TELNET_SB_NO_SE);
+                    DetectionEngine::queue_event(GID_TELNET, TELNET_SB_NO_SE);
                     ret = FTPP_ALERT;
                 }
 
index 08f2ea911455ae8de0f3fed9365c7ca9f3de9613..834ac3afd35238dc9968a3679449766f8fdf2646 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <arpa/inet.h>
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "log/messages.h"
 
@@ -38,7 +39,7 @@
 
 static inline void alert(int sid)
 {
-    SnortEventqAdd(GID_GTP, sid);
+    DetectionEngine::queue_event(GID_GTP, sid);
     gtp_stats.events++;
 }
 
index 454516539ca58d7d38a5f8d2bfa59910e450f4c7..0c93aededb2298767743da283c6fddff67f1242e 100644 (file)
@@ -23,6 +23,7 @@
 #include <bitset>
 #include <cassert>
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "utils/util.h"
 
@@ -42,7 +43,7 @@ public:
         assert(((int)sid > 0) && ((int)sid <= MAX));
         if (!events_generated[sid-1])
         {
-            SnortEventqAdd(HttpEnums::HTTP_GID, (uint32_t)sid);
+            DetectionEngine::queue_event(HttpEnums::HTTP_GID, (uint32_t)sid);
             events_generated[sid-1] = true;
         }
     }
index 38c4343110f8dd8827a54672e7472b85af30f351..cf918d80a598b14dd74862b960e070c193771f7a 100644 (file)
@@ -23,8 +23,8 @@
 #include "config.h"
 #endif
 
+#include "detection/detection_engine.h"
 #include "log/messages.h"
-#include "events/event_queue.h"
 
 #include "service_inspectors/http_inspect/http_module.h"
 #include "service_inspectors/http_inspect/http_test_manager.h"
@@ -46,7 +46,7 @@ void show_stats(PegCount*, const PegInfo*, IndexVec&, const char*, FILE*) { }
 void show_stats(SimpleStats*, const char*) { }
 
 void Value::get_bits(std::bitset<256ul>&) const {}
-int SnortEventqAdd(unsigned int, unsigned int, RuleType) { return 0; }
+int DetectionEngine::queue_event(unsigned int, unsigned int, RuleType) { return 0; }
 
 int32_t str_to_code(const uint8_t*, const int32_t, const StrCode []) { return 0; }
 int32_t substr_to_code(const uint8_t*, const int32_t, const StrCode []) { return 0; }
index 92c5bb0a30c2b0c7c0453a19a38655ea4e0a918b..0fe26a3058010f37adc49d8691fac8bc67a57daa 100644 (file)
@@ -38,7 +38,7 @@ using namespace HttpEnums;
 unsigned FlowData::flow_id = 0;
 FlowData::FlowData(unsigned, Inspector*) {}
 FlowData::~FlowData() {}
-int SnortEventqAdd(unsigned int, unsigned int, RuleType) { return 0; }
+int DetectionEngine::queue_event(unsigned int, unsigned int, RuleType) { return 0; }
 THREAD_LOCAL PegCount HttpModule::peg_counts[1];
 
 class HttpUnitTestSetup
index 2a7ebf985bb657678529e96552021b73026d42d8..f83186d103d60fcfd8734daa4195cffaecff7db7 100644 (file)
@@ -40,7 +40,7 @@ void show_stats( PegCount*, const PegInfo*, IndexVec&, const char*, FILE*) { }
 void show_stats(SimpleStats*, const char*) { }
 
 void Value::get_bits(std::bitset<256ul>&) const {}
-int SnortEventqAdd(unsigned int, unsigned int, RuleType) { return 0; }
+int DetectionEngine::queue_event(unsigned int, unsigned int, RuleType) { return 0; }
 
 HttpJsNorm::HttpJsNorm(int, const HttpParaList::UriParam& uri_param_) :
     max_javascript_whitespaces(0), uri_param(uri_param_), javascript_search_mpse(nullptr),
index 8a107624f00a8ad510d37b3857aa5c39890f79d3..9352fd97d23e185255ac2222d188e735dd078995 100644 (file)
@@ -24,7 +24,7 @@
 
 #include "imap.h"
 
-#include "events/event_queue.h"
+#include "detection/detection_engine.h"
 #include "log/messages.h"
 #include "main/snort_debug.h"
 #include "profiler/profiler.h"
@@ -385,7 +385,7 @@ static const uint8_t* IMAP_HandleCommand(Packet* p, IMAPData* imap_ssn, const ui
         }
         else
         {
-            SnortEventqAdd(GID_IMAP, IMAP_UNKNOWN_CMD);
+            DetectionEngine::queue_event(GID_IMAP, IMAP_UNKNOWN_CMD);
             DebugMessage(DEBUG_IMAP, "No known command found\n");
             return eol;
         }
@@ -555,7 +555,7 @@ static void IMAP_ProcessServerPacket(Packet* p, IMAPData* imap_ssn)
             }
             if ( (*ptr != '*') && (*ptr !='+') && (*ptr != '\r') && (*ptr != '\n') )
             {
-                SnortEventqAdd(GID_IMAP, IMAP_UNKNOWN_RESP);
+                DetectionEngine::queue_event(GID_IMAP, IMAP_UNKNOWN_RESP);
                 DebugMessage(DEBUG_IMAP, "Server response not found\n");
             }
         }
@@ -683,13 +683,13 @@ void ImapMime::decode_alert()
     switch ( decode_state->get_decode_type() )
     {
     case DECODE_B64:
-        SnortEventqAdd(GID_IMAP, IMAP_B64_DECODING_FAILED);
+        DetectionEngine::queue_event(GID_IMAP, IMAP_B64_DECODING_FAILED);
         break;
     case DECODE_QP:
-        SnortEventqAdd(GID_IMAP, IMAP_QP_DECODING_FAILED);
+        DetectionEngine::queue_event(GID_IMAP, IMAP_QP_DECODING_FAILED);
         break;
     case DECODE_UU:
-        SnortEventqAdd(GID_IMAP, IMAP_UU_DECODING_FAILED);
+        DetectionEngine::queue_event(GID_IMAP, IMAP_UU_DECODING_FAILED);
         break;
 
     default:
index e431c7053f7ebe94fe4c3b98f61e32e83a7c1029..288482ea6cfa8159a4dfbeacb362f6a3b729292e 100644 (file)
@@ -25,6 +25,7 @@
 #include "modbus.h"
 
 #include "events/event_queue.h"
+#include "detection/detection_engine.h"
 #include "profiler/profiler.h"
 #include "protocols/packet.h"
 
@@ -85,7 +86,7 @@ void Modbus::eval(Packet* p)
         // If a packet is rebuilt, but not a full PDU, then it's garbage that
         // got flushed at the end of a stream.
         if ( p->packet_flags & (PKT_REBUILT_STREAM|PKT_PDU_HEAD) )
-            SnortEventqAdd(GID_MODBUS, MODBUS_BAD_LENGTH);
+            DetectionEngine::queue_event(GID_MODBUS, MODBUS_BAD_LENGTH);
 
         return;
     }
index 9b5e4586658e02c9673f993f00aa17f40f94e22f..4e38f6ebfc28059d302de3b3b82460192eea035d 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "modbus_decode.h"
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "protocols/packet.h"
 
@@ -234,7 +235,7 @@ static void ModbusCheckRequestLengths(modbus_session_data_t* session, Packet* p)
     }
 
     if (!check_passed)
-        SnortEventqAdd(GID_MODBUS, MODBUS_BAD_LENGTH);
+        DetectionEngine::queue_event(GID_MODBUS, MODBUS_BAD_LENGTH);
 }
 
 static void ModbusCheckResponseLengths(modbus_session_data_t* session, Packet* p)
@@ -362,7 +363,7 @@ static void ModbusCheckResponseLengths(modbus_session_data_t* session, Packet* p
     }
 
     if (!check_passed)
-        SnortEventqAdd(GID_MODBUS, MODBUS_BAD_LENGTH);
+        DetectionEngine::queue_event(GID_MODBUS, MODBUS_BAD_LENGTH);
 }
 
 static void ModbusCheckReservedFuncs(modbus_header_t* header, Packet* p)
@@ -381,7 +382,7 @@ static void ModbusCheckReservedFuncs(modbus_header_t* header, Packet* p)
         sub_func = ntohs(sub_func);
 
         if ((sub_func == 19) || (sub_func >= 21))
-            SnortEventqAdd(GID_MODBUS, MODBUS_RESERVED_FUNCTION);
+            DetectionEngine::queue_event(GID_MODBUS, MODBUS_RESERVED_FUNCTION);
     }
     break;
 
@@ -397,7 +398,7 @@ static void ModbusCheckReservedFuncs(modbus_header_t* header, Packet* p)
     case 0x7D:
     case 0x7E:
     case 0x7F:
-        SnortEventqAdd(GID_MODBUS, MODBUS_RESERVED_FUNCTION);
+        DetectionEngine::queue_event(GID_MODBUS, MODBUS_RESERVED_FUNCTION);
         break;
     }
 }
@@ -419,7 +420,7 @@ bool ModbusDecode(Packet* p)
        multiplexing with some other protocols over serial line. */
     if (header->protocol_id != MODBUS_PROTOCOL_ID)
     {
-        SnortEventqAdd(GID_MODBUS, MODBUS_BAD_PROTO_ID);
+        DetectionEngine::queue_event(GID_MODBUS, MODBUS_BAD_PROTO_ID);
         return false;
     }
 
index d91da760194c8ee77cdfa8438834dabc91a17d4b..c71f2e06c4d3b2daf59983106f2db25146da0e81 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "modbus_paf.h"
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 
 #include "modbus.h"
@@ -78,7 +79,7 @@ StreamSplitter::Status ModbusSplitter::scan(
             if ((modbus_length < MODBUS_MIN_HDR_LEN) ||
                 (modbus_length > MODBUS_MAX_HDR_LEN))
             {
-                SnortEventqAdd(GID_MODBUS, MODBUS_BAD_LENGTH);
+                DetectionEngine::queue_event(GID_MODBUS, MODBUS_BAD_LENGTH);
             }
 
             *fp = modbus_length + bytes_processed;
index 5750e7f5ee910e6cf7d8a90a112ee0becb7d9a15..c55589d612545bcd6dc95633d16861fbe765227d 100644 (file)
@@ -24,7 +24,7 @@
 
 #include "pop.h"
 
-#include "events/event_queue.h"
+#include "detection/detection_engine.h"
 #include "log/messages.h"
 #include "main/snort_debug.h"
 #include "profiler/profiler.h"
@@ -367,7 +367,7 @@ static const uint8_t* POP_HandleCommand(Packet* p, POPData* pop_ssn, const uint8
         }
         else
         {
-            SnortEventqAdd(GID_POP, POP_UNKNOWN_CMD);
+            DetectionEngine::queue_event(GID_POP, POP_UNKNOWN_CMD);
             DebugMessage(DEBUG_POP, "No known command found\n");
             return eol;
         }
@@ -493,7 +493,7 @@ static void POP_ProcessServerPacket(Packet* p, POPData* pop_ssn)
             }
             else if (*ptr == '+')
             {
-                SnortEventqAdd(GID_POP, POP_UNKNOWN_RESP);
+                DetectionEngine::queue_event(GID_POP, POP_UNKNOWN_RESP);
                 DebugMessage(DEBUG_POP, "Server response not found\n");
             }
         }
@@ -621,13 +621,13 @@ void PopMime::decode_alert()
     switch ( decode_state->get_decode_type() )
     {
     case DECODE_B64:
-        SnortEventqAdd(GID_POP, POP_B64_DECODING_FAILED);
+        DetectionEngine::queue_event(GID_POP, POP_B64_DECODING_FAILED);
         break;
     case DECODE_QP:
-        SnortEventqAdd(GID_POP, POP_QP_DECODING_FAILED);
+        DetectionEngine::queue_event(GID_POP, POP_QP_DECODING_FAILED);
         break;
     case DECODE_UU:
-        SnortEventqAdd(GID_POP, POP_UU_DECODING_FAILED);
+        DetectionEngine::queue_event(GID_POP, POP_UU_DECODING_FAILED);
         break;
 
     default:
index 9b998059f5c49ddebad8133d46cc7db3348ab345..1a8d1489d8f17cb37c2650c06707bdb41c1950a8 100644 (file)
@@ -39,6 +39,7 @@
 #endif
 
 #include "detection/detection_util.h"
+#include "detection/detection_engine.h"
 #include "framework/data_bus.h"
 #include "log/messages.h"
 #include "profiler/profiler.h"
@@ -152,23 +153,23 @@ static inline void RpcPreprocEvent(
     switch (event)
     {
     case RPC_FRAG_TRAFFIC:
-        SnortEventqAdd(GID_RPC_DECODE, RPC_FRAG_TRAFFIC);
+        DetectionEngine::queue_event(GID_RPC_DECODE, RPC_FRAG_TRAFFIC);
         break;
 
     case RPC_MULTIPLE_RECORD:
-        SnortEventqAdd(GID_RPC_DECODE, RPC_MULTIPLE_RECORD);
+        DetectionEngine::queue_event(GID_RPC_DECODE, RPC_MULTIPLE_RECORD);
         break;
 
     case RPC_LARGE_FRAGSIZE:
-        SnortEventqAdd(GID_RPC_DECODE, RPC_LARGE_FRAGSIZE);
+        DetectionEngine::queue_event(GID_RPC_DECODE, RPC_LARGE_FRAGSIZE);
         break;
 
     case RPC_INCOMPLETE_SEGMENT:
-        SnortEventqAdd(GID_RPC_DECODE, RPC_INCOMPLETE_SEGMENT);
+        DetectionEngine::queue_event(GID_RPC_DECODE, RPC_INCOMPLETE_SEGMENT);
         break;
 
     case RPC_ZERO_LENGTH_FRAGMENT:
-        SnortEventqAdd(GID_RPC_DECODE, RPC_ZERO_LENGTH_FRAGMENT);
+        DetectionEngine::queue_event(GID_RPC_DECODE, RPC_ZERO_LENGTH_FRAGMENT);
         break;
 
     default:
index 7743d1721cb7d0349d0964101e4fea9a942bd9b5..a4e5b946137ce6bb56e8f68bfd41e0dec6ac7106 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "sip.h"
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "log/messages.h"
 #include "managers/inspector_manager.h"
@@ -34,9 +35,6 @@
 
 THREAD_LOCAL ProfileStats sipPerfStats;
 
-/*
- * Function prototype(s)
- */
 static void snort_sip(SIP_PROTO_CONF* GlobalConf, Packet* p);
 static void FreeSipData(void*);
 
@@ -54,7 +52,7 @@ static SIPData* SetNewSIPData(Packet* p, SIP_PROTO_CONF* config)
     if (numSessions > config->maxNumSessions)
     {
         if (!MaxSessionsAlerted)
-            SnortEventqAdd(GID_SIP, SIP_EVENT_MAX_SESSIONS);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_MAX_SESSIONS);
         MaxSessionsAlerted = 1;
         return NULL;
     }
index a8232f9e216cb89c377935ec465b90a5be601d6d..58bb319466a6fefdec14f3133ec3169641e2a6a2 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "sip_dialog.h"
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "framework/data_bus.h"
 #include "main/snort_debug.h"
@@ -155,7 +156,7 @@ static int SIP_processInvite(SIPMsg* sipMsg, SIP_DialogData* dialog, SIP_DialogL
         DebugFormat(DEBUG_SIP, "Dialog state code: %hu\n",
             dialog->status_code);
 
-        SnortEventqAdd(GID_SIP, SIP_EVENT_AUTH_INVITE_REPLAY_ATTACK);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_AUTH_INVITE_REPLAY_ATTACK);
         return false;
     }
     if (SIP_DLG_ESTABLISHED == dialog->state)
@@ -172,7 +173,7 @@ static int SIP_processInvite(SIPMsg* sipMsg, SIP_DialogData* dialog, SIP_DialogL
     {
         ret = SIP_checkMediaChange(sipMsg, dialog);
         if (false == ret)
-            SnortEventqAdd(GID_SIP, SIP_EVENT_AUTH_INVITE_DIFF_SESSION);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_AUTH_INVITE_DIFF_SESSION);
         SIP_updateMedias(sipMsg->mediaSession, &dialog->mediaSessions);
     }
     else if (SIP_DLG_TERMINATED == dialog->state)
@@ -703,7 +704,7 @@ int SIP_updateDialog(SIPMsg* sipMsg, SIP_DialogList* dList, Packet* p, SIP_PROTO
     /*If the number of dialogs exceeded, release the oldest one*/
     if ((dList->num_dialogs >= config->maxNumDialogsInSession) && (!dialog))
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_MAX_DIALOGS_IN_A_SESSION);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_MAX_DIALOGS_IN_A_SESSION);
         SIP_deleteDialog(oldDialog, dList);
     }
 
index cc1551844398a35144d69aeee6b5fb7513feb4da..6a13ff462ad21153c5eb630020048f689151a035 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "sip_parser.h"
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "main/snort_debug.h"
 #include "utils/util.h"
@@ -361,7 +362,7 @@ static bool sip_startline_parse(SIPMsg* msg, const char* buff, char* end, char**
         /*Check SIP version number, end with SP*/
         if (!(sip_is_valid_version(buff + SIP_KEYWORD_LEN) && (*(buff + SIP_VERSION_LEN) == ' ')))
         {
-            SnortEventqAdd(GID_SIP, SIP_EVENT_INVALID_VERSION);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_INVALID_VERSION);
         }
 
         space = (char*)strchr(buff, ' ');
@@ -370,7 +371,7 @@ static bool sip_startline_parse(SIPMsg* msg, const char* buff, char* end, char**
         statusCode = SnortStrtoul(space + 1, NULL, 10);
         if (( statusCode > MAX_STAT_CODE) || (statusCode < MIN_STAT_CODE ))
         {
-            SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_STATUS_CODE);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_STATUS_CODE);
             msg->status_code =  MAX_STAT_CODE + 1;
         }
         else
@@ -415,9 +416,9 @@ static bool sip_startline_parse(SIPMsg* msg, const char* buff, char* end, char**
         DebugFormat(DEBUG_SIP, "uri: %.*s, length: %hu\n", msg->uriLen, msg->uri,
             msg->uriLen);
         if (0 == msg->uriLen)
-            SnortEventqAdd(GID_SIP, SIP_EVENT_EMPTY_REQUEST_URI);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_EMPTY_REQUEST_URI);
         else if (config->maxUriLen && (msg->uriLen > config->maxUriLen))
-            SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_URI);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_URI);
 
         version = space + 1;
         if (version + SIP_VERSION_LEN > end)
@@ -427,12 +428,12 @@ static bool sip_startline_parse(SIPMsg* msg, const char* buff, char* end, char**
         /*Check SIP version number, end with CRLF*/
         if (!sip_is_valid_version(*lineEnd - SIP_VERSION_NUM_LEN - numOfLineBreaks))
         {
-            SnortEventqAdd(GID_SIP, SIP_EVENT_INVALID_VERSION);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_INVALID_VERSION);
         }
 
         if (NULL == method)
         {
-            SnortEventqAdd(GID_SIP, SIP_EVENT_UNKOWN_METHOD);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_UNKOWN_METHOD);
             return false;
         }
     }
@@ -576,57 +577,57 @@ static bool sip_check_headers(SIPMsg* msg, SIP_PROTO_CONF* config)
     int ret = true;
     if (0 == msg->fromLen)
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_EMPTY_FROM);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_EMPTY_FROM);
         ret =  false;
     }
     else if (config->maxFromLen && (msg->fromLen > config->maxFromLen))
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_FROM);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_FROM);
         ret = false;
     }
 
     if (0 == msg->toLen)
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_EMPTY_TO);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_EMPTY_TO);
         ret = false;
     }
     else if (config->maxToLen && (msg->toLen > config->maxToLen))
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_TO);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_TO);
         ret = false;
     }
 
     if (0 == msg->callIdLen)
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_EMPTY_CALL_ID);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_EMPTY_CALL_ID);
         ret = false;
     }
     else if ( config->maxCallIdLen && (msg->callIdLen > config->maxCallIdLen))
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_CALL_ID);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_CALL_ID);
         ret = false;
     }
 
     if (msg->cseqnum > MAX_NUM_32BIT)
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_CSEQ_NUM);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_CSEQ_NUM);
         ret = false;
     }
     if ( config->maxRequestNameLen && (msg->cseqNameLen > config->maxRequestNameLen))
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_CSEQ_NAME);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_CSEQ_NAME);
         ret = false;
     }
 
     /*Alert here after parsing*/
     if (0 == msg->viaLen)
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_EMPTY_VIA);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_EMPTY_VIA);
         ret = false;
     }
     else if (config->maxViaLen && (msg->viaLen > config->maxViaLen))
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_VIA);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_VIA);
         ret = false;
     }
 
@@ -635,18 +636,18 @@ static bool sip_check_headers(SIPMsg* msg, SIP_PROTO_CONF* config)
     // Contact is required for invite message
     if ((0 == msg->contactLen)&&(msg->methodFlag == SIP_METHOD_INVITE)&&(0 == msg->status_code))
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_EMPTY_CONTACT);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_EMPTY_CONTACT);
         ret = false;
     }
     else if (config->maxContactLen && (msg->contactLen > config->maxContactLen))
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_CONTACT);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_CONTACT);
         ret = false;
     }
 
     if ((0 == msg->contentTypeLen) && (msg->content_len > 0))
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_EMPTY_CONTENT_TYPE);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_EMPTY_CONTENT_TYPE);
         ret = false;
     }
 
@@ -930,7 +931,7 @@ static int sip_parse_cseq(SIPMsg* msg, const char* start, const char* end, SIP_P
 
     if (NULL == method)
     {
-        SnortEventqAdd(GID_SIP, SIP_EVENT_INVALID_CSEQ_NAME);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_INVALID_CSEQ_NAME);
         return SIP_PARSE_ERROR;
     }
     else
@@ -940,7 +941,7 @@ static int sip_parse_cseq(SIPMsg* msg, const char* start, const char* end, SIP_P
             msg->methodFlag = method->methodFlag;
         else if ( method->methodFlag != msg->methodFlag)
         {
-            SnortEventqAdd(GID_SIP, SIP_EVENT_MISMATCH_METHOD);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_MISMATCH_METHOD);
         }
         DebugFormat(DEBUG_SIP, "Found the method: %s, Flag: 0x%x\n",
             method->methodName, method->methodFlag);
@@ -1045,12 +1046,12 @@ static int sip_parse_content_len(SIPMsg* msg, const char* start, const char*,
 
     msg->content_len = SnortStrtoul(start, &next, 10);
     if ( config->maxContentLen && (msg->content_len > config->maxContentLen))
-        SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_CONTENT_LEN);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_CONTENT_LEN);
     /*Check the length of the value*/
     if (next > start + SIP_CONTENT_LEN) // This check is to prevent overflow
     {
         if (config->maxContentLen)
-            SnortEventqAdd(GID_SIP, SIP_EVENT_BAD_CONTENT_LEN);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_BAD_CONTENT_LEN);
         return SIP_PARSE_ERROR;
     }
     DebugFormat(DEBUG_SIP, "Content length: %u\n", msg->content_len);
@@ -1296,7 +1297,7 @@ bool sip_parse(SIPMsg* msg, const char* buff, char* end, SIP_PROTO_CONF* config)
     msg->bodyLen = end - start;
     /*Disable this check for TCP. Revisit this again when PAF enabled for SIP*/
     if ((!msg->isTcp)&&(msg->content_len > msg->bodyLen))
-        SnortEventqAdd(GID_SIP, SIP_EVENT_MISMATCH_CONTENT_LEN);
+        DetectionEngine::queue_event(GID_SIP, SIP_EVENT_MISMATCH_CONTENT_LEN);
 
     if (msg->content_len < msg->bodyLen)
         status = sip_body_parse(msg, start, start + msg->content_len, &nextIndex);
@@ -1315,11 +1316,11 @@ bool sip_parse(SIPMsg* msg, const char* buff, char* end, SIP_PROTO_CONF* config)
         if (true == sip_startline_parse(msg, start + msg->content_len, end, &nextIndex,
             config))
         {
-            SnortEventqAdd(GID_SIP, SIP_EVENT_MULTI_MSGS);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_MULTI_MSGS);
         }
         else
         {
-            SnortEventqAdd(GID_SIP, SIP_EVENT_MISMATCH_CONTENT_LEN);
+            DetectionEngine::queue_event(GID_SIP, SIP_EVENT_MISMATCH_CONTENT_LEN);
         }
     }
     return status;
index 1e5b098342613dd79eadd11c5db146a932251f83..8057d090a4c9dc4919fdb89284b52d00b726213e 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "smtp.h"
 
+#include "detection/detection_engine.h"
 #include "detection/detection_util.h"
 #include "log/messages.h"
 #include "log/unified2.h"
@@ -755,10 +756,10 @@ static const uint8_t* SMTP_HandleCommand(SMTP_PROTO_CONF* config, Packet* p, SMT
 
             if (smtp_ssn->state != STATE_AUTH)
             {
-                SnortEventqAdd(GID_SMTP,SMTP_UNKNOWN_CMD);
+                DetectionEngine::queue_event(GID_SMTP,SMTP_UNKNOWN_CMD);
 
                 if (alert_long_command_line)
-                    SnortEventqAdd(GID_SMTP, SMTP_COMMAND_OVERFLOW);
+                    DetectionEngine::queue_event(GID_SMTP, SMTP_COMMAND_OVERFLOW);
             }
 
             /* if normalizing, copy line to alt buffer */
@@ -780,18 +781,18 @@ static const uint8_t* SMTP_HandleCommand(SMTP_PROTO_CONF* config, Packet* p, SMT
     {
         if (cmd_line_len > config->cmd_config[smtp_search_info.id].max_line_len)
         {
-            SnortEventqAdd(GID_SMTP, SMTP_SPECIFIC_CMD_OVERFLOW);
+            DetectionEngine::queue_event(GID_SMTP, SMTP_SPECIFIC_CMD_OVERFLOW);
         }
     }
     else if (alert_long_command_line)
     {
-        SnortEventqAdd(GID_SMTP, SMTP_COMMAND_OVERFLOW);
+        DetectionEngine::queue_event(GID_SMTP, SMTP_COMMAND_OVERFLOW);
     }
 
     if (config->cmd_config[smtp_search_info.id].alert)
     {
         /* Are we alerting on this command? */
-        SnortEventqAdd(GID_SMTP, SMTP_ILLEGAL_CMD);
+        DetectionEngine::queue_event(GID_SMTP, SMTP_ILLEGAL_CMD);
     }
 
     switch (smtp_search_info.id)
@@ -852,7 +853,7 @@ static const uint8_t* SMTP_HandleCommand(SMTP_PROTO_CONF* config, Packet* p, SMT
             eolm)
             && (smtp_ssn->state_flags & SMTP_FLAG_ABORT))
         {
-            SnortEventqAdd(GID_SMTP, SMTP_AUTH_ABORT_AUTH);
+            DetectionEngine::queue_event(GID_SMTP, SMTP_AUTH_ABORT_AUTH);
         }
         smtp_ssn->state_flags &= ~(SMTP_FLAG_ABORT);
         break;
@@ -1186,7 +1187,7 @@ static void SMTP_ProcessServerPacket(SMTP_PROTO_CONF* config, Packet* p, SMTPDat
         if ((config->max_response_line_len != 0) &&
             (resp_line_len > config->max_response_line_len))
         {
-            SnortEventqAdd(GID_SMTP, SMTP_RESPONSE_OVERFLOW);
+            DetectionEngine::queue_event(GID_SMTP, SMTP_RESPONSE_OVERFLOW);
         }
 
         ptr = eol;
@@ -1399,12 +1400,12 @@ int SmtpMime::handle_header_line(const uint8_t* ptr, const uint8_t* eol,
     header_line_len = eol - ptr;
 
     if (max_header_len)
-        SnortEventqAdd(GID_SMTP, SMTP_HEADER_NAME_OVERFLOW);
+        DetectionEngine::queue_event(GID_SMTP, SMTP_HEADER_NAME_OVERFLOW);
 
     if ((config->max_header_line_len != 0) &&
         (header_line_len > config->max_header_line_len))
     {
-        SnortEventqAdd(GID_SMTP, SMTP_DATA_HDR_OVERFLOW);
+        DetectionEngine::queue_event(GID_SMTP, SMTP_DATA_HDR_OVERFLOW);
 
     }
 
@@ -1452,13 +1453,13 @@ void SmtpMime::decode_alert()
     switch ( decode_state->get_decode_type() )
     {
     case DECODE_B64:
-        SnortEventqAdd(GID_SMTP, SMTP_B64_DECODING_FAILED);
+        DetectionEngine::queue_event(GID_SMTP, SMTP_B64_DECODING_FAILED);
         break;
     case DECODE_QP:
-        SnortEventqAdd(GID_SMTP, SMTP_QP_DECODING_FAILED);
+        DetectionEngine::queue_event(GID_SMTP, SMTP_QP_DECODING_FAILED);
         break;
     case DECODE_UU:
-        SnortEventqAdd(GID_SMTP, SMTP_UU_DECODING_FAILED);
+        DetectionEngine::queue_event(GID_SMTP, SMTP_UU_DECODING_FAILED);
         break;
 
     default:
index 1f99b1fa5743435efe437b5e16a3d9b320be5b63..6395fa791f7a5f603069569139682dcc257b7f75 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "smtp_paf.h"
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "main/snort_debug.h"
 #include "protocols/packet.h"
@@ -309,7 +310,7 @@ static inline StreamSplitter::Status smtp_paf_client(SmtpPafData* pfdata,
                         (((int)i + pfdata->data_info.boundary_len) > max_auth_command_line_len) &&
                         !alert_generated)
                 {
-                    SnortEventqAdd(GID_SMTP, SMTP_AUTH_COMMAND_OVERFLOW);
+                    DetectionEngine::queue_event(GID_SMTP, SMTP_AUTH_COMMAND_OVERFLOW);
                     alert_generated = true;
                 }
                 if (ch == '\n')
index 3269f99c57f6f4cbfa9873a4cb65caeaffafdd0e..8428f143caa536057b7800720b945f1d4c793d79 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "smtp_xlink2state.h"
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "packet_io/active.h"
 
@@ -246,7 +247,7 @@ int ParseXLink2State(SMTP_PROTO_CONF* config, Packet* p, SMTPData* smtp_ssn, con
         if (config->xlink2state == DROP_XLINK2STATE)
             Active::reset_session(p);
 
-        SnortEventqAdd(GID_SMTP, SMTP_XLINK2STATE_OVERFLOW);
+        DetectionEngine::queue_event(GID_SMTP, SMTP_XLINK2STATE_OVERFLOW);
         smtp_ssn->session_flags |= SMTP_FLAG_XLINK2STATE_ALERTED;
 
         return 1;
index cb11d285512bc6cc407eb0afd87974359520a428..e7ce1e5d13790e572ef633cf73842de464e76046 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "ssh.h"
 
+#include "detection/detection_engine.h"
 #include "events/event_queue.h"
 #include "log/messages.h"
 #include "profiler/profiler.h"
@@ -242,10 +243,10 @@ static void snort_ssh(SSH_PROTO_CONF* config, Packet* p)
                 {
                     // Probable exploit in progress.
                     if (sessp->version == SSH_VERSION_1)
-                        SnortEventqAdd(GID_SSH, SSH_EVENT_CRC32);
+                        DetectionEngine::queue_event(GID_SSH, SSH_EVENT_CRC32);
 
                     else
-                        SnortEventqAdd(GID_SSH, SSH_EVENT_RESPOVERFLOW);
+                        DetectionEngine::queue_event(GID_SSH, SSH_EVENT_RESPOVERFLOW);
 
                     Stream::stop_inspection(p->flow, p, SSN_DIR_BOTH, -1, 0);
                 }
@@ -331,7 +332,7 @@ static unsigned int ProcessSSHProtocolVersionExchange(SSH_PROTO_CONF* config, SS
              * continue checking after that point*/
             (SSHCheckStrlen(&version_stringp[6], config->MaxServerVersionLen-6)))
         {
-            SnortEventqAdd(GID_SSH, SSH_EVENT_SECURECRT);
+            DetectionEngine::queue_event(GID_SSH, SSH_EVENT_SECURECRT);
         }
     }
     else if ( p->dsize >= 6 &&
@@ -406,7 +407,7 @@ static unsigned int ProcessSSHKeyInitExchange(SSHData* sessionp, Packet* p,
         if ( dsize < 4 )
         {
             {
-                SnortEventqAdd(GID_SSH, SSH_EVENT_PAYLOAD_SIZE);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_PAYLOAD_SIZE);
             }
 
             return 0;
@@ -424,7 +425,7 @@ static unsigned int ProcessSSHKeyInitExchange(SSHData* sessionp, Packet* p,
         if ( dsize < length )
         {
             {
-                SnortEventqAdd(GID_SSH, SSH_EVENT_PAYLOAD_SIZE);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_PAYLOAD_SIZE);
             }
 
             return 0;
@@ -440,7 +441,7 @@ static unsigned int ProcessSSHKeyInitExchange(SSHData* sessionp, Packet* p,
         {
             if (offset == 0)
             {
-                SnortEventqAdd(GID_SSH, SSH_EVENT_PAYLOAD_SIZE);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_PAYLOAD_SIZE);
             }
 
             return 0;
@@ -459,7 +460,7 @@ static unsigned int ProcessSSHKeyInitExchange(SSHData* sessionp, Packet* p,
             else
             {
                 /* Server msg not from server. */
-                SnortEventqAdd(GID_SSH, SSH_EVENT_WRONGDIR);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_WRONGDIR);
             }
             break;
         case SSH_MSG_V1_CMSG_SESSION_KEY:
@@ -471,7 +472,7 @@ static unsigned int ProcessSSHKeyInitExchange(SSHData* sessionp, Packet* p,
             else
             {
                 /* Client msg not from client. */
-                SnortEventqAdd(GID_SSH, SSH_EVENT_WRONGDIR);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_WRONGDIR);
             }
             break;
         default:
@@ -530,7 +531,7 @@ static unsigned int ProcessSSHKeyInitExchange(SSHData* sessionp, Packet* p,
     {
         {
             /* Unrecognized version. */
-            SnortEventqAdd(GID_SSH, SSH_EVENT_VERSION);
+            DetectionEngine::queue_event(GID_SSH, SSH_EVENT_VERSION);
         }
 
         return 0;
@@ -586,7 +587,7 @@ static unsigned int ProcessSSHKeyExchange(SSHData* sessionp, Packet* p,
             }
             {
                 /* Invalid packet length. */
-                SnortEventqAdd(GID_SSH, SSH_EVENT_PAYLOAD_SIZE);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_PAYLOAD_SIZE);
             }
 
             return 0;
@@ -603,7 +604,7 @@ static unsigned int ProcessSSHKeyExchange(SSHData* sessionp, Packet* p,
             else
             {
                 /* Client msg from server. */
-                SnortEventqAdd(GID_SSH, SSH_EVENT_WRONGDIR);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_WRONGDIR);
             }
             break;
         case SSH_MSG_KEXDH_REPLY:
@@ -619,7 +620,7 @@ static unsigned int ProcessSSHKeyExchange(SSHData* sessionp, Packet* p,
             else
             {
                 /* Server msg from client. */
-                SnortEventqAdd(GID_SSH, SSH_EVENT_WRONGDIR);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_WRONGDIR);
             }
             break;
         case SSH_MSG_KEXDH_GEX_REQ:
@@ -631,7 +632,7 @@ static unsigned int ProcessSSHKeyExchange(SSHData* sessionp, Packet* p,
             else
             {
                 /* Server msg from client. */
-                SnortEventqAdd(GID_SSH, SSH_EVENT_WRONGDIR);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_WRONGDIR);
             }
             break;
         case SSH_MSG_KEXDH_GEX_GRP:
@@ -643,7 +644,7 @@ static unsigned int ProcessSSHKeyExchange(SSHData* sessionp, Packet* p,
             else
             {
                 /* Client msg from server. */
-                SnortEventqAdd(GID_SSH, SSH_EVENT_WRONGDIR);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_WRONGDIR);
             }
             break;
         case SSH_MSG_KEXDH_GEX_INIT:
@@ -655,7 +656,7 @@ static unsigned int ProcessSSHKeyExchange(SSHData* sessionp, Packet* p,
             else
             {
                 /* Server msg from client. */
-                SnortEventqAdd(GID_SSH, SSH_EVENT_WRONGDIR);
+                DetectionEngine::queue_event(GID_SSH, SSH_EVENT_WRONGDIR);
             }
             break;
         case SSH_MSG_NEWKEYS:
index 6e91429a9b007aa724bd68845b3ce1b52b3b01af..a0c967e80da13cd25225983a9a85383ae126a5a0 100644 (file)
@@ -313,21 +313,21 @@ static void snort_ssl(SSL_PROTO_CONF* config, Packet* p)
 
     if (heartbleed_type & SSL_HEARTBLEED_REQUEST)
     {
-        SnortEventqAdd(GID_SSL, SSL_ALERT_HB_REQUEST);
+        DetectionEngine::queue_event(GID_SSL, SSL_ALERT_HB_REQUEST);
     }
     else if (heartbleed_type & SSL_HEARTBLEED_RESPONSE)
     {
-        SnortEventqAdd(GID_SSL, SSL_ALERT_HB_RESPONSE);
+        DetectionEngine::queue_event(GID_SSL, SSL_ALERT_HB_RESPONSE);
     }
     else if (heartbleed_type & SSL_HEARTBLEED_UNKNOWN)
     {
         if (!dir)
         {
-            SnortEventqAdd(GID_SSL, SSL_ALERT_HB_REQUEST);
+            DetectionEngine::queue_event(GID_SSL, SSL_ALERT_HB_REQUEST);
         }
         else
         {
-            SnortEventqAdd(GID_SSL, SSL_ALERT_HB_RESPONSE);
+            DetectionEngine::queue_event(GID_SSL, SSL_ALERT_HB_RESPONSE);
         }
     }
     if (sd->ssn_flags & SSL_ENCRYPTED_FLAG )
@@ -357,14 +357,14 @@ static void snort_ssl(SSL_PROTO_CONF* config, Packet* p)
     if ( (SSL_IS_CHELLO(new_flags) && SSL_IS_CHELLO(sd->ssn_flags) && SSL_IS_SHELLO(sd->ssn_flags) )
             || (SSL_IS_CHELLO(new_flags) && SSL_IS_SHELLO(sd->ssn_flags) ))
     {
-        SnortEventqAdd(GID_SSL, SSL_INVALID_CLIENT_HELLO);
+        DetectionEngine::queue_event(GID_SSL, SSL_INVALID_CLIENT_HELLO);
     }
     else if (!(config->trustservers))
     {
         if ( (SSL_IS_SHELLO(new_flags) && !SSL_IS_CHELLO(sd->ssn_flags) ))
         {
             if (!(Stream::missed_packets(p->flow, SSN_DIR_FROM_CLIENT)))
-                SnortEventqAdd(GID_SSL, SSL_INVALID_SERVER_HELLO);
+                DetectionEngine::queue_event(GID_SSL, SSL_INVALID_SERVER_HELLO);
         }
     }
 
index a1c54fc5f43d4738f15f53e743187648919c56bd..b07b1a1b9903518d2c4b0de14590e5929a8b1406 100644 (file)
@@ -214,7 +214,7 @@ static void FragPrintEngineConfig(FragEngine* engine)
  */
 static inline void EventAnomIpOpts(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_IPOPTIONS);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_IPOPTIONS);
     ip_stats.alerts++;
 }
 
@@ -227,7 +227,7 @@ static inline void EventAnomIpOpts(FragEngine*)
  */
 static inline void EventAttackTeardrop(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_TEARDROP);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_TEARDROP);
     ip_stats.alerts++;
 }
 
@@ -240,7 +240,7 @@ static inline void EventAttackTeardrop(FragEngine*)
  */
 static inline void EventTinyFragments(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_TINY_FRAGMENT);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_TINY_FRAGMENT);
     ip_stats.alerts++;
 }
 
@@ -253,7 +253,7 @@ static inline void EventTinyFragments(FragEngine*)
  */
 static inline void EventExcessiveOverlap(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_EXCESSIVE_OVERLAP);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_EXCESSIVE_OVERLAP);
     ip_stats.alerts++;
 }
 
@@ -267,7 +267,7 @@ static inline void EventExcessiveOverlap(FragEngine*)
  */
 static inline void EventAnomShortFrag(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_SHORT_FRAG);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_SHORT_FRAG);
     ip_stats.alerts++;
     ip_stats.anomalies++;
 }
@@ -282,7 +282,7 @@ static inline void EventAnomShortFrag(FragEngine*)
  */
 static inline void EventAnomOversize(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_ANOMALY_OVERSIZE);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_ANOMALY_OVERSIZE);
     ip_stats.alerts++;
     ip_stats.anomalies++;
 }
@@ -297,7 +297,7 @@ static inline void EventAnomOversize(FragEngine*)
  */
 static inline void EventAnomZeroFrag(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_ANOMALY_ZERO);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_ANOMALY_ZERO);
     ip_stats.alerts++;
     ip_stats.anomalies++;
 }
@@ -311,7 +311,7 @@ static inline void EventAnomZeroFrag(FragEngine*)
  */
 static inline void EventAnomBadsizeLg(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_ANOMALY_BADSIZE_LG);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_ANOMALY_BADSIZE_LG);
     ip_stats.alerts++;
     ip_stats.anomalies++;
 }
@@ -325,7 +325,7 @@ static inline void EventAnomBadsizeLg(FragEngine*)
  */
 static inline void EventAnomBadsizeSm(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_ANOMALY_BADSIZE_SM);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_ANOMALY_BADSIZE_SM);
     ip_stats.alerts++;
     ip_stats.anomalies++;
 }
@@ -339,7 +339,7 @@ static inline void EventAnomBadsizeSm(FragEngine*)
  */
 static inline void EventAnomOverlap(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_ANOMALY_OVLP);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_ANOMALY_OVLP);
     ip_stats.alerts++;
     ip_stats.anomalies++;
 }
@@ -353,7 +353,7 @@ static inline void EventAnomOverlap(FragEngine*)
  */
 static inline void EventAnomMinTtl(FragEngine*)
 {
-    SnortEventqAdd(GID_DEFRAG, DEFRAG_MIN_TTL_EVASION);
+    DetectionEngine::queue_event(GID_DEFRAG, DEFRAG_MIN_TTL_EVASION);
     ip_stats.alerts++;
 }
 
index 31666ed9f10f05889a3ae01d0edd47e832ece001..679b2838ab290d43af9b2f27459478fae30ae566 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "tcp_event_logger.h"
 
+#include "detection/detection_engine.h"
 #include "detection/rules.h"
 #include "filters/sfrf.h"
 #include "main/snort_config.h"
@@ -92,7 +93,7 @@ void TcpEventLogger::log_internal_event(uint32_t eventSid)
     if (is_internal_event_enabled(snort_conf->rate_filter_config, eventSid))
     {
         tcpStats.internalEvents++;
-        SnortEventqAdd(GENERATOR_INTERNAL, eventSid);
+        DetectionEngine::queue_event(GENERATOR_INTERNAL, eventSid);
         DebugFormat(DEBUG_STREAM, "Stream raised internal event %d\n", eventSid);
     }
 }
@@ -104,7 +105,7 @@ void TcpEventLogger::log_tcp_events()
         uint32_t idx = ffs(tcp_events);
         if ( idx )
         {
-            SnortEventqAdd(GID_STREAM_TCP, tcp_event_sids[ idx ].sid);
+            DetectionEngine::queue_event(GID_STREAM_TCP, tcp_event_sids[ idx ].sid);
             tcp_events ^= tcp_event_sids[ idx ].event_id;
             tcpStats.events++;
         }
index 5422819e4caacff16ccc8c445f96eca6deeac7eb..502e5b599fb0f1104a82a300be9e64435b381505 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "stats.h"
 
+#include "detection/detection_engine.h"
 #include "file_api/file_stats.h"
 #include "filters/sfthreshold.h"
 #include "helpers/process.h"
@@ -283,7 +284,7 @@ void DropStats()
     PacketManager::dump_stats();
 
     // ensure proper counting of log_limit
-    SnortEventqResetCounts();
+    DetectionEngine::reset_counts();
 
     LogLabel("Module Statistics");
     const char* exclude = "daq snort";