]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
output smtp: clean up memory at shutdown
authorVictor Julien <victor@inliniac.net>
Sat, 25 Oct 2014 12:11:03 +0000 (14:11 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 30 Oct 2014 12:33:54 +0000 (13:33 +0100)
src/output-json-smtp.c

index db6374ebf036754703a1360b7038c7da27437c50..c0b332c1b15485f2351bfc6aea805dfffefa1bf2 100644 (file)
@@ -61,6 +61,26 @@ static int JsonSmtpLogger(ThreadVars *tv, void *thread_data, const Packet *p)
     SCReturnInt(JsonEmailLogger(tv, thread_data, p));
 }
 
+static void OutputSmtpLogDeInitCtx(OutputCtx *output_ctx)
+{
+    OutputJsonEmailCtx *email_ctx = output_ctx->data;
+    if (email_ctx != NULL) {
+        LogFileFreeCtx(email_ctx->file_ctx);
+        SCFree(email_ctx);
+    }
+    SCFree(output_ctx);
+}
+
+static void OutputSmtpLogDeInitCtxSub(OutputCtx *output_ctx)
+{
+    SCLogDebug("cleaning up sub output_ctx %p", output_ctx);
+    OutputJsonEmailCtx *email_ctx = output_ctx->data;
+    if (email_ctx != NULL) {
+        SCFree(email_ctx);
+    }
+    SCFree(output_ctx);
+}
+
 #define DEFAULT_LOG_FILENAME "smtp.json"
 OutputCtx *OutputSmtpLogInit(ConfNode *conf)
 {
@@ -91,7 +111,7 @@ OutputCtx *OutputSmtpLogInit(ConfNode *conf)
     email_ctx->file_ctx = file_ctx;
 
     output_ctx->data = email_ctx;
-    output_ctx->DeInit = NULL;
+    output_ctx->DeInit = OutputSmtpLogDeInitCtx;
 
     /* enable the logger for the app layer */
     AppLayerParserRegisterLogger(IPPROTO_TCP, ALPROTO_SMTP);
@@ -116,7 +136,7 @@ static OutputCtx *OutputSmtpLogInitSub(ConfNode *conf, OutputCtx *parent_ctx)
     email_ctx->file_ctx = ajt->file_ctx;
 
     output_ctx->data = email_ctx;
-    output_ctx->DeInit = NULL;
+    output_ctx->DeInit = OutputSmtpLogDeInitCtxSub;
 
     /* enable the logger for the app layer */
     AppLayerParserRegisterLogger(IPPROTO_TCP, ALPROTO_SMTP);