# setnetgrent

## NAME



           setnetgrent, endnetgrent, getnetgrent, getnetgrent_r, innetgr -
           handle network group entries
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <netdb.h>**
    
           **int setnetgrent(const char ***_netgroup_**);**
           **void endnetgrent(void);**
    
           **int getnetgrent(char **restrict** _host_**,**
                       **char **restrict** _user_**, char **restrict** _domain_**);**
           **int getnetgrent_r(** size_t size;
                       **char **restrict** _host_**,**
                       **char **restrict** _user_**, char **restrict** _domain_**,**
                       **char** _buf_**[restrict** _size_**], size_t** _size_**);**
    
           **int innetgr(const char ***_netgroup_**, const char ***_host_**,**
                       **const char ***_user_**, const char ***_domain_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **setnetgrent**(), **endnetgrent**(), **getnetgrent**(), **getnetgrent_r**(),
           **innetgr**():
               Since glibc 2.19:
                   _DEFAULT_SOURCE
               glibc 2.19 and earlier:
                   _BSD_SOURCE || _SVID_SOURCE
    


## DESCRIPTION



           The _netgroup_ is a SunOS invention.  A netgroup database is a list
           of string triples (_hostname_ , _username_ , _domainname_) or other
           netgroup names.  Any of the elements in a triple can be empty,
           which means that anything matches.  The functions described here
           allow access to the netgroup databases.  The file
           _/etc/nsswitch.conf_ defines what database is searched.
    
           The **setnetgrent**() call defines the netgroup that will be searched
           by subsequent **getnetgrent**() calls.  The **getnetgrent**() function
           retrieves the next netgroup entry, and returns pointers in _host_ ,
           _user_ , _domain_.  A null pointer means that the corresponding entry
           matches any string.  The pointers are valid only as long as there
           is no call to other netgroup-related functions.  To avoid this
           problem you can use the GNU function **getnetgrent_r**() that stores
           the strings in the supplied buffer.  To free all allocated buffers
           use **endnetgrent**().
    
           In most cases you want to check only if the triplet (_hostname_ ,
           _username_ , _domainname_) is a member of a netgroup.  The function
           **innetgr**() can be used for this without calling the above three
           functions.  Again, a null pointer is a wildcard and matches any
           string.  The function is thread-safe.
    


## RETURN VALUE



           These functions return 1 on success and 0 for failure.
    


## FILES



           _/etc/netgroup_
           _/etc/nsswitch.conf_
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────┬───────────────┬─────────────────────────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────┼───────────────┼─────────────────────────────┤
           │ **setnetgrent**(),   │ Thread safety │ MT-Unsafe race:netgrent     │
           │ **getnetgrent_r**(), │               │ locale                      │
           │ **innetgr**()        │               │                             │
           ├──────────────────┼───────────────┼─────────────────────────────┤
           │ **endnetgrent**()    │ Thread safety │ MT-Unsafe race:netgrent     │
           ├──────────────────┼───────────────┼─────────────────────────────┤
           │ **getnetgrent**()    │ Thread safety │ MT-Unsafe race:netgrent     │
           │                  │               │ race:netgrentbuf locale     │
           └──────────────────┴───────────────┴─────────────────────────────┘
    
           In the above table, _netgrent_ in _race:netgrent_ signifies that if
           any of the functions **setnetgrent**(), **getnetgrent_r**(), **innetgr**(),
           **getnetgrent**(), or **endnetgrent**() are used in parallel in different
           threads of a program, then data races could occur.
    


## VERSIONS



           In the BSD implementation, **setnetgrent**() returns void.
    


## STANDARDS



           None.
    


* * *