getgrentgetgrent_rgetgrnamgetgrnam_rgetgrgidgetgrgid_rsetgroupentsetgrentendgrent
- group database operations
LIBRARY
Lb libc
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
Vt group
found in the include
file
In grp.h :
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
Fa name
or the group id pointed to by
Fa gid ,
respectively, returning the first one encountered.
Identical 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 thread-safe versions of
getgrent (,);
getgrnam (,);
and
getgrgid (,);
respectively.
The caller must provide storage for the results of the search in
the
Fa grp ,
Fa buffer ,
Fa bufsize ,
and
Fa result
arguments.
When these functions are successful, the
Fa grp
argument will be filled-in, and a pointer to that argument will be
stored in
Fa result .
If an entry is not found or an error occurs,
Fa 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
Fa stayopen
is non-zero, file descriptors are left open, significantly speeding
functions subsequent calls.
This functionality is unnecessary for
getgrent ();
as it does not 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.
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 entry and an error.
The functions
getgrent_r (,);
getgrnam_r (,);
and
getgrgid_r ();
return 0 if no error occurred, or an error number to indicate failure.
It is not an error if a matching entry is not found.
(Thus, if
Fa result
is set to
NULL
and the return value is 0, no matching entry exists.)
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 specification of alternate password databases, has
been deprecated and is no longer available.
The
getgrent (,);
getgrnam (,);
getgrnam_r (,);
getgrgid (,);
getgrgid_r ();
and
endgrent ();
functions conform to
St -p1003.1-96 .
The
setgrent ();
function differs from that standard in that its return type is
Vt int
rather than
Vt void .
HISTORY
The functions
endgrent (,);
getgrent (,);
getgrnam (,);
getgrgid (,);
and
setgrent ();
appeared in
AT&T System
v7 .
The functions
setgrfile ();
and
setgroupent ();
appeared in
BSD 4.3 Reno
The functions
getgrent_r (,);
getgrnam_r (,);
and
getgrgid_r ();
appeared in
Fx 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 function
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 ();
functions
make no attempt to suppress duplicate information if multiple
sources are specified in
nsswitch.conf5.