<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
                   "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">

<!--
   nss-ldapd.conf.5.xml - docbook manual page for nss-ldapd.conf

   Copyright (C) 1997-2005 Luke Howard
   Copyright (C) 2007, 2008 Arthur de Jong

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with this library; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
   02110-1301 USA
-->

<refentry id="nssldapdconf5">

 <refentryinfo>
  <author>
   <firstname>Arthur</firstname>
   <surname>de Jong</surname>
  </author>
 </refentryinfo>

 <refmeta>
  <refentrytitle>nss-ldapd.conf</refentrytitle>
  <manvolnum>5</manvolnum>
  <refmiscinfo class="version">Version 0.6</refmiscinfo>
  <refmiscinfo class="manual">System Manager's Manual</refmiscinfo>
  <refmiscinfo class="date">Feb 2008</refmiscinfo>
 </refmeta>

 <refnamediv id="name">
  <refname>nss-ldapd.conf</refname>
  <refpurpose>configuration file for LDAP nameservice provider</refpurpose>
 </refnamediv>

 <refsect1 id="description">
  <title>Description</title>
  <para>
   The <emphasis>nss-ldapd</emphasis> module allows <acronym>LDAP</acronym>
   directory servers to be used as a primary source of name service
   information. (Name service information typically includes users, hosts,
   groups, and other such data historically stored in flat files or
   <acronym>NIS</acronym>.)
  </para>
  <para>
    The file <filename>nss-ldapd.conf</filename> contains the
    configuration information for running <command>nslcd</command> (see
    <citerefentry><refentrytitle>nslcd</refentrytitle><manvolnum>8</manvolnum></citerefentry>).
    The file contains options, one on each line, defining the way
    <acronym>NSS</acronym> lookups are mapped onto
    <acronym>LDAP</acronym> lookups.
  </para>
 </refsect1>

 <refsect1 id="options">
  <title>Options</title>

  <refsect2 id='general_connection_options'>
   <title>General connection options</title>
   <variablelist>

    <varlistentry>
     <term><option>uri</option> <emphasis remap="I">URI</emphasis></term>
     <listitem>
      <para>
       Specifies the <acronym>LDAP</acronym> <acronym>URI</acronym> of the
       server to connect to.
       The <acronym>URI</acronym> scheme may be <emphasis>ldap</emphasis>,
       <emphasis>ldapi</emphasis> or <emphasis>ldaps</emphasis>, specifying
       <acronym>LDAP</acronym> over <acronym>TCP</acronym>,
       <acronym>ICP</acronym> or <acronym>SSL</acronym> respectively (if
       supported by the <acronym>LDAP</acronym> library).
       Alternitively, the value <emphasis remap="I">DNS</emphasis> may be
       used to try to lookup the server using <acronym>DNS</acronym>
       <acronym>SRV</acronym> records.
      </para>
      <para>
       When using the ldapi scheme, %2f should be used to escape slashes
       (e.g. ldapi://%2fvar%2frun%2fslapd%2fldapi/), although most of the
       time this should not be needed.
      </para>
      <para>
       This option may be specified multiple times. Normally, only the first
       server will be used with the following servers as fallback (see
       <option>bind_timelimit</option> below).
      </para>
      <para>
       If <acronym>LDAP</acronym> lookups are used for host name resolution,
       any host names should be specified as an IP address or name that can be
       resolved without using <acronym>LDAP</acronym>.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>ldap_version</option> <emphasis remap="I">VERSION</emphasis></term>
     <listitem>
      <para>
       Specifies the version of the <acronym>LDAP</acronym> protocol to use.
       The default is to use the maximum version supported by the
       <acronym>LDAP</acronym> library.</para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>binddn</option> <emphasis remap="I">DN</emphasis></term>
     <listitem>
      <para>
       Specifies the distinguished name with which to bind to the directory
       server for <!-- normal (non-root) -->lookups.
       server for lookups.
       The default is to bind anonymously.
       <!-- Also see the <option>rootbinddn</option> option below. -->
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>bindpw</option> <emphasis remap="I">PASSWORD</emphasis></term>
     <listitem>
      <para>
       Specifies the cleartext credentials with which to bind.
       This option is only applicable when used with <option>binddn</option> above.
      </para>
      <para>
       When binding to the directory using <acronym>SASL</acronym> or other
       authentication mechanisms apart from simple binds, this option is not
       used.
      </para>
     </listitem>
    </varlistentry>

<!-- DO NOT DOCUMENT FOR NOW BECAUSE IT'S NOT SUPPORTED
    <varlistentry>
     <term><option>rootbinddn</option> <emphasis remap="I">DN</emphasis></term>
     <listitem>
      <para>
       This option has the same syntax and effect as the
       <option>binddn</option> option above, except it applies when the
       effective user ID of the process requesting the looking is zero.
       If not specified, then the identity specified in <option>binddn</option>
       is used instead.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>rootbindpw</option> <emphasis remap="I">PASSWORD</emphasis></term>
     <listitem>
      <para>
       Specifies the cleartext credentials with which to bind when using the
       <option>rootbinddn</option> option. This option has the same syntax and
       effect as the <option>rootbindpw</option> above.
      </para>
     </listitem>
    </varlistentry>
-->

   </variablelist>
  </refsect2>

<!-- DO NOT DOCUMENT FOR NOW BECAUSE IT'S NOT SUPPORTED
  <refsect2 id='sasl_authentication_options'>
   <title>SASL authentication options</title>
   <variablelist>

     <varlistentry>
     <term><emphasis remap="B">sasl_authid &lt;authid&gt;</emphasis></term>
     <listitem>
   <para>Specifies the authorization identity to be used when performing SASL
   authentication.</para>
     </listitem>
     </varlistentry>

     <varlistentry>
     <term><emphasis remap="B">rootsasl_authid &lt;authid&gt;</emphasis></term>
     <listitem>
   <para>Specifies the authorization identity to be used when performing SASL
   authentication as root (when the effective user ID is zero).</para>
     </listitem>
     </varlistentry>

     <varlistentry>
     <term><emphasis remap="B">sasl_secprops &lt;properties&gt;</emphasis></term>
     <listitem>
   <para>Specifies Cyrus SASL security properties. Allowed values are described
   in the
   <emphasis remap="B">ldap.conf(5)</emphasis>
   manual page.</para>
     </listitem>
     </varlistentry>

     <varlistentry>
     <term><emphasis remap="B"><opional>root</opional>use_sasl &lt;yes|no&gt;</emphasis></term>
     <listitem>
   <para>Specifies whether SASL authentication should be used when the effective
   user ID is zero.</para>
     </listitem>
     </varlistentry>

   </variablelist>
  </refsect2>
-->

  <refsect2 id='kerberos_authentication_options'>
   <title>Kerberos authentication options</title>
   <variablelist>

    <varlistentry>
     <term><option>krb5_ccname</option> <emphasis remap="I">NAME</emphasis></term>
     <listitem>
      <para>
       Set the name for the GSS-API Kerberos credentials cache.
      </para>
     </listitem>
    </varlistentry>

   </variablelist>
  </refsect2>

  <refsect2 id='search_mapping_options'>
   <title>Search/mapping options</title>
   <variablelist>

    <varlistentry>
     <term><option>base</option>
           <optional><emphasis remap="I">MAP</emphasis></optional>
           <emphasis remap="I">DN</emphasis></term>
     <listitem>
      <para>
       Specifies the base distinguished name (<acronym>DN</acronym>)
       to use as search base.
       A global search base may be specified or a MAP-specific one.
       If no MAP-specific search base is defined the global one is used.
      </para>
      <para>
       If, instead of a <acronym>DN</acronym>, the value
       <emphasis remap="I">DOMAIN</emphasis> is specified, the hosts
       <acronym>DNS</acronym> domain is used to construct a basedn.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>scope</option>
           <optional><emphasis remap="I">MAP</emphasis></optional>
           sub<optional>tree</optional>|one<optional>level</optional>|base</term>
     <listitem>
      <para>
       Specifies the search scope (subtree, one level or base object).
       The default scope is subtree; base scope is almost never useful for
       nameservice lookups.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>deref</option> never|searching|finding|always</term>
     <listitem>
      <para>
       Specifies the policy for dereferencing aliases.
       The default policy is to never dereference aliases.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>referrals</option> yes|no</term>
     <listitem>
      <para>
       Specifies whether automatic referral chasing should be enabled.
       The default behaviour is to chase referrals.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>filter</option>
           <emphasis remap="I">MAP</emphasis>
           <emphasis remap="I">FILTER</emphasis></term>
     <listitem>
      <para>
       The <emphasis remap="I">FILTER</emphasis>
       is an <acronym>LDAP</acronym> search filter to use for a
       specific map.
       The default filter is a basic search on the
       objectClass for the map (e.g. <code>(objectClass=posixAccount)</code>).
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>map</option>
           <emphasis remap="I">MAP</emphasis>
           <emphasis remap="I">ATTRIBUTE</emphasis>
           <emphasis remap="I">NEWATTRIBUTE</emphasis></term>
     <listitem>
      <para>
       This option allows for custom attributes to be looked up instead of
       the default RFC 2307 attributes.
       The <emphasis remap="I">MAP</emphasis> may be one of
       the supported maps below.
       The <emphasis remap="I">ATTRIBUTE</emphasis> is the one as
       used in <acronym>RFC</acronym> 2307 (e.g. <code>userPassword</code>,
       <code>ipProtocolNumber</code> or <code>macAddress</code>).
       The <emphasis remap="I">NEWATTRIBUTE</emphasis> may be any attribute
       as it is available in the directory.
<!--
       If the <emphasis remap="I">NEWATTRIBUTE</emphasis> is presented in
       quotes (") the specfied value will be used instead of looking up the
       value in the directory.
       Specifies a value to use for the specified attribute in preference
       to that contained in the actual entry.
-->
      </para>
     </listitem>
    </varlistentry>

<!--
    <varlistentry>
     <term><option>default</option>
           <emphasis remap="I">MAP</emphasis>
           <emphasis remap="I">ATTRIBUTE</emphasis>
           "<emphasis remap="I">VALUE</emphasis>"</term>
     <listitem>
      <para>
       Specifies the default value to use for entries that lack the
       specified attribute.
       Use the specified <emphasis remap="I">VALUE</emphasis> if the
       lookup in the directory for the specified attribute would not return
       any data.
       Note that if the <acronym>LDAP</acronym> server returns an empty string
       for the attribute an empty string is returned.
      </para>
     </listitem>
    </varlistentry>
-->

   </variablelist>
  </refsect2>

  <refsect2 id='timing_reconnect_options'>
   <title>Timing/reconnect options</title>
   <variablelist>

    <varlistentry>
     <term><option>bind_timelimit</option> <emphasis remap="I">SECONDS</emphasis></term>
     <listitem>
      <para>
       Specifies the time limit (in seconds) to use when connecting to the
       directory server.
       This is distinct from the time limit specified in
       <option>timelimit</option> and affects the setup of the connection only.
       Note that not all <acronym>LDAP</acronym> client libraries have support
       for setting the connection timeout.
       The default bind timelimit is 30 seconds.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>timelimit</option> <emphasis remap="I">SECONDS</emphasis></term>
     <listitem>
      <para>
       Specifies the time limit (in seconds) to wait for a response from the
       <acronym>LDAP</acronym> server.
       A value of zero (0), which is the default, is to wait indefinitely for
       searches to be completed.
      </para>
     </listitem>
    </varlistentry>

<!-- FIXME: change the defaults to 10 and 20 seconds respectively -->

    <varlistentry>
     <term><option>idle_timelimit</option> <emphasis remap="I">SECONDS</emphasis></term>
     <listitem>
      <para>
       Specifies the period if inactivity (in seconds) after which the
       connection to the <acronym>LDAP</acronym> server will be closed.
       The default is not to time out connections.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>reconnect_tries</option> <emphasis remap="I">NUMBER</emphasis></term>
     <listitem>
      <para>
       Specifies the number of times each <acronym>LDAP</acronym> server is
       tried when connections to all <acronym>LDAP</acronym> servers fail.
       By default each <acronym>URI</acronym> is tried 4 times.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>reconnect_sleeptime</option> <emphasis remap="I">SECONDS</emphasis></term>
     <listitem>
      <para>
       Specifies the number of seconds to sleep between reconnection tries
       if the connection to all <acronym>LDAP</acronym> servers fail.
       This value is doubled with each try up to the value of the
       <option>reconnect_maxsleeptime</option> option.
       By default 1 second is waited between the first failure and the first
       retry.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><option>reconnect_maxsleeptime</option> <emphasis remap="I">SECONDS</emphasis></term>
     <listitem>
      <para>
       Specifies the maximum number of seconds to sleep between reconnection
       tries if the connection to all <acronym>LDAP</acronym> servers fail.
       This value limits the doubling mechanism described with the
       <option>reconnect_maxsleeptime</option> option.
       The default value is 30 seconds.
      </para>
     </listitem>
    </varlistentry>

   </variablelist>

   <para>
    Note that the reconnect logic as described above is the mechanism that
    is used between <command>nslcd</command> and the <acronym>LDAP</acronym>
    server. The mechanism between the <acronym>NSS</acronym> client library
    and <command>nslcd</command> is simpler with a fixed compiled-in
    timeout of a 1.5 seconds for writing to <command>nslcd</command> and
    a timeout of 2 seconds for reading answers.
    <command>nslcd</command> itself has a read timeout of 0.5 seconds
    and a write timeout of 5 seconds.
   </para>

  </refsect2>

  <refsect2 id='ssl_tls_options'>
   <title><acronym>SSL</acronym>/<acronym>TLS</acronym> options</title>
   <variablelist>

    <varlistentry>
     <term><emphasis remap="B">ssl &lt;on|off|start_tls&gt;</emphasis></term>
     <listitem>
      <para>Specifies whether to use <acronym>SSL</acronym>/<acronym>TLS</acronym> or not (the default is not to). If
      <emphasis remap="B">start_tls</emphasis>
      is specified then StartTLS is used rather than raw <acronym>LDAP</acronym> over <acronym>SSL</acronym>.
      Not all <acronym>LDAP</acronym> client libraries support both <acronym>SSL</acronym>
      and StartTLS, and all related configuration options.</para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><emphasis remap="B">sslpath &lt;cert7_path&gt;</emphasis></term>
     <listitem>
      <para>For the Netscape and Mozilla
      <acronym>LDAP</acronym>
      client libraries only, this specifies the path to the X.509
      certificate database.</para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><emphasis remap="B">tls_checkpeer &lt;yes|no&gt;</emphasis></term>
     <listitem>
      <para>Specifies whether to require and verify the server certificate
      or not, when using <acronym>SSL</acronym>/<acronym>TLS</acronym>
      with the OpenLDAP client library.
      The default is to use the default behaviour of the client
      library; for OpenLDAP 2.0 and earlier it is "no", for OpenLDAP
      2.1 and later it is "yes". At least one of
      <emphasis remap="B">tls_cacertdir</emphasis>
      and
      <emphasis remap="B">tls_cacertfile</emphasis>
      is required if peer verification is enabled.</para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><emphasis remap="B">tls_cacertdir &lt;certificate_dir&gt;</emphasis></term>
     <listitem>
      <para>Specifies the directory containing X.509 certificates for peer
      authentication.</para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><emphasis remap="B">tls_cacertfile &lt;certificate_file&gt;</emphasis></term>
     <listitem>
      <para>Specifies the path to the X.509 certificate for peer authentication.</para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><emphasis remap="B">tls_randfile &lt;entropy_file&gt;</emphasis></term>
     <listitem>
      <para>Specifies the path to an entropy source.</para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><emphasis remap="B">tls_ciphers &lt;ciphers&gt;</emphasis></term>
     <listitem>
      <para>Specifies the ciphers to use for <acronym>TLS</acronym>.
      See your <acronym>TLS</acronym> implementation's
      documentation for further information.</para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><emphasis remap="B">tls_cert &lt;certificate_file&gt;</emphasis></term>
     <listitem>
      <para>Specifies the path to the file containing the local certificate for
      client <acronym>TLS</acronym> authentication.</para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><emphasis remap="B">tls_key &lt;key_file&gt;</emphasis></term>
     <listitem>
      <para>Specifies the path to the file containing the private key for client
      <acronym>TLS</acronym> authentication.</para>
     </listitem>
    </varlistentry>

   </variablelist>
  </refsect2>

  <refsect2 id='other_options'>
   <title>Other options</title>
   <variablelist>

<!-- do not document this option for now as support it is not finalized

     <varlistentry>
     <term><emphasis remap="B">restart &lt;yes|no&gt;</emphasis></term>
     <listitem>
   <para>Specifies whether the
   <acronym>LDAP</acronym>
   client library should restart the
   <emphasis remap="B">select(2)</emphasis>
   system call when interrupted. This feature is not supported by all
   client libraries.</para>
     </listitem>
     </varlistentry>
-->

    <varlistentry>
     <term><option>pagesize</option> <emphasis remap="I">NUMBER</emphasis></term>
     <listitem>
      <para>
       Set this to a number greater than 0 to request paged results from
       the <acronym>LDAP</acronym> server in accordance with RFC2696.
       The default (0) is to not request paged results.
      </para>
     </listitem>
    </varlistentry>

   </variablelist>
  </refsect2>

 </refsect1>

 <refsect1 id="maps">
  <title>Supported maps</title>
  <para>
   The following maps are supported. They are referenced as
   <emphasis remap="I">MAP</emphasis> in the options above.
  </para>
  <variablelist remap="TP">
   <varlistentry>
    <term>alias<optional>es</optional></term>
    <listitem><para>
     Mail aliases.
     Note that most mail servers do not use the <acronym>NSS</acronym>
     interface for requesting mail aliases and parse
     <filename>/etc/aliases</filename> on their own.
    </para></listitem>
   </varlistentry>
   <varlistentry>
    <term>ether<optional>s</optional></term>
    <listitem><para>Ethernet numbers (mac addresses).</para></listitem>
   </varlistentry>
   <varlistentry>
    <term>group</term>
    <listitem><para>Posix groups.</para></listitem>
   </varlistentry>
   <varlistentry>
    <term>host<optional>s</optional></term>
    <listitem><para>Host names.</para></listitem>
   </varlistentry>
   <varlistentry>
    <term>netgroup</term>
    <listitem><para>Host and user groups used for access control.</para></listitem>
   </varlistentry>
   <varlistentry>
    <term>network<optional>s</optional></term>
    <listitem><para>Network numbers.</para></listitem>
   </varlistentry>
   <varlistentry>
    <term>passwd</term>
    <listitem><para>Posix users.</para></listitem>
   </varlistentry>
   <varlistentry>
    <term>protocol<optional>s</optional></term>
    <listitem><para>Protocol definitions (like in <filename>/etc/protocols</filename>).</para></listitem>
   </varlistentry>
   <varlistentry>
    <term>rpc</term>
    <listitem><para>Remote procedure call names and numbers.</para></listitem>
   </varlistentry>
   <varlistentry>
    <term>service<optional>s</optional></term>
    <listitem><para>Network service names and numbers.</para></listitem>
   </varlistentry>
   <varlistentry>
    <term>shadow</term>
    <listitem><para>Shadow user password information.</para></listitem>
   </varlistentry>
  </variablelist>
 </refsect1>

 <refsect1 id="files">
  <title>Files</title>
  <variablelist remap="TP">
   <varlistentry>
    <term><filename>/etc/nss-ldapd.conf</filename></term>
    <listitem><para>the main configuration file</para></listitem>
   </varlistentry>
   <varlistentry>
    <term><filename>/etc/nsswitch.conf</filename></term>
    <listitem><para>Name Service Switch configuration file</para></listitem>
   </varlistentry>
  </variablelist>
 </refsect1>

 <refsect1 id="see_also">
  <title>See Also</title>
  <para>
   <citerefentry><refentrytitle>nslcd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
   <citerefentry><refentrytitle>nsswitch.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
  </para>
 </refsect1>

 <refsect1 id="author">
  <title>Author</title>
  <para>This manual was written by Arthur de Jong &lt;arthur@ch.tudelft.nl&gt;
        and is based on the
        <citerefentry><refentrytitle>nss_ldap</refentrytitle><manvolnum>5</manvolnum></citerefentry>
        manual developed by PADL Software Pty Ltd.</para>
 </refsect1>

 <refsect1 id="known_bugs">
  <title>Known Bugs</title>
  <para>
   This manual page may be outdated and inaccurate and will be improved
   in upcoming releases.
   The features of <emphasis>nss-ldapd</emphasis> are still under
   development so these options may change in a future release.
  </para>
 </refsect1>

</refentry>