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
This commit is contained in:
Baptiste Daroussin 2014-10-28 11:20:30 +00:00
parent 1c1c418e52
commit fb7830888d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=273772
2 changed files with 17 additions and 3 deletions

View 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);

View File

@ -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
}