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