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