pw: Don't silently ignore unparsed command line arguments.

MFC after:	3 days
Reviewed by:	allanjude
Differential Revision:	https://reviews.freebsd.org/D45097
This commit is contained in:
Dag-Erling Smørgrav 2024-05-06 18:18:43 +02:00
parent a9ea647c29
commit c86119328e
4 changed files with 74 additions and 14 deletions

View File

@ -101,13 +101,16 @@ static int (*cmdfunc[W_NUM][M_NUM])(int argc, char **argv, char *_name) = {
struct pwconf conf;
static int mode = -1;
static int which = -1;
static int getindex(const char *words[], const char *word);
static void cmdhelp(int mode, int which);
int
main(int argc, char *argv[])
{
int mode = -1, which = -1, tmp;
int tmp;
struct stat st;
char arg, *arg1;
bool relocated, nis;
@ -375,5 +378,11 @@ cmdhelp(int mode, int which)
fprintf(stderr, "%s", help[which][mode]);
}
exit(EXIT_FAILURE);
exit(EX_USAGE);
}
void
usage(void)
{
cmdhelp(mode, which);
}

View File

@ -114,3 +114,5 @@ uintmax_t strtounum(const char * __restrict, uintmax_t, uintmax_t,
const char ** __restrict);
bool grp_has_member(struct group *grp, const char *name);
void usage(void);

View File

@ -273,9 +273,13 @@ pw_group_next(int argc, char **argv, char *arg1 __unused)
quiet = true;
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
if (quiet)
freopen(_PATH_DEVNULL, "w", stderr);
@ -332,9 +336,13 @@ pw_group_show(int argc, char **argv, char *arg1)
all = true;
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
if (quiet)
freopen(_PATH_DEVNULL, "w", stderr);
@ -391,9 +399,13 @@ pw_group_del(int argc, char **argv, char *arg1)
nis = true;
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
if (quiet)
freopen(_PATH_DEVNULL, "w", stderr);
@ -551,9 +563,13 @@ pw_group_add(int argc, char **argv, char *arg1)
nis = true;
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
if (quiet)
freopen(_PATH_DEVNULL, "w", stderr);
@ -645,9 +661,14 @@ pw_group_mod(int argc, char **argv, char *arg1)
nis = true;
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
if (quiet)
freopen(_PATH_DEVNULL, "w", stderr);
cnf = get_userconfig(cfg);

View File

@ -708,9 +708,13 @@ pw_user_next(int argc, char **argv, char *name __unused)
quiet = true;
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
if (quiet)
freopen(_PATH_DEVNULL, "w", stderr);
@ -772,9 +776,13 @@ pw_user_show(int argc, char **argv, char *arg1)
v7 = true;
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
if (quiet)
freopen(_PATH_DEVNULL, "w", stderr);
@ -855,9 +863,13 @@ pw_user_del(int argc, char **argv, char *arg1)
nis = true;
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
if (quiet)
freopen(_PATH_DEVNULL, "w", stderr);
@ -1003,9 +1015,13 @@ pw_user_lock(int argc, char **argv, char *arg1)
/* compatibility */
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
return (pw_userlock(arg1, M_LOCK));
}
@ -1022,9 +1038,13 @@ pw_user_unlock(int argc, char **argv, char *arg1)
/* compatibility */
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
return (pw_userlock(arg1, M_UNLOCK));
}
@ -1291,9 +1311,13 @@ pw_user_add(int argc, char **argv, char *arg1)
nis = true;
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
if (geteuid() != 0 && ! dryrun)
errx(EX_NOPERM, "you must be root");
@ -1604,9 +1628,13 @@ pw_user_mod(int argc, char **argv, char *arg1)
nis = true;
break;
default:
exit(EX_USAGE);
usage();
}
}
argc -= optind;
argv += optind;
if (argc > 0)
usage();
if (geteuid() != 0 && ! dryrun)
errx(EX_NOPERM, "you must be root");