From 80f82b2b5ee874637b0704f3a5a32c2b6fb86d14 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Sat, 11 Sep 2021 12:48:35 -0500 Subject: [PATCH] Check for --help before "Not root". --- lib/args.c | 4 +--- main.c | 15 +++++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/args.c b/lib/args.c index 6d768a62..247c1944 100644 --- a/lib/args.c +++ b/lib/args.c @@ -426,10 +426,8 @@ void get_optflags(void) continue; } - if (CFG_TOYBOX_HELP_DASHDASH && !(toys.which->flags&TOYFLAG_NOHELP)) - check_help(toys.argv+gof.argc); - // do we match a known --longopt? + check_help(toys.argv+gof.argc); for (lo = gof.longopts; lo; lo = lo->next) { if (!strncmp(gof.arg, lo->str, lo->len)) { if (!gof.arg[lo->len]) gof.arg = 0; diff --git a/main.c b/main.c index 8f00158c..d86a6ecd 100644 --- a/main.c +++ b/main.c @@ -67,8 +67,12 @@ static void unknown(char *name) help_exit("Unknown command %s", name); } +// Parse --help and --version for (almost) all commands void check_help(char **arg) { + if (!CFG_TOYBOX_HELP_DASHDASH || !*arg || (toys.which->flags&TOYFLAG_NOHELP)) + return; + if (!strcmp(*arg, "--help")) { if (CFG_TOYBOX && toys.which == toy_list && arg[1]) if (!(toys.which = toy_find(arg[1]))) unknown(arg[1]); @@ -91,11 +95,7 @@ void toy_singleinit(struct toy_list *which, char *argv[]) if (NEED_OPTIONS && which->options) get_optflags(); else { - // Parse --help and --version for (almost) all commands - if (CFG_TOYBOX_HELP_DASHDASH && !(which->flags & TOYFLAG_NOHELP) && argv[1]) - check_help(argv+1); - - toys.optargs = argv+1; + check_help(toys.optargs = argv+1); for (toys.optc = 0; toys.optargs[toys.optc]; toys.optc++); } @@ -135,7 +135,10 @@ void toy_init(struct toy_list *which, char *argv[]) } else if (CFG_TOYBOX_DEBUG && uid && which != toy_list) error_msg("Not installed suid root"); - if ((which->flags & TOYFLAG_NEEDROOT) && euid) help_exit("Not root"); + if ((which->flags & TOYFLAG_NEEDROOT) && euid) { + check_help(argv+1); + help_exit("Not root"); + } } // Free old toys contents (to be reentrant), but leave rebound if any -- 2.39.2