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