1*17759Sserge /* @(#)getpwent.c 4.6 (Berkeley) 85/01/21 */ 22019Swnj #include <stdio.h> 32019Swnj #include <pwd.h> 416416Sralph #include <ndbm.h> 52019Swnj 62019Swnj static char EMPTY[] = ""; 72019Swnj static FILE *pwf = NULL; 82019Swnj static char line[BUFSIZ+1]; 92019Swnj static struct passwd passwd; 102019Swnj 11*17759Sserge /* 12*17759Sserge * The following are shared with getpwnamuid.c 13*17759Sserge */ 14*17759Sserge char *_pw_file = "/etc/passwd"; 15*17759Sserge DBM *_pw_db; 16*17759Sserge int _pw_stayopen; 17*17759Sserge 182019Swnj setpwent() 192019Swnj { 2016416Sralph if (pwf == NULL) 21*17759Sserge pwf = fopen(_pw_file, "r"); 222019Swnj else 2316416Sralph rewind(pwf); 242019Swnj } 252019Swnj 262019Swnj endpwent() 272019Swnj { 2816416Sralph if (pwf != NULL) { 2916416Sralph fclose(pwf); 302019Swnj pwf = NULL; 312019Swnj } 3216416Sralph if (_pw_db != (DBM *)0) { 3317028Sralph dbm_close(_pw_db); 3416416Sralph _pw_db = (DBM *)0; 3516416Sralph _pw_stayopen = 0; 3616416Sralph } 372019Swnj } 382019Swnj 392019Swnj static char * 402019Swnj pwskip(p) 412019Swnj register char *p; 422019Swnj { 4316596Skarels while (*p && *p != ':' && *p != '\n') 442019Swnj ++p; 4516416Sralph if (*p) 4616416Sralph *p++ = 0; 472019Swnj return(p); 482019Swnj } 492019Swnj 502019Swnj struct passwd * 512019Swnj getpwent() 522019Swnj { 532019Swnj register char *p; 542019Swnj 552019Swnj if (pwf == NULL) { 56*17759Sserge if ((pwf = fopen( _pw_file, "r" )) == NULL) 572019Swnj return(0); 582019Swnj } 592019Swnj p = fgets(line, BUFSIZ, pwf); 6016416Sralph if (p == NULL) 612019Swnj return(0); 622019Swnj passwd.pw_name = p; 632019Swnj p = pwskip(p); 642019Swnj passwd.pw_passwd = p; 652019Swnj p = pwskip(p); 662019Swnj passwd.pw_uid = atoi(p); 672019Swnj p = pwskip(p); 682019Swnj passwd.pw_gid = atoi(p); 692019Swnj passwd.pw_quota = 0; 702019Swnj passwd.pw_comment = EMPTY; 712019Swnj p = pwskip(p); 722019Swnj passwd.pw_gecos = p; 732019Swnj p = pwskip(p); 742019Swnj passwd.pw_dir = p; 752019Swnj p = pwskip(p); 762019Swnj passwd.pw_shell = p; 7716416Sralph while (*p && *p != '\n') 7816416Sralph p++; 792019Swnj *p = '\0'; 802019Swnj return(&passwd); 812019Swnj } 8216507Sralph 8316507Sralph setpwfile(file) 8416507Sralph char *file; 8516507Sralph { 86*17759Sserge _pw_file = file; 8716507Sralph } 88