blob: 4180d7f9b4ede3fd3d32368e78d507b04026a461 [file] [log] [blame]
<html lang="en">
<head>
<title>Lookup Netgroup - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Netgroup-Database.html#Netgroup-Database" title="Netgroup Database">
<link rel="prev" href="Netgroup-Data.html#Netgroup-Data" title="Netgroup Data">
<link rel="next" href="Netgroup-Membership.html#Netgroup-Membership" title="Netgroup Membership">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.
This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A
copy of the license is included in the section entitled "GNU Free
Documentation License".
(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual. Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Lookup-Netgroup"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Netgroup-Membership.html#Netgroup-Membership">Netgroup Membership</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Netgroup-Data.html#Netgroup-Data">Netgroup Data</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Netgroup-Database.html#Netgroup-Database">Netgroup Database</a>
<hr>
</div>
<h4 class="subsection">29.16.2 Looking up one Netgroup</h4>
<p>The lookup functions for netgroups are a bit different to all other
system database handling functions. Since a single netgroup can contain
many entries a two-step process is needed. First a single netgroup is
selected and then one can iterate over all entries in this netgroup.
These functions are declared in <samp><span class="file">netdb.h</span></samp>.
<!-- netdb.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: int <b>setnetgrent</b> (<var>const char *netgroup</var>)<var><a name="index-setnetgrent-3425"></a></var><br>
<blockquote><p>A call to this function initializes the internal state of the library to
allow following calls of the <code>getnetgrent</code> to iterate over all entries
in the netgroup with name <var>netgroup</var>.
<p>When the call is successful (i.e., when a netgroup with this name exists)
the return value is <code>1</code>. When the return value is <code>0</code> no
netgroup of this name is known or some other error occurred.
</p></blockquote></div>
<p>It is important to remember that there is only one single state for
iterating the netgroups. Even if the programmer uses the
<code>getnetgrent_r</code> function the result is not really reentrant since
always only one single netgroup at a time can be processed. If the
program needs to process more than one netgroup simultaneously she
must protect this by using external locking. This problem was
introduced in the original netgroups implementation in SunOS and since
we must stay compatible it is not possible to change this.
<p>Some other functions also use the netgroups state. Currently these are
the <code>innetgr</code> function and parts of the implementation of the
<code>compat</code> service part of the NSS implementation.
<!-- netdb.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: int <b>getnetgrent</b> (<var>char **hostp, char **userp, char **domainp</var>)<var><a name="index-getnetgrent-3426"></a></var><br>
<blockquote><p>This function returns the next unprocessed entry of the currently
selected netgroup. The string pointers, in which addresses are passed in
the arguments <var>hostp</var>, <var>userp</var>, and <var>domainp</var>, will contain
after a successful call pointers to appropriate strings. If the string
in the next entry is empty the pointer has the value <code>NULL</code>.
The returned string pointers are only valid if none of the netgroup
related functions are called.
<p>The return value is <code>1</code> if the next entry was successfully read. A
value of <code>0</code> means no further entries exist or internal errors occurred.
</p></blockquote></div>
<!-- netdb.h -->
<!-- GNU -->
<div class="defun">
&mdash; Function: int <b>getnetgrent_r</b> (<var>char **hostp, char **userp, char **domainp, char *buffer, int buflen</var>)<var><a name="index-getnetgrent_005fr-3427"></a></var><br>
<blockquote><p>This function is similar to <code>getnetgrent</code> with only one exception:
the strings the three string pointers <var>hostp</var>, <var>userp</var>, and
<var>domainp</var> point to, are placed in the buffer of <var>buflen</var> bytes
starting at <var>buffer</var>. This means the returned values are valid
even after other netgroup related functions are called.
<p>The return value is <code>1</code> if the next entry was successfully read and
the buffer contains enough room to place the strings in it. <code>0</code> is
returned in case no more entries are found, the buffer is too small, or
internal errors occurred.
<p>This function is a GNU extension. The original implementation in the
SunOS libc does not provide this function.
</p></blockquote></div>
<!-- netdb.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: void <b>endnetgrent</b> (<var>void</var>)<var><a name="index-endnetgrent-3428"></a></var><br>
<blockquote><p>This function frees all buffers which were allocated to process the last
selected netgroup. As a result all string pointers returned by calls
to <code>getnetgrent</code> are invalid afterwards.
</p></blockquote></div>
</body></html>