getgrent(3)
NAME
- getgrent, getgrent_r, getgrnam, getgrnam_r, getgrgid,
- getgrgid_r,
setgroupent, setgrent, endgrent - group database operations
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <grp.h> struct group * getgrent(void); int getgrent_r(struct group *grp, char *buffer, size_t bufsize, struct group **result); struct group * getgrnam(const char *name); int getgrnam_r(const char *name, struct group *grp, char *buffer, size_t bufsize, struct group **result); struct group * getgrgid(gid_t gid); int getgrgid_r(gid_t gid, struct group *grp, char *buffer, size_t bufsize, struct group **result); int setgroupent(int stayopen); int setgrent(void); void endgrent(void);
DESCRIPTION
- These functions operate on the group database file
- /etc/group which is
described in group(5). Each line of the database is defined - by the
structure group found in the include file
struct group {char *gr_name; /* group name */
char *gr_passwd; /* group password */
gid_t gr_gid; /* group id */
char **gr_mem; /* group members */- };
- The functions getgrnam() and getgrgid() search the group
- database for the
given group name pointed to by name or the group id pointed - to by gid,
respectively, returning the first one encountered. Identi - cal group names
or group gids may result in undefined behavior. - The getgrent() function sequentially reads the group
- database and is
intended for programs that wish to step through the complete - list of
groups. - The functions getgrent_r(), getgrnam_r(), and getgrgid_r()
- are threadsafe versions of getgrent(), getgrnam(), and getgrgid(), re
- spectively.
The caller must provide storage for the results of the - search in the grp,
buffer, bufsize, and result arguments. When these functions - are successful, the grp argument will be filled-in, and a pointer to
- that argument
will be stored in result. If an entry is not found or an - error occurs,
result will be set to NULL. - These functions will open the group file for reading, if
- necessary.
- The setgroupent() function opens the file, or rewinds it if
- it is already
open. If stayopen is non-zero, file descriptors are left - open, significantly speeding functions subsequent calls. This function
- ality is unnecessary for getgrent() as it does not close its file descrip
- tors 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.
- The setgrent() function is identical to setgroupent() with
- an argument of
zero. - The endgrent() function closes any open files.
RETURN VALUES
- The functions getgrent(), getgrnam(), and getgrgid(), return
- a pointer to
a group structure on success or NULL if the entry is not - found or if an
error occurs. If an error does occur, errno will be set. - Note that programs must explicitly set errno to zero before calling any
- of these functions if they need to distinguish between a non-existent en
- try and an
error. The functions getgrent_r(), getgrnam_r(), and - getgrgid_r() return
0 if no error occurred, or an error number to indicate fail - ure. It is
not an error if a matching entry is not found. (Thus, if - result is set
to NULL and the return value is 0, no matching entry ex - ists.)
- The functions setgroupent() and setgrent() return the value
- 1 if successful, otherwise the value 0 is returned. The functions
- endgrent() and
setgrfile() have no return value.
FILES
/etc/group group database file
COMPATIBILITY
- The historic function setgrfile(), which allowed the speci
- fication of
alternate password databases, has been deprecated and is no - longer available.
SEE ALSO
getpwent(3), group(5), nsswitch.conf(5), yp(8)
STANDARDS
- The getgrent(), getgrnam(), getgrnam_r(), getgrgid(),
- getgrgid_r() and
endgrent() functions conform to ISO/IEC 9945-1:1996 - (``POSIX.1''). The
setgrent() function differs from that standard in that its - return type is
int rather than void.
HISTORY
- The functions endgrent(), getgrent(), getgrnam(),
- getgrgid(), and
setgrent() appeared in Version 7 AT&T UNIX. The functions - setgrfile()
and setgroupent() appeared in 4.3BSD-Reno. The functions - getgrent_r(),
getgrnam_r(), and getgrgid_r() appeared in FreeBSD 5.1.
BUGS
- The functions getgrent(), getgrnam(), getgrgid(),
- setgroupent() and
setgrent() leave their results in an internal static object - and return a
pointer to that object. Subsequent calls to the same func - tion will modify the same object.
- The functions getgrent(), getgrent_r(), endgrent(),
- setgroupent(), and
setgrent() are fairly useless in a networked environment and - should be
avoided, if possible. The getgrent() and getgrent_r() func - tions make no
attempt to suppress duplicate information if multiple - sources are specified in nsswitch.conf(5).
- BSD April 16, 2003