summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlen Barber <gjb@FreeBSD.org>2016-01-04 19:19:48 +0000
committerGlen Barber <gjb@FreeBSD.org>2016-01-04 19:19:48 +0000
commit403307ec3a577cd210c8241520fd8c7b3fd4fc5a (patch)
treecf36692dbaeeac0cf3eacb291f4ede63f9fa902c
parent470cc19f86d5b729b81d5fc775fc96e8b01180c5 (diff)
parent41aabc08b56276751e6538be1017556a832dc05a (diff)
downloadpw-darwin-403307ec3a577cd210c8241520fd8c7b3fd4fc5a.tar.gz
pw-darwin-403307ec3a577cd210c8241520fd8c7b3fd4fc5a.tar.zst
pw-darwin-403307ec3a577cd210c8241520fd8c7b3fd4fc5a.zip
MFH r289384-r293170
Sponsored by: The FreeBSD Foundation
-rw-r--r--pw/pw_conf.c2
-rw-r--r--pw/pw_group.c7
-rw-r--r--pw/pw_user.c27
-rw-r--r--pw/pw_vpw.c2
4 files changed, 24 insertions, 14 deletions
diff --git a/pw/pw_conf.c b/pw/pw_conf.c
index e9606b4..d30c80e 100644
--- a/pw/pw_conf.c
+++ b/pw/pw_conf.c
@@ -313,7 +313,7 @@ read_userconfig(char const * file)
? NULL : newstr(q);
break;
case _UC_EXTRAGROUPS:
- for (i = 0; q != NULL; q = strtok(NULL, toks)) {
+ while ((q = strtok(NULL, toks)) != NULL) {
if (config.groups == NULL)
config.groups = sl_init();
sl_add(config.groups, newstr(q));
diff --git a/pw/pw_group.c b/pw/pw_group.c
index 711ef68..289a4c8 100644
--- a/pw/pw_group.c
+++ b/pw/pw_group.c
@@ -259,7 +259,7 @@ pw_group_next(int argc, char **argv, char *arg1 __unused)
struct userconf *cnf;
const char *cfg = NULL;
int ch;
- bool quiet;
+ bool quiet = false;
while ((ch = getopt(argc, argv, "Cq")) != -1) {
switch (ch) {
@@ -664,6 +664,11 @@ pw_group_mod(int argc, char **argv, char *arg1)
grp_add_members(&grp, newmembers);
}
+ if (dryrun) {
+ print_group(grp, pretty);
+ return (EXIT_SUCCESS);
+ }
+
if ((rc = chggrent(name, grp)) != 0) {
if (rc == -1)
errx(EX_IOERR, "group '%s' not available (NIS?)",
diff --git a/pw/pw_user.c b/pw/pw_user.c
index 1af8f81..30a2749 100644
--- a/pw/pw_user.c
+++ b/pw/pw_user.c
@@ -107,8 +107,10 @@ mkdir_home_parents(int dfd, const char *dir)
errx(EX_UNAVAILABLE, "out of memory");
tmp = strrchr(dirs, '/');
- if (tmp == NULL)
+ if (tmp == NULL) {
+ free(dirs);
return;
+ }
tmp[0] = '\0';
/*
@@ -272,7 +274,7 @@ pw_userlock(char *arg1, int mode)
char *passtmp = NULL;
char *name;
bool locked = false;
- uid_t id;
+ uid_t id = (uid_t)-1;
if (geteuid() != 0)
errx(EX_NOPERM, "you must be root");
@@ -280,15 +282,19 @@ pw_userlock(char *arg1, int mode)
if (arg1 == NULL)
errx(EX_DATAERR, "username or id required");
- if (arg1[strspn(arg1, "0123456789")] == '\0')
- id = pw_checkid(arg1, UID_MAX);
- else
- name = arg1;
+ name = arg1;
+ if (arg1[strspn(name, "0123456789")] == '\0')
+ id = pw_checkid(name, UID_MAX);
- pwd = (name != NULL) ? GETPWNAM(pw_checkname(name, 0)) : GETPWUID(id);
+ pwd = GETPWNAM(pw_checkname(name, 0));
+ if (pwd == NULL && id != (uid_t)-1) {
+ pwd = GETPWUID(id);
+ if (pwd != NULL)
+ name = pwd->pw_name;
+ }
if (pwd == NULL) {
- if (name == NULL)
- errx(EX_NOUSER, "no such uid `%ju'", (uintmax_t) id);
+ if (id == (uid_t)-1)
+ errx(EX_NOUSER, "no such name or uid `%ju'", (uintmax_t) id);
errx(EX_NOUSER, "no such user `%s'", name);
}
@@ -636,7 +642,8 @@ pw_checkname(char *name, int gecos)
}
if (!reject) {
while (*ch) {
- if (strchr(badchars, *ch) != NULL || *ch < ' ' ||
+ if (strchr(badchars, *ch) != NULL ||
+ (!gecos && *ch < ' ') ||
*ch == 127) {
reject = 1;
break;
diff --git a/pw/pw_vpw.c b/pw/pw_vpw.c
index a23c66e..2d1c75b 100644
--- a/pw/pw_vpw.c
+++ b/pw/pw_vpw.c
@@ -70,7 +70,6 @@ vnextpwent(char const *nam, uid_t uid, int doclose)
pw = NULL;
line = NULL;
linecap = 0;
- linelen = 0;
if (pwd_fp != NULL || (pwd_fp = fopen(getpwpath(_MASTERPASSWD), "r")) != NULL) {
while ((linelen = getline(&line, &linecap, pwd_fp)) > 0) {
@@ -153,7 +152,6 @@ vnextgrent(char const *nam, gid_t gid, int doclose)
gr = NULL;
line = NULL;
linecap = 0;
- linelen = 0;
if (grp_fp != NULL || (grp_fp = fopen(getgrpath(_GROUP), "r")) != NULL) {
while ((linelen = getline(&line, &linecap, grp_fp)) > 0) {