|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1984 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: */ ! 6: ! 7: #if defined(LIBC_SCCS) && !defined(lint) ! 8: static char sccsid[] = "@(#)getpwent.c 5.2 (Berkeley) 3/9/86"; ! 9: #endif LIBC_SCCS and not lint ! 10: ! 11: #include <stdio.h> ! 12: #include <pwd.h> ! 13: #include <ndbm.h> ! 14: ! 15: static char EMPTY[] = ""; ! 16: static FILE *pwf = NULL; ! 17: static char line[BUFSIZ+1]; ! 18: static struct passwd passwd; ! 19: ! 20: /* ! 21: * The following are shared with getpwnamuid.c ! 22: */ ! 23: char *_pw_file = "/etc/passwd"; ! 24: DBM *_pw_db; ! 25: int _pw_stayopen; ! 26: ! 27: setpwent() ! 28: { ! 29: if (pwf == NULL) ! 30: pwf = fopen(_pw_file, "r"); ! 31: else ! 32: rewind(pwf); ! 33: } ! 34: ! 35: endpwent() ! 36: { ! 37: if (pwf != NULL) { ! 38: fclose(pwf); ! 39: pwf = NULL; ! 40: } ! 41: if (_pw_db != (DBM *)0) { ! 42: dbm_close(_pw_db); ! 43: _pw_db = (DBM *)0; ! 44: _pw_stayopen = 0; ! 45: } ! 46: } ! 47: ! 48: static char * ! 49: pwskip(p) ! 50: register char *p; ! 51: { ! 52: while (*p && *p != ':' && *p != '\n') ! 53: ++p; ! 54: if (*p) ! 55: *p++ = 0; ! 56: return(p); ! 57: } ! 58: ! 59: struct passwd * ! 60: getpwent() ! 61: { ! 62: register char *p; ! 63: ! 64: if (pwf == NULL) { ! 65: if ((pwf = fopen( _pw_file, "r" )) == NULL) ! 66: return(0); ! 67: } ! 68: p = fgets(line, BUFSIZ, pwf); ! 69: if (p == NULL) ! 70: return(0); ! 71: passwd.pw_name = p; ! 72: p = pwskip(p); ! 73: passwd.pw_passwd = p; ! 74: p = pwskip(p); ! 75: passwd.pw_uid = atoi(p); ! 76: p = pwskip(p); ! 77: passwd.pw_gid = atoi(p); ! 78: passwd.pw_quota = 0; ! 79: passwd.pw_comment = EMPTY; ! 80: p = pwskip(p); ! 81: passwd.pw_gecos = p; ! 82: p = pwskip(p); ! 83: passwd.pw_dir = p; ! 84: p = pwskip(p); ! 85: passwd.pw_shell = p; ! 86: while (*p && *p != '\n') ! 87: p++; ! 88: *p = '\0'; ! 89: return(&passwd); ! 90: } ! 91: ! 92: setpwfile(file) ! 93: char *file; ! 94: { ! 95: _pw_file = file; ! 96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.