1*16596Skarels /* @(#)getpwent.c 4.4 (Berkeley) 84/06/19 */ 22019Swnj #include <stdio.h> 32019Swnj #include <pwd.h> 416416Sralph #include <ndbm.h> 52019Swnj 616507Sralph static char *PASSWD = "/etc/passwd"; 72019Swnj static char EMPTY[] = ""; 82019Swnj static FILE *pwf = NULL; 92019Swnj static char line[BUFSIZ+1]; 102019Swnj static struct passwd passwd; 1116416Sralph extern DBM *_pw_db; 1216416Sralph extern int _pw_stayopen; 132019Swnj 142019Swnj setpwent() 152019Swnj { 1616416Sralph if (pwf == NULL) 1716416Sralph pwf = fopen(PASSWD, "r"); 182019Swnj else 1916416Sralph rewind(pwf); 202019Swnj } 212019Swnj 222019Swnj endpwent() 232019Swnj { 2416416Sralph if (pwf != NULL) { 2516416Sralph fclose(pwf); 262019Swnj pwf = NULL; 272019Swnj } 2816416Sralph if (_pw_db != (DBM *)0) { 2916416Sralph ndbmclose(_pw_db); 3016416Sralph _pw_db = (DBM *)0; 3116416Sralph _pw_stayopen = 0; 3216416Sralph } 332019Swnj } 342019Swnj 352019Swnj static char * 362019Swnj pwskip(p) 372019Swnj register char *p; 382019Swnj { 39*16596Skarels while (*p && *p != ':' && *p != '\n') 402019Swnj ++p; 4116416Sralph if (*p) 4216416Sralph *p++ = 0; 432019Swnj return(p); 442019Swnj } 452019Swnj 462019Swnj struct passwd * 472019Swnj getpwent() 482019Swnj { 492019Swnj register char *p; 502019Swnj 512019Swnj if (pwf == NULL) { 5216416Sralph if ((pwf = fopen( PASSWD, "r" )) == NULL) 532019Swnj return(0); 542019Swnj } 552019Swnj p = fgets(line, BUFSIZ, pwf); 5616416Sralph if (p == NULL) 572019Swnj return(0); 582019Swnj passwd.pw_name = p; 592019Swnj p = pwskip(p); 602019Swnj passwd.pw_passwd = p; 612019Swnj p = pwskip(p); 622019Swnj passwd.pw_uid = atoi(p); 632019Swnj p = pwskip(p); 642019Swnj passwd.pw_gid = atoi(p); 652019Swnj passwd.pw_quota = 0; 662019Swnj passwd.pw_comment = EMPTY; 672019Swnj p = pwskip(p); 682019Swnj passwd.pw_gecos = p; 692019Swnj p = pwskip(p); 702019Swnj passwd.pw_dir = p; 712019Swnj p = pwskip(p); 722019Swnj passwd.pw_shell = p; 7316416Sralph while (*p && *p != '\n') 7416416Sralph p++; 752019Swnj *p = '\0'; 762019Swnj return(&passwd); 772019Swnj } 7816507Sralph 7916507Sralph setpwfile(file) 8016507Sralph char *file; 8116507Sralph { 8216507Sralph PASSWD = file; 8316507Sralph } 84