diff --git a/examples/lib/simple/main.c b/examples/lib/simple/main.c index c577525116..bae590afdd 100644 --- a/examples/lib/simple/main.c +++ b/examples/lib/simple/main.c @@ -20,7 +20,17 @@ 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 diff --git a/src/suricata.c b/src/suricata.c index 811cb07743..33a3fe6c52 100644 --- a/src/suricata.c +++ b/src/suricata.c @@ -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(); diff --git a/src/suricata.h b/src/suricata.h index a7395995fd..059eebf675 100644 --- a/src/suricata.h +++ b/src/suricata.h @@ -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);