140 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.TH GETPWENT 3
 | 
						|
.SH NAME
 | 
						|
getpwent, getpwnam, getpwuid, setpwent, endpwent, setpwfile \- password file routines
 | 
						|
.SH SYNOPSIS
 | 
						|
.ft B
 | 
						|
.nf
 | 
						|
#include <pwd.h>
 | 
						|
 | 
						|
struct passwd *getpwent(void)
 | 
						|
struct passwd *getpwnam(const char *\fIname\fP)
 | 
						|
struct passwd *getpwuid(uid_t \fIuid\fP)
 | 
						|
int setpwent(void)
 | 
						|
void endpwent(void)
 | 
						|
void setpwfile(const char *\fIfile\fP)
 | 
						|
.fi
 | 
						|
.ft P
 | 
						|
.SH DESCRIPTION
 | 
						|
These functions are used to obtain information from the password file.  They
 | 
						|
return this information in a
 | 
						|
.B struct passwd
 | 
						|
as defined by <pwd.h>:
 | 
						|
.PP
 | 
						|
.nf
 | 
						|
.ta +4n +6n +15n
 | 
						|
struct passwd {
 | 
						|
	char	*pw_name;	/* login name */
 | 
						|
	char	*pw_passwd;	/* encrypted password */
 | 
						|
	uid_t	pw_uid;	/* numeric user id */
 | 
						|
	gid_t	pw_gid;	/* numeric group id */
 | 
						|
	char	*pw_gecos;	/* user full name and other info */
 | 
						|
	char	*pw_dir;	/* user's home directory */
 | 
						|
	char	*pw_shell;	/* name of the user's shell */
 | 
						|
};
 | 
						|
.fi
 | 
						|
.PP
 | 
						|
.B Getpwent()
 | 
						|
reads the password file entry by entry.
 | 
						|
.B Getpwnam()
 | 
						|
scans the entire password file for the user with the given
 | 
						|
.IR name .
 | 
						|
.B Getpwuid()
 | 
						|
looks for the first user with the given
 | 
						|
.IR uid .
 | 
						|
The
 | 
						|
.B setpwent()
 | 
						|
and
 | 
						|
.B endpwent()
 | 
						|
functions are used to open and later close the password file.  With
 | 
						|
.B setpwfile()
 | 
						|
one can specify the file to read other than the normal password file.  This
 | 
						|
only sets the name, the next
 | 
						|
.B setpwent()
 | 
						|
call will open the file.  Do not touch the file name while it is active.
 | 
						|
Use
 | 
						|
.B setpwfile(NULL)
 | 
						|
to revert back to the normal password file.
 | 
						|
.PP
 | 
						|
The usual way to scan the password file is (error checking omitted):
 | 
						|
.PP
 | 
						|
.RS
 | 
						|
.nf
 | 
						|
.DT
 | 
						|
setpwent();
 | 
						|
while ((pw = getpwent()) != NULL)
 | 
						|
	if (appropriate_test(pw)) break;
 | 
						|
endpwent();
 | 
						|
.fi
 | 
						|
.RE
 | 
						|
.PP
 | 
						|
The
 | 
						|
.B pw
 | 
						|
variable contains the entry that is wanted if non-NULL.  The
 | 
						|
.B getpwnam()
 | 
						|
and
 | 
						|
.B getpwuid()
 | 
						|
functions are implemented as in this example, with error checking of course.
 | 
						|
.PP
 | 
						|
.B Getpwent()
 | 
						|
calls
 | 
						|
.B setpwent()
 | 
						|
if this has not yet been done.
 | 
						|
.B Setpwent()
 | 
						|
first calls
 | 
						|
.B endpwent()
 | 
						|
if the password file is still open.  (Other implementations may simply
 | 
						|
rewind the file.)
 | 
						|
.SH FILES
 | 
						|
.TP 15
 | 
						|
.B /etc/passwd
 | 
						|
The password file database.
 | 
						|
.SH "SEE ALSO"
 | 
						|
.BR cuserid (3),
 | 
						|
.BR getlogin (3),
 | 
						|
.BR getgrent (3),
 | 
						|
.BR passwd (5).
 | 
						|
.SH DIAGNOSTICS
 | 
						|
.B Setpwent()
 | 
						|
has the same return value and error codes as the
 | 
						|
.BR open (2)
 | 
						|
call it uses to open the password file.  The
 | 
						|
.BI get xxx ()
 | 
						|
functions return NULL on end of file, entry not found, or error.  You can
 | 
						|
set
 | 
						|
.B errno
 | 
						|
to zero before the call and check it after.
 | 
						|
.SH NOTES
 | 
						|
All
 | 
						|
.BI get xxx ()
 | 
						|
routines return a pointer to static storage that is overwritten in each call.
 | 
						|
.PP
 | 
						|
Only
 | 
						|
.B getpwnam()
 | 
						|
and
 | 
						|
.B getpwuid()
 | 
						|
are defined by \s-2POSIX\s+2.  The
 | 
						|
.B _MINIX_SOURCE
 | 
						|
macro must be defined before including <pwd.h> to make the other functions
 | 
						|
visible.  The
 | 
						|
.B pw_passwd
 | 
						|
and
 | 
						|
.B pw_gecos
 | 
						|
fields are also not defined by \s-2POSIX\s+2, but are always visible.
 | 
						|
Portable code cannot reliably detect errors by setting
 | 
						|
.B errno
 | 
						|
to zero.  Under MINIX 3 it is better to make a
 | 
						|
.B getpwent()
 | 
						|
scan if you need to look up several user-id's or names, but portable code
 | 
						|
had better use several
 | 
						|
.B getpwuid()
 | 
						|
or
 | 
						|
.B getpwnam()
 | 
						|
calls.  The
 | 
						|
.B getpwent()
 | 
						|
is usually available on other systems, but may be very expensive.
 | 
						|
.SH AUTHOR
 | 
						|
Kees J. Bot (kjb@cs.vu.nl)
 | 
						|
 | 
						|
.\"
 | 
						|
.\" $PchId: getpwent.3,v 1.2 1996/04/11 06:37:43 philip Exp $
 |