 f14fb60209
			
		
	
	
		f14fb60209
		
	
	
	
	
		
			
			* Updating common/lib * Updating lib/csu * Updating lib/libc * Updating libexec/ld.elf_so * Corrected test on __minix in featuretest to actually follow the meaning of the comment. * Cleaned up _REENTRANT-related defintions. * Disabled -D_REENTRANT for libfetch * Removing some unneeded __NBSD_LIBC defines and tests Change-Id: Ic1394baef74d11b9f86b312f5ff4bbc3cbf72ce2
		
			
				
	
	
		
			371 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			371 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: getpwent.3,v 1.38 2011/04/28 16:35:05 wiz Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1988, 1991, 1993
 | |
| .\"	The Regents of the University of California.  All rights reserved.
 | |
| .\"
 | |
| .\" Redistribution and use in source and binary forms, with or without
 | |
| .\" modification, are permitted provided that the following conditions
 | |
| .\" are met:
 | |
| .\" 1. Redistributions of source code must retain the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer.
 | |
| .\" 2. Redistributions in binary form must reproduce the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer in the
 | |
| .\"    documentation and/or other materials provided with the distribution.
 | |
| .\" 3. Neither the name of the University nor the names of its contributors
 | |
| .\"    may be used to endorse or promote products derived from this software
 | |
| .\"    without specific prior written permission.
 | |
| .\"
 | |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | |
| .\" SUCH DAMAGE.
 | |
| .\"
 | |
| .\"     @(#)getpwent.3	8.2 (Berkeley) 12/11/93
 | |
| .\"
 | |
| .Dd April 30, 2008
 | |
| .Dt GETPWENT 3
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm getpwent ,
 | |
| .Nm getpwent_r ,
 | |
| .Nm getpwnam ,
 | |
| .Nm getpwnam_r ,
 | |
| .Nm getpwuid ,
 | |
| .Nm getpwuid_r ,
 | |
| .Nm setpassent ,
 | |
| .Nm setpwent ,
 | |
| .Nm endpwent
 | |
| .Nd password database operations
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In pwd.h
 | |
| .Ft struct passwd *
 | |
| .Fn getpwent void
 | |
| .Ft int
 | |
| .Fo getpwent_r
 | |
| .Fa "struct passwd *pw"
 | |
| .Fa "char *buffer"
 | |
| .Fa "size_t buflen"
 | |
| .Fa "struct passwd **result"
 | |
| .Fc
 | |
| .Ft struct passwd *
 | |
| .Fn getpwnam "const char *name"
 | |
| .Ft int
 | |
| .Fo getpwnam_r
 | |
| .Fa "const char *name"
 | |
| .Fa "struct passwd *pw"
 | |
| .Fa "char *buffer"
 | |
| .Fa "size_t buflen"
 | |
| .Fa "struct passwd **result"
 | |
| .Fc
 | |
| .Ft struct passwd *
 | |
| .Fn getpwuid "uid_t uid"
 | |
| .Ft int
 | |
| .Fo getpwuid_r
 | |
| .Fa "uid_t uid"
 | |
| .Fa "struct passwd *pw"
 | |
| .Fa "char *buffer"
 | |
| .Fa "size_t buflen"
 | |
| .Fa "struct passwd **result"
 | |
| .Fc
 | |
| .Ft int
 | |
| .Fn setpassent "int stayopen"
 | |
| .Ft void
 | |
| .Fn setpwent void
 | |
| .Ft void
 | |
| .Fn endpwent void
 | |
| .Sh DESCRIPTION
 | |
| These functions
 | |
| operate on the password database
 | |
| which is described
 | |
| in
 | |
| .Xr passwd 5 .
 | |
| Each entry in the database is defined by the structure
 | |
| .Ar passwd
 | |
| found in the include
 | |
| file
 | |
| .In pwd.h :
 | |
| .Bd -literal -offset indent
 | |
| struct passwd {
 | |
| 	char	*pw_name;	/* user name */
 | |
| 	char	*pw_passwd;	/* encrypted password */
 | |
| 	uid_t	pw_uid;		/* user uid */
 | |
| 	gid_t	pw_gid;		/* user gid */
 | |
| 	time_t	pw_change;	/* password change time */
 | |
| 	char	*pw_class;	/* user login class */
 | |
| 	char	*pw_gecos;	/* general information */
 | |
| 	char	*pw_dir;	/* home directory */
 | |
| 	char	*pw_shell;	/* default shell */
 | |
| 	time_t	pw_expire;	/* account expiration */
 | |
| };
 | |
| .Ed
 | |
