xref: /csrg-svn/lib/libc/gen/getpwent.c (revision 2019)
1*2019Swnj /* @(#)getpwent.c	4.1 (Berkeley) 12/21/80 */
2*2019Swnj #include <stdio.h>
3*2019Swnj #include <pwd.h>
4*2019Swnj 
5*2019Swnj static char PASSWD[]	= "/etc/passwd";
6*2019Swnj static char EMPTY[] = "";
7*2019Swnj static FILE *pwf = NULL;
8*2019Swnj static char line[BUFSIZ+1];
9*2019Swnj static struct passwd passwd;
10*2019Swnj 
11*2019Swnj setpwent()
12*2019Swnj {
13*2019Swnj 	if( pwf == NULL )
14*2019Swnj 		pwf = fopen( PASSWD, "r" );
15*2019Swnj 	else
16*2019Swnj 		rewind( pwf );
17*2019Swnj }
18*2019Swnj 
19*2019Swnj endpwent()
20*2019Swnj {
21*2019Swnj 	if( pwf != NULL ){
22*2019Swnj 		fclose( pwf );
23*2019Swnj 		pwf = NULL;
24*2019Swnj 	}
25*2019Swnj }
26*2019Swnj 
27*2019Swnj static char *
28*2019Swnj pwskip(p)
29*2019Swnj register char *p;
30*2019Swnj {
31*2019Swnj 	while( *p && *p != ':' )
32*2019Swnj 		++p;
33*2019Swnj 	if( *p ) *p++ = 0;
34*2019Swnj 	return(p);
35*2019Swnj }
36*2019Swnj 
37*2019Swnj struct passwd *
38*2019Swnj getpwent()
39*2019Swnj {
40*2019Swnj 	register char *p;
41*2019Swnj 
42*2019Swnj 	if (pwf == NULL) {
43*2019Swnj 		if( (pwf = fopen( PASSWD, "r" )) == NULL )
44*2019Swnj 			return(0);
45*2019Swnj 	}
46*2019Swnj 	p = fgets(line, BUFSIZ, pwf);
47*2019Swnj 	if (p==NULL)
48*2019Swnj 		return(0);
49*2019Swnj 	passwd.pw_name = p;
50*2019Swnj 	p = pwskip(p);
51*2019Swnj 	passwd.pw_passwd = p;
52*2019Swnj 	p = pwskip(p);
53*2019Swnj 	passwd.pw_uid = atoi(p);
54*2019Swnj 	p = pwskip(p);
55*2019Swnj 	passwd.pw_gid = atoi(p);
56*2019Swnj 	passwd.pw_quota = 0;
57*2019Swnj 	passwd.pw_comment = EMPTY;
58*2019Swnj 	p = pwskip(p);
59*2019Swnj 	passwd.pw_gecos = p;
60*2019Swnj 	p = pwskip(p);
61*2019Swnj 	passwd.pw_dir = p;
62*2019Swnj 	p = pwskip(p);
63*2019Swnj 	passwd.pw_shell = p;
64*2019Swnj 	while(*p && *p != '\n') p++;
65*2019Swnj 	*p = '\0';
66*2019Swnj 	return(&passwd);
67*2019Swnj }
68