1 /* @(#)getpwent.c 4.2 (Berkeley) 04/26/84 */ 2 #include <stdio.h> 3 #include <pwd.h> 4 #include <ndbm.h> 5 6 static char PASSWD[] = "/etc/passwd"; 7 static char EMPTY[] = ""; 8 static FILE *pwf = NULL; 9 static char line[BUFSIZ+1]; 10 static struct passwd passwd; 11 extern DBM *_pw_db; 12 extern int _pw_stayopen; 13 14 setpwent() 15 { 16 if (pwf == NULL) 17 pwf = fopen(PASSWD, "r"); 18 else 19 rewind(pwf); 20 } 21 22 endpwent() 23 { 24 if (pwf != NULL) { 25 fclose(pwf); 26 pwf = NULL; 27 } 28 if (_pw_db != (DBM *)0) { 29 ndbmclose(_pw_db); 30 _pw_db = (DBM *)0; 31 _pw_stayopen = 0; 32 } 33 } 34 35 static char * 36 pwskip(p) 37 register char *p; 38 { 39 while (*p && *p != ':') 40 ++p; 41 if (*p) 42 *p++ = 0; 43 return(p); 44 } 45 46 struct passwd * 47 getpwent() 48 { 49 register char *p; 50 51 if (pwf == NULL) { 52 if ((pwf = fopen( PASSWD, "r" )) == NULL) 53 return(0); 54 } 55 p = fgets(line, BUFSIZ, pwf); 56 if (p == NULL) 57 return(0); 58 passwd.pw_name = p; 59 p = pwskip(p); 60 passwd.pw_passwd = p; 61 p = pwskip(p); 62 passwd.pw_uid = atoi(p); 63 p = pwskip(p); 64 passwd.pw_gid = atoi(p); 65 passwd.pw_quota = 0; 66 passwd.pw_comment = EMPTY; 67 p = pwskip(p); 68 passwd.pw_gecos = p; 69 p = pwskip(p); 70 passwd.pw_dir = p; 71 p = pwskip(p); 72 passwd.pw_shell = p; 73 while (*p && *p != '\n') 74 p++; 75 *p = '\0'; 76 return(&passwd); 77 } 78