]> git.ipfire.org Git - people/ms/suricata.git/commitdiff
logging: convert dns log to a non-thread module
authorJason Ish <ish@unx.ca>
Thu, 26 May 2016 05:32:48 +0000 (23:32 -0600)
committerVictor Julien <victor@inliniac.net>
Mon, 19 Sep 2016 11:47:52 +0000 (13:47 +0200)
src/log-dnslog.c
src/log-httplog.c
src/output-json-http.c
src/output-json-smtp.c
src/output-tx.c
src/output-tx.h
src/output.c
src/output.h
src/runmodes.c
src/tm-modules.c
src/tm-threads-common.h

index cfb0afccb7a516be13cb18e89d403504053792b8..5267175d5dd9c9ae9e5ec7f088866977593b5068 100644 (file)
@@ -346,16 +346,9 @@ static OutputCtx *LogDnsLogInitCtx(ConfNode *conf)
 
 void TmModuleLogDnsLogRegister (void)
 {
-    tmm_modules[TMM_LOGDNSLOG].name = MODULE_NAME;
-    tmm_modules[TMM_LOGDNSLOG].ThreadInit = LogDnsLogThreadInit;
-    tmm_modules[TMM_LOGDNSLOG].ThreadExitPrintStats = LogDnsLogExitPrintStats;
-    tmm_modules[TMM_LOGDNSLOG].ThreadDeinit = LogDnsLogThreadDeinit;
-    tmm_modules[TMM_LOGDNSLOG].RegisterTests = NULL;
-    tmm_modules[TMM_LOGDNSLOG].cap_flags = 0;
-    tmm_modules[TMM_LOGDNSLOG].flags = TM_FLAG_LOGAPI_TM;
-
     OutputRegisterTxModule(MODULE_NAME, "dns-log", LogDnsLogInitCtx,
-            ALPROTO_DNS, LogDnsLogger);
+        ALPROTO_DNS, LogDnsLogger, LogDnsLogThreadInit, LogDnsLogThreadDeinit,
+        LogDnsLogExitPrintStats);
 
     /* enable the logger for the app layer */
     SCLogDebug("registered %s", MODULE_NAME);
index e77e79031be69a473bf78a1b96adaa992a8fdefb..04db70a43de1796a79a2d45ae30816bfe1d4a308 100644 (file)
@@ -74,7 +74,7 @@ void TmModuleLogHttpLogRegister (void)
     tmm_modules[TMM_LOGHTTPLOG].flags = TM_FLAG_LOGAPI_TM;
 
     OutputRegisterTxModule(MODULE_NAME, "http-log", LogHttpLogInitCtx,
-            ALPROTO_HTTP, LogHttpLogger);
+        ALPROTO_HTTP, LogHttpLogger, NULL, NULL, NULL);
 }
 
 #define LOG_HTTP_MAXN_NODES 64
