]> git.cameronkatri.com Git - pw-darwin.git/commitdiff
When a group is renamed then the group has been invalidated for sure.
authorBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 28 Oct 2014 11:20:30 +0000 (11:20 +0000)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 28 Oct 2014 11:20:30 +0000 (11:20 +0000)
In that case get the group information using the new name.

Add a regression test about this bug

PR: 193704
Reported by: az

pw/pw_group.c

index 391e47724db84e79e1963a0ad50ee4652ad4e861..4ed6ea972986b701fc56886cfa263125583751b8 100644 (file)
@@ -51,6 +51,7 @@ int
 pw_group(struct userconf * cnf, int mode, struct cargs * args)
 {
        int             rc;
+       struct carg    *a_newname = getarg(args, 'l');
        struct carg    *a_name = getarg(args, 'n');
        struct carg    *a_gid = getarg(args, 'g');
        struct carg    *arg;
@@ -140,8 +141,8 @@ pw_group(struct userconf * cnf, int mode, struct cargs * args)
                if (a_gid)
                        grp->gr_gid = (gid_t) atoi(a_gid->val);
 
-               if ((arg = getarg(args, 'l')) != NULL)
-                       grp->gr_name = pw_checkname((u_char *)arg->val, 0);
+               if (a_newname != NULL)
+                       grp->gr_name = pw_checkname((u_char *)a_newname->val, 0);
        } else {
                if (a_name == NULL)     /* Required */
                        errx(EX_DATAERR, "group name required");
@@ -270,8 +271,10 @@ pw_group(struct userconf * cnf, int mode, struct cargs * args)
                        warn("group update");
                return EX_IOERR;
        }
+
+       arg = a_newname != NULL ? a_newname : a_name;
        /* grp may have been invalidated */
-       if ((grp = GETGRNAM(a_name->val)) == NULL)
+       if ((grp = GETGRNAM(arg->val)) == NULL)
                errx(EX_SOFTWARE, "group disappeared during update");
 
        pw_log(cnf, mode, W_GROUP, "%s(%ld)", grp->gr_name, (long) grp->gr_gid);