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