From: Todd C. Miller Date: Mon, 15 Mar 2010 23:40:15 +0000 (-0400) Subject: Allow -k to be specified with a command. X-Git-Tag: SUDO_1_8_0~808 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=36701e1233b79873987437acdf3663b445a8c5b9;p=sudo Allow -k to be specified with a command. --- diff --git a/src/parse_args.c b/src/parse_args.c index ce5d09132..cbcb11e05 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -139,7 +139,7 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp, /* Flags allowed when running a command */ valid_flags = MODE_BACKGROUND|MODE_PRESERVE_ENV|MODE_RESET_HOME| - MODE_LOGIN_SHELL|MODE_INVALIDATE|MODE_NONINTERACTIVE| + MODE_LOGIN_SHELL|MODE_NONINTERACTIVE| MODE_PRESERVE_GROUPS|MODE_SHELL; /* XXX - should fill in settings at the end to avoid dupes */ for (;;) { @@ -186,7 +186,7 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp, if (mode && mode != MODE_EDIT) usage_excl(1); mode = MODE_EDIT; - valid_flags = MODE_INVALIDATE|MODE_NONINTERACTIVE; + valid_flags = MODE_NONINTERACTIVE; break; case 'g': runas_group = optarg; @@ -209,7 +209,6 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp, break; case 'k': sudo_settings[ARG_IGNORE_TICKET].value = "true"; - SET(flags, MODE_INVALIDATE); break; case 'K': sudo_settings[ARG_IGNORE_TICKET].value = "true"; @@ -226,7 +225,7 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp, usage_excl(1); } mode = MODE_LIST; - valid_flags = MODE_INVALIDATE|MODE_NONINTERACTIVE|MODE_LONG_LIST; + valid_flags = MODE_NONINTERACTIVE|MODE_LONG_LIST; break; case 'n': SET(flags, MODE_NONINTERACTIVE); @@ -265,7 +264,7 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp, if (mode && mode != MODE_VALIDATE) usage_excl(1); mode = MODE_VALIDATE; - valid_flags = MODE_INVALIDATE|MODE_NONINTERACTIVE; + valid_flags = MODE_NONINTERACTIVE; break; case 'V': if (mode && mode != MODE_VERSION) @@ -296,14 +295,15 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp, if (!mode) { /* Defer -k mode setting until we know whether it is a flag or not */ - if (ISSET(flags, MODE_INVALIDATE) && *nargc == 0) { - mode = MODE_INVALIDATE; /* -k by itself */ - CLR(flags, MODE_INVALIDATE); - sudo_settings[ARG_IGNORE_TICKET].value = NULL; - valid_flags = 0; - } else { - mode = MODE_RUN; /* running a command */ + if (sudo_settings[ARG_IGNORE_TICKET].value != NULL) { + if (*nargc == 0) { + mode = MODE_INVALIDATE; /* -k by itself */ + sudo_settings[ARG_IGNORE_TICKET].value = NULL; + valid_flags = 0; + } } + if (!mode) + mode = MODE_RUN; /* running a command */ } if (*nargc > 0 && mode == MODE_LIST)