From: Karel Zak Date: Wed, 7 Nov 2012 14:20:39 +0000 (+0100) Subject: su: fix "COMMAND not specified" error X-Git-Tag: v2.23-rc1~559 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=360e088738aa792bf6c52e777d64b5163b45362a;p=thirdparty%2Futil-linux.git su: fix "COMMAND not specified" error # su su: COMMAND not specified This error message make sense for "runuser -u " only. Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=872787 Signed-off-by: Karel Zak --- diff --git a/login-utils/su-common.c b/login-utils/su-common.c index 1fa76c8205..5abdc840be 100644 --- a/login-utils/su-common.c +++ b/login-utils/su-common.c @@ -761,19 +761,28 @@ su_main (int argc, char **argv, int mode) ++optind; } - /* if not "-u " specified then fallback to classic su(1) */ - if (!runuser_user && optind < argc) - new_user = argv[optind++]; - else { - /* runuser -u */ - new_user = runuser_user; - if (shell || fast_startup || command || simulate_login) { - errx(EXIT_FAILURE, + switch (su_mode) { + case RUNUSER_MODE: + if (runuser_user) { + /* runuser -u */ + new_user = runuser_user; + if (shell || fast_startup || command || simulate_login) { + errx(EXIT_FAILURE, _("options --{shell,fast,command,session-command,login} and " "--user are mutually exclusive.")); + } + if (optind == argc) + errx(EXIT_FAILURE, _("COMMAND not specified.")); + + break; } - if (optind == argc) - errx(EXIT_FAILURE, _("COMMAND not specified.")); + /* fallthrough if -u is not specified, then follow + * traditional su(1) behavior + */ + case SU_MODE: + if (optind < argc) + new_user = argv[optind++]; + break; } if ((num_supp_groups || use_gid) && restricted)