]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
Registration for SIGHUP notification - for loggers interested
authorJason Ish <jason.ish@emulex.com>
Tue, 4 Mar 2014 16:34:33 +0000 (10:34 -0600)
committerVictor Julien <victor@inliniac.net>
Wed, 4 Jun 2014 07:50:07 +0000 (09:50 +0200)
in file rotation on SIGHUP.

src/output.c
src/output.h
src/suricata.c

index eb005651d5c82580682e756fe7a472252930399f..c29f4d9103deaf54db1a9c0f844f640065405fb0 100644 (file)
 static TAILQ_HEAD(, OutputModule_) output_modules =
     TAILQ_HEAD_INITIALIZER(output_modules);
 
+/**
+ * Registry of flags to be updated on file rotation notification.
+ */
+typedef struct OutputFileRolloverFlag_ {
+    int *flag;
+
+    TAILQ_ENTRY(OutputFileRolloverFlag_) entries;
+} OutputFileRolloverFlag;
+
+TAILQ_HEAD(, OutputFileRolloverFlag_) output_file_rotation_flags =
+    TAILQ_HEAD_INITIALIZER(output_file_rotation_flags);
+
 /**
  * \brief Register an output module.
  *
@@ -416,3 +428,23 @@ void OutputSshLoggerDisable(void) {
     if (ssh_loggers)
         ssh_loggers--;
 }
+
+void OutputRegisterFileRotationFlag(int *flag)
+{
+    OutputFileRolloverFlag *flag_entry = SCCalloc(1, sizeof(*flag_entry));
+    if (unlikely(flag_entry == NULL)) {
+        SCLogError(SC_ERR_MEM_ALLOC,
+            "Failed to allocate memory to register file rotation flag");
+        return;
+    }
+    flag_entry->flag = flag;
+    TAILQ_INSERT_TAIL(&output_file_rotation_flags, flag_entry, entries);
+}
+
+void OutputNotifyFileRotation(void)
+{
+    OutputFileRolloverFlag *flag;
+    TAILQ_FOREACH(flag, &output_file_rotation_flags, entries) {
+        *(flag->flag) = 1;
+    }
+}
index e62e2b1882621835ee531497b52fd12a570025c9..75c18da7e6d57da5f2ad973ea1e69fd31d9ed3b3 100644 (file)
@@ -92,4 +92,7 @@ void OutputTlsLoggerDisable(void);
 int OutputSshLoggerEnable(void);
 void OutputSshLoggerDisable(void);
 
+void OutputRegisterFileRotationFlag(int *flag);
+void OutputNotifyFileRotation(void);
+
 #endif /* ! __OUTPUT_H__ */
index b1691cfc178f8fbaa03617d6a2beb9215a49ab63..19be3ddaec5afb17d714c78750cf8cc1f92fb656 100644 (file)
@@ -313,6 +313,14 @@ void SignalHandlerSigusr2(int sig)
     return;
 }
 
+/**
+ * SIGHUP handler.  Just set sighup_count.  The main loop will act on
+ * it.
+ */
+static void SignalHandlerSigHup(/*@unused@*/ int sig) {
+    sighup_count = 1;
+}
+
 #ifdef DBG_MEM_ALLOC
 #ifndef _GLOBAL_MEM_
 #define _GLOBAL_MEM_
@@ -1725,7 +1733,7 @@ static int InitSignalHandler(SCInstance *suri)
 
 #ifndef OS_WIN32
     /* SIGHUP is not implemented on WIN32 */
-    UtilSignalHandlerSetup(SIGHUP, SIG_IGN);
+    UtilSignalHandlerSetup(SIGHUP, SignalHandlerSigHup);
 
     /* Try to get user/group to run suricata as if
        command line as not decide of that */
@@ -2333,6 +2341,11 @@ int main(int argc, char **argv)
 
         TmThreadCheckThreadState();
 
+        if (sighup_count > 0) {
+            OutputNotifyFileRotation();
+            sighup_count--;
+        }
+
         usleep(10* 1000);
     }