 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
		
			
				
	
	
		
			345 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			345 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: getgrent.3,v 1.31 2011/04/28 16:34:01 wiz Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1989, 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.
 | |
| .\"
 | |
| .\"     @(#)getgrent.3	8.2 (Berkeley) 4/19/94
 | |
| .\"
 | |
| .Dd April 30, 2008
 | |
| .Dt GETGRENT 3
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm getgrent ,
 | |
| .Nm getgrent_r ,
 | |
| .Nm getgrgid ,
 | |
| .Nm getgrgid_r ,
 | |
| .Nm getgrnam ,
 | |
| .Nm getgrnam_r ,
 | |
| .Nm setgroupent ,
 | |
| .\" .Nm setgrfile ,
 | |
| .Nm setgrent ,
 | |
| .Nm endgrent
 | |
| .Nd group database operations
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In grp.h
 | |
| .Ft struct group *
 | |
| .Fn getgrent void
 | |
| .Ft int
 | |
| .Fo getgrent_r
 | |
| .Fa "struct group *grp"
 | |
| .Fa "char *buffer"
 | |
| .Fa "size_t buflen"
 | |
| .Fa "struct group **result"
 | |
| .Fc
 | |
| .Ft struct group *
 | |
| .Fn getgrgid "gid_t gid"
 | |
| .Ft int
 | |
| .Fo getgrgid_r
 | |
| .Fa "gid_t gid"
 | |
| .Fa "struct group *grp"
 | |
| .Fa "char *buffer"
 | |
| .Fa "size_t buflen"
 | |
| .Fa "struct group **result"
 | |
| .Fc
 | |
| .Ft struct group *
 | |
| .Fn getgrnam "const char *name"
 | |
| .Ft int
 | |
| .Fo getgrnam_r
 | |
| .Fa "const char *name"
 | |
| .Fa "struct group *grp"
 | |
| .Fa "char *buffer"
 | |
| .Fa "size_t buflen"
 | |
| .Fa "struct group **result"
 | |
| .Fc
 | |
| .Ft int
 | |
| .Fn setgroupent "int stayopen"
 | |
| .\" .Ft void
 | |
| .\" .Fn setgrfile "const char *name"
 | |
| .Ft void
 | |
| .Fn setgrent void
 | |
| .Ft void
 | |
| .Fn endgrent void
 | |
| .Sh DESCRIPTION
 | |
| These functions operate on the group database which is described in
 | |
| .Xr group 5 .
 | |
| Each line of the database is defined by the structure
 | |
| .Ar group
 | |
| found in the include
 | |
| file
 | |
| .In grp.h :
 | |
| .Bd -literal -offset indent
 | |
| struct group {
 | |
| 	char	*gr_name;	/* group name */
 | |
| 	char	*gr_passwd;	/* group password */
 | |
| 	gid_t	gr_gid;		/* group id */
 | |
| 	char	**gr_mem;	/* group members */
 | |
| };
 | |
| .Ed
 | |
| .Pp
 | |
| The functions
 | |
| .Fn getgrnam
 | |
| and
 | |
| .Fn getgrgid
 | |
| search the group database for the given group name pointed to by
 | |
| .Ar name
 | |
| or the group id pointed to by
 | |
| .Ar gid ,
 | |
| respectively, returning the first one encountered.
 | |
| Identical group names or group ids may result in undefined behavior.
 | |
| .Pp
 | |
| The
 | |
| .Fn getgrent
 | |
| function sequentially reads the group database and is intended for programs
 | |
| that wish to step through the complete list of groups.
 | |
| .Pp
 | |
| All three functions will open the group file for reading, if necessary.
 | |
| .Pp
 | |
| The functions
 | |
| .Fn getgrnam_r ,
 | |
| .Fn getgrgid_r ,
 | |
| and
 | |
| .Fn getgrent_r
 | |
| act like their non re-entrant counterparts
 | |
| respectively, updating the contents of
 | |
| .Ar grp
 | |
| and storing a pointer to that in
 | |
| .Ar result ,
 | |
| and returning
 | |
| .Dv 0 .
 | |
| Storage used by
 | |
| .Ar grp
 | |
| 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 getgrent_r
 | |
| from multiple threads will result in each thread reading a disjoint portion
 | |
| of the group database.
 | |
| .Pp
 | |
| The
 | |
| .Fn setgroupent
 | |
| function opens the file, or rewinds it if it is already open.
 | |
| If
 | |
| .Fa stayopen
 | |
| is non-zero, file descriptors are left open, significantly speeding
 | |
| functions subsequent calls.
 | |
| This functionality is unnecessary for
 | |
| .Fn getgrent
 | |
| as it doesn't close its file descriptors by default.
 | |
| It should also be noted that it is dangerous for long-running
 | |
