xref: /csrg-svn/lib/libc/gen/getpwent.c (revision 17759)
1*17759Sserge /* @(#)getpwent.c	4.6 (Berkeley) 85/01/21 */
22019Swnj #include <stdio.h>
32019Swnj #include <pwd.h>
416416Sralph #include <ndbm.h>
52019Swnj 
62019Swnj static char EMPTY[] = "";
72019Swnj static FILE *pwf = NULL;
82019Swnj static char line[BUFSIZ+1];
92019Swnj static struct passwd passwd;
102019Swnj 
11*17759Sserge /*
12*17759Sserge  * The following are shared with getpwnamuid.c
13*17759Sserge  */
14*17759Sserge char	*_pw_file = "/etc/passwd";
15*17759Sserge DBM	*_pw_db;
16*17759Sserge int	_pw_stayopen;
17*17759Sserge 
182019Swnj setpwent()
192019Swnj {
2016416Sralph 	if (pwf == NULL)
21*17759Sserge 		pwf = fopen(_pw_file, "r");
222019Swnj 	else
2316416Sralph 		rewind(pwf);
242019Swnj }
252019Swnj 
262019Swnj endpwent()
272019Swnj {
2816416Sralph 	if (pwf != NULL) {
2916416Sralph 		fclose(pwf);
302019Swnj 		pwf = NULL;
312019Swnj 	}
3216416Sralph 	if (_pw_db != (DBM *)0) {
3317028Sralph 		dbm_close(_pw_db);
3416416Sralph 		_pw_db = (DBM *)0;
3516416Sralph 		_pw_stayopen = 0;
3616416Sralph 	}
372019Swnj }
382019Swnj 
392019Swnj static char *
402019Swnj pwskip(p)
412019Swnj register char *p;
422019Swnj {
4316596Skarels 	while (*p && *p != ':' && *p != '\n')
442019Swnj 		++p;
4516416Sralph 	if (*p)
4616416Sralph 		*p++ = 0;
472019Swnj 	return(p);
482019Swnj }
492019Swnj 
502019Swnj struct passwd *
512019Swnj getpwent()
522019Swnj {
532019Swnj 	register char *p;
542019Swnj 
552019Swnj 	if (pwf == NULL) {
56*17759Sserge 		if ((pwf = fopen( _pw_file, "r" )) == NULL)
572019Swnj 			return(0);
582019Swnj 	}
592019Swnj 	p = fgets(line, BUFSIZ, pwf);
6016416Sralph 	if (p == NULL)
612019Swnj 		return(0);
622019Swnj 	passwd.pw_name = p;
632019Swnj 	p = pwskip(p);
642019Swnj 	passwd.pw_passwd = p;
652019Swnj 	p = pwskip(p);
662019Swnj 	passwd.pw_uid = atoi(p);
672019Swnj 	p = pwskip(p);
682019Swnj 	passwd.pw_gid = atoi(p);
692019Swnj 	passwd.pw_quota = 0;
702019Swnj 	passwd.pw_comment = EMPTY;
712019Swnj 	p = pwskip(p);
722019Swnj 	passwd.pw_gecos = p;
732019Swnj 	p = pwskip(p);
742019Swnj 	passwd.pw_dir = p;
752019Swnj 	p = pwskip(p);
762019Swnj 	passwd.pw_shell = p;
7716416Sralph 	while (*p && *p != '\n')
7816416Sralph 		p++;
792019Swnj 	*p = '\0';
802019Swnj 	return(&passwd);
812019Swnj }
8216507Sralph 
8316507Sralph setpwfile(file)
8416507Sralph 	char *file;
8516507Sralph {
86*17759Sserge 	_pw_file = file;
8716507Sralph }
88