#### 29.16.3 Testing for Netgroup Membership

It is often not necessary to scan the whole netgroup since often the only interesting question is whether a given entry is part of the selected netgroup.

— Function: int innetgr (const char *netgroup, const char *host, const char *user, const char *domain)

> Preliminary: | MT-Unsafe race:netgrent locale | AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem | See POSIX Safety Concepts.

> This function tests whether the triple specified by the parameters hostp, userp, and domainp is part of the netgroup netgroup. Using this function has the advantage that

> 1. no other netgroup function can use the global netgroup state since internal locking is used and
> 2. the function is implemented more efficiently than successive calls to the other `set`/`get`/`endnetgrent` functions.

> Any of the pointers hostp, userp, and domainp can be `NULL` which means any value is accepted in this position. This is also true for the name `-` which should not match any other string otherwise.

> The return value is `1` if an entry matching the given triple is found in the netgroup. The return value is `0` if the netgroup itself is not found, the netgroup does not contain the triple or internal errors occurred.