|
|
1.1 ! root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.