]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
suricata: expose FinalizeRunMode and ParseCommandLine
authorJason Ish <jason.ish@oisf.net>
Mon, 26 Feb 2024 22:29:25 +0000 (16:29 -0600)
committerVictor Julien <victor@inliniac.net>
Mon, 25 Mar 2024 16:36:29 +0000 (17:36 +0100)
Expose the functions FinalizeRunMode and ParseCommandLine to library
users, renaming with the `SC` prefix in the process.

This involves moving "application" level details from SuricataInit
into SuricataMain, as parsing command line options should be opt-in
for a library user.

examples/lib/simple/main.c
src/suricata.c
src/suricata.h

index c5775251164c7a4c4f3997b5a6dee506bdf3dbc9..bae590afdda818d5817247a2cbd8c9d5c1a96e6e 100644 (file)
 int main(int argc, char **argv)
 {
     SuricataPreInit(argv[0]);
-    SuricataInit(argc, argv);
+
+    /* Parse command line options. This is optional, you could
+     * directly configure Suricata through the Conf API. */
+    SCParseCommandLine(argc, argv);
+
+    /* Validate/finalize the runmode. */
+    if (SCFinalizeRunMode() != TM_ECODE_OK) {
+        exit(EXIT_FAILURE);
+    }
+
+    SuricataInit();
     SuricataPostInit();
 
     /* Suricata is now running, but we enter a loop to keep it running
index 811cb07743ac4dc2ba7f3dd1d39d7f7f7d9de852..33a3fe6c523840de8e3c1d894f27bf3437499427 100644 (file)
@@ -1312,7 +1312,7 @@ static bool IsLogDirectoryWritable(const char* str)
 
 extern int g_skip_prefilter;
 
-static TmEcode ParseCommandLine(int argc, char **argv)
+TmEcode SCParseCommandLine(int argc, char **argv)
 {
     SCInstance *suri = &suricata;
     int opt;
@@ -2368,8 +2368,9 @@ static int StartInternalRunMode(SCInstance *suri, int argc, char **argv)
     return TM_ECODE_OK;
 }
 
-static int FinalizeRunMode(SCInstance *suri)
+int SCFinalizeRunMode(void)
 {
+    SCInstance *suri = &suricata;
     switch (suri->run_mode) {
         case RUNMODE_UNKNOWN:
             PrintUsage(suri->progname);
@@ -2898,23 +2899,8 @@ void SuricataPreInit(const char *progname)
     }
 }
 
-void SuricataInit(int argc, char **argv)
+void SuricataInit(void)
 {
-    if (ParseCommandLine(argc, argv) != TM_ECODE_OK) {
-        exit(EXIT_FAILURE);
-    }
-
-    if (FinalizeRunMode(&suricata) != TM_ECODE_OK) {
-        exit(EXIT_FAILURE);
-    }
-
-    switch (StartInternalRunMode(&suricata, argc, argv)) {
-        case TM_ECODE_DONE:
-            exit(EXIT_SUCCESS);
-        case TM_ECODE_FAILED:
-            exit(EXIT_FAILURE);
-    }
-
     /* Initializations for global vars, queues, etc (memsets, mutex init..) */
     GlobalsInitPreConfig();
 
@@ -3087,8 +3073,23 @@ int SuricataMain(int argc, char **argv)
     }
 #endif /* OS_WIN32 */
 
-    /* Initialization tasks: parse command line options, load yaml, start runmode... */
-    SuricataInit(argc, argv);
+    if (SCParseCommandLine(argc, argv) != TM_ECODE_OK) {
+        exit(EXIT_FAILURE);
+    }
+
+    if (SCFinalizeRunMode() != TM_ECODE_OK) {
+        exit(EXIT_FAILURE);
+    }
+
+    switch (StartInternalRunMode(&suricata, argc, argv)) {
+        case TM_ECODE_DONE:
+            exit(EXIT_SUCCESS);
+        case TM_ECODE_FAILED:
+            exit(EXIT_FAILURE);
+    }
+
+    /* Initialization tasks: Loading config, setup logging */
+    SuricataInit();
 
     /* Post-initialization tasks: wait on thread start/running and get ready for the main loop. */
     SuricataPostInit();
index a7395995fd9cbc025bd7d83d2fbf57b2ab2971f7..059eebf67568a5c9ace6741b44242b7fa12ac436 100644 (file)
@@ -192,7 +192,7 @@ int SuriHasSigFile(void);
 extern int run_mode;
 
 void SuricataPreInit(const char *progname);
-void SuricataInit(int argc, char **argv);
+void SuricataInit(void);
 void SuricataPostInit(void);
 int SuricataMain(int argc, char **argv);
 void SuricataMainLoop(void);
@@ -201,6 +201,8 @@ int InitGlobal(void);
 void GlobalsDestroy(void);
 int PostConfLoadedSetup(SCInstance *suri);
 void PostConfLoadedDetectSetup(SCInstance *suri);
+int SCFinalizeRunMode(void);
+TmEcode SCParseCommandLine(int argc, char **argv);
 
 void PreRunInit(const int runmode);
 void PreRunPostPrivsDropInit(const int runmode);