xref: /csrg-svn/lib/libc/gen/getpwent.c (revision 22095)
1*22095Smckusick /*
2*22095Smckusick  * Copyright (c) 1984 Regents of the University of California.
3*22095Smckusick  * All rights reserved.  The Berkeley software License Agreement
4*22095Smckusick  * specifies the terms and conditions for redistribution.
5*22095Smckusick  */
6*22095Smckusick 
7*22095Smckusick #ifndef lint
8*22095Smckusick static char sccsid[] = "@(#)getpwent.c	5.1 (Berkeley) 06/05/85";
9*22095Smckusick #endif not lint
10*22095Smckusick 
112019Swnj #include <stdio.h>
122019Swnj #include <pwd.h>
1316416Sralph #include <ndbm.h>
142019Swnj 
152019Swnj static char EMPTY[] = "";
162019Swnj static FILE *pwf = NULL;
172019Swnj static char line[BUFSIZ+1];
182019Swnj static struct passwd passwd;
192019Swnj 
2017759Sserge /*
2117759Sserge  * The following are shared with getpwnamuid.c
2217759Sserge  */
2317759Sserge char	*_pw_file = "/etc/passwd";
2417759Sserge DBM	*_pw_db;
2517759Sserge int	_pw_stayopen;
2617759Sserge 
272019Swnj setpwent()
282019Swnj {
2916416Sralph 	if (pwf == NULL)
3017759Sserge 		pwf = fopen(_pw_file, "r");
312019Swnj 	else
3216416Sralph 		rewind(pwf);
332019Swnj }
342019Swnj 
352019Swnj endpwent()
362019Swnj {
3716416Sralph 	if (pwf != NULL) {
3816416Sralph 		fclose(pwf);
392019Swnj 		pwf = NULL;
402019Swnj 	}
4116416Sralph 	if (_pw_db != (DBM *)0) {
4217028Sralph 		dbm_close(_pw_db);
4316416Sralph 		_pw_db = (DBM *)0;
4416416Sralph 		_pw_stayopen = 0;
4516416Sralph 	}
462019Swnj }
472019Swnj 
482019Swnj static char *
492019Swnj pwskip(p)
502019Swnj register char *p;
512019Swnj {
5216596Skarels 	while (*p && *p != ':' && *p != '\n')
532019Swnj 		++p;
5416416Sralph 	if (*p)
5516416Sralph 		*p++ = 0;
562019Swnj 	return(p);
572019Swnj }
582019Swnj 
592019Swnj struct passwd *
602019Swnj getpwent()
612019Swnj {
622019Swnj 	register char *p;
632019Swnj 
642019Swnj 	if (pwf == NULL) {
6517759Sserge 		if ((pwf = fopen( _pw_file, "r" )) == NULL)
662019Swnj 			return(0);
672019Swnj 	}
682019Swnj 	p = fgets(line, BUFSIZ, pwf);
6916416Sralph 	if (p == NULL)
702019Swnj 		return(0);
712019Swnj 	passwd.pw_name = p;
722019Swnj 	p = pwskip(p);
732019Swnj 	passwd.pw_passwd = p;
742019Swnj 	p = pwskip(p);
752019Swnj 	passwd.pw_uid = atoi(p);
762019Swnj 	p = pwskip(p);
772019Swnj 	passwd.pw_gid = atoi(p);
782019Swnj 	passwd.pw_quota = 0;
792019Swnj 	passwd.pw_comment = EMPTY;
802019Swnj 	p = pwskip(p);
812019Swnj 	passwd.pw_gecos = p;
822019Swnj 	p = pwskip(p);
832019Swnj 	passwd.pw_dir = p;
842019Swnj 	p = pwskip(p);
852019Swnj 	passwd.pw_shell = p;
8616416Sralph 	while (*p && *p != '\n')
8716416Sralph 		p++;
882019Swnj 	*p = '\0';
892019Swnj 	return(&passwd);
902019Swnj }
9116507Sralph 
9216507Sralph setpwfile(file)
9316507Sralph 	char *file;
9416507Sralph {
9517759Sserge 	_pw_file = file;
9616507Sralph }
97