summaryrefslogtreecommitdiffstats
path: root/pw
diff options
context:
space:
mode:
authorBaptiste Daroussin <bapt@FreeBSD.org>2012-12-26 18:14:45 +0000
committerBaptiste Daroussin <bapt@FreeBSD.org>2012-12-26 18:14:45 +0000
commite9c255fbe0172e9e9b0489054fed55d6142f8347 (patch)
treeefac845c9e0485ab2f18b6f2f7636d193d8a61f5 /pw
parent272e225a6ba49cf949fc263c3dcd7e74152ffdc2 (diff)
downloadpw-darwin-e9c255fbe0172e9e9b0489054fed55d6142f8347.tar.gz
pw-darwin-e9c255fbe0172e9e9b0489054fed55d6142f8347.tar.zst
pw-darwin-e9c255fbe0172e9e9b0489054fed55d6142f8347.zip
Fix creating a user and adding it to a group
Reported by: "Sam Fourman Jr." <sfourman@gmail.com>, dim
Diffstat (limited to 'pw')
-rw-r--r--pw/pw_user.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/pw/pw_user.c b/pw/pw_user.c
index 23a7856..7df6b85 100644
--- a/pw/pw_user.c
+++ b/pw/pw_user.c
@@ -747,6 +747,7 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args)
if (mode == M_ADD || getarg(args, 'G') != NULL) {
int i, j;
for (i = 0; cnf->groups[i] != NULL; i++) {
+ char **members;
grp = GETGRNAM(cnf->groups[i]);
for (j = 0; grp->gr_mem[j] != NULL; j++) {
if (!strcmp(grp->gr_mem[j], pwd->pw_name))
@@ -755,15 +756,15 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args)
if (grp->gr_mem[j] != NULL) /* user already member of group */
continue;
- if (j == 0)
- grp->gr_mem = NULL;
+ members = malloc(sizeof(char *) * (j + 1));
+ for (j = 0; grp->gr_mem[j] != NULL; j++)
+ members[j] = grp->gr_mem[j];
- grp->gr_mem = reallocf(grp->gr_mem, sizeof(*grp->gr_mem) *
- (j + 2));
-
- grp->gr_mem[j] = pwd->pw_name;
- grp->gr_mem[j+1] = NULL;
+ members[j] = pwd->pw_name;
+ members[j+1] = NULL;
+ grp->gr_mem = members;
chggrent(cnf->groups[i], grp);
+ free(members);
}
}