137 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.TH GETGRENT 3
 | 
						|
.SH NAME
 | 
						|
getgrent, getgrnam, getgrgid, setgrent, endgrent, setgrfile \- group file routines
 | 
						|
.SH SYNOPSIS
 | 
						|
.ft B
 | 
						|
.nf
 | 
						|
#include <grp.h>
 | 
						|
 | 
						|
struct group *getgrent(void)
 | 
						|
struct group *getgrnam(const char *\fIname\fP)
 | 
						|
struct group *getgrgid(gid_t \fIgid\fP)
 | 
						|
int setgrent(void)
 | 
						|
void endgrent(void)
 | 
						|
void setgrfile(const char *\fIfile\fP)
 | 
						|
.fi
 | 
						|
.ft P
 | 
						|
.SH DESCRIPTION
 | 
						|
These functions are used to obtain information from the group file.  They
 | 
						|
return this information in a
 | 
						|
.B struct group
 | 
						|
as defined by <grp.h>:
 | 
						|
.PP
 | 
						|
.nf
 | 
						|
.ta +4n +6n +15n
 | 
						|
struct group {
 | 
						|
	char	*gr_name;	/* login name */
 | 
						|
	char	*gr_passwd;	/* encrypted password */
 | 
						|
	gid_t	gr_gid;	/* numeric group id */
 | 
						|
	char	**gr_mem;	/* null-terminated list of group members */
 | 
						|
};
 | 
						|
.fi
 | 
						|
.PP
 | 
						|
.B Getgrent()
 | 
						|
reads the group file entry by entry.
 | 
						|
.B Getgrnam()
 | 
						|
scans the entire group file for the group with the given
 | 
						|
.IR name .
 | 
						|
.B Getgrgid()
 | 
						|
looks for the first group with the given
 | 
						|
.IR gid .
 | 
						|
The
 | 
						|
.B setgrent()
 | 
						|
and
 | 
						|
.B endgrent()
 | 
						|
functions are used to open and later close the group file.  With
 | 
						|
.B setgrfile()
 | 
						|
one can specify the file to read other than the normal group file.  This
 | 
						|
only sets the name, the next
 | 
						|
.B setgrent()
 | 
						|
call will open the file.  Do not touch the file name while it is active.
 | 
						|
Use
 | 
						|
.B setgrfile(NULL)
 | 
						|
to revert back to the normal group file.
 | 
						|
.PP
 | 
						|
The usual way to scan the group file is (error checking omitted):
 | 
						|
.PP
 | 
						|
.RS
 | 
						|
.nf
 | 
						|
.DT
 | 
						|
setgrent();
 | 
						|
while ((gr = getgrent()) != NULL)
 | 
						|
	if (appropriate_test(gr)) break;
 | 
						|
endgrent();
 | 
						|
.fi
 | 
						|
.RE
 | 
						|
.PP
 | 
						|
The
 | 
						|
.B gr
 | 
						|
variable contains the entry that is wanted if non-NULL.  The
 | 
						|
.B getgrnam()
 | 
						|
and
 | 
						|
.B getgrgid()
 | 
						|
functions are implemented as in this example, with error checking of course.
 | 
						|
.PP
 | 
						|
.B Getgrent()
 | 
						|
calls
 | 
						|
.B setgrent()
 | 
						|
if this has not yet been done.
 | 
						|
.B Setgrent()
 | 
						|
first calls
 | 
						|
.B endgrent()
 | 
						|
if the group file is still open.  (Other implementations may simply
 | 
						|
rewind the file.)
 | 
						|
.SH FILES
 | 
						|
.TP 15
 | 
						|
.B /etc/group
 | 
						|
The group file database.
 | 
						|
.SH "SEE ALSO"
 | 
						|
.BR getgroups (2),
 | 
						|
.BR initgroups (3),
 | 
						|
.BR getpwent (3),
 | 
						|
.BR passwd (5).
 | 
						|
.SH DIAGNOSTICS
 | 
						|
.B Setgrent()
 | 
						|
has the same return value and error codes as the
 | 
						|
.BR open (2)
 | 
						|
call it uses to open the group 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 getgrnam()
 | 
						|
and
 | 
						|
.B getgrgid()
 | 
						|
are defined by \s-2POSIX\s+2.  The
 | 
						|
.B _MINIX_SOURCE
 | 
						|
macro must be defined before including <grp.h> to make the other functions
 | 
						|
visible.  The
 | 
						|
.B gr_passwd
 | 
						|
field is also not defined by \s-2POSIX\s+2, but is always visible.
 | 
						|
Portable code cannot reliably detect errors by setting
 | 
						|
.B errno
 | 
						|
to zero.  Under MINIX 3 it is better to make a
 | 
						|
.B getgrent()
 | 
						|
scan if you need to look up several group-id's or names, but portable code
 | 
						|
had better use several
 | 
						|
.B getgrgid()
 | 
						|
or
 | 
						|
.B getgrnam()
 | 
						|
calls.  The
 | 
						|
.B getgrent()
 | 
						|
is usually available on other systems, but may be very expensive.  See
 | 
						|
.BR initgroups (3)
 | 
						|
if you are after supplementary group id's.
 | 
						|
.SH AUTHOR
 | 
						|
Kees J. Bot (kjb@cs.vu.nl)
 | 
						|
 | 
						|
.\"
 | 
						|
.\" $PchId: getgrent.3,v 1.2 1996/04/11 06:35:01 philip Exp $
 |