| .Pp
 | |
| The functions
 | |
| .Fn getpwnam
 | |
| and
 | |
| .Fn getpwuid
 | |
| search the password database for the given user name pointed to by
 | |
| .Ar name
 | |
| or user id pointed to by
 | |
| .Ar uid
 | |
| respectively, always returning the first one encountered.
 | |
| Identical user names or user ids may result in undefined behavior.
 | |
| .Pp
 | |
| The
 | |
| .Fn getpwent
 | |
| function
 | |
| sequentially reads the password database and is intended for programs
 | |
| that wish to process the complete list of users.
 | |
| .Pp
 | |
| The functions
 | |
| .Fn getpwnam_r ,
 | |
| .Fn getpwuid_r ,
 | |
| and
 | |
| .Fn getpwent_r
 | |
| act like their non re-entrant counterparts, updating the contents of
 | |
| .Ar pw
 | |
| and storing a pointer to that in
 | |
| .Ar result ,
 | |
| and returning
 | |
| .Dv 0 .
 | |
| Storage used by
 | |
| .Ar pw
 | |
| is allocated from
 | |
| .Ar buffer ,
 | |
| which is
 | |
| .Ar buflen
 | |
| bytes in size.
 | |
| If the requested entry cannot be found,
 | |
| .Ar result
 | |
| will point to
 | |
| .Dv NULL
 | |
| and
 | |
| .Dv 0
 | |
| will be returned.
 | |
| If an error occurs,
 | |
| a non-zero error number will be returned and
 | |
| .Ar result
 | |
| will point to
 | |
| .Dv NULL .
 | |
| Calling
 | |
| .Fn getpwent_r
 | |
| from multiple threads will result in each thread reading a disjoint portion
 | |
| of the password database.
 | |
| .Pp
 | |
| The
 | |
| .Fn setpassent
 | |
| function
 | |
| accomplishes two purposes.
 | |
| First, it causes
 | |
| .Fn getpwent
 | |
| to
 | |
| .Dq rewind
 | |
| to the beginning of the database.
 | |
| Additionally, if
 | |
| .Fa stayopen
 | |
| is non-zero, file descriptors are left open, significantly speeding
 | |
| up subsequent accesses for all of the functions.
 | |
