]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
dns: implement tx de_state
authorVictor Julien <victor@inliniac.net>
Mon, 9 Mar 2015 14:32:40 +0000 (15:32 +0100)
committerVictor Julien <victor@inliniac.net>
Mon, 16 Mar 2015 14:36:34 +0000 (15:36 +0100)
src/app-layer-dns-common.c
src/app-layer-dns-common.h
src/app-layer-dns-tcp.c
src/app-layer-dns-udp.c

index 5f8e0be13326eb8d048a2ec51b77c0ee58a46620..95eaf131520e4a6ec5a8925bd046635995ba95c5 100644 (file)
@@ -277,6 +277,9 @@ static void DNSTransactionFree(DNSTransaction *tx, DNSState *state)
 
     AppLayerDecoderEventsFreeEvents(&tx->decoder_events);
 
+    if (tx->de_state != NULL)
+        DetectEngineStateFree(tx->de_state);
+
     DNSDecrMemcap(sizeof(DNSTransaction), state);
     SCFree(tx);
     SCReturn;
@@ -344,6 +347,19 @@ DNSTransaction *DNSTransactionFindByTxId(const DNSState *dns_state, const uint16
     return NULL;
 }
 
+DetectEngineState *DNSGetTxDetectState(void *vtx)
+{
+    DNSTransaction *tx = (DNSTransaction *)vtx;
+    return tx->de_state;
+}
+
+int DNSSetTxDetectState(void *vtx, DetectEngineState *s)
+{
+    DNSTransaction *tx = (DNSTransaction *)vtx;
+    tx->de_state = s;
+    return 0;
+}
+
 void *DNSStateAlloc(void)
 {
     void *s = SCMalloc(sizeof(DNSState));
index ab2d8ef11835c231af4ce75c83299e2291af12e0..5977a74df84153eda841beb3412a3a8adf3d84ff 100644 (file)
@@ -149,6 +149,7 @@ typedef struct DNSTransaction_ {
     AppLayerDecoderEvents *decoder_events;          /**< per tx events */
 
     TAILQ_ENTRY(DNSTransaction_) next;
+    DetectEngineState *de_state;
 } DNSTransaction;
 
 /** \brief Per flow DNS state container */
@@ -199,6 +200,9 @@ int DNSGetAlstateProgressCompletionStatus(uint8_t direction);
 void DNSStateTransactionFree(void *state, uint64_t tx_id);
 DNSTransaction *DNSTransactionFindByTxId(const DNSState *dns_state, const uint16_t tx_id);
 
+DetectEngineState *DNSGetTxDetectState(void *vtx);
+int DNSSetTxDetectState(void *vtx, DetectEngineState *s);
+
 void DNSSetEvent(DNSState *s, uint8_t e);
 void *DNSStateAlloc(void);
 void DNSStateFree(void *s);
index 6b46a5a1dcb229b68ca03a468715e40b4ac00590..8ed1a85dcb67c91f773bd4da4366a092c02a79b1 100644 (file)
@@ -642,6 +642,8 @@ void RegisterDNSTCPParsers(void)
 
         AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_DNS, DNSGetEvents);
         AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_DNS, DNSHasEvents);
+        AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_DNS,
+                                               DNSGetTxDetectState, DNSSetTxDetectState);
 
         AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_DNS, DNSGetTx);
         AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_DNS, DNSGetTxCnt);
index feeb7de1c7dcd43cee12244db02d04c2c0b4892f..86350d0ce396530f135e2c884a181870ead9a21b 100644 (file)
@@ -398,6 +398,8 @@ void RegisterDNSUDPParsers(void)
 
         AppLayerParserRegisterGetEventsFunc(IPPROTO_UDP, ALPROTO_DNS, DNSGetEvents);
         AppLayerParserRegisterHasEventsFunc(IPPROTO_UDP, ALPROTO_DNS, DNSHasEvents);
+        AppLayerParserRegisterDetectStateFuncs(IPPROTO_UDP, ALPROTO_DNS,
+                                               DNSGetTxDetectState, DNSSetTxDetectState);
 
         AppLayerParserRegisterGetTx(IPPROTO_UDP, ALPROTO_DNS,
                                     DNSGetTx);