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