13e12c5d1SDavid du Colombier #include <stdio.h> 23e12c5d1SDavid du Colombier #include <pwd.h> 39a747e4fSDavid du Colombier #include <stdlib.h> 43e12c5d1SDavid du Colombier 53e12c5d1SDavid du Colombier static char PASSWD[] = "/etc/passwd"; 63e12c5d1SDavid du Colombier static FILE *pwf = NULL; 73e12c5d1SDavid du Colombier static char line[BUFSIZ+2]; 83e12c5d1SDavid du Colombier static struct passwd passwd; 93e12c5d1SDavid du Colombier 109a747e4fSDavid du Colombier void setpwent(void)119a747e4fSDavid du Colombiersetpwent(void) 123e12c5d1SDavid du Colombier { 133e12c5d1SDavid du Colombier if( pwf == NULL ) 143e12c5d1SDavid du Colombier pwf = fopen( PASSWD, "r" ); 153e12c5d1SDavid du Colombier else 163e12c5d1SDavid du Colombier rewind( pwf ); 173e12c5d1SDavid du Colombier } 183e12c5d1SDavid du Colombier 199a747e4fSDavid du Colombier void endpwent(void)209a747e4fSDavid du Colombierendpwent(void) 213e12c5d1SDavid du Colombier { 223e12c5d1SDavid du Colombier if( pwf != NULL ){ 233e12c5d1SDavid du Colombier fclose( pwf ); 243e12c5d1SDavid du Colombier pwf = NULL; 253e12c5d1SDavid du Colombier } 263e12c5d1SDavid du Colombier } 273e12c5d1SDavid du Colombier 283e12c5d1SDavid du Colombier static char * pwskip(char * p)299a747e4fSDavid du Colombierpwskip(char *p) 303e12c5d1SDavid du Colombier { 313e12c5d1SDavid du Colombier while( *p && *p != ':' && *p != '\n' ) 323e12c5d1SDavid du Colombier ++p; 333e12c5d1SDavid du Colombier if( *p ) *p++ = 0; 343e12c5d1SDavid du Colombier else p[1] = 0; 353e12c5d1SDavid du Colombier return(p); 363e12c5d1SDavid du Colombier } 373e12c5d1SDavid du Colombier 383e12c5d1SDavid du Colombier struct passwd * pwdecode(char * p)399a747e4fSDavid du Colombierpwdecode(char *p) 403e12c5d1SDavid du Colombier { 413e12c5d1SDavid du Colombier passwd.pw_name = p; 423e12c5d1SDavid du Colombier p = pwskip(p); 433e12c5d1SDavid du Colombier p = pwskip(p); /* passwd */ 443e12c5d1SDavid du Colombier passwd.pw_uid = atoi(p); 453e12c5d1SDavid du Colombier p = pwskip(p); 463e12c5d1SDavid du Colombier passwd.pw_gid = atoi(p); 473e12c5d1SDavid du Colombier p = pwskip(p); /* comment */ 483e12c5d1SDavid du Colombier p = pwskip(p); /* gecos */ 493e12c5d1SDavid du Colombier passwd.pw_dir = p; 503e12c5d1SDavid du Colombier p = pwskip(p); 513e12c5d1SDavid du Colombier passwd.pw_shell = p; 52*781103c4SDavid du Colombier pwskip(p); 533e12c5d1SDavid du Colombier return(&passwd); 543e12c5d1SDavid du Colombier } 553e12c5d1SDavid du Colombier 563e12c5d1SDavid du Colombier struct passwd * getpwent(void)579a747e4fSDavid du Colombiergetpwent(void) 583e12c5d1SDavid du Colombier { 593e12c5d1SDavid du Colombier register char *p; 603e12c5d1SDavid du Colombier 613e12c5d1SDavid du Colombier if (pwf == NULL) { 623e12c5d1SDavid du Colombier if( (pwf = fopen( PASSWD, "r" )) == NULL ) 633e12c5d1SDavid du Colombier return(0); 643e12c5d1SDavid du Colombier } 653e12c5d1SDavid du Colombier p = fgets(line, BUFSIZ, pwf); 663e12c5d1SDavid du Colombier if (p==NULL) 673e12c5d1SDavid du Colombier return(0); 683e12c5d1SDavid du Colombier return pwdecode (p); 693e12c5d1SDavid du Colombier } 70