From 5c9602bcf2792ae45a657939e718e13be38230bf Mon Sep 17 00:00:00 2001 From: Promise Charles Date: Thu, 4 Dec 2025 04:35:26 -0500 Subject: [PATCH] suricata: add error about missing runmode If a runmode is missing but other params are passed on the commandline, issue an error. Ticket: #5711 Signed-off-by: Promise Charles --- examples/lib/cplusplus/main.cpp | 2 +- examples/lib/custom/main.c | 2 +- examples/lib/live/main.c | 2 +- examples/lib/simple/main.c | 2 +- src/main.c | 2 +- src/suricata.c | 7 ++++++- src/suricata.h | 2 +- 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/examples/lib/cplusplus/main.cpp b/examples/lib/cplusplus/main.cpp index f8bead08c9..2a071a26d6 100644 --- a/examples/lib/cplusplus/main.cpp +++ b/examples/lib/cplusplus/main.cpp @@ -26,7 +26,7 @@ int main(int argc, char **argv) SCParseCommandLine(argc, argv); /* Validate/finalize the runmode. */ - if (SCFinalizeRunMode() != TM_ECODE_OK) { + if (SCFinalizeRunMode(argc) != TM_ECODE_OK) { exit(EXIT_FAILURE); } diff --git a/examples/lib/custom/main.c b/examples/lib/custom/main.c index 30e99b05fc..b11b6e01d7 100644 --- a/examples/lib/custom/main.c +++ b/examples/lib/custom/main.c @@ -204,7 +204,7 @@ int main(int argc, char **argv) SCRunmodeSet(RUNMODE_LIB); /* Validate/finalize the runmode. */ - if (SCFinalizeRunMode() != TM_ECODE_OK) { + if (SCFinalizeRunMode(argc) != TM_ECODE_OK) { exit(EXIT_FAILURE); } diff --git a/examples/lib/live/main.c b/examples/lib/live/main.c index ff509f40ef..572a7dde24 100644 --- a/examples/lib/live/main.c +++ b/examples/lib/live/main.c @@ -264,7 +264,7 @@ int main(int argc, char **argv) SCRunmodeSet(RUNMODE_LIB); /* Validate/finalize the runmode. */ - if (SCFinalizeRunMode() != TM_ECODE_OK) { + if (SCFinalizeRunMode(suricata_argc) != TM_ECODE_OK) { exit(EXIT_FAILURE); } diff --git a/examples/lib/simple/main.c b/examples/lib/simple/main.c index f8bead08c9..2a071a26d6 100644 --- a/examples/lib/simple/main.c +++ b/examples/lib/simple/main.c @@ -26,7 +26,7 @@ int main(int argc, char **argv) SCParseCommandLine(argc, argv); /* Validate/finalize the runmode. */ - if (SCFinalizeRunMode() != TM_ECODE_OK) { + if (SCFinalizeRunMode(argc) != TM_ECODE_OK) { exit(EXIT_FAILURE); } diff --git a/src/main.c b/src/main.c index 86367c1ef1..77270d7a02 100644 --- a/src/main.c +++ b/src/main.c @@ -33,7 +33,7 @@ int main(int argc, char **argv) exit(EXIT_FAILURE); } - if (SCFinalizeRunMode() != TM_ECODE_OK) { + if (SCFinalizeRunMode(argc) != TM_ECODE_OK) { exit(EXIT_FAILURE); } diff --git a/src/suricata.c b/src/suricata.c index 217c9f1382..78b3b34ed0 100644 --- a/src/suricata.c +++ b/src/suricata.c @@ -2518,11 +2518,16 @@ int SCStartInternalRunMode(int argc, char **argv) return TM_ECODE_OK; } -int SCFinalizeRunMode(void) +int SCFinalizeRunMode(int argc) { SCInstance *suri = &suricata; switch (suri->run_mode) { case RUNMODE_UNKNOWN: + /* Only warn if user passed arguments */ + if (argc > 1) { + SCLogError("Please specify a runmode or capture option. " + "Use --list-runmodes to see available runmodes."); + } PrintUsage(suri->progname); return TM_ECODE_FAILED; default: diff --git a/src/suricata.h b/src/suricata.h index 8264851588..a32bf98b74 100644 --- a/src/suricata.h +++ b/src/suricata.h @@ -234,7 +234,7 @@ int InitGlobal(void); void GlobalsDestroy(void); int PostConfLoadedSetup(SCInstance *suri); void PostConfLoadedDetectSetup(SCInstance *suri); -int SCFinalizeRunMode(void); +int SCFinalizeRunMode(int argc); TmEcode SCParseCommandLine(int argc, char **argv); int SCStartInternalRunMode(int argc, char **argv); TmEcode SCLoadYamlConfig(void);