index d418749093335737cde3921e49ff5e90ce5516e5..2a10c4fe934accb15305dffa8fbcc679fb45a7f0 100644 (file)
@@ -593,7 +593,7 @@ void TmModuleJsonHttpLogRegister (void)
 
     /* register as separate module */
     OutputRegisterTxModule("JsonHttpLog", "http-json-log", OutputHttpLogInit,
-            ALPROTO_HTTP, JsonHttpLogger);
+        ALPROTO_HTTP, JsonHttpLogger, NULL, NULL, NULL);
 
     /* also register as child of eve-log */
     OutputRegisterTxSubModule("eve-log", "JsonHttpLog", "eve-log.http", OutputHttpLogInitSub,
index fd9683b920b9e5b2b8e315beb1048f3d96bfb004..37be7c1cd8c09a744c9d2490d33ec0c477edab18 100644 (file)
@@ -266,9 +266,8 @@ void TmModuleJsonSmtpLogRegister (void) {
     tmm_modules[TMM_JSONSMTPLOG].flags = TM_FLAG_LOGAPI_TM;
 
     /* register as separate module */
-    OutputRegisterTxModule("JsonSmtpLog", "smtp-json-log",
-                               OutputSmtpLogInit, ALPROTO_SMTP,
-                               JsonSmtpLogger);
+    OutputRegisterTxModule("JsonSmtpLog", "smtp-json-log", OutputSmtpLogInit,
+        ALPROTO_SMTP, JsonSmtpLogger, NULL, NULL, NULL);
 
     /* also register as child of eve-log */
     OutputRegisterTxSubModule("eve-log", "JsonSmtpLog",
index 311cc70f43fc8d8deaafe9fb29f17a0d6c2b7395..6250a996ffe34afd18b6baf4c4e766770080c43d 100644 (file)
@@ -55,17 +55,25 @@ typedef struct OutputTxLogger_ {
     uint32_t id;
     int tc_log_progress;
     int ts_log_progress;
+    TmEcode (*ThreadInit)(ThreadVars *, void *, void **);
+    TmEcode (*ThreadDeinit)(ThreadVars *, void *);
+    void (*ThreadExitPrintStats)(ThreadVars *, void *);
 } OutputTxLogger;
 
 static OutputTxLogger *list = NULL;
 
 int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc,
                            OutputCtx *output_ctx, int tc_log_progress,
-                           int ts_log_progress, TxLoggerCondition LogCondition)
+                           int ts_log_progress, TxLoggerCondition LogCondition,
+                           TmEcode (*ThreadInit)(ThreadVars *, void *, void **),
+                           TmEcode (*ThreadDeinit)(ThreadVars *, void *),
+                           void (*ThreadExitPrintStats)(ThreadVars *, void *))
 {
+#if 0
     int module_id = TmModuleGetIdByName(name);
     if (module_id < 0)
         return -1;
+#endif
 
     if (!(AppLayerParserIsTxAware(alproto))) {
         SCLogNotice("%s logger not enabled: protocol %s is disabled",
@@ -83,7 +91,12 @@ int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc,
     op->LogCondition = LogCondition;
     op->output_ctx = output_ctx;
     op->name = name;
+#if 0
     op->module_id = (TmmId) module_id;
+#endif
+    op->ThreadInit = ThreadInit;
+    op->ThreadDeinit = ThreadDeinit;
+    op->ThreadExitPrintStats = ThreadExitPrintStats;
 
     if (tc_log_progress < 0) {
         op->tc_log_progress =
@@ -260,16 +273,29 @@ static TmEcode OutputTxLogThreadInit(ThreadVars *tv, void *initdata, void **data
 
     OutputTxLogger *logger = list;
     while (logger) {
-        TmModule *tm_module = TmModuleGetByName((char *)logger->name);
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_INVALID_ARGUMENT,
+
+        TmEcode (*ThreadInit)(ThreadVars *, void *, void **) = NULL;
+
+        if (logger->ThreadInit) {
+            SCLogNotice("Logger %s has ThreadInit.", logger->name);
+            ThreadInit = logger->ThreadInit;
+        } else {
+            SCLogNotice("Logger %s DOES NOT have ThreadInit.", logger->name);
+        }
+
+        if (ThreadInit == NULL) {
+            TmModule *tm_module = TmModuleGetByName((char *)logger->name);
+            if (tm_module == NULL) {
+                SCLogError(SC_ERR_INVALID_ARGUMENT,
                     "TmModuleGetByName for %s failed", logger->name);
-            exit(EXIT_FAILURE);
+                exit(EXIT_FAILURE);
+            }
+            ThreadInit = tm_module->ThreadInit;
         }
 
-        if (tm_module->ThreadInit) {
+        if (ThreadInit) {
             void *retptr = NULL;
-            if (tm_module->ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) {
+            if (ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) {
                 OutputLoggerThreadStore *ts = SCMalloc(sizeof(*ts));
 /* todo */      BUG_ON(ts == NULL);
                 memset(ts, 0x00, sizeof(*ts));
@@ -303,15 +329,24 @@ static TmEcode OutputTxLogThreadDeinit(ThreadVars *tv, void *thread_data)
     OutputTxLogger *logger = list;
 
     while (logger && store) {
-        TmModule *tm_module = TmModuleGetByName((char *)logger->name);
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_INVALID_ARGUMENT,
+        TmEcode (*ThreadDeinit)(ThreadVars *, void *) = NULL;
+
+        if (logger->ThreadDeinit) {
+            ThreadDeinit = logger->ThreadDeinit;
+        }
+
+        if (ThreadDeinit == NULL) {
+            TmModule *tm_module = TmModuleGetByName((char *)logger->name);
+            if (tm_module == NULL) {
+                SCLogError(SC_ERR_INVALID_ARGUMENT,
                     "TmModuleGetByName for %s failed", logger->name);
-            exit(EXIT_FAILURE);
+                exit(EXIT_FAILURE);
+            }
+            ThreadDeinit = tm_module->ThreadDeinit;
         }
 
-        if (tm_module->ThreadDeinit) {
-            tm_module->ThreadDeinit(tv, store->thread_data);
+        if (ThreadDeinit) {
+            ThreadDeinit(tv, store->thread_data);
         }
 
         OutputLoggerThreadStore *next_store = store->next;
@@ -331,15 +366,24 @@ static void OutputTxLogExitPrintStats(ThreadVars *tv, void *thread_data)
     OutputTxLogger *logger = list;
 
     while (logger && store) {
-        TmModule *tm_module = TmModuleGetByName((char *)logger->name);
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_INVALID_ARGUMENT,
+        void (*ThreadExitPrintStats)(ThreadVars *, void *) = NULL;
+
+        if (logger->ThreadExitPrintStats) {
+            ThreadExitPrintStats = logger->ThreadExitPrintStats;
+        }
+
+        if (ThreadExitPrintStats == NULL) {
+            TmModule *tm_module = TmModuleGetByName((char *)logger->name);
+            if (tm_module == NULL) {
+                SCLogError(SC_ERR_INVALID_ARGUMENT,
                     "TmModuleGetByName for %s failed", logger->name);
-            exit(EXIT_FAILURE);
+                exit(EXIT_FAILURE);
+            }
+            ThreadExitPrintStats = tm_module->ThreadExitPrintStats;
         }
 
-        if (tm_module->ThreadExitPrintStats) {
-            tm_module->ThreadExitPrintStats(tv, store->thread_data);
+        if (ThreadExitPrintStats) {
+            ThreadExitPrintStats(tv, store->thread_data);
         }
 
         logger = logger->next;
index e73c305ce64b3c02addd973b3bea772d1ee11dc9..ee2e8a77c83eacc9367a3f9f0a6b364af58e4603 100644 (file)
@@ -38,7 +38,10 @@ typedef int (*TxLoggerCondition)(ThreadVars *, const Packet *, void *state, void
 
 int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc,
         OutputCtx *, int tc_log_progress, int ts_log_progress,
-        TxLoggerCondition LogCondition);
+        TxLoggerCondition LogCondition,
+        TmEcode (*ThreadInit)(ThreadVars *, void *, void **),
+        TmEcode (*ThreadDeinit)(ThreadVars *, void *),
+        void (*ThreadExitPrintStats)(ThreadVars *, void *));
 
 void TmModuleTxLoggerRegister (void);
 
index 64b6702be2114963fd85a259b581cb192d8ac563..c9bc2201095ba81f5794cfc563a87c411d5906ba 100644 (file)
@@ -159,7 +159,10 @@ error:
 void OutputRegisterTxModuleWrapper(const char *name, const char *conf_name,
         OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
         TxLogger TxLogFunc, int tc_log_progress, int ts_log_progress,
-        TxLoggerCondition TxLogCondition)
+        TxLoggerCondition TxLogCondition,
+        TmEcode (*ThreadInit)(ThreadVars *t, void *, void **),
+        TmEcode (*ThreadDeinit)(ThreadVars *t, void *),
+        void (*ThreadExitPrintStats)(ThreadVars *, void *))
 {
     if (unlikely(TxLogFunc == NULL)) {
         goto error;
@@ -178,6 +181,9 @@ void OutputRegisterTxModuleWrapper(const char *name, const char *conf_name,
     module->alproto = alproto;
     module->tc_log_progress = tc_log_progress;
     module->ts_log_progress = ts_log_progress;
+    module->ThreadInit = ThreadInit;
+    module->ThreadDeinit = ThreadDeinit;
+    module->ThreadExitPrintStats = ThreadExitPrintStats;
     TAILQ_INSERT_TAIL(&output_modules, module, entries);
 
     SCLogDebug("Tx logger \"%s\" registered.", name);
@@ -233,7 +239,8 @@ void OutputRegisterTxModuleWithCondition(const char *name, const char *conf_name
         TxLogger TxLogFunc, TxLoggerCondition TxLogCondition)
 {
     OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
-                                  TxLogFunc, -1, -1, TxLogCondition);
+                                  TxLogFunc, -1, -1, TxLogCondition, NULL, NULL,
+                                  NULL);
 }
 
 void OutputRegisterTxSubModuleWithCondition(const char *parent_name,
@@ -260,7 +267,7 @@ void OutputRegisterTxModuleWithProgress(const char *name, const char *conf_name,
 {
     OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
                                   TxLogFunc, tc_log_progress, ts_log_progress,
-                                  NULL);
+                                  NULL, NULL, NULL, NULL);
 }
 
 void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
@@ -284,10 +291,13 @@ void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
 void
 OutputRegisterTxModule(const char *name, const char *conf_name,
     OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
-    TxLogger TxLogFunc)
+    TxLogger TxLogFunc, TmEcode (*ThreadInit)(ThreadVars *, void *, void **),
+    TmEcode (*ThreadDeinit)(ThreadVars *, void *),
+    void (*ThreadExitPrintStats)(ThreadVars *, void *))
 {
     OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
-                                  TxLogFunc, -1, -1, NULL);
+                                  TxLogFunc, -1, -1, NULL, ThreadInit,
+                                  ThreadDeinit, ThreadExitPrintStats);
 }
 
 void
index 00425bf94f93292f496332d78ddd2a87291e3bb0..33e92a04def6a624b64c369787d1a2441ce3deb7 100644 (file)
@@ -45,6 +45,10 @@ typedef struct OutputModule_ {
     OutputCtx *(*InitFunc)(ConfNode *);
     OutputCtx *(*InitSubFunc)(ConfNode *, OutputCtx *parent_ctx);
 
+    TmEcode (*ThreadInit)(ThreadVars *, void *, void **);
+    TmEcode (*ThreadDeinit)(ThreadVars *, void *);
+    void (*ThreadExitPrintStats)(ThreadVars *, void *);
+
     PacketLogger PacketLogFunc;
     PacketLogCondition PacketConditionFunc;
     TxLogger TxLogFunc;
@@ -76,7 +80,10 @@ void OutputRegisterPacketSubModule(const char *parent_name, const char *name,
 
 void OutputRegisterTxModule(const char *name, const char *conf_name,
     OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
-    TxLogger TxLogFunc);
+    TxLogger TxLogFunc, TmEcode (*ThreadInit)(ThreadVars *t, void *, void **),
+    TmEcode (*ThreadDeinit)(ThreadVars *t, void *),
+    void (*ThreadExitPrintStats)(ThreadVars *, void *));
+
 void OutputRegisterTxSubModule(const char *parent_name, const char *name,
     const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *parent_ctx),
     AppProto alproto, TxLogger TxLogFunc);
index f9bc02938bb78f6f0d3c0de53d5da53da8348864..f761caab90b1632dbfcbdf11a19f735eb8ff0cd0 100644 (file)
@@ -106,7 +106,10 @@ static char *active_runmode;
 
 /* free list for our outputs */
 typedef struct OutputFreeList_ {
+#if 0
     TmModule *tm_module;
+#endif
+    OutputModule *output_module;
     OutputCtx *output_ctx;
 
     TAILQ_ENTRY(OutputFreeList_) entries;
@@ -466,7 +469,11 @@ void RunOutputFreeList(void)
 {
     OutputFreeList *output;
     while ((output = TAILQ_FIRST(&output_free_list))) {
-        SCLogDebug("output %s %p %p", output->tm_module->name, output, output->output_ctx);
+#if 0
+        SCLogNotice("output %s %p %p", output->tm_module->name, output, output->output_ctx);
+#endif
+        SCLogDebug("output %s %p %p", output->output_module->name, output,
+            output->output_ctx);
 
         if (output->output_ctx != NULL && output->output_ctx->DeInit != NULL)
             output->output_ctx->DeInit(output->output_ctx);
@@ -528,16 +535,21 @@ void RunModeShutDown(void)
  *         the output ctx at shutdown and unix socket reload */
 static void AddOutputToFreeList(OutputModule *module, OutputCtx *output_ctx)
 {
+#if 0
     TmModule *tm_module = TmModuleGetByName(module->name);
     if (tm_module == NULL) {
         SCLogError(SC_ERR_INVALID_ARGUMENT,
                 "TmModuleGetByName for %s failed", module->name);
         exit(EXIT_FAILURE);
     }
+#endif
     OutputFreeList *fl_output = SCCalloc(1, sizeof(OutputFreeList));
     if (unlikely(fl_output == NULL))
         return;
+#if 0
     fl_output->tm_module = tm_module;
+#endif
+    fl_output->output_module = module;
     fl_output->output_ctx = output_ctx;
     TAILQ_INSERT_TAIL(&output_free_list, fl_output, entries);
 }
@@ -582,14 +594,17 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
         return;
     }
 
+#if 0
     TmModule *tm_module = TmModuleGetByName(module->name);
     if (tm_module == NULL) {
         SCLogError(SC_ERR_INVALID_ARGUMENT,
                 "TmModuleGetByName for %s failed", module->name);
         exit(EXIT_FAILURE);
     }
-    if (strcmp(tmm_modules[TMM_ALERTDEBUGLOG].name, tm_module->name) == 0)
+    /* XXX What to do here? */
+    if (tm_module != NULL && strcmp(tmm_modules[TMM_ALERTDEBUGLOG].name, tm_module->name) == 0)
         debuglog_enabled = 1;
+#endif
 
     if (module->PacketLogFunc) {
         SCLogDebug("%s is a packet logger", module->name);
@@ -618,7 +633,9 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
         SCLogDebug("%s is a tx logger", module->name);
         OutputRegisterTxLogger(module->name, module->alproto,
                 module->TxLogFunc, output_ctx, module->tc_log_progress,
-                module->ts_log_progress, module->TxLogCondition);
+                module->ts_log_progress, module->TxLogCondition,
+                module->ThreadInit, module->ThreadDeinit,
+                module->ThreadExitPrintStats);
 
         /* need one instance of the tx logger module */
         if (tx_logger_module == NULL) {
@@ -712,7 +729,9 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
         if (unlikely(runmode_output == NULL))
             return;
         runmode_output->name = module->name;
+#if 0
         runmode_output->tm_module = tm_module;
+#endif
         runmode_output->output_ctx = output_ctx;
         InsertInRunModeOutputs(runmode_output);
     }
index 924ff867c91a6dec1bd9653f139e7066c3c4aef4..d104afba2de369925b9e74b0112bc32873e20f9e 100644 (file)
@@ -218,7 +218,6 @@ const char * TmModuleTmmIdToString(TmmId id)
         CASE_CODE (TMM_ALERTSYSLOG);
         CASE_CODE (TMM_LOGDROPLOG);
         CASE_CODE (TMM_RESPONDREJECT);
-        CASE_CODE (TMM_LOGDNSLOG);
         CASE_CODE (TMM_LOGHTTPLOG);
         CASE_CODE (TMM_LOGTLSLOG);
         CASE_CODE (TMM_LOGTCPDATALOG);
index ee7e92205b78abc81049509ec547e78c971a8b6c..8c9c98fe8eeee7264de3021dd440c2f54a1cbe1a 100644 (file)
@@ -48,7 +48,6 @@ typedef enum {
     TMM_ALERTSYSLOG,
     TMM_LOGDROPLOG,
     TMM_RESPONDREJECT,
-    TMM_LOGDNSLOG,
     TMM_LOGHTTPLOG,
     TMM_LOGTLSLOG,
     TMM_LOGTCPDATALOG,