Commit | Line | Data |
---|---|---|
b898b9e0 BJ |
1 | /* Copyright (c) 1979 Regents of the University of California */ |
2 | #include <pwd.h> | |
3 | ||
4 | #define BUFSIZ 160 | |
5 | ||
6 | static int pwf = -1; | |
7 | static char line[BUFSIZ+1]; | |
8 | static struct passwd passwd; | |
9 | ||
10 | setpwent() | |
11 | { | |
12 | if( pwf == -1 ) | |
13 | pwf = open( "/etc/passwd", 0 ); | |
14 | else | |
15 | lseek(pwf, 0l, 0); | |
16 | } | |
17 | ||
18 | endpwent() | |
19 | { | |
20 | if( pwf != -1 ){ | |
21 | close( pwf ); | |
22 | pwf = -1; | |
23 | } | |
24 | } | |
25 | ||
26 | static char * | |
27 | pwskip(p) | |
28 | register char *p; | |
29 | { | |
30 | while( *p && *p != ':' ) | |
31 | ++p; | |
32 | if( *p ) *p++ = 0; | |
33 | return(p); | |
34 | } | |
35 | ||
36 | struct passwd * | |
37 | getpwent() | |
38 | { | |
39 | register char *p, *q; | |
40 | register int i, j; | |
41 | ||
42 | if (pwf == -1) { | |
43 | if( (pwf = open( "/etc/passwd", 0 )) == -1 ) | |
44 | return(0); | |
45 | } | |
46 | i = read(pwf, line, BUFSIZ); | |
47 | for (j = 0; j < i; j++) | |
48 | if (line[j] == '\n') | |
49 | break; | |
50 | if (j >= i) | |
51 | return(0); | |
52 | line[++j] = 0; | |
53 | lseek(pwf, (long) (j - i), 1); | |
54 | p = line; | |
55 | passwd.pw_name = p; | |
56 | p = pwskip(p); | |
57 | /* passwd.pw_passwd = p; */ | |
58 | p = q = pwskip(p); | |
59 | /* passwd.pw_uid = atoi(p); */ | |
60 | p = pwskip(p); | |
61 | p[-1] = 0; | |
62 | passwd.pw_uid = atou(q); | |
63 | /* passwd.pw_gid = atoi(p); */ | |
64 | /* passwd.pw_quota = 0; */ | |
65 | /* passwd.pw_comment = ""; */ | |
66 | q = p; | |
67 | p = pwskip(p); | |
68 | p[-1] = 0; | |
69 | #ifdef CORY | |
70 | passwd.pw_uid =+ atou(q) << 8; | |
71 | #endif | |
72 | #ifdef CC | |
73 | passwd.pw_uid =+ atou(q) << 8; | |
74 | #endif | |
75 | #ifndef CORY | |
76 | #ifndef CC | |
77 | passwd.pw_gid = atou(q); | |
78 | #endif | |
79 | #endif | |
80 | /* passwd.pw_gecos = p; */ | |
81 | p = pwskip(p); | |
82 | passwd.pw_dir = p; | |
83 | p = pwskip(p); | |
84 | /* passwd.pw_shell = p; */ | |
85 | /* while(*p && *p != '\n') p++; */ | |
86 | *p = '\0'; | |
87 | return(&passwd); | |
88 | } | |
89 | ||
90 | atou(p) | |
91 | register char *p; | |
92 | { | |
93 | register int i = 0; | |
94 | ||
95 | if (p != 0) | |
96 | while (*p) | |
97 | i = i * 10 + *p++ - '0'; | |
98 | return (i); | |
99 | } |