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