summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pw/edgroup.c
diff options
context:
space:
mode:
authordavidn <davidn@FreeBSD.org>1999-02-23 07:15:11 +0000
committerdavidn <davidn@FreeBSD.org>1999-02-23 07:15:11 +0000
commitaea1f6bc3cb4963dbd48dcd9f051919520f70f2b (patch)
treeb3bd7501edb165799eda61bf2ac5d8202c789a5d /usr.sbin/pw/edgroup.c
parentf6416f79a6b9a2eb5c485e8af421d3d570a95d25 (diff)
downloadFreeBSD-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.c18
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 */
}
OpenPOWER on IntegriCloud