ash: reject unknown long options

Commit 64f70cc755 (Add --login support) added code in options()
to handle the bash-compatible '--login' option.  In doing so it
committed BusyBox ash to silently accepting all other long
options.

Restore compatibility with other ash variants by rejecting unknown
long options.

function                                             old     new   delta
options                                              589     624     +35

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Ron Yorston 2024-09-23 12:44:28 +01:00 committed by Denys Vlasenko
parent 39c5c08b28
commit 24aa93d538

View file

@ -11502,11 +11502,12 @@ options(int *login_sh)
if (val && (c == '-')) { /* long options */ if (val && (c == '-')) { /* long options */
if (strcmp(p, "login") == 0) { if (strcmp(p, "login") == 0) {
*login_sh = 1; *login_sh = 1;
break;
} }
/* TODO: --noprofile: e.g. if I want to run emergency shell from sulogin, /* TODO: --noprofile: e.g. if I want to run emergency shell from sulogin,
* I want minimal/no shell init scripts - but it insists on running it as "-ash"... * I want minimal/no shell init scripts - but it insists on running it as "-ash"...
*/ */
break; ash_msg_and_raise_error("bad option '%s'", p - 2);
} }
} }
if (c == 'o') { if (c == 'o') {