Make sudo's usage info better when mutually exclusive args are given and don't rely on argument order to detect this; nick@zeta.org.au
This commit is contained in:
38
sudo.c
38
sudo.c
@@ -109,6 +109,7 @@ struct env_table {
|
|||||||
*/
|
*/
|
||||||
static int parse_args __P((void));
|
static int parse_args __P((void));
|
||||||
static void usage __P((int));
|
static void usage __P((int));
|
||||||
|
static void usage_excl __P((int));
|
||||||
static void load_globals __P((int));
|
static void load_globals __P((int));
|
||||||
static int check_sudoers __P((void));
|
static int check_sudoers __P((void));
|
||||||
static int load_cmnd __P((int));
|
static int load_cmnd __P((int));
|
||||||
@@ -594,9 +595,6 @@ static int parse_args()
|
|||||||
usage(1);
|
usage(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (excl)
|
|
||||||
usage(1); /* only one -? option allowed */
|
|
||||||
|
|
||||||
switch (NewArgv[0][1]) {
|
switch (NewArgv[0][1]) {
|
||||||
#ifdef HAVE_KERB5
|
#ifdef HAVE_KERB5
|
||||||
case 'r':
|
case 'r':
|
||||||
@@ -639,23 +637,33 @@ static int parse_args()
|
|||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
ret = MODE_VALIDATE;
|
ret = MODE_VALIDATE;
|
||||||
excl++;
|
if (excl && excl != 'v')
|
||||||
|
usage_excl(1);
|
||||||
|
excl = 'v';
|
||||||
break;
|
break;
|
||||||
case 'k':
|
case 'k':
|
||||||
ret = MODE_KILL;
|
ret = MODE_KILL;
|
||||||
excl++;
|
if (excl && excl != 'k')
|
||||||
|
usage_excl(1);
|
||||||
|
excl = 'k';
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
ret = MODE_LIST;
|
ret = MODE_LIST;
|
||||||
excl++;
|
if (excl && excl != 'l')
|
||||||
|
usage_excl(1);
|
||||||
|
excl = 'l';
|
||||||
break;
|
break;
|
||||||
case 'V':
|
case 'V':
|
||||||
ret = MODE_VERSION;
|
ret = MODE_VERSION;
|
||||||
excl++;
|
if (excl && excl != 'V')
|
||||||
|
usage_excl(1);
|
||||||
|
excl = 'V';
|
||||||
break;
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
ret = MODE_HELP;
|
ret = MODE_HELP;
|
||||||
excl++;
|
if (excl && excl != 'h')
|
||||||
|
usage_excl(1);
|
||||||
|
excl = 'h';
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
ret |= MODE_SHELL;
|
ret |= MODE_SHELL;
|
||||||
@@ -696,6 +704,20 @@ static int parse_args()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
*
|
||||||
|
* usage_excl()
|
||||||
|
*
|
||||||
|
* Tell which options are mutually exclusive and exit
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void usage_excl(exit_val)
|
||||||
|
int exit_val;
|
||||||
|
{
|
||||||
|
(void) fprintf(stderr, "Only one of the -v, -k, -l, -V and -h options may be used\n");
|
||||||
|
usage(exit_val);
|
||||||
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
*
|
*
|
||||||
* usage()
|
* usage()
|
||||||
|
Reference in New Issue
Block a user