Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Oct 2014 11:20:30 +0000 (UTC)
From:      Baptiste Daroussin <bapt@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r273772 - in head/usr.sbin/pw: . tests
Message-ID:  <201410281120.s9SBKULS093097@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201410281120.s9SBKULS093097>