xref: /csrg-svn/lib/libc/gen/getpwent.c (revision 16596)
1*16596Skarels /* @(#)getpwent.c	4.4 (Berkeley) 84/06/19 */
22019Swnj #include <stdio.h>
32019Swnj #include <pwd.h>
416416Sralph #include <ndbm.h>
52019Swnj 
616507Sralph static char *PASSWD = "/etc/passwd";
72019Swnj static char EMPTY[] = "";
82019Swnj static FILE *pwf = NULL;
92019Swnj static char line[BUFSIZ+1];
102019Swnj static struct passwd passwd;
1116416Sralph extern DBM *_pw_db;
1216416Sralph extern int _pw_stayopen;
132019Swnj 
142019Swnj setpwent()
152019Swnj {
1616416Sralph 	if (pwf == NULL)
1716416Sralph 		pwf = fopen(PASSWD, "r");
182019Swnj 	else
1916416Sralph 		rewind(pwf);
202019Swnj }
212019Swnj 
222019Swnj endpwent()
232019Swnj {
2416416Sralph 	if (pwf != NULL) {
2516416Sralph 		fclose(pwf);
262019Swnj 		pwf = NULL;
272019Swnj 	}
2816416Sralph 	if (_pw_db != (DBM *)0) {
2916416Sralph 		ndbmclose(_pw_db);
3016416Sralph 		_pw_db = (DBM *)0;
3116416Sralph 		_pw_stayopen = 0;
3216416Sralph 	}
332019Swnj }
342019Swnj 
352019Swnj static char *
362019Swnj pwskip(p)
372019Swnj register char *p;
382019Swnj {
39*16596Skarels 	while (*p && *p != ':' && *p != '\n')
402019Swnj 		++p;
4116416Sralph 	if (*p)
4216416Sralph 		*p++ = 0;
432019Swnj 	return(p);
442019Swnj }
452019Swnj 
462019Swnj struct passwd *
472019Swnj getpwent()
482019Swnj {
492019Swnj 	register char *p;
502019Swnj 
512019Swnj 	if (pwf == NULL) {
5216416Sralph 		if ((pwf = fopen( PASSWD, "r" )) == NULL)
532019Swnj 			return(0);
542019Swnj 	}
552019Swnj 	p = fgets(line, BUFSIZ, pwf);
5616416Sralph 	if (p == NULL)
572019Swnj 		return(0);
582019Swnj 	passwd.pw_name = p;
592019Swnj 	p = pwskip(p);
602019Swnj 	passwd.pw_passwd = p;
612019Swnj 	p = pwskip(p);
622019Swnj 	passwd.pw_uid = atoi(p);
632019Swnj 	p = pwskip(p);
642019Swnj 	passwd.pw_gid = atoi(p);
652019Swnj 	passwd.pw_quota = 0;
662019Swnj 	passwd.pw_comment = EMPTY;
672019Swnj 	p = pwskip(p);
682019Swnj 	passwd.pw_gecos = p;
692019Swnj 	p = pwskip(p);
702019Swnj 	passwd.pw_dir = p;
712019Swnj 	p = pwskip(p);
722019Swnj 	passwd.pw_shell = p;
7316416Sralph 	while (*p && *p != '\n')
7416416Sralph 		p++;
752019Swnj 	*p = '\0';
762019Swnj 	return(&passwd);
772019Swnj }
7816507Sralph 
7916507Sralph setpwfile(file)
8016507Sralph 	char *file;
8116507Sralph {
8216507Sralph 	PASSWD = file;
8316507Sralph }
84