summaryrefslogtreecommitdiffstats
path: root/libutil
diff options
context:
space:
mode:
authorBaptiste Daroussin <bapt@FreeBSD.org>2014-10-28 16:27:29 +0000
committerBaptiste Daroussin <bapt@FreeBSD.org>2014-10-28 16:27:29 +0000
commit8c4532e1189f5ef981aff455332acbfbb082cfa9 (patch)
tree96a455d21208bb7513ef6e9f676483252d38afa3 /libutil
parent87189f48bb3ff275026600ac63f7f684d92a7f3a (diff)
downloadpw-darwin-8c4532e1189f5ef981aff455332acbfbb082cfa9.tar.gz
pw-darwin-8c4532e1189f5ef981aff455332acbfbb082cfa9.tar.zst
pw-darwin-8c4532e1189f5ef981aff455332acbfbb082cfa9.zip
Fix renaming a group via the gr_copy function
Add a regression test to pw(8) because the bug was discovered via using: pw groupmod PR: 187189 Reported by: mcdouga9@egr.msu.edu Tested by: mcdouga9@egr.msu.edu Patch by: Marc de la Gueronniere
Diffstat (limited to 'libutil')
-rw-r--r--libutil/gr_util.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/libutil/gr_util.c b/libutil/gr_util.c
index 6f74507..465efd9 100644
--- a/libutil/gr_util.c
+++ b/libutil/gr_util.c
@@ -170,14 +170,21 @@ gr_copy(int ffd, int tfd, const struct group *gr, struct group *old_gr)
size_t len;
int eof, readlen;
- sgr = gr;
+ if (old_gr == NULL && gr == NULL)
+ return(-1);
+
+ sgr = old_gr;
+ /* deleting a group */
if (gr == NULL) {
line = NULL;
- if (old_gr == NULL)
+ } else {
+ if ((line = gr_make(gr)) == NULL)
return (-1);
- sgr = old_gr;
- } else if ((line = gr_make(gr)) == NULL)
- return (-1);
+ }
+
+ /* adding a group */
+ if (sgr == NULL)
+ sgr = gr;
eof = 0;
len = 0;