mirror of
https://github.com/sudo-project/sudo.git
synced 2025-09-03 07:45:47 +00:00
added prompt support
reworked parse_args()
This commit is contained in:
46
sudo.c
46
sudo.c
@@ -122,6 +122,7 @@ char **Argv;
|
|||||||
char *cmnd = NULL;
|
char *cmnd = NULL;
|
||||||
char *user = NULL;
|
char *user = NULL;
|
||||||
char *epasswd = NULL;
|
char *epasswd = NULL;
|
||||||
|
char *prompt = PASSPROMPT;
|
||||||
char host[MAXHOSTNAMELEN + 1];
|
char host[MAXHOSTNAMELEN + 1];
|
||||||
char cwd[MAXPATHLEN + 1];
|
char cwd[MAXPATHLEN + 1];
|
||||||
uid_t uid = (uid_t)-2;
|
uid_t uid = (uid_t)-2;
|
||||||
@@ -179,6 +180,7 @@ main(argc, argv)
|
|||||||
case MODE_BACKGROUND :
|
case MODE_BACKGROUND :
|
||||||
if (Argc == 1)
|
if (Argc == 1)
|
||||||
usage(1);
|
usage(1);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -368,54 +370,70 @@ static void load_globals()
|
|||||||
|
|
||||||
static int parse_args()
|
static int parse_args()
|
||||||
{
|
{
|
||||||
int ret=MODE_RUN; /* what mode is suod to be run in? */
|
int ret = MODE_RUN; /* what mode is suod to be run in? */
|
||||||
|
int excl = 0; /* exclusive arg, no others allowed */
|
||||||
|
char *progname = Argv[0]; /* so we can save Argv[0] */
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (Argc < 2) /* no options and no command */
|
if (Argc < 2) /* no options and no command */
|
||||||
usage(1);
|
usage(1);
|
||||||
|
|
||||||
if (Argv[1][0] == '-') {
|
while (Argc > 1 && Argv[1][0] == '-') {
|
||||||
if (Argc > 2 && Argv[2][0] == '-')
|
|
||||||
usage(1); /* only one -? option allowed */
|
|
||||||
|
|
||||||
if (Argv[1][1] != '\0' && Argv[1][2] != '\0') {
|
if (Argv[1][1] != '\0' && Argv[1][2] != '\0') {
|
||||||
(void) fprintf(stderr, "%s: Please use single character options\n", Argv[0]);
|
(void) fprintf(stderr, "%s: Please use single character options\n",
|
||||||
|
progname);
|
||||||
usage(1);
|
usage(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (excl)
|
||||||
|
usage(1); /* only one -? option allowed */
|
||||||
|
|
||||||
switch (Argv[1][1]) {
|
switch (Argv[1][1]) {
|
||||||
|
case 'p':
|
||||||
|
if (Argc < 3)
|
||||||
|
usage(1);
|
||||||
|
|
||||||
|
prompt = Argv[2];
|
||||||
|
|
||||||
|
/* shift Argv over and adjust Argc */
|
||||||
|
Argc--;
|
||||||
|
Argv++;
|
||||||
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
ret = MODE_BACKGROUND;
|
ret = MODE_BACKGROUND;
|
||||||
/* shift Argv over and adjust Argc */
|
|
||||||
for (i=1; i < Argc; i++) {
|
|
||||||
Argv[i] = Argv[i+1];
|
|
||||||
}
|
|
||||||
Argc--;
|
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
ret = MODE_VALIDATE;
|
ret = MODE_VALIDATE;
|
||||||
|
excl++;
|
||||||
break;
|
break;
|
||||||
case 'k':
|
case 'k':
|
||||||
ret = MODE_KILL;
|
ret = MODE_KILL;
|
||||||
|
excl++;
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
ret = MODE_LIST;
|
ret = MODE_LIST;
|
||||||
|
excl++;
|
||||||
break;
|
break;
|
||||||
case 'V':
|
case 'V':
|
||||||
ret = MODE_VERSION;
|
ret = MODE_VERSION;
|
||||||
|
excl++;
|
||||||
break;
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
ret = MODE_HELP;
|
ret = MODE_HELP;
|
||||||
|
excl++;
|
||||||
break;
|
break;
|
||||||
case '\0':
|
case '\0':
|
||||||
(void) fprintf(stderr, "%s: '-' requires an argument\n",
|
(void) fprintf(stderr, "%s: '-' requires an argument\n",
|
||||||
Argv[0]);
|
progname);
|
||||||
usage(1);
|
usage(1);
|
||||||
default:
|
default:
|
||||||
(void) fprintf(stderr, "%s: Illegal option %s\n", Argv[0],
|
(void) fprintf(stderr, "%s: Illegal option %s\n", progname,
|
||||||
Argv[1]);
|
Argv[1]);
|
||||||
usage(1);
|
usage(1);
|
||||||
}
|
}
|
||||||
|
Argc--;
|
||||||
|
Argv++;
|
||||||
|
Argv[0] = progname;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(ret);
|
return(ret);
|
||||||
@@ -433,7 +451,7 @@ static int parse_args()
|
|||||||
static void usage(exit_val)
|
static void usage(exit_val)
|
||||||
int exit_val;
|
int exit_val;
|
||||||
{
|
{
|
||||||
(void) fprintf(stderr, "usage: %s -V | -h | -l | -b | -v | -k | <command>\n", Argv[0]);
|
(void) fprintf(stderr, "usage: %s -V | -h | -l | -b | -v | -k | [-p prompt] <command>\n", Argv[0]);
|
||||||
exit(exit_val);
|
exit(exit_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user