\section{\module{nis} ---
         Interface to Sun's NIS (Yellow Pages)}

\declaremodule{extension}{nis}
  \platform{UNIX}
\moduleauthor{Fred Gansevles}{Fred.Gansevles@cs.utwente.nl}
\sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il}
\modulesynopsis{Interface to Sun's NIS (Yellow Pages) library.}

The \module{nis} module gives a thin wrapper around the NIS library, useful
for central administration of several hosts.

Because NIS exists only on \UNIX{} systems, this module is
only available for \UNIX.

The \module{nis} module defines the following functions:

\begin{funcdesc}{match}{key, mapname[, domain=default_domain]}
Return the match for \var{key} in map \var{mapname}, or raise an
error (\exception{nis.error}) if there is none.
Both should be strings, \var{key} is 8-bit clean.
Return value is an arbitrary array of bytes (may contain \code{NULL}
and other joys).

Note that \var{mapname} is first checked if it is an alias to another
name.

\versionchanged[The \var{domain} argument allows to override
the NIS domain used for the lookup. If unspecified, lookup is in the
default NIS domain]{2.5}
\end{funcdesc}

\begin{funcdesc}{cat}{mapname[, domain=default_domain]}
Return a dictionary mapping \var{key} to \var{value} such that
\code{match(\var{key}, \var{mapname})==\var{value}}.
Note that both keys and values of the dictionary are arbitrary
arrays of bytes.

Note that \var{mapname} is first checked if it is an alias to another
name.

\versionchanged[The \var{domain} argument allows to override
the NIS domain used for the lookup. If unspecified, lookup is in the
default NIS domain]{2.5}
\end{funcdesc}

 \begin{funcdesc}{maps}{[domain=default_domain]}
Return a list of all valid maps.

\versionchanged[The \var{domain} argument allows to override
the NIS domain used for the lookup. If unspecified, lookup is in the
default NIS domain]{2.5}
\end{funcdesc}

 \begin{funcdesc}{get_default_domain}{}
Return the system default NIS domain. \versionadded{2.5}
\end{funcdesc}

The \module{nis} module defines the following exception:

\begin{excdesc}{error}
An error raised when a NIS function returns an error code.
\end{excdesc}