| (This latter functionality is unnecessary for
 | |
| .Fn getpwent
 | |
| as it doesn't close its file descriptors by default.)
 | |
| .Pp
 | |
| It is dangerous for long-running programs to keep the file descriptors
 | |
| open as the database will become out of date if it is updated while the
 | |
| program is running.
 | |
| .Pp
 | |
| The
 | |
| .Fn setpwent
 | |
| function
 | |
| is equivalent to
 | |
| .Fn setpassent
 | |
| with an argument of zero.
 | |
| .Pp
 | |
| The
 | |
| .Fn endpwent
 | |
| function
 | |
| closes any open files.
 | |
| .Pp
 | |
| These functions have been written to
 | |
| .Dq shadow
 | |
| the password file, e.g. allow only certain programs to have access
 | |
| to the encrypted password.
 | |
| If the process which calls them has an effective uid of 0, the encrypted
 | |
| password will be returned, otherwise, the password field of the returned
 | |
| structure will point to the string
 | |
| .Ql * .
 | |
| .Sh RETURN VALUES
 | |
| The functions
 | |
| .Fn getpwent ,
 | |
| .Fn getpwnam ,
 | |
| and
 | |
| .Fn getpwuid ,
 | |
| return a valid pointer to a passwd structure on success
 | |
| and a
 | |
| .Dv NULL
 | |
| pointer if the entry was not found or an error occured.
 | |
| If an error occured, the global variable
 | |
| .Dv errno
 | |
| is set to indicate the nature of the failure.
 | |
| The
 | |
| .Fn setpassent
 | |
| function returns 0 on failure, setting the global variable
 | |
| .Dv errno
 | |
| to indicate the nature of the failure, and 1 on success.
 | |
| The
 | |
| .Fn endpwent
 | |
| and
 | |
| .Fn setpwent
 | |
| functions
 | |
| have no return value.
 | |
| The functions
 | |
| .Fn getpwnam_r ,
 | |
| .Fn getpwuid_r ,
 | |
| and
 | |
| .Fn getpwent_r
 | |
| return
 | |
| .Dv 0
 | |
| on success or entry not found, and non-zero on failure, setting the global
 | |
| variable
 | |
| .Dv errno
 | |
| to indicate the nature of the failure.
 | |
| .Sh FILES
 | |
| .Bl -tag -width /etc/master.passwd -compact
 | |
| .It Pa /etc/pwd.db
 | |
| The insecure password database file
 | |
| .It Pa /etc/spwd.db
 | |
| The secure password database file
 | |
| .It Pa /etc/master.passwd
 | |
| The current password file
 | |
| .It Pa /etc/passwd
 | |
| A Version 7 format password file
 | |
| .El
 | |
| .Sh COMPATIBILITY
 | |
| The historic function
 | |
| .Fn setpwfile
 | |
| which allowed the specification of alternative password databases,
 | |
| has been deprecated and is no longer available.
 | |
| .Sh ERRORS
 | |
| The following error codes may be set in
 | |
| .Va errno
 | |
| for
 | |
| .Nm getpwent ,
 | |
| .Nm getpwent_r ,
 | |
| .Nm getpwnam ,
 | |
| .Nm getpwnam_r ,
 | |
| .Nm getpwuid ,
 | |
| .Nm getpwuid_r ,
 | |
| and
 | |
| .Nm setpassent :
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EINTR
 | |
| A signal was caught during the database search.
 | |
| .It Bq Er EIO
 | |
| An I/O error has occurred.
 | |
| .It Bq Er EMFILE
 | |
| The limit on open files for this process has been reached.
 | |
| .It Bq Er ENFILE
 | |
| The system limit on open files has been reached.
 | |
| .El
 | |
| .Pp
 | |
| The following error code may be set in
 | |
| .Va errno
 | |
| for
 | |
| .Nm getpwent_r ,
 | |
| .Nm getpwnam_r ,
 | |
| and
 | |
| .Nm getpwuid_r :
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er ERANGE
 | |
| The resulting
 | |
| .Ft struct passwd
 | |
| does not fit in the space defined by
 | |
| .Dv buffer
 | |
| and
 | |
| .Dv buflen
 | |
| .El
 | |
| .Pp
 | |
| Other
 | |
| .Dv errno
 | |
| values may be set depending on the specific database backends.
 | |
| .Sh SEE ALSO
 | |
| .Xr getlogin 2 ,
 | |
| .Xr getgrent 3 ,
 | |
| .Xr nsswitch.conf 5 ,
 | |
| .Xr passwd 5 ,
 | |
| .Xr passwd.conf 5 ,
 | |
| .Xr pwd_mkdb 8 ,
 | |
| .Xr vipw 8
 | |
| .Sh STANDARDS
 | |
| The
 | |
| .Fn getpwnam
 | |
| and
 | |
| .Fn getpwuid ,
 | |
| functions conform to
 | |
| .St -p1003.1-90 .
 | |
| The
 | |
| .Fn getpwnam_r
 | |
| and
 | |
| .Fn getpwuid_r
 | |
| functions conform to
 | |
| .St -p1003.1c-95 .
 | |
| The
 | |
| .Fn endpwent ,
 | |
| .Fn getpwent ,
 | |
| and
 | |
| .Fn setpwent
 | |
| functions conform to
 | |
| .St -xpg4.2
 | |
| and
 | |
| .St -p1003.1-2004
 | |
| (XSI extension).
 | |
| .Sh HISTORY
 | |
| The
 | |
| .Nm getpwent ,
 | |
| .Nm getpwnam ,
 | |
| .Nm getpwuid ,
 | |
| .Nm setpwent ,
 | |
| and
 | |
| .Nm endpwent
 | |
| functions appeared in
 | |
| .At v7 .
 | |
| The
 | |
| .Nm setpassent
 | |
| function appeared in
 | |
| .Bx 4.3 Reno .
 | |
| The functions
 | |
| .Fn getpwnam_r
 | |
| and
 | |
| .Fn getpwuid_r
 | |
| appeared in
 | |
| .Nx 3.0 .
 | |
| .Sh BUGS
 | |
| The functions
 | |
| .Fn getpwent ,
 | |
| .Fn getpwnam ,
 | |
| and
 | |
| .Fn getpwuid ,
 | |
| leave their results in an internal static object and return
 | |
| a pointer to that object.
 | |
| Subsequent calls to any of these functions will modify the same object.
 | |
| .Pp
 | |
| The functions
 | |
| .Fn getpwent ,
 | |
| .Fn endpwent ,
 | |
| .Fn setpassent ,
 | |
| and
 | |
| .Fn setpwent
 | |
| are fairly useless in a networked environment and should be
 | |
| avoided, if possible.
 | |
| .Fn getpwent
 | |
| makes no attempt to suppress duplicate information if multiple
 | |
| sources are specified in
 | |
| .Xr nsswitch.conf 5 .
 |