GETNETGRENT(3C)         Standard C Library Functions         GETNETGRENT(3C)
NAME
       getnetgrent, getnetgrent_r, setnetgrent, endnetgrent, innetgr - get
       network group entry
SYNOPSIS
       #include <netdb.h>       
int getnetgrent(
char **machinep, 
char **userp, 
char **domainp);       
int getnetgrent_r(
char **machinep, 
char **userp, 
char **domainp,            
char *buffer, 
intbuflen);       
int setnetgrent(
const char *netgroup);       
int endnetgrent(
void);       
int innetgr(
const char *netgroup, 
const char *machine,            
const char *user, 
const char *domain);
DESCRIPTION
       These functions are used to test membership in and enumerate members
       of ``netgroup'' network groups defined in a system database.
       Netgroups are sets of (machine,user,domain) triples (see       
netgroup(5)).
       These functions consult the source specified for 
netgroup in the       
/etc/nsswitch.conf file (see 
nsswitch.conf(5)).
       The function 
innetgr() returns  
1 if there is a netgroup 
netgroup       that contains the specified 
machine, user, domain triple as a member;
       otherwise it returns  
0. Any of the supplied pointers 
machine, 
user,
       and 
domain may be 
NULL, signifying a "wild card" that matches all
       values in that position of the triple.
       The 
innetgr() function is safe for use in single-threaded and
       multithreaded applications.
       The functions 
setnetgrent(), 
getnetgrent(), and 
endnetgrent() are
       used to enumerate the members of a given network group.
       The function 
setnetgrent() establishes the network group specified in
       the parameter 
netgroup as the current group whose members are to be
       enumerated.
       Successive calls to the function 
getnetgrent() will enumerate the
       members of the group established by calling 
setnetgrent(); each call
       returns 
1 if it succeeds in obtaining another member of the network
       group, or 
0 if there are no further members of the group.
       When calling either 
getnetgrent() or 
getnetgrent_r(), addresses of
       the three character pointers are used as arguments, for example:
         char 
*mp, 
*up, 
*dp;
         getnetgrent(
&mp, 
&up, 
&dp);
       Upon successful return from  
getnetgrent(), the pointer 
mp points to
       a string containing the name of the machine part of the member
       triple, 
up points to a string containing the user name and 
dp points
       to a string containing the domain name. If the pointer returned for       
mp, 
up, or 
dp is 
NULL, it signifies that the element of the netgroup
       contains wild card specifier in that position of the triple.
       The pointers returned by 
getnetgrent() point into a buffer allocated
       by 
setnetgrent() that is reused by each call. This space is released
       when an 
endnetgrent() call is made, and should not be released by the
       caller.  This implementation is not safe for use in multi-threaded
       applications.
       The function 
getnetgrent_r() is similar to 
getnetgrent() function,
       but it uses a buffer supplied by the caller for the space needed to
       store the results.   The parameter 
buffer should be a pointer to a
       buffer allocated by the caller and the length of this buffer should
       be specified by the parameter 
buflen. The buffer must be large enough
       to hold the data associated with the triple. The 
getnetgrent_r()       function is safe for use both in single-threaded and multi-threaded
       applications.
       The function 
endnetgrent() frees the space allocated by the previous       
setnetgrent() call.  The equivalent of an 
endnetgrent() implicitly
       performed whenever a  
setnetgrent() call is made to a new network
       group.
       Note that while 
setnetgrent() and 
endnetgrent() are safe for use in
       multi-threaded applications, the effect of each is process-wide.
       Calling 
setnetgrent() resets the enumeration position for all
       threads. If multiple threads interleave calls to 
getnetgrent_r() each
       will enumerate a disjoint subset of the netgroup. Thus the effective
       use of these functions in multi-threaded applications may require
       coordination by the caller.
ERRORS
       The function 
getnetgrent_r() will return  
0 and set 
errno to 
ERANGE       if the length of the buffer supplied by caller is not large enough to
       store the result.  See 
Intro(2) for the proper usage and
       interpretation of 
errno in multi-threaded applications.
       The functions 
setnetgrent() and 
endnetgrent() return 
0 upon success.
FILES
       /etc/nsswitch.confATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +---------------+--------------------------+
       |ATTRIBUTE TYPE |     ATTRIBUTE VALUE      |
       +---------------+--------------------------+
       |MT-Level       | See 
DESCRIPTION section. |
       +---------------+--------------------------+
SEE ALSO
       Intro(2), 
Intro(3), 
netgroup(5), 
nsswitch.conf(5), 
attributes(7)WARNINGS
       The function 
getnetgrent_r() is included in this release on an
       uncommitted basis only, and is subject to change or removal in future
       minor releases.
NOTES
       Network groups are usually stored in network information services,
       such as 
LDAP, or 
NIS, but may alternatively be stored in the local       
/etc/netgroup file.  The 
netgroup line of the 
nsswitch.conf(5) file
       determines which of those sources are used.
       When compiling multi-threaded applications, see  
Intro(3), 
Notes On       Multithread Applications, for information about the use of the       
_REENTRANT flag.
                              February 25, 2017              GETNETGRENT(3C)