svn commit: r244710 - head/usr.sbin/pw

Baptiste Daroussin bapt at FreeBSD.org
Wed Dec 26 18:14:46 UTC 2012


Author: bapt
Date: Wed Dec 26 18:14:45 2012
New Revision: 244710
URL: http://svnweb.freebsd.org/changeset/base/244710

Log:
  Fix creating a user and adding it to a group
  
  Reported by:	"Sam Fourman Jr." <sfourman at gmail.com>, dim

Modified:
  head/usr.sbin/pw/pw_user.c

Modified: head/usr.sbin/pw/pw_user.c
==============================================================================
--- head/usr.sbin/pw/pw_user.c	Wed Dec 26 17:58:22 2012	(r244709)
+++ head/usr.sbin/pw/pw_user.c	Wed Dec 26 18:14:45 2012	(r244710)
@@ -747,6 +747,7 @@ pw_user(struct userconf * cnf, int mode,
 	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,
 			if (grp->gr_mem[j] != NULL) /* user already member of group */
 				continue;
 
-			if (j == 0)
-				grp->gr_mem = NULL;
-
-			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 = malloc(sizeof(char *) * (j + 1));
+			for (j = 0; grp->gr_mem[j] != NULL; j++)
+				members[j] = grp->gr_mem[j];
+
+			members[j] = pwd->pw_name;
+			members[j+1] = NULL;
+			grp->gr_mem = members;
 			chggrent(cnf->groups[i], grp);
+			free(members);
 		}
 	}
 


More information about the svn-src-all mailing list