| programs to use this functionality as the group file may be updated.
 | |
| .Pp
 | |
| The
 | |
| .Fn setgrent
 | |
| function is equivalent to
 | |
| .Fn setgroupent
 | |
| with an argument of zero.
 | |
| .Pp
 | |
| The
 | |
| .Fn endgrent
 | |
| function closes any open files.
 | |
| .Sh RETURN VALUES
 | |
| The functions
 | |
| .Fn getgrgid ,
 | |
| .Fn getgrnam ,
 | |
| and
 | |
| .Fn getgrent
 | |
| return a valid pointer to a group 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.
 | |
| .Pp
 | |
| The functions
 | |
| .Fn getgrgid_r ,
 | |
| .Fn getgrnam_r ,
 | |
| and
 | |
| .Fn getgrent_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.
 | |
| .Pp
 | |
| The
 | |
| .Fn setgroupent
 | |
| function returns the value 1 if successful, otherwise the value
 | |
| 0 is returned, setting the global variable
 | |
| .Dv errno
 | |
| to indicate the nature of the failure.
 | |
| .Pp
 | |
| The
 | |
| .Fn endgrent
 | |
| and
 | |
| .Fn setgrent
 | |
| functions have no return value.
 | |
| .Sh FILES
 | |
| .Bl -tag -width /etc/group -compact
 | |
| .It Pa /etc/group
 | |
| group database file
 | |
| .El
 | |
| .Sh COMPATIBILITY
 | |
| The historic function
 | |
| .Fn setgrfile ,
 | |
| which allowed the specification of alternative group databases, has
 | |
| been deprecated and is no longer available.
 | |
| .Sh ERRORS
 | |
| The following error codes may be set in
 | |
| .Va errno
 | |
| for
 | |
| .Nm getgrent ,
 | |
| .Nm getgrent_r ,
 | |
| .Nm getgrnam ,
 | |
| .Nm getgrnam_r ,
 | |
| .Nm getgrgid ,
 | |
| .Nm getgrgid_r ,
 | |
| and
 | |
| .Nm setgroupent :
 | |
| .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 getgrent_r ,
 | |
| .Nm getgrnam_r ,
 | |
| and
 | |
| .Nm getgrgid_r :
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er ERANGE
 | |
| The resulting
 | |
| .Ft struct group
 | |
| 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 getpwent 3 ,
 | |
| .Xr group 5 ,
 | |
| .Xr nsswitch.conf 5
 | |
| .Sh STANDARDS
 | |
| The
 | |
| .Fn getgrgid
 | |
| and
 | |
| .Fn getgrnam
 | |
| functions conform to
 | |
| .St -p1003.1-90 .
 | |
| The
 | |
| .Fn getgrgid_r
 | |
| and
 | |
| .Fn getgrnam_r
 | |
| functions conform to
 | |
| .St -p1003.1c-95 .
 | |
| The
 | |
| .Fn endgrent ,
 | |
| .Fn getgrent ,
 | |
| and
 | |
| .Fn setgrent
 | |
| functions conform to
 | |
| .St -xpg4.2
 | |
| and
 | |
| .St -p1003.1-2004
 | |
| (XSI extension).
 | |
| .Sh HISTORY
 | |
| The functions
 | |
| .Fn endgrent ,
 | |
| .Fn getgrent ,
 | |
| .Fn getgrgid ,
 | |
| .Fn getgrnam ,
 | |
| and
 | |
| .Fn setgrent
 | |
| appeared in
 | |
| .At v7 .
 | |
| The functions
 | |
| .Fn setgrfile
 | |
| and
 | |
| .Fn setgroupent
 | |
| appeared in
 | |
| .Bx 4.3 Reno .
 | |
| The functions
 | |
| .Fn getgrgid_r
 | |
| and
 | |
| .Fn getgrnam_r
 | |
| appeared in
 | |
| .Nx 3.0 .
 | |
| .Sh BUGS
 | |
| The functions
 | |
| .Fn getgrent ,
 | |
| .Fn getgrgid ,
 | |
| .Fn getgrnam ,
 | |
| .Fn setgroupent
 | |
| and
 | |
| .Fn setgrent
 | |
| leave their results in an internal static object and return
 | |
| a pointer to that object.
 | |
| Subsequent calls to the same function will modify the same object.
 | |
| .Pp
 | |
| The functions
 | |
| .Fn getgrent ,
 | |
| .Fn endgrent ,
 | |
| .Fn setgroupent ,
 | |
| and
 | |
| .Fn setgrent
 | |
| are fairly useless in a networked environment and should be
 | |
| avoided, if possible.
 | |
| .Fn getgrent
 | |
| makes no attempt to suppress duplicate information if multiple
 | |
| sources are specified in
 | |
| .Xr nsswitch.conf 5
 |