Author: bapt
Date: Tue Oct 28 11:20:30 2014
New Revision: 273772
URL: https://svnweb.freebsd.org/changeset/base/273772

Log:
  When a group is renamed then the group has been invalidated for sure.
  In that case get the group information using the new name.
  
  Add a regression test about this bug
  
  PR:           193704
  Reported by:  az

Modified:
  head/usr.sbin/pw/pw_group.c
  head/usr.sbin/pw/tests/pw_modify.sh

Modified: head/usr.sbin/pw/pw_group.c
==============================================================================
--- head/usr.sbin/pw/pw_group.c Tue Oct 28 10:39:41 2014        (r273771)
+++ head/usr.sbin/pw/pw_group.c Tue Oct 28 11:20:30 2014        (r273772)
@@ -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
                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
                        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);

Modified: head/usr.sbin/pw/tests/pw_modify.sh
==============================================================================
--- head/usr.sbin/pw/tests/pw_modify.sh Tue Oct 28 10:39:41 2014        
(r273771)
+++ head/usr.sbin/pw/tests/pw_modify.sh Tue Oct 28 11:20:30 2014        
(r273772)
@@ -27,8 +27,19 @@ groupmod_invalid_user_body() {
        atf_check -s exit:0  pw -V ${HOME} groupmod test -d foo
 }
 
+atf_test_case groupmod_bug_193704
+groupmod_bug_193704_head() {
+       atf_set "descr" "Regression test for the #193704 bug"
+}
+groupmod_bug_193704_body() {
+       populate_etc_skel
+       atf_check -s exit:0 -x pw -V ${HOME} groupadd test
+       atf_check -s exit:0 -x pw -V ${HOME} groupmod test -l newgroupname
+       atf_check -s exit:65 -e match:"^pw: unknown group" -x pw -V ${HOME} 
groupshow test
+}
 
 atf_init_test_cases() {
        atf_add_test_case groupmod_user
        atf_add_test_case groupmod_invalid_user
+       atf_add_test_case groupmod_bug_193704
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to