122095Smckusick /* 222095Smckusick * Copyright (c) 1984 Regents of the University of California. 322095Smckusick * All rights reserved. The Berkeley software License Agreement 422095Smckusick * specifies the terms and conditions for redistribution. 522095Smckusick */ 622095Smckusick 7*26560Sdonn #if defined(LIBC_SCCS) && !defined(lint) 8*26560Sdonn static char sccsid[] = "@(#)getpwent.c 5.2 (Berkeley) 03/09/86"; 9*26560Sdonn #endif LIBC_SCCS and not lint 1022095Smckusick 112019Swnj #include <stdio.h> 122019Swnj #include <pwd.h> 1316416Sralph #include <ndbm.h> 142019Swnj 152019Swnj static char EMPTY[] = ""; 162019Swnj static FILE *pwf = NULL; 172019Swnj static char line[BUFSIZ+1]; 182019Swnj static struct passwd passwd; 192019Swnj 2017759Sserge /* 2117759Sserge * The following are shared with getpwnamuid.c 2217759Sserge */ 2317759Sserge char *_pw_file = "/etc/passwd"; 2417759Sserge DBM *_pw_db; 2517759Sserge int _pw_stayopen; 2617759Sserge 272019Swnj setpwent() 282019Swnj { 2916416Sralph if (pwf == NULL) 3017759Sserge pwf = fopen(_pw_file, "r"); 312019Swnj else 3216416Sralph rewind(pwf); 332019Swnj } 342019Swnj 352019Swnj endpwent() 362019Swnj { 3716416Sralph if (pwf != NULL) { 3816416Sralph fclose(pwf); 392019Swnj pwf = NULL; 402019Swnj } 4116416Sralph if (_pw_db != (DBM *)0) { 4217028Sralph dbm_close(_pw_db); 4316416Sralph _pw_db = (DBM *)0; 4416416Sralph _pw_stayopen = 0; 4516416Sralph } 462019Swnj } 472019Swnj 482019Swnj static char * 492019Swnj pwskip(p) 502019Swnj register char *p; 512019Swnj { 5216596Skarels while (*p && *p != ':' && *p != '\n') 532019Swnj ++p; 5416416Sralph if (*p) 5516416Sralph *p++ = 0; 562019Swnj return(p); 572019Swnj } 582019Swnj 592019Swnj struct passwd * 602019Swnj getpwent() 612019Swnj { 622019Swnj register char *p; 632019Swnj 642019Swnj if (pwf == NULL) { 6517759Sserge if ((pwf = fopen( _pw_file, "r" )) == NULL) 662019Swnj return(0); 672019Swnj } 682019Swnj p = fgets(line, BUFSIZ, pwf); 6916416Sralph if (p == NULL) 702019Swnj return(0); 712019Swnj passwd.pw_name = p; 722019Swnj p = pwskip(p); 732019Swnj passwd.pw_passwd = p; 742019Swnj p = pwskip(p); 752019Swnj passwd.pw_uid = atoi(p); 762019Swnj p = pwskip(p); 772019Swnj passwd.pw_gid = atoi(p); 782019Swnj passwd.pw_quota = 0; 792019Swnj passwd.pw_comment = EMPTY; 802019Swnj p = pwskip(p); 812019Swnj passwd.pw_gecos = p; 822019Swnj p = pwskip(p); 832019Swnj passwd.pw_dir = p; 842019Swnj p = pwskip(p); 852019Swnj passwd.pw_shell = p; 8616416Sralph while (*p && *p != '\n') 8716416Sralph p++; 882019Swnj *p = '\0'; 892019Swnj return(&passwd); 902019Swnj } 9116507Sralph 9216507Sralph setpwfile(file) 9316507Sralph char *file; 9416507Sralph { 9517759Sserge _pw_file = file; 9616507Sralph } 97