]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
smtp: implement DetectFlags API
authorVictor Julien <victor@inliniac.net>
Mon, 16 Oct 2017 13:56:53 +0000 (15:56 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 19 Jan 2018 09:12:57 +0000 (10:12 +0100)
src/app-layer-smtp.c
src/app-layer-smtp.h

index 606aa6cc999e4e688fcadc4e546d715297261228..777a71911bfe93ee6d0b97b3db033fa1aebb8953 100644 (file)
@@ -1631,6 +1631,26 @@ static int SMTPSetTxDetectState(void *state, void *vtx, DetectEngineState *s)
     return 0;
 }
 
+static uint64_t SMTPGetTxDetectFlags(void *vtx, uint8_t dir)
+{
+    SMTPTransaction *tx = (SMTPTransaction *)vtx;
+    if (dir & STREAM_TOSERVER) {
+        return tx->detect_flags_ts;
+    } else {
+        return tx->detect_flags_tc;
+    }
+}
+
+static void SMTPSetTxDetectFlags(void *vtx, uint8_t dir, uint64_t flags)
+{
+    SMTPTransaction *tx = (SMTPTransaction *)vtx;
+    if (dir & STREAM_TOSERVER) {
+        tx->detect_flags_ts = flags;
+    } else {
+        tx->detect_flags_tc = flags;
+    }
+}
+
 /**
  * \brief Register the SMTP Protocol parser.
  */
@@ -1660,6 +1680,9 @@ void RegisterSMTPParsers(void)
         AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_SMTP, SMTPGetEvents);
         AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_SMTP, NULL,
                                                SMTPGetTxDetectState, SMTPSetTxDetectState);
+        AppLayerParserRegisterDetectFlagsFuncs(IPPROTO_TCP, ALPROTO_SMTP,
+                                               SMTPGetTxDetectFlags, SMTPSetTxDetectFlags);
+
 
         AppLayerParserRegisterLocalStorageFunc(IPPROTO_TCP, ALPROTO_SMTP, SMTPLocalStorageAlloc,
                                                SMTPLocalStorageFree);
index face8f93fa647f0276df119fe6456832157dc4c6..24098120e72620b268ef842b7049a962a350b1f8 100644 (file)
@@ -66,6 +66,10 @@ typedef struct SMTPString_ {
 typedef struct SMTPTransaction_ {
     /** id of this tx, starting at 0 */
     uint64_t tx_id;
+
+    uint64_t detect_flags_ts;
+    uint64_t detect_flags_tc;
+
     int done;
     /** indicates loggers done logging */
     uint32_t logged;