diff options
author | davidn <davidn@FreeBSD.org> | 1999-02-23 07:15:11 +0000 |
---|---|---|
committer | davidn <davidn@FreeBSD.org> | 1999-02-23 07:15:11 +0000 |
commit | aea1f6bc3cb4963dbd48dcd9f051919520f70f2b (patch) | |
tree | b3bd7501edb165799eda61bf2ac5d8202c789a5d /usr.sbin/pw/edgroup.c | |
parent | f6416f79a6b9a2eb5c485e8af421d3d570a95d25 (diff) | |
download | FreeBSD-src-aea1f6bc3cb4963dbd48dcd9f051919520f70f2b.zip FreeBSD-src-aea1f6bc3cb4963dbd48dcd9f051919520f70f2b.tar.gz |
1) Do not blindly ignore file update errors which may occur due to concurrent
updating
2) Add -V <etcdir>, which allows maintaining user/group database in alternate
locations other than /etc.
Diffstat (limited to 'usr.sbin/pw/edgroup.c')
-rw-r--r-- | usr.sbin/pw/edgroup.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/usr.sbin/pw/edgroup.c b/usr.sbin/pw/edgroup.c index 6116fa6..649a398 100644 --- a/usr.sbin/pw/edgroup.c +++ b/usr.sbin/pw/edgroup.c @@ -26,7 +26,7 @@ #ifndef lint static const char rcsid[] = - "$Id: edgroup.c,v 1.5 1997/10/10 06:23:30 charnier Exp $"; + "$Id: edgroup.c,v 1.6 1998/07/16 17:18:22 nate Exp $"; #endif /* not lint */ #include <stdio.h> @@ -55,14 +55,18 @@ isingroup(char const * name, char **mem) return -1; } -static char groupfile[] = _PATH_GROUP; -static char grouptmp[] = _PATH_GROUP ".new"; - int editgroups(char *name, char **groups) { int rc = 0; int infd; + char groupfile[MAXPATHLEN]; + char grouptmp[MAXPATHLEN]; + + strncpy(groupfile, getgrpath(_GROUP), MAXPATHLEN - 5); + groupfile[MAXPATHLEN - 5] = '\0'; + strcpy(grouptmp, groupfile); + strcat(grouptmp, ".new"); if ((infd = open(groupfile, O_RDWR | O_CREAT, 0644)) != -1) { FILE *infp; @@ -172,9 +176,9 @@ editgroups(char *name, char **groups) */ struct passwd *pwd; - setpwent(); - while ((pwd = getpwent()) != NULL && pwd->pw_gid != grp.gr_gid); - endpwent(); + SETPWENT(); + while ((pwd = GETPWENT()) != NULL && (gid_t)pwd->pw_gid != (gid_t)grp.gr_gid); + ENDPWENT(); if (pwd == NULL) /* No members at all */ continue; /* Drop the group */ } |