]> git.sur5r.net Git - openldap/commitdiff
Sync with HEAD
authorKurt Zeilenga <kurt@openldap.org>
Tue, 10 May 2005 18:13:02 +0000 (18:13 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Tue, 10 May 2005 18:13:02 +0000 (18:13 +0000)
doc/guide/admin/Makefile [new file with mode: 0644]
doc/guide/admin/admin.sdf [new file with mode: 0644]
doc/guide/admin/config_dit.gif [new file with mode: 0644]
doc/guide/admin/intro.sdf
doc/guide/admin/master.sdf
doc/guide/admin/schema.sdf
doc/guide/admin/security.sdf
doc/guide/admin/slapdconf2.sdf [new file with mode: 0644]
doc/guide/admin/slapdconfig.sdf
doc/guide/admin/syncrepl.sdf

diff --git a/doc/guide/admin/Makefile b/doc/guide/admin/Makefile
new file mode 100644 (file)
index 0000000..5f5fabe
--- /dev/null
@@ -0,0 +1,66 @@
+## Makefile for OpenLDAP Administrator's Guide
+# $OpenLDAP$
+## This work is part of OpenLDAP Software <http://www.openldap.org/>.
+##
+## Copyright 2005 The OpenLDAP Foundation.
+## All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted only as authorized by the OpenLDAP
+## Public License.
+##
+## A copy of this license is available in the file LICENSE in the
+## top-level directory of the distribution or, alternatively, at
+## <http://www.OpenLDAP.org/license.html>.
+all: guide.html index.html
+
+sdf-src: \
+       ../plain.sdf \
+       ../preamble.sdf \
+       abstract.sdf \
+       config.sdf \
+       dbtools.sdf \
+       guide.sdf \
+       install.sdf \
+       intro.sdf \
+       master.sdf \
+       monitoringslapd.sdf \
+       preface.sdf \
+       proxycache.sdf \
+       quickstart.sdf \
+       referrals.sdf \
+       replication.sdf \
+       runningslapd.sdf \
+       sasl.sdf \
+       schema.sdf \
+       security.sdf \
+       slapdconfig.sdf \
+       syncrepl.sdf \
+       title.sdf \
+       tls.sdf \
+       tuning.sdf
+
+sdf-img: \
+       ../images/LDAPlogo.gif \
+       config_local.gif \
+       config_ref.gif \
+       config_repl.gif \
+       config_x500fe.gif \
+       config_x500ref.gif \
+       intro_dctree.gif \
+       intro_tree.gif \
+       replication.gif
+
+guide.html: guide.sdf sdf-src sdf-img
+       sdf -2html guide.sdf
+
+index.html: index.sdf sdf-src sdf-img
+       sdf -2topics index.sdf
+
+admin.html: admin.sdf sdf-src sdf-img
+       sdf -DPDF -2html admin.sdf
+
+guide.pdf: admin.html
+       htmldoc --book --duplex --bottom 36 --top 36 \
+               --toclevels 2 \
+               -f guide.pdf admin.html
diff --git a/doc/guide/admin/admin.sdf b/doc/guide/admin/admin.sdf
new file mode 100644 (file)
index 0000000..fef7617
--- /dev/null
@@ -0,0 +1,13 @@
+# $OpenLDAP$
+# Copyright 1999-2005, The OpenLDAP Foundation, All Rights Reserved.
+# COPYING RESTRICTIONS APPLY, see COPYRIGHT.
+#
+# guide.sdf 
+#
+
+!define DOC_TOC 0
+
+!macro build_html_cover
+!endmacro
+
+!include "master.sdf"
diff --git a/doc/guide/admin/config_dit.gif b/doc/guide/admin/config_dit.gif
new file mode 100644 (file)
index 0000000..c58af04
Binary files /dev/null and b/doc/guide/admin/config_dit.gif differ
index 073648b18a9d971b4d217f31eddcbc5c7dc99d9f..3acdc2a7cd4fccf0896b21e4714580cc0ac53bbf 100644 (file)
@@ -1,5 +1,5 @@
 # $OpenLDAP$
-# Copyright 1999-2003, The OpenLDAP Foundation, All Rights Reserved.
+# Copyright 1999-2005, The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 H1: Introduction to OpenLDAP Directory Services
 
@@ -132,10 +132,10 @@ be useful to you.
 
 {{How is the information protected from unauthorized access?}} Some
 directory services provide no protection, allowing anyone to see
-the information. LDAP provides a mechanism for a client to
-authenticate, or prove its identity to a directory server, paving
-the way for rich access control to protect the information the
-server contains.  LDAP also supports privacy and integrity security
+the information. LDAP provides a mechanism for a client to authenticate,
+or prove its identity to a directory server, paving the way for
+rich access control to protect the information the server contains.
+LDAP also supports data security (integrity and confidentiality)
 services.
 
 
@@ -172,8 +172,8 @@ servers.
 
 The stand-alone LDAP daemon, or {{slapd}}(8), can be viewed as a
 {{lightweight}} X.500 directory server.  That is, it does not
-implement the X.500's DAP.  As a {{lightweight directory}} server,
-{{slapd}}(8) implements only a subset of the X.500 models.
+implement the X.500's DAP nor does it support the complete X.500
+models.
 
 If you are already running a X.500 DAP service and you want to
 continue to do so, you can probably stop reading this guide.  This
@@ -194,19 +194,19 @@ H2: What is the difference between LDAPv2 and LDAPv3?
 LDAPv3 was developed in the late 1990's to replace LDAPv2.
 LDAPv3 adds the following features to LDAP:
 
- - Strong Authentication via {{TERM:SASL}}
- - Integrity and Confidentiality Protection via {{TERM:TLS}} (SSL)
+ - Strong authentication and data security services via {{TERM:SASL}}
+ - Certificate authentication and data security services via {{TERM:TLS}} (SSL)
  - Internationalization through the use of Unicode
  - Referrals and Continuations
  - Schema Discovery
  - Extensibility (controls, extended operations, and more)
 
-LDAPv2 is historic ({{REF:RFC3494}}).  As most implementations
-(including {{slapd}}(8)) of LDAPv2 do not conform to the LDAPv2
-technical specification, interoperatibility amongst implementations
-claiming LDAPv2 support will be limited.  As LDAPv2 differs
-significantly from LDAPv3, deploying both LDAPv2 and LDAPv3
-simultaneously can be quite problematic.  LDAPv2 should be avoided.
+LDAPv2 is historic ({{REF:RFC3494}}).  As most {{so-called}} LDAPv2
+implementations (including {{slapd}}(8)) do not conform to the
+LDAPv2 technical specification, interoperatibility amongst
+implementations claiming LDAPv2 support is limited.  As LDAPv2
+differs significantly from LDAPv3, deploying both LDAPv2 and LDAPv3
+simultaneously is quite problematic.  LDAPv2 should be avoided.
 LDAPv2 is disabled by default.
 
 
@@ -223,12 +223,14 @@ interesting features and capabilities include:
 {{slapd}} supports LDAP over both IPv4 and IPv6 and Unix IPC.
 
 {{B:{{TERM[expand]SASL}}}}: {{slapd}} supports strong authentication
-services through the use of SASL.  {{slapd}}'s SASL implementation
-utilizes {{PRD:Cyrus}} {{PRD:SASL}} software which supports a number
-of mechanisms including DIGEST-MD5, EXTERNAL, and GSSAPI.
-
-{{B:{{TERM[expand]TLS}}}}: {{slapd}} provides privacy and integrity
-protections through the use of TLS (or SSL).  {{slapd}}'s TLS
+and data security (integrity and confidentiality) services through
+the use of SASL.  {{slapd}}'s SASL implementation utilizes {{PRD:Cyrus}}
+{{PRD:SASL}} software which supports a number of mechanisms including
+DIGEST-MD5, EXTERNAL, and GSSAPI.
+
+{{B:{{TERM[expand]TLS}}}}: {{slapd}} supports certificate-based
+authentication and data security (integrity and confidentiality)
+services through the use of TLS (or SSL).  {{slapd}}'s TLS
 implementation utilizes {{PRD:OpenSSL}} software.
 
 {{B:Topology control}}: {{slapd}} can be configured to restrict
@@ -239,8 +241,8 @@ This feature utilizes {{TCP wrappers}}.
 control facility, allowing you to control access to the information
 in your database(s). You can control access to entries based on
 LDAP authorization information, {{TERM:IP}} address, domain name
-and other criteria.  {{slapd}} supports both {{static}} and
-{{dynamic}} access control information.
+and other criteria.  {{slapd}} supports both {{static}} and {{dynamic}}
+access control information.
 
 {{B:Internationalization}}: {{slapd}} supports Unicode and language
 tags.
@@ -248,11 +250,12 @@ tags.
 {{B:Choice of database backends}}: {{slapd}} comes with a variety
 of different database backends you can choose from. They include
 {{TERM:BDB}}, a high-performance transactional database backend;
+{{TERM:HDB}}, a hierarchical high-performance transactional backend;
 {{TERM:LDBM}}, a lightweight DBM based backend; {{SHELL}}, a backend
 interface to arbitrary shell scripts; and PASSWD, a simple backend
-interface to the {{passwd}}(5) file.  The BDB backend utilizes
-{{ORG:Sleepycat}} {{PRD:Berkeley DB}}.  The LDBM utilizes either
-{{PRD:Berkeley DB}} or {{PRD:GDBM}}.
+interface to the {{passwd}}(5) file.  The BDB and HDB backends
+utilize {{ORG:Sleepycat}} {{PRD:Berkeley DB}}.  The LDBM utilizes
+either {{PRD:Berkeley DB}} or {{PRD:GDBM}}.
 
 {{B:Multiple database instances}}: {{slapd}} can be configured to
 serve multiple databases at the same time. This means that a single
@@ -264,7 +267,7 @@ backends.
 {{slapd}} lets you write your own modules easily. {{slapd}} consists
 of two distinct parts: a front end that handles protocol communication
 with LDAP clients; and modules which handle specific tasks such as
-database operations. Because these two pieces communicate via a
+database operations.  Because these two pieces communicate via a
 well-defined {{TERM:C}} {{TERM:API}}, you can write your own
 customized modules which extend {{slapd}} in numerous ways.  Also,
 a number of {{programmable database}} modules are provided.  These
@@ -273,8 +276,8 @@ programming languages ({{PRD:Perl}}, {{shell}}, {{PRD:SQL}}, and
 {{PRD:TCL}}).
 
 {{B:Threads}}: {{slapd}} is threaded for high performance.  A single
-multi-threaded {{slapd}} process handles all incoming requests
-using a pool of threads.  This reduces the amount of system overhead
+multi-threaded {{slapd}} process handles all incoming requests using
+a pool of threads.  This reduces the amount of system overhead
 required while providing high performance.
 
 {{B:Replication}}: {{slapd}} can be configured to maintain shadow
index 1fd2b6ae6c40d3d4d8cbf5dcef13e60fc61812a0..c8d7f046b3b60fb705e1a002ccf3ee7ddb4dd022 100644 (file)
@@ -1,5 +1,5 @@
 # $OpenLDAP$
-# Copyright 1999-2003, The OpenLDAP Foundation, All Rights Reserved.
+# Copyright 1999-2005, The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 #
 # master file for the OpenLDAP Administrator's Guide
@@ -36,6 +36,9 @@ PB:
 !include "install.sdf"; chapter
 PB:
 
+!include "slapdconf2.sdf"; chapter
+PB:
+
 !include "slapdconfig.sdf"; chapter
 PB:
 
index e455da628b2f3a84fee9849ff3368ad9c281ffe2..f7cc9ce19bd740bdfee151416d529cb6f29677bb 100644 (file)
@@ -1,5 +1,5 @@
 # $OpenLDAP$
-# Copyright 1999-2003, The OpenLDAP Foundation, All Rights Reserved.
+# Copyright 1999-2005, The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 
 H1: Schema Specification
@@ -81,15 +81,13 @@ There are five steps to defining new schema:
 
 H3: Object Identifiers
 
-Each schema element is identified by a globally unique
-{{TERM[expand]OID}} (OID).  OIDs are also used to identify
-other objects.
-They are commonly found in protocols described by {{TERM:ASN.1}}.  In
+Each schema element is identified by a globally unique {{TERM[expand]OID}}
+(OID).  OIDs are also used to identify other objects.  They are
+commonly found in protocols described by {{TERM:ASN.1}}.  In
 particular, they are heavily used by the {{TERM[expand]SNMP}} (SNMP).
-As OIDs are hierarchical, your organization
-can obtain one OID and branch it as needed.  For example,
-if your organization were assigned OID {{EX:1.1}}, you could branch
-the tree as follows:
+As OIDs are hierarchical, your organization can obtain one OID and
+branch it as needed.  For example, if your organization were assigned
+OID {{EX:1.1}}, you could branch the tree as follows:
 
 !block table; colaligns="LR"; coltags="EX,N"; align=Center; \
        title="Table 8.2: Example OID hierarchy"
@@ -129,10 +127,7 @@ you.  OIDs obtained using this form may be used for any purpose
 including identifying LDAP schema elements.
 
 Alternatively, OID name space may be available from a national
-authority (e.g., ANSI, BSI).
-
-For private experiments, OIDs under {{EX:1.1}} may be used.  The
-OID {{EX:1.1}} arc is regarded as dead name space.
+authority (e.g., {{ORG:ANSI}}, {{ORG:BSI}}).
 
 
 H3: Name Prefix
index 554a9f39d6d134f3d0801c8ccd97b43f9bb3e961..dff0009e98b26ea15f2ed51c77f43ff99f779a03 100644 (file)
@@ -1,11 +1,11 @@
-# Copyright 1999-2003, The OpenLDAP Foundation, All Rights Reserved.
+# Copyright 1999-2005, The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 
 H1: Security Considerations
 
 OpenLDAP Software is designed to run in a wide variety of computing
 environments from tightly-controlled closed networks to the global
-Internet.  Hence, OpenLDAP Software provides many different security
+Internet.  Hence, OpenLDAP Software supports many different security
 mechanisms.  This chapter describes these mechanisms and discusses
 security considerations for using OpenLDAP Software.
 
@@ -37,12 +37,9 @@ H3: IP Firewall
 to restrict access based upon the client's IP address and/or network
 interface used to communicate with the client.
 
-Generally, {{slapd}}(8) listens on port 389/tcp for LDAP over
-{{TERM:TCP}} (e.g.  {{F:ldap://}}) and port 636/tcp for LDAP over
-{{TERM:SSL}} (e.g.  {{F:ldaps://}}).  Note that LDAP over TCP
-sessions can be protected by {{TERM:TLS}} through the use of
-{{StartTLS}}.  StartTLS is the Standard Track mechanism for protecting
-LDAP sessions with TLS.
+Generally, {{slapd}}(8) listens on port 389/tcp for {{F:ldap://}}
+sessions and port 636/tcp for {{F:ldaps://}}) sessions.  {{slapd}}(8)
+may be configured to listen on other ports.
 
 As specifics of how to configure IP firewall are dependent on the
 particular kind of IP firewall used, no examples are provided here.
@@ -51,9 +48,9 @@ See the document associated with your IP firewall.
 
 H3: TCP Wrappers
 
-OpenLDAP supports {{TERM:TCP}} Wrappers.  TCP Wrappers provide a rule-based
-access control system for controlling TCP/IP access to the server.
-For example, the {{host_options}}(5) rule:
+{{slapd}}(8) supports {{TERM:TCP}} Wrappers.  TCP Wrappers provide
+a rule-based access control system for controlling TCP/IP access
+to the server.  For example, the {{host_options}}(5) rule:
 
 >      slapd: 10.0.0.0/255.0.0.0 127.0.0.1 : ALLOW
 >      slapd: ALL : DENY
@@ -71,15 +68,16 @@ of TCP wrappers.
 See {{hosts_access}}(5) for more information on TCP wrapper rules.
 
 
-H2: Integrity and Confidentiality Protection
+H2: Data Integrity and Confidentiality Protection
 
-{{TERM[expand]TLS}} (TLS) can be used to provide integrity and
-confidentiality protection.  OpenLDAP supports both StartTLS and
-{{F:ldaps://}}.  See the {{SECT:Using TLS}} chapter for more
-information.
+{{TERM[expand]TLS}} (TLS) can be used to provide data integrity and
+confidentiality protection.  OpenLDAP supports negotiation of
+{{TERM:TLS}} ({{TERM:SSL}}) via both StartTLS and {{F:ldaps://}}.
+See the {{SECT:Using TLS}} chapter for more information.  StartTLS
+is the standard track mechanism.
 
 A number of {{TERM[expand]SASL}} (SASL) mechanisms, such as DIGEST-MD5
-and {{TERM:GSSAPI}}, also provide integrity and confidentiality
+and {{TERM:GSSAPI}}, also provide data integrity and confidentiality
 protection.  See the {{SECT:Using SASL}} chapter for more information.
 
 
@@ -124,41 +122,42 @@ to the "simple" bind operation.  Unauthenticated access is obtained
 by providing a name but no password.  Authenticated access is obtain
 by providing a valid name and password.
 
-An anonymous bind results in an {{anonymous}} authorization.
-Anonymous bind mechanism is enabled by default, but can be disabled
-by specifying "{{EX:disallow bind_anon}}" in {{slapd.conf}}(5).
+An anonymous bind results in an {{anonymous}} authorization
+association.  Anonymous bind mechanism is enabled by default, but
+can be disabled by specifying "{{EX:disallow bind_anon}}" in
+{{slapd.conf}}(5).
 
-An unauthenticated bind results in an {{anonymous}} authorization.
-Unauthenticated bind mechanism is disabled by default, but can be
-enabled by specifying "{{EX:allow bind_anon_cred}}" in {{slapd.conf}}(5).
-As a number of LDAP applications mistakenly generate unauthenticated
-bind request when authenticated access was intended (that is, they
-do not ensure a password was provided), this mechanism should
-generally not be enabled.
+An unauthenticated bind also results in an {{anonymous}} authorization
+association.  Unauthenticated bind mechanism is disabled by default,
+but can be enabled by specifying "{{EX:allow bind_anon_cred}}" in
+{{slapd.conf}}(5).  As a number of LDAP applications mistakenly
+generate unauthenticated bind request when authenticated access was
+intended (that is, they do not ensure a password was provided),
+this mechanism should generally remain disabled.
 
 A successful user/password authenticated bind results in a user
 authorization identity, the provided name, being associated with
 the session.  User/password authenticated bind is enabled by default.
-However, as this mechanism offers no evesdropping protection (e.g.,
-the password is set in the clear), it is recommended that it be
-used only in tightly controlled systems or when the LDAP session
-is protected by other means (e.g., TLS, {{TERM:IPSEC}}).  Where the
-administrator relies on TLS to protect the password, it is recommended
-that unprotected authentication be disabled.  This is done by setting
-"{{EX:disallow bind_simple_unprotected}}" in {{slapd.conf}}(5).
-The {{EX:security}} directive's {{EX:simple_bind}} option provides
-fine grain control over the level of confidential protection to
-require for {{simple}} user/password authentication.
+However, as this mechanism itself offers no evesdropping protection
+(e.g., the password is set in the clear), it is recommended that
+it be used only in tightly controlled systems or when the LDAP
+session is protected by other means (e.g., TLS, {{TERM:IPSEC}}).
+Where the administrator relies on TLS to protect the password, it
+is recommended that unprotected authentication be disabled.  This
+is done by setting "{{EX:disallow bind_simple_unprotected}}" in
+{{slapd.conf}}(5).  The {{EX:security}} directive's {{EX:simple_bind}}
+option provides fine grain control over the level of confidential
+protection to require for {{simple}} user/password authentication.
 
 The user/password authenticated bind mechanism can be completely
 disabled by setting "{{EX:disallow bind_simple}}".
 
 Note:  An unsuccessful bind always results in the session having
-an {{anonymous}} authorization state.
+an {{anonymous}} authorization association.
 
 
 H3: SASL method
 
-The LDAP SASL method allows use of any SASL authentication
+The LDAP {{TERM:SASL}} method allows use of any SASL authentication
 mechanism.  The {{SECT:Using SASL}} discusses use of SASL.
 
diff --git a/doc/guide/admin/slapdconf2.sdf b/doc/guide/admin/slapdconf2.sdf
new file mode 100644 (file)
index 0000000..1e4fe6c
--- /dev/null
@@ -0,0 +1,1173 @@
+# $OpenLDAP$
+# Copyright 2005, The OpenLDAP Foundation, All Rights Reserved.
+# COPYING RESTRICTIONS APPLY, see COPYRIGHT.
+
+H1: Configuring slapd
+
+Once the software has been built and installed, you are ready
+to configure {{slapd}}(8) for use at your site. Unlike previous
+OpenLDAP releases, the slapd runtime configuration in 2.3 is
+fully LDAP-enabled and can be managed using the standard LDAP
+operations with data in LDIF. The LDAP configuration engine
+allows all of slapd's configuration options to be changed on the fly,
+generally without requiring a server restart for the changes
+to take effect. The old style {{slapd.conf}}(5) file is still
+supported, but must be converted to the new {{slapd.d}}(5) format
+to allow runtime changes to be saved. While the old style
+configuration uses a single file, normally installed as
+{{F:/usr/local/etc/openldap/slapd.conf}}, the new style
+uses a slapd backend database to store the configuration. The
+the configuration database normally resides in the
+{{F:/usr/local/etc/openldap/slapd.d}} directory.
+
+An alternate configuration directory (or file) can be specified via a
+command-line option to {{slapd}}(8) or {{slurpd}}(8). This chapter
+describes the general format of the configuration system , followed by a
+detailed description of commonly used config directives.
+
+
+H2: Configuration Layout
+
+The slapd configuration is stored as a special LDAP directory with
+a predefined schema and DIT. There are specific objectClasses used to
+carry global configuration options, schema definitions, backend and
+database definitions, and assorted other items. A sample config tree
+is shown in Figure 5.1.
+
+!import "config_dit.gif"; align="center"; title="Sample configuration tree"
+FT[align="Center"] Figure 5.1: Sample configuration tree.
+
+Other objects may be part of the configuration but were omitted from
+the illustration for clarity.
+
+The {{slapd.d}} configuration tree has a very specific structure. The
+root of the tree is named {{EX:cn=config}} and contains global configuration
+settings. Additional settings are contained in separate child entries:
+* Include files
+.. Usually these are just pathnames left over from a converted
+{{EX:slapd.conf}} file.
+.. Otherwise use of Include files is deprecated.
+* Dynamically loaded modules
+.. These may only be used if the {{EX:--enable-modules}} option was
+used to configure the software.
+* Schema definitions
+.. The {{EX:cn=schema,cn=config}} entry contains the system schema (all
+the schema that is hard-coded in slapd).
+.. Child entries of {{EX:cn=schema,cn=config}} contain user schema as
+loaded from config files or added at runtime.
+* Backend-specific configuration 
+* Database-specific configuration
+.. Overlays are defined in children of the Database entry.
+.. Databases and Overlays may also have other miscellaneous children.
+
+The usual rules for LDIF files apply to the configuration information:
+Comment lines beginning with a '{{EX:#}}' character
+are ignored.  If a line begins with white space, it is considered a
+continuation of the previous line (even if the previous line is a
+comment). Entries are separated by blank lines.
+
+The general layout of the config LDIF is as follows:
+
+>      # global configuration settings
+>      dn: cn=config
+>      objectClass: olcGlobal
+>      cn: config
+>      <global config settings>
+>
+>      # schema definitions
+>      dn: cn=schema,cn=config
+>      objectClass: olcSchemaConfig
+>      cn: schema
+>      <system schema>
+>
+>      dn: cn={X}core,cn=schema,cn=config
+>      objectClass: olcSchemaConfig
+>      cn: {X}core
+>      <core schema>
+>
+>      # additional user-specified schema
+>      ...
+>
+>      # backend definitions
+>      dn: olcBackend={X}<typeA>,cn=config
+>      objectClass: olcBackendConfig
+>      olcBackend: {X}<typeA>
+>      <backend-specific settings>
+>
+>      # database definitions
+>      dn: olcDatabase={X}<typeA>,cn=config
+>      objectClass: olcDatabaseConfig
+>      olcDatabase: {X}<typeA>
+>      <database-specific settings>
+>
+>      # subsequent definitions and settings
+>      ...
+
+Some of the entries listed above have a numeric index {{EX:"{X}"}} in
+their names. While most configuration settings have an inherent ordering
+dependency (i.e., one setting must take effect before a subsequent one
+may be set), LDAP databases are inherently unordered. The numeric index
+is used to enforce a consistent ordering in the configuration database,
+so that all ordering dependencies are preserved. In most cases the index
+does not have to be provided; it will be automatically generated based
+on the order in which entries are created.
+
+A configuration directive may take arguments.  If so, they are
+separated by white space.  If an argument contains white space,
+the argument should be enclosed in double quotes {{EX:"like this"}}. If
+an argument contains a double quote or a backslash character `{{EX:\}}',
+the character should be preceded by a backslash character `{{EX:\}}'.
+
+The distribution contains an example configuration file that will
+be installed in the {{F: /usr/local/etc/openldap}} directory.
+A number of files containing schema definitions (attribute types
+and object classes) are also provided in the
+{{F: /usr/local/etc/openldap/schema}} directory.
+
+
+H2: Configuration Directives
+
+This section details commonly used configuration directives.  For
+a complete list, see the {{slapd.d}}(5) manual page.  This section
+separates the configuration directives into global,
+backend-specific and data-specific categories, describing each
+directive and its default value (if any), and giving an example of
+its use.
+
+Most of the attributes and objectClasses used in the slapd
+configuration have a prefix of {{EX:"olc"}} (OpenLDAP Configuration)
+in their names.
+
+
+
+H3: Global Directives
+
+Directives described in this section apply to all backends
+and databases unless specifically overridden in a backend or
+database definition.  Arguments that should be replaced
+by actual text are shown in brackets {{EX:<>}}.
+
+
+H4: access to <what> [ by <who> <accesslevel> <control> ]+
+
+This directive grants access (specified by <accesslevel>) to a
+set of entries and/or attributes (specified by <what>) by one or
+more requesters (specified by <who>).
+See the {{SECT:Access Control}} section of this chapter for a
+summary of basic usage.
+
+!if 0
+More details discussion of this directive can be found in the
+{{SECT:Advanced Access Control}} chapter.
+!endif
+
+Note: If no {{EX:access}} directives are specified, the default
+access control policy, {{EX:access to * by * read}}, allows all
+both authenticated and anonymous users read access.
+
+
+H4: attributetype <{{REF:RFC2252}} Attribute Type Description>
+
+This directive defines an attribute type.
+Please see the {{SECT:Schema Specification}} chapter
+for information regarding how to use this directive.
+
+H4: idletimeout <integer>
+
+Specify the number of seconds to wait before forcibly closing
+an idle client connection.  An idletimeout of 0, the default,
+disables this feature.
+
+
+H4: include <filename>
+
+This directive specifies that slapd should read additional
+configuration information from the given file before continuing
+with the next line of the current file. The included file should
+follow the normal slapd config file format.  The file is commonly
+used to include files containing schema specifications.
+
+Note: You should be careful when using this directive - there is
+no small limit on the number of nested include directives, and no
+loop detection is done.
+
+H4: loglevel <integer>
+
+This directive specifies the level at which debugging statements
+and operation statistics should be syslogged (currently logged to
+the {{syslogd}}(8) {{EX:LOG_LOCAL4}} facility). You must have
+configured OpenLDAP {{EX:--enable-debug}} (the default) for this
+to work (except for the two statistics levels, which are always
+enabled).  Log levels are additive. To display what numbers
+correspond to what kind of debugging, invoke slapd with {{EX:-?}}
+or consult the table below. The possible values for <integer> are:
+
+!block table; colaligns="RL"; align=Center; \
+       title="Table 5.1: Debugging Levels"
+Level  Description
+-1     enable all debugging
+0      no debugging
+1      trace function calls
+2      debug packet handling
+4      heavy trace debugging
+8      connection management
+16     print out packets sent and received
+32     search filter processing
+64     configuration file processing
+128    access control list processing
+256    stats log connections/operations/results
+512    stats log entries sent
+1024   print communication with shell backends
+2048   print entry parsing debugging
+!endblock
+
+\Example:
+
+E: loglevel -1
+
+This will cause lots and lots of debugging information to be
+logged.
+
+\Default:
+
+E: loglevel 256
+
+
+H4: objectclass <{{REF:RFC2252}} Object Class Description>
+
+This directive defines an object class.
+Please see the {{SECT:Schema Specification}} chapter for
+information regarding how to use this directive.
+
+
+H4: referral <URI>
+
+This directive specifies the referral to pass back when slapd
+cannot find a local database to handle a request.
+
+\Example:
+
+>      referral ldap://root.openldap.org
+
+This will refer non-local queries to the global root LDAP server
+at the OpenLDAP Project. Smart LDAP clients can re-ask their
+query at that server, but note that most of these clients are
+only going to know how to handle simple LDAP URLs that
+contain a host part and optionally a distinguished name part.
+
+
+H4: sizelimit <integer>
+
+This directive specifies the maximum number of entries to return
+from a search operation.
+
+\Default:
+
+>      sizelimit 500
+
+
+H4: timelimit <integer>
+
+This directive specifies the maximum number of seconds (in real
+time) slapd will spend answering a search request. If a
+request is not finished in this time, a result indicating an
+exceeded timelimit will be returned.
+
+\Default:
+
+>      timelimit 3600
+
+
+H3: General Backend Directives
+
+Directives in this section apply only to the backend in which
+they are defined. They are supported by every type of backend.
+Backend directives apply to all databases instances of the
+same type and, depending on the directive, may be overridden
+by database directives.
+
+H4: backend <type>
+
+This directive marks the beginning of a backend declaration.
+{{EX:<type>}} should be one of the
+supported backend types listed in Table 5.2.
+
+!block table; align=Center; coltags="EX,N"; \
+       title="Table 5.2: Database Backends"
+Types  Description
+bdb    Berkeley DB transactional backend
+dnssrv DNS SRV backend
+ldap   Lightweight Directory Access Protocol (Proxy) backend
+ldbm   Lightweight DBM backend
+meta   Meta Directory backend
+monitor        Monitor backend
+passwd Provides read-only access to {{passwd}}(5)
+perl   Perl Programmable backend
+shell  Shell (extern program) backend
+sql    SQL Programmable backend
+!endblock
+
+\Example:
+
+>      backend bdb
+
+This marks the beginning of a new {{TERM:BDB}} backend
+definition.
+
+
+H3: General Database Directives
+
+Directives in this section apply only to the database in which
+they are defined. They are supported by every type of database.
+
+H4: database <type>
+
+This directive marks the beginning of a database instance
+declaration.
+{{EX:<type>}} should be one of the
+supported backend types listed in Table 5.2.
+
+\Example:
+
+>      database bdb
+
+This marks the beginning of a new {{TERM:BDB}} database instance
+declaration.
+
+
+H4: readonly { on | off }
+
+This directive puts the database into "read-only" mode. Any
+attempts to modify the database will return an "unwilling to
+perform" error.
+
+\Default:
+
+>      readonly off
+
+H4: replica
+
+>      replica uri=ldap[s]://<hostname>[:<port>] | host=<hostname>[:<port>]
+>              [bindmethod={simple|kerberos|sasl}]
+>              ["binddn=<DN>"]
+>              [saslmech=<mech>]
+>              [authcid=<identity>]
+>              [authzid=<identity>]
+>              [credentials=<password>]
+>              [srvtab=<filename>]
+
+This directive specifies a replication site for this database. The
+{{EX:uri=}} parameter specifies a scheme, a host and optionally a port where
+the slave slapd instance can be found. Either a domain name
+or IP address may be used for <hostname>. If <port> is not
+given, the standard LDAP port number (389 or 636) is used.
+
+{{EX:host}} is deprecated in favor of the {{EX:uri}} parameter.
+
+{{EX:uri}} allows the replica LDAP server to be specified as an LDAP 
+URI such as {{EX:ldap://slave.example.com:389}} or
+{{EX:ldaps://slave.example.com:636}}.
+
+The {{EX:binddn=}} parameter gives the DN to bind as for updates
+to the slave slapd. It should be a DN which has read/write access
+to the slave slapd's database.  It must also match the {{EX:updatedn}}
+directive in the slave slapd's config file.  Generally, this DN
+{{should not}} be the same as the {{EX:rootdn}} of the master
+database.  Since DNs are likely to contain embedded spaces, the
+entire {{EX:"binddn=<DN>"}} string should be enclosed in double
+quotes.
+
+The {{EX:bindmethod}} is {{EX:simple}} or {{EX:kerberos}} or {{EX:sasl}},
+depending on whether simple password-based authentication or Kerberos
+authentication or {{TERM:SASL}} authentication is to be used when connecting
+to the slave slapd.
+
+Simple authentication should not be used unless adequate data
+integrity and confidentiality protections are in place (e.g. TLS
+or IPSEC).  Simple authentication requires specification of
+{{EX:binddn}} and {{EX:credentials}} parameters.
+
+Kerberos authentication is deprecated in favor of SASL authentication
+mechanisms, in particular the {{EX:KERBEROS_V4}} and {{EX:GSSAPI}}
+mechanisms.  Kerberos authentication requires {{EX:binddn}} and
+{{EX:srvtab}} parameters.
+
+SASL authentication is generally recommended.  SASL authentication
+requires specification of a mechanism using the {{EX:saslmech}} parameter.
+Depending on the mechanism, an authentication identity and/or
+credentials can be specified using {{EX:authcid}} and {{EX:credentials}}
+respectively.  The {{EX:authzid}} parameter may be used to specify
+an authorization identity.
+
+See the chapter entitled {{SECT:Replication with slurpd}} for more
+information on how to use this directive.
+
+
+H4: replogfile <filename>
+
+This directive specifies the name of the replication log file to
+which slapd will log changes. The replication log is typically
+written by slapd and read by slurpd. Normally, this directive is
+only used if slurpd is being used to replicate the database.
+However, you can also use it to generate a transaction log, if
+slurpd is not running. In this case, you will need to periodically
+truncate the file, since it will grow indefinitely otherwise.
+
+See the chapter entitled {{SECT:Replication with slurpd}} for more
+information on how to use this directive.
+
+
+H4: rootdn <DN>
+
+This directive specifies the DN that is not subject to
+access control or administrative limit restrictions for
+operations on this database.  The DN need not refer to
+an entry in this database or even in the directory. The
+DN may refer to a SASL identity.
+
+Entry-based Example:
+
+>      rootdn "cn=Manager,dc=example,dc=com"
+
+SASL-based Example:
+
+>      rootdn "uid=root,cn=example.com,cn=digest-md5,cn=auth"
+
+See the {{SECT:SASL Authentication}} section for information on
+SASL authentication identities.
+
+
+H4: rootpw <password>
+
+This directive can be used to specifies a password for the DN for
+the rootdn (when the rootdn is set to a DN within the database).
+
+\Example:
+
+>      rootpw secret
+
+It is also permissible to provide hash of the password in RFC 2307
+form.  {{slappasswd}}(8) may be used to generate the password hash.
+
+\Example:
+
+>      rootpw {SSHA}ZKKuqbEKJfKSXhUbHG3fG8MDn9j1v4QN
+
+The hash was generated using the command {{EX:slappasswd -s secret}}.
+
+
+H4: suffix <dn suffix>
+
+This directive specifies the DN suffix of queries that will be
+passed to this backend database. Multiple suffix lines can be
+given, and at least one is required for each database
+definition.
+
+\Example:
+
+>      suffix "dc=example,dc=com"
+
+Queries with a DN ending in "dc=example,dc=com"
+will be passed to this backend.
+
+Note: When the backend to pass a query to is selected, slapd
+looks at the suffix line(s) in each database definition in the
+order they appear in the file. Thus, if one database suffix is a
+prefix of another, it must appear after it in the config file.
+
+
+H4: syncrepl
+
+>      syncrepl rid=<replica ID>
+>              provider=ldap[s]://<hostname>[:port]
+>              [type=refreshOnly|refreshAndPersist]
+>              [interval=dd:hh:mm:ss]
+>              [retry=[<retry interval> <# of retries>]+]
+>              [searchbase=<base DN>]
+>              [filter=<filter str>]
+>              [scope=sub|one|base]
+>              [attrs=<attr list>]
+>              [attrsonly]
+>              [sizelimit=<limit>]
+>              [timelimit=<limit>]
+>              [schemachecking=on|off]
+>              [bindmethod=simple|sasl]
+>              [binddn=<DN>]
+>              [saslmech=<mech>]
+>              [authcid=<identity>]
+>              [authzid=<identity>]
+>              [credentials=<passwd>]
+>              [realm=<realm>]
+>              [secprops=<properties>]
+
+
+This directive specifies the current database as a replica of the
+master content by establishing the current {{slapd}}(8) as a
+replication consumer site running a syncrepl replication engine.
+The master database is located at the replication provider site
+specified by the {{EX:provider}} parameter. The replica database is
+kept up-to-date with the master content using the LDAP Content
+Synchronization protocol. See {{EX:draft-zeilenga-ldup-sync-xx.txt}}
+({{a work in progress}}) for more information on the protocol.
+
+The {{EX:rid}} parameter is used for identification of the current
+{{EX:syncrepl}} directive within the replication consumer server,
+where {{EX:<replica ID>}} uniquely identifies the syncrepl specification
+described by the current {{EX:syncrepl}} directive. {{EX:<replica ID>}}
+is non-negative and is no more than three decimal digits in length.
+
+The {{EX:provider}} parameter specifies the replication provider site
+containing the master content as an LDAP URI. The {{EX:provider}}
+parameter specifies a scheme, a host and optionally a port where the
+provider slapd instance can be found. Either a domain name or IP
+address may be used for <hostname>. Examples are
+{{EX:ldap://provider.example.com:389}} or {{EX:ldaps://192.168.1.1:636}}.
+If <port> is not given, the standard LDAP port number (389 or 636) is used.
+Note that the syncrepl uses a consumer-initiated protocol, and hence its
+specification is located at the consumer site, whereas the {{EX:replica}}
+specification is located at the provider site. {{EX:syncrepl}} and
+{{EX:replica}} directives define two independent replication
+mechanisms. They do not represent the replication peers of each other.
+
+The content of the syncrepl replica is defined using a search
+specification as its result set. The consumer slapd will
+send search requests to the provider slapd according to the search
+specification. The search specification includes {{EX:searchbase}},
+{{EX:scope}}, {{EX:filter}}, {{EX:attrs}}, {{EX:attrsonly}},
+{{EX:sizelimit}}, and {{EX:timelimit}} parameters as in the normal
+search specification. The syncrepl search specification has
+the same value syntax and the same default values as in the
+{{ldapsearch}}(1) client search tool.
+
+The LDAP Content Synchronization protocol has two operation
+types: {{EX:refreshOnly}} and {{EX:refreshAndPersist}}.
+The operation type is specified by the {{EX:type}} parameter.
+In the {{EX:refreshOnly}} operation, the next synchronization search operation
+is periodically rescheduled at an interval time after each
+synchronization operation finishes. The interval is specified
+by the {{EX:interval}} parameter. It is set to one day by default.
+In the {{EX:refreshAndPersist}} operation, a synchronization search
+remains persistent in the provider slapd. Further updates to the
+master replica will generate {{EX:searchResultEntry}} to the consumer slapd
+as the search responses to the persistent synchronization search.
+
+If an error occurs during replication, the consumer will attempt to reconnect
+according to the retry parameter which is a list of the <retry interval>
+and <# of retries> pairs. For example, retry="60 5 300 3" lets the consumer
+retry every 60 seconds for the first 10 times and then retry every 300 seconds
+for the next three times before stop retrying. + in <#  of retries> means
+indefinite number of retries until success.
+
+The schema checking can be enforced at the LDAP Sync consumer site
+by turning on the {{EX:schemachecking}} parameter.
+If it is turned on, every replicated entry will be checked for its
+schema as the entry is stored into the replica content.
+Every entry in the replica should contain those attributes
+required by the schema definition.
+If it is turned off, entries will be stored without checking
+schema conformance. The default is off.
+
+The {{EX:binddn}} parameter gives the DN to bind as for the
+syncrepl searches to the provider slapd. It should be a DN
+which has read access to the replication content in the
+master database. 
+
+The {{EX:bindmethod}} is {{EX:simple}} or {{EX:sasl}},
+depending on whether simple password-based authentication or
+{{TERM:SASL}} authentication is to be used when connecting
+to the provider slapd.
+
+Simple authentication should not be used unless adequate data
+integrity and confidentiality protections are in place (e.g. TLS
+or IPSEC). Simple authentication requires specification of {{EX:binddn}}
+and {{EX:credentials}} parameters.
+
+SASL authentication is generally recommended.  SASL authentication
+requires specification of a mechanism using the {{EX:saslmech}} parameter.
+Depending on the mechanism, an authentication identity and/or
+credentials can be specified using {{EX:authcid}} and {{EX:credentials}},
+respectively.  The {{EX:authzid}} parameter may be used to specify
+an authorization identity.
+
+The {{EX:realm}} parameter specifies a realm which a certain
+mechanisms authenticate the identity within. The {{EX:secprops}}
+parameter specifies Cyrus SASL security properties.
+
+The syncrepl replication mechanism is supported by the
+three native backends: back-bdb, back-hdb, and back-ldbm.
+
+See the {{SECT:LDAP Sync Replication}} chapter of the admin guide
+for more information on how to use this directive.
+
+
+H4: updatedn <DN>
+
+This directive is only applicable in a slave slapd. It specifies
+the DN allowed to make changes to the replica.  This may be the DN
+{{slurpd}}(8) binds as when making changes to the replica or the DN
+associated with a SASL identity.
+
+Entry-based Example:
+
+>      updatedn "cn=Update Daemon,dc=example,dc=com"
+
+SASL-based Example:
+
+>      updatedn "uid=slurpd,cn=example.com,cn=digest-md5,cn=auth"
+
+See the {{SECT:Replication with slurpd}} chapter for more information
+on how to use this directive.
+
+H4: updateref <URL>
+
+This directive is only applicable in a slave slapd. It
+specifies the URL to return to clients which submit update
+requests upon the replica.
+If specified multiple times, each {{TERM:URL}} is provided.
+
+\Example:
+
+>      updateref       ldap://master.example.net
+
+
+H3: BDB Database Directives
+
+Directives in this category only apply to a {{TERM:BDB}} database.
+That is, they must follow a "database bdb" line and come before any
+subsequent "backend" or "database" line.  For a complete reference
+of BDB configuration directives, see {{slapd-bdb}}(5).
+
+
+H4: directory <directory>
+
+This directive specifies the directory where the BDB files
+containing the database and associated indices live.
+
+\Default:
+
+>      directory /usr/local/var/openldap-data
+
+
+H3: LDBM Database Directives
+
+Directives in this category only apply to a {{TERM:LDBM}} database.
+That is, they must follow a "database ldbm" line and come before
+any subsequent "backend" or "database" line.  For a complete reference
+of LDBM configuration directives, see {{slapd-ldbm}}(5).
+
+H4: cachesize <integer>
+
+This directive specifies the size in entries of the in-memory
+cache maintained by the LDBM backend database instance.
+
+\Default:
+
+>      cachesize 1000
+
+
+H4: dbcachesize <integer>
+
+This directive specifies the size in bytes of the in-memory cache
+associated with each open index file. If not supported by the
+underlying database method, this directive is ignored without
+comment. Increasing this number uses more memory but can
+cause a dramatic performance increase, especially during
+modifies or when building indices.
+
+\Default:
+
+>      dbcachesize 100000
+
+
+H4: dbnolocking
+
+This option, if present, disables database locking.
+Enabling this option may improve performance at the expense
+of data security.
+
+
+H4: dbnosync
+
+This option causes on-disk database contents to not be immediately
+synchronized with in memory changes upon change.  Enabling this option
+may improve performance at the expense of data integrity.
+
+
+H4: directory <directory>
+
+This directive specifies the directory where the LDBM files
+containing the database and associated indices live.
+
+\Default:
+
+>      directory /usr/local/var/openldap-data
+
+
+H4: index {<attrlist> | default} [pres,eq,approx,sub,none]
+
+This directive specifies the indices to maintain for the given
+attribute. If only an {{EX:<attrlist>}} is given, the default
+indices are maintained.
+
+\Example:
+
+>      index default pres,eq
+>      index uid
+>      index cn,sn pres,eq,sub
+>      index objectClass eq
+
+The first line sets the default set of indices to maintain to
+present and equality.  The second line causes the default (pres,eq)
+set of indices to be maintained for the {{EX:uid}} attribute type.
+The third line causes present, equality, and substring indices to
+be maintained for {{EX:cn}} and {{EX:sn}} attribute types.  The
+fourth line causes an equality index for the {{EX:objectClass}}
+attribute type.
+
+By default, no indices are maintained.  It is generally advised
+that minimally an equality index upon objectClass be maintained.
+
+>      index objectClass eq
+
+
+
+H4: mode <integer>
+
+This directive specifies the file protection mode that newly
+created database index files should have.
+
+\Default:
+
+>      mode 0600
+
+
+H2: Access Control
+
+Access to slapd entries and attributes is controlled by the
+access configuration file directive. The general form of an
+access line is:
+
+>      <access directive> ::= access to <what>
+>              [by <who> <access> <control>]+
+>      <what> ::= * |
+>              [dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]
+>              [filter=<ldapfilter>] [attrs=<attrlist>]
+>      <basic-style> ::= regex | exact
+>      <scope-style> ::= base | one | subtree | children
+>      <attrlist> ::= <attr> [val[.<basic-style>]=<regex>] | <attr> , <attrlist>
+>      <attr> ::= <attrname> | entry | children
+>      <who> ::= * | [anonymous | users | self
+>                      | dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>] 
+>              [dnattr=<attrname>]
+>              [group[/<objectclass>[/<attrname>][.<basic-style>]]=<regex>]
+>              [peername[.<basic-style>]=<regex>]
+>              [sockname[.<basic-style>]=<regex>]
+>              [domain[.<basic-style>]=<regex>]
+>              [sockurl[.<basic-style>]=<regex>]
+>              [set=<setspec>]
+>              [aci=<attrname>]
+>      <access> ::= [self]{<level>|<priv>}
+>      <level> ::= none | auth | compare | search | read | write
+>      <priv> ::= {=|+|-}{w|r|s|c|x|0}+
+>      <control> ::= [stop | continue | break]
+
+where the <what> part selects the entries and/or attributes to which
+the access applies, the {{EX:<who>}} part specifies which entities
+are granted access, and the {{EX:<access>}} part specifies the
+access granted. Multiple {{EX:<who> <access> <control>}} triplets
+are supported, allowing many entities to be granted different access
+to the same set of entries and attributes. Not all of these access
+control options are described here; for more details see the
+{{slapd.access}}(5) man page.
+
+
+H3: What to control access to
+
+The <what> part of an access specification determines the entries
+and attributes to which the access control applies.  Entries are
+commonly selected in two ways: by DN and by filter.  The following
+qualifiers select entries by DN:
+
+>      to *
+>      to dn[.<basic-style>]=<regex>
+>      to dn.<scope-style>=<DN>
+
+The first form is used to select all entries.  The second form may
+be used to select entries by matching a regular expression against
+the target entry's {{normalized DN}}.   (The second form is not
+discussed further in this document.)  The third form is used to
+select entries which are within the requested scope of DN.  The
+<DN> is a string representation of the Distinguished Name, as
+described in {{REF:RFC2253}}.
+
+The scope can be either {{EX:base}}, {{EX:one}}, {{EX:subtree}},
+or {{EX:children}}.  Where {{EX:base}} matches only the entry with
+provided DN, {{EX:one}} matches the entries whose parent is the
+provided DN, {{EX:subtree}} matches all entries in the subtree whose
+root is the provided DN, and {{EX:children}} matches all entries
+under the DN (but not the entry named by the DN).
+
+For example, if the directory contained entries named:
+
+>      0: o=suffix
+>      1: cn=Manager,o=suffix
+>      2: ou=people,o=suffix
+>      3: uid=kdz,ou=people,o=suffix
+>      4: cn=addresses,uid=kdz,ou=people,o=suffix
+>      5: uid=hyc,ou=people,o=suffix
+
+\Then:
+. {{EX:dn.base="ou=people,o=suffix"}} match 2;
+. {{EX:dn.one="ou=people,o=suffix"}} match 3, and 5;
+. {{EX:dn.subtree="ou=people,o=suffix"}} match 2, 3, 4, and 5; and
+. {{EX:dn.children="ou=people,o=suffix"}} match 3, 4, and 5.
+
+
+Entries may also be selected using a filter:
+
+>      to filter=<ldap filter>
+
+where <ldap filter> is a string representation of an LDAP
+search filter, as described in {{REF:RFC2254}}.  For example:
+
+>      to filter=(objectClass=person)
+
+Note that entries may be selected by both DN and filter by
+including both qualifiers in the <what> clause.
+
+>      to dn.one="ou=people,o=suffix" filter=(objectClass=person)
+
+Attributes within an entry are selected by including a comma-separated
+list of attribute names in the <what> selector:
+
+>      attrs=<attribute list>
+
+A specific value of an attribute is selected by using a single
+attribute name and also using a value selector:
+
+>      attrs=<attribute> val[.<style>]=<regex>
+
+There are two special {{pseudo}} attributes {{EX:entry}} and
+{{EX:children}}.  To read (and hence return) a target entry, the
+subject must have {{EX:read}} access to the target's {{entry}}
+attribute.  To add or delete an entry, the subject must have
+{{EX:write}} access to the entry's {{EX:entry}} attribute AND must
+have {{EX:write}} access to the entry's parent's {{EX:children}}
+attribute.  To rename an entry, the subject must have {{EX:write}}
+access to entry's {{EX:entry}} attribute AND have {{EX:write}}
+access to both the old parent's and new parent's {{EX:children}}
+attributes.  The complete examples at the end of this section should
+help clear things up.
+
+Lastly, there is a special entry selector {{EX:"*"}} that is used to
+select any entry.  It is used when no other {{EX:<what>}}
+selector has been provided.  It's equivalent to "{{EX:dn=.*}}"
+
+
+H3: Who to grant access to
+
+The <who> part identifies the entity or entities being granted
+access. Note that access is granted to "entities" not "entries."
+The following table summarizes entity specifiers:
+
+!block table; align=Center; coltags="EX,N"; \
+       title="Table 5.3: Access Entity Specifiers"
+Specifier|Entities
+*|All, including anonymous and authenticated users
+anonymous|Anonymous (non-authenticated) users
+users|Authenticated users
+self|User associated with target entry
+dn[.<basic-style>]=<regex>|Users matching a regular expression
+dn.<scope-style>=<DN>|Users within scope of a DN
+!endblock
+
+The DN specifier behaves much like <what> clause DN specifiers.
+
+Other control factors are also supported.  For example, a {{EX:<who>}}
+can be restricted by an entry listed in a DN-valued attribute in
+the entry to which the access applies:
+
+>      dnattr=<dn-valued attribute name>
+
+The dnattr specification is used to give access to an entry
+whose DN is listed in an attribute of the entry (e.g., give
+access to a group entry to whoever is listed as the owner of
+the group entry).
+
+Some factors may not be appropriate in all environments (or any).
+For example, the domain factor relies on IP to domain name lookups.
+As these can easily spoofed, the domain factor should not be avoided.
+
+
+H3: The access to grant
+
+
+The kind of <access> granted can be one of the following:
+
+
+!block table; colaligns="LRL"; coltags="EX,EX,N"; align=Center; \
+       title="Table 5.4: Access Levels"
+Level  Privileges      Description
+none   =0              no access
+auth   =x              needed to bind
+compare        =cx             needed to compare
+search =scx            needed to apply search filters
+read   =rscx           needed to read search results
+write  =wrscx          needed to modify/rename
+!endblock
+
+Each level implies all lower levels of access. So, for
+example, granting someone {{EX:write}} access to an entry also
+grants them {{EX:read}}, {{EX:search}}, {{EX:compare}}, and 
+{{EX:auth}} access.  However, one may use the privileges specifier
+to grant specific permissions.
+
+
+H3: Access Control Evaluation
+
+When evaluating whether some requester should be given access to
+an entry and/or attribute, slapd compares the entry and/or attribute
+to the {{EX:<what>}} selectors given in the configuration file.
+For each entry, access controls provided in the database which holds
+the entry (or the first database if not held in any database) apply
+first, followed by the global access directives.  Within this
+priority, access directives are examined in the order in which they
+appear in the config file.  Slapd stops with the first {{EX:<what>}}
+selector that matches the entry and/or attribute. The corresponding
+access directive is the one slapd will use to evaluate access.
+
+Next, slapd compares the entity requesting access to the {{EX:<who>}}
+selectors within the access directive selected above in the order
+in which they appear. It stops with the first {{EX:<who>}} selector
+that matches the requester. This determines the access the entity
+requesting access has to the entry and/or attribute.
+
+Finally, slapd compares the access granted in the selected
+{{EX:<access>}} clause to the access requested by the client. If
+it allows greater or equal access, access is granted. Otherwise,
+access is denied.
+
+The order of evaluation of access directives makes their placement
+in the configuration file important. If one access directive is
+more specific than another in terms of the entries it selects, it
+should appear first in the config file. Similarly, if one {{EX:<who>}}
+selector is more specific than another it should come first in the
+access directive. The access control examples given below should
+help make this clear.
+
+
+
+H3: Access Control Examples
+
+The access control facility described above is quite powerful.  This
+section shows some examples of its use for descriptive purposes.
+
+A simple example:
+
+>      access to * by * read
+
+This access directive grants read access to everyone.
+
+>      access to *
+>              by self write
+>              by anonymous auth
+>              by * read
+
+This directive allows the user to modify their entry, allows anonymous
+to authentication against these entries, and allows all others to
+read these entries.  Note that only the first {{EX:by <who>}} clause
+which matches applies.  Hence, the anonymous users are granted
+{{EX:auth}}, not {{EX:read}}.  The last clause could just as well
+have been "{{EX:by users read}}".
+
+It is often desirable to restrict operations based upon the level
+of protection in place.  The following shows how security strength
+factors (SSF) can be used.
+
+>      access to *
+>              by ssf=128 self write
+>              by ssf=64 anonymous auth
+>              by ssf=64 users read
+
+This directive allows users to modify their own entries if security
+protections have of strength 128 or better have been established,
+allows authentication access to anonymous users, and read access
+when 64 or better security protections have been established.  If
+client has not establish sufficient security protections, the
+implicit {{EX:by * none}} clause would be applied.
+
+The following example shows the use of a style specifiers to select
+the entries by DN in two access directives where ordering is
+significant.
+
+>      access to dn.children="dc=example,dc=com"
+>              by * search
+>      access to dn.children="dc=com"
+>              by * read
+
+Read access is granted to entries under the {{EX:dc=com}} subtree,
+except for those entries under the {{EX:dc=example,dc=com}} subtree,
+to which search access is granted.  No access is granted to
+{{EX:dc=com}} as neither access directive matches this DN.  If the
+order of these access directives was reversed, the trailing directive
+would never be reached, since all entries under {{EX:dc=example,dc=com}}
+are also under {{EX:dc=com}} entries.
+
+Also note that if no {{EX:access to}} directive matches or no {{EX:by
+<who>}} clause, {{B:access is denied}}.  That is, every {{EX:access
+to}} directive ends with an implicit {{EX:by * none}} clause and
+every access list ends with an implicit {{EX:access to * by * none}}
+directive.
+
+The next example again shows the importance of ordering, both of
+the access directives and the {{EX:by <who>}} clauses.  It also
+shows the use of an attribute selector to grant access to a specific
+attribute and various {{EX:<who>}} selectors.
+
+>      access to dn.subtree="dc=example,dc=com" attr=homePhone
+>              by self write
+>              by dn.children=dc=example,dc=com" search
+>              by peername.regex=IP:10\..+ read
+>      access to dn.subtree="dc=example,dc=com"
+>              by self write
+>              by dn.children="dc=example,dc=com" search
+>              by anonymous auth
+
+This example applies to entries in the "{{EX:dc=example,dc=com}}"
+subtree. To all attributes except {{EX:homePhone}}, an entry can
+write to itself, entries under {{EX:example.com}} entries can search
+by them, anybody else has no access (implicit {{EX:by * none}})
+excepting for authentication/authorization (which is always done
+anonymously).  The {{EX:homePhone}} attribute is writable by the
+entry, searchable by entries under {{EX:example.com}}, readable by
+clients connecting from network 10, and otherwise not readable
+(implicit {{EX:by * none}}).  All other access is denied by the
+implicit {{EX:access to * by * none}}.
+
+Sometimes it is useful to permit a particular DN to add or
+remove itself from an attribute. For example, if you would like to
+create a group and allow people to add and remove only
+their own DN from the member attribute, you could accomplish
+it with an access directive like this:
+
+>      access to attr=member,entry
+>              by dnattr=member selfwrite
+
+The dnattr {{EX:<who>}} selector says that the access applies to
+entries listed in the {{EX:member}} attribute. The {{EX:selfwrite}} access
+selector says that such members can only add or delete their
+own DN from the attribute, not other values. The addition of
+the entry attribute is required because access to the entry is
+required to access any of the entry's attributes.
+
+!if 0
+For more details on how to use the {{EX:access}} directive,
+consult the {{Advanced Access Control}} chapter.
+!endif
+
+
+H2: Configuration File Example
+
+The following is an example configuration file, interspersed
+with explanatory text. It defines two databases to handle
+different parts of the {{TERM:X.500}} tree; both are {{TERM:BDB}}
+database instances. The line numbers shown are provided for
+reference only and are not included in the actual file. First, the
+global configuration section:
+
+E:  1. # example config file - global configuration section
+E:  2. include /usr/local/etc/schema/core.schema
+E:  3. referral ldap://root.openldap.org
+E:  4. access to * by * read
+Line 1 is a comment. Line 2 includes another config file
+which contains {{core}} schema definitions.
+The {{EX:referral}} directive on line 3
+means that queries not local to one of the databases defined
+below will be referred to the LDAP server running on the
+standard port (389) at the host {{EX:root.openldap.org}}.
+
+Line 4 is a global access control.  It applies to all
+entries (after any applicable database-specific access
+controls).
+
+The next section of the configuration file defines a BDB
+backend that will handle queries for things in the
+"dc=example,dc=com" portion of the tree. The
+database is to be replicated to two slave slapds, one on
+truelies, the other on judgmentday. Indices are to be
+maintained for several attributes, and the {{EX:userPassword}}
+attribute is to be protected from unauthorized access.
+
+E:  5. # BDB definition for the example.com
+E:  6. database bdb
+E:  7. suffix "dc=example,dc=com"
+E:  8. directory /usr/local/var/openldap-data
+E:  9. rootdn "cn=Manager,dc=example,dc=com"
+E: 10. rootpw secret
+E: 11. # replication directives
+E: 12. replogfile /usr/local/var/openldap/slapd.replog
+E: 13. replica uri=ldap://slave1.example.com:389
+E: 14.         binddn="cn=Replicator,dc=example,dc=com"
+E: 15.         bindmethod=simple credentials=secret
+E: 16. replica uri=ldaps://slave2.example.com:636
+E: 17.         binddn="cn=Replicator,dc=example,dc=com"
+E: 18.         bindmethod=simple credentials=secret
+E: 19. # indexed attribute definitions
+E: 20. index uid pres,eq
+E: 21. index cn,sn,uid pres,eq,approx,sub
+E: 22. index objectClass eq
+E: 23. # database access control definitions
+E: 24. access to attr=userPassword
+E: 25.         by self write
+E: 26.         by anonymous auth
+E: 27.         by dn.base="cn=Admin,dc=example,dc=com" write
+E: 28.         by * none
+E: 29. access to *
+E: 30.         by self write
+E: 31.         by dn.base="cn=Admin,dc=example,dc=com" write
+E: 32.         by * read
+
+Line 5 is a comment. The start of the database definition is marked
+by the database keyword on line 6. Line 7 specifies the DN suffix
+for queries to pass to this database. Line 8 specifies the directory
+in which the database files will live.
+
+Lines 9 and 10 identify the database {{super-user}} entry and associated
+password. This entry is not subject to access control or size or
+time limit restrictions.
+
+Lines 11 through 18 are for replication. Line 12 specifies the
+replication log file (where changes to the database are logged -
+this file is written by slapd and read by slurpd). Lines 13 through
+15 specify the hostname and port for a replicated host, the DN to
+bind as when performing updates, the bind method (simple) and the
+credentials (password) for the binddn. Lines 16 through 18 specify
+a second replication site.  See the {{SECT:Replication with slurpd}}
+chapter for more information on these directives.
+
+Lines 20 through 22 indicate the indices to maintain for various
+attributes.
+
+Lines 24 through 32 specify access control for entries in this
+database.  As this is the first database, the controls also apply
+to entries not held in any database (such as the Root DSE).  For
+all applicable entries, the {{EX:userPassword}} attribute is writable
+by the entry itself and by the "admin" entry.  It may be used for
+authentication/authorization purposes, but is otherwise not readable.
+All other attributes are writable by the entry and the "admin"
+entry, but may be read by all users (authenticated or not).
+
+The next section of the example configuration file defines another
+BDB database. This one handles queries involving the
+{{EX:dc=example,dc=net}} subtree but is managed by the same entity
+as the first database.  Note that without line 39, the read access
+would be allowed due to the global access rule at line 4.
+
+E: 33. # BDB definition for example.net
+E: 34. database bdb
+E: 35. suffix "dc=example,dc=net"
+E: 36. directory /usr/local/var/openldap-data-net
+E: 37. rootdn "cn=Manager,dc=example,dc=com"
+E: 38. index objectClass eq
+E: 39. access to * by users read
index 27316af998babce05478a1d8128b7903aa1d6b01..78633c8a6e4ab7740f9651f2808ff2e7fb6fd295 100644 (file)
@@ -1,5 +1,5 @@
 # $OpenLDAP$
-# Copyright 1999-2003, The OpenLDAP Foundation, All Rights Reserved.
+# Copyright 1999-2005, The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 
 H1: The slapd Configuration File
@@ -287,13 +287,12 @@ perform" error.
 H4: replica
 
 >      replica uri=ldap[s]://<hostname>[:<port>] | host=<hostname>[:<port>]
->              [bindmethod={simple|kerberos|sasl}]
+>              [bindmethod={simple|sasl}]
 >              ["binddn=<DN>"]
 >              [saslmech=<mech>]
 >              [authcid=<identity>]
 >              [authzid=<identity>]
 >              [credentials=<password>]
->              [srvtab=<filename>]
 
 This directive specifies a replication site for this database. The
 {{EX:uri=}} parameter specifies a scheme, a host and optionally a port where
@@ -316,20 +315,14 @@ database.  Since DNs are likely to contain embedded spaces, the
 entire {{EX:"binddn=<DN>"}} string should be enclosed in double
 quotes.
 
-The {{EX:bindmethod}} is {{EX:simple}} or {{EX:kerberos}} or {{EX:sasl}},
-depending on whether simple password-based authentication or Kerberos
-authentication or {{TERM:SASL}} authentication is to be used when connecting
-to the slave slapd.
+The {{EX:bindmethod}} is {{EX:simple}} or {{EX:sasl}}, depending
+on whether simple password-based authentication or {{TERM:SASL}}
+authentication is to be used when connecting to the slave slapd.
 
-Simple authentication should not be used unless adequate integrity
-and privacy protections are in place (e.g. TLS or IPSEC).  Simple
-authentication requires specification of {{EX:binddn}} and
-{{EX:credentials}} parameters.
-
-Kerberos authentication is deprecated in favor of SASL authentication
-mechanisms, in particular the {{EX:KERBEROS_V4}} and {{EX:GSSAPI}}
-mechanisms.  Kerberos authentication requires {{EX:binddn}} and
-{{EX:srvtab}} parameters.
+Simple authentication should not be used unless adequate data
+integrity and confidentiality protections are in place (e.g. TLS
+or IPSEC).  Simple authentication requires specification of
+{{EX:binddn}} and {{EX:credentials}} parameters.
 
 SASL authentication is generally recommended.  SASL authentication
 requires specification of a mechanism using the {{EX:saslmech}} parameter.
@@ -430,7 +423,6 @@ H4: syncrepl
 >              [sizelimit=<limit>]
 >              [timelimit=<limit>]
 >              [schemachecking=on|off]
->              [updatedn=<DN>]
 >              [bindmethod=simple|sasl]
 >              [binddn=<DN>]
 >              [saslmech=<mech>]
@@ -507,15 +499,6 @@ required by the schema definition.
 If it is turned off, entries will be stored without checking
 schema conformance. The default is off.
 
-The {{EX:updatedn}} parameter specifies the DN in the consumer site
-which is allowed to make changes to the replica. This DN is used
-locally by the syncrepl engine when updating the replica with the
-entries received from the provider site by using the internal
-operation mechanism. The update of the replica content is subject
-to the access control privileges of the DN.  The DN should have
-read/write access to the replica database.  Generally, this DN
-{{should not}} be the same as {{EX:rootdn}}.
-
 The {{EX:binddn}} parameter gives the DN to bind as for the
 syncrepl searches to the provider slapd. It should be a DN
 which has read access to the replication content in the
@@ -526,10 +509,10 @@ depending on whether simple password-based authentication or
 {{TERM:SASL}} authentication is to be used when connecting
 to the provider slapd.
 
-Simple authentication should not be used unless adequate integrity
-and privacy protections are in place (e.g. TLS or IPSEC). Simple
-authentication requires specification of {{EX:binddn}} and
-{{EX:credentials}} parameters.
+Simple authentication should not be used unless adequate data
+integrity and confidentiality protections are in place (e.g. TLS
+or IPSEC). Simple authentication requires specification of {{EX:binddn}}
+and {{EX:credentials}} parameters.
 
 SASL authentication is generally recommended.  SASL authentication
 requires specification of a mechanism using the {{EX:saslmech}} parameter.
@@ -597,33 +580,6 @@ containing the database and associated indices live.
 >      directory /usr/local/var/openldap-data
 
 
-H4: sessionlog <sid> <limit>
-
-This directive specifies a session log store in the syncrepl 
-replication provider server which contains information on
-the entries that have been scoped out of the replication
-content identified by {{EX:<sid>}}.
-The first syncrepl search request having the same {{EX:<sid>}} value
-in the cookie establishes the session log store in the provider server.
-The number of the entries in the session log store is limited
-by {{EX:<limit>}}. Excessive entries are removed from the store
-in the FIFO order. Both {{EX:<sid>}} and {{EX:<limit>}} are
-non-negative integers. {{EX:<sid>}} has no more than three decimal digits.
-
-The LDAP Content Synchronization operation that falls into a pre-existing
-session can use the session log store in order to reduce the amount
-of synchronization traffic. If the replica is not so outdated that
-it can be made up-to-date by the information in the session store,
-the provider slapd will send the consumer slapd the identities of the
-scoped-out entries together with the in-scope entries added to or
-modified within the replication content. If the replica status is
-outdated too much and beyond the coverage of the history store,
-then the provider slapd will send the identities of the unchanged
-in-scope entries along with the changed in-scope entries.
-The consumer slapd will then remove those entries in the replica
-which are not identified as present in the provider content.
-
-
 H3: LDBM Database Directives
 
 Directives in this category only apply to a {{TERM:LDBM}} database.
index 31f72f2ff2d4cb2f3a019884f9e003da218f6559..2978af320fd4e7358132890a0e2adc4c0467ef23 100644 (file)
@@ -1,5 +1,5 @@
 # $OpenLDAP$
-# Copyright 2003, The OpenLDAP Foundation, All Rights Reserved.
+# Copyright 2003-2005, The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 
 H1: LDAP Sync Replication
@@ -8,62 +8,63 @@ The LDAP Sync replication engine, syncrepl for short, is a consumer-side
 replication engine that enables the consumer LDAP server to maintain
 a shadow copy of a DIT fragment. A syncrepl engine resides at the
 consumer-side as one of the {{slapd}} (8) threads. It creates and
-maintains a consumer replica by connecting to the replication provider
-to perform the initial DIT content load followed either by
-periodic content polling or by timely updates upon content changes.
+maintains a consumer replica by connecting to the replication
+provider to perform the initial DIT content load followed either
+by periodic content polling or by timely updates upon content
+changes.
 
-Syncrepl uses the LDAP Content Synchronization (or LDAP Sync for short)
-protocol as the replica synchronization protocol.  It provides a stateful
-replication which supports both 
-pull-based and push-based synchronization and does not mandate
-the use of a history store.
+Syncrepl uses the LDAP Content Synchronization (or LDAP Sync for
+short) protocol as the replica synchronization protocol.  It provides
+a stateful replication which supports both pull-based and push-based
+synchronization and does not mandate the use of a history store.
 
 Syncrepl keeps track of the status of the replication content by
 maintaining and exchanging synchronization cookies. Because the
-syncrepl consumer and provider maintain their content status,
-the consumer can poll the provider content to perform incremental
-synchronization by asking for the entries required to make the consumer
-replica up-to-date with the provider content. Syncrepl also enables
-convenient management of replicas by maintaining replica status.
-The consumer replica can be constructed from a consumer-side or a
-provider-side backup at any synchronization status. Syncrepl can
-automatically resynchronize the consumer replica up-to-date with the
-current provider content.
-
-Syncrepl supports both pull-based and 
-push-based synchronization. In its basic refreshOnly synchronization mode,
-the provider uses pull-based synchronization where the consumer servers
-need not be tracked and no history information is maintained.
-The information required for the provider to process periodic polling
-requests is contained in the synchronization cookie of the request itself.
-To optimize the pull-based synchronization, syncrepl utilizes the present
-phase of the LDAP Sync protocol as well as its delete phase, instead of
-falling back on frequent full reloads. To further optimize the pull-based
-synchronization, the provider can maintain a per-scope session log
-as a history store. In its refreshAndPersist mode of synchronization,
-the provider uses a push-based synchronization. The provider keeps
-track of the consumer servers that have requested a persistent search
-and sends them necessary updates as the provider replication content
-gets modified.
-
-With syncrepl, a consumer server can create a replica without changing
-the provider's configurations and without restarting the provider server,
-if the consumer server has appropriate access privileges for the
-DIT fragment to be replicated. The consumer server can stop the
-replication also without the need for provider-side changes and restart.
-
-Syncrepl supports both partial and sparse replications.
-The shadow DIT fragment is defined by a general
-search criteria consisting of base, scope, filter, and attribute list.
-The replica content is also subject to the access privileges
-of the bind identity of the syncrepl replication connection.
+syncrepl consumer and provider maintain their content status, the
+consumer can poll the provider content to perform incremental
+synchronization by asking for the entries required to make the
+consumer replica up-to-date with the provider content. Syncrepl
+also enables convenient management of replicas by maintaining replica
+status.  The consumer replica can be constructed from a consumer-side
+or a provider-side backup at any synchronization status. Syncrepl
+can automatically resynchronize the consumer replica up-to-date
+with the current provider content.
+
+Syncrepl supports both pull-based and push-based synchronization.
+In its basic refreshOnly synchronization mode, the provider uses
+pull-based synchronization where the consumer servers need not be
+tracked and no history information is maintained.  The information
+required for the provider to process periodic polling requests is
+contained in the synchronization cookie of the request itself.  To
+optimize the pull-based synchronization, syncrepl utilizes the
+present phase of the LDAP Sync protocol as well as its delete phase,
+instead of falling back on frequent full reloads. To further optimize
+the pull-based synchronization, the provider can maintain a per-scope
+session log as a history store. In its refreshAndPersist mode of
+synchronization, the provider uses a push-based synchronization.
+The provider keeps track of the consumer servers that have requested
+a persistent search and sends them necessary updates as the provider
+replication content gets modified.
+
+With syncrepl, a consumer server can create a replica without
+changing the provider's configurations and without restarting the
+provider server, if the consumer server has appropriate access
+privileges for the DIT fragment to be replicated. The consumer
+server can stop the replication also without the need for provider-side
+changes and restart.
+
+Syncrepl supports both partial and sparse replications.  The shadow
+DIT fragment is defined by a general search criteria consisting of
+base, scope, filter, and attribute list.  The replica content is
+also subject to the access privileges of the bind identity of the
+syncrepl replication connection.
 
 
 H2: The LDAP Content Synchronization Protocol
 
-The LDAP Sync protocol allows a client to maintain a synchronized copy
-of a DIT fragment. The LDAP Sync operation is defined as a set of
-controls and other protocol elements which extend the LDAP search
+The LDAP Sync protocol allows a client to maintain a synchronized
+copy of a DIT fragment. The LDAP Sync operation is defined as a set
+of controls and other protocol elements which extend the LDAP search
 operation. This section introduces the LDAP Content Sync protocol
 only briefly. For more information, refer to the Internet Draft
 {{The LDAP Content Synchronization Operation
@@ -71,275 +72,277 @@ only briefly. For more information, refer to the Internet Draft
 
 The LDAP Sync protocol supports both polling and listening for
 changes by defining two respective synchronization operations:
-{{refreshOnly}} and {{refreshAndPersist}}.
-Polling is implemented by the {{refreshOnly}} operation.
-The client copy is synchronized to the server copy at the time of polling.
-The server finishes the search operation by returning {{SearchResultDone}}
-at the end of the search operation as in the normal search.
-The listening is implemented by the {{refreshAndPersist}} operation.
-Instead of finishing the search after returning all entries currently
-matching the search criteria, the synchronization search remains
-persistent in the server. Subsequent updates to the synchronization content
-in the server cause additional entry updates to be sent to the client.
+{{refreshOnly}} and {{refreshAndPersist}}.  Polling is implemented
+by the {{refreshOnly}} operation.  The client copy is synchronized
+to the server copy at the time of polling.  The server finishes the
+search operation by returning {{SearchResultDone}} at the end of
+the search operation as in the normal search.  The listening is
+implemented by the {{refreshAndPersist}} operation.  Instead of
+finishing the search after returning all entries currently matching
+the search criteria, the synchronization search remains persistent
+in the server. Subsequent updates to the synchronization content
+in the server cause additional entry updates to be sent to the
+client.
 
 The {{refreshOnly}} operation and the refresh stage of the
-{{refreshAndPersist}} operation can be performed with 
-a present phase or a delete phase.
+{{refreshAndPersist}} operation can be performed with a present
+phase or a delete phase.
 
 In the present phase, the server sends the client the entries updated
-within the search scope since the last synchronization. The server sends
-all requested attributes, be it changed or not, of the updated entries.
-For each unchanged entry which remains in the scope,
-the server sends a present message consisting only of the name of the
+within the search scope since the last synchronization. The server
+sends all requested attributes, be it changed or not, of the updated
+entries.  For each unchanged entry which remains in the scope, the
+server sends a present message consisting only of the name of the
 entry and the synchronization control representing state present.
 The present message does not contain any attributes of the entry.
-After the client receives all update and present entries,
-it can reliably determine the new client copy by adding the entries
-added to the server, by replacing the entries modified at the server,
-and by deleting entries in the client copy which have not
-been updated nor specified as being present at the server.
-
-The transmission of the updated entries in the delete phase is 
-the same as in the present phase. The server sends all the requested
+After the client receives all update and present entries, it can
+reliably determine the new client copy by adding the entries added
+to the server, by replacing the entries modified at the server, and
+by deleting entries in the client copy which have not been updated
+nor specified as being present at the server.
+
+The transmission of the updated entries in the delete phase is the
+same as in the present phase. The server sends all the requested
 attributes of the entries updated within the search scope since the
 last synchronization to the client. In the delete phase, however,
 the server sends a delete message for each entry deleted from the
-search scope, instead of sending present messages.
-The delete message consists only of the name of the entry
-and the synchronization control representing state delete.
-The new client copy can be determined by adding, modifying, and
-removing entries according to the synchronization control
-attached to the {{SearchResultEntry}} message.
-
-In the case that the LDAP Sync server maintains a history store
-and can determine which entries are scoped out of the client
-copy since the last synchronization time, the server can use
-the delete phase. If the server does not maintain any history store,
-cannot determine the scoped-out entries from the history store,
-or the history store does not cover the outdated synchronization
-state of the client, the server should use the present phase.
-The use of the present phase is much more efficient than a full
-content reload in terms of the synchronization traffic.
-To reduce the synchronization traffic further,
-the LDAP Sync protocol also provides several optimizations
-such as the transmission of the normalized {{EX:entryUUID}}s and the
-transmission of multiple {{EX:entryUUIDs}} in a single
+search scope, instead of sending present messages.  The delete
+message consists only of the name of the entry and the synchronization
+control representing state delete.  The new client copy can be
+determined by adding, modifying, and removing entries according to
+the synchronization control attached to the {{SearchResultEntry}}
+message.
+
+In the case that the LDAP Sync server maintains a history store and
+can determine which entries are scoped out of the client copy since
+the last synchronization time, the server can use the delete phase.
+If the server does not maintain any history store, cannot determine
+the scoped-out entries from the history store, or the history store
+does not cover the outdated synchronization state of the client,
+the server should use the present phase.  The use of the present
+phase is much more efficient than a full content reload in terms
+of the synchronization traffic.  To reduce the synchronization
+traffic further, the LDAP Sync protocol also provides several
+optimizations such as the transmission of the normalized {{EX:entryUUID}}s
+and the transmission of multiple {{EX:entryUUIDs}} in a single
 {{syncIdSet}} message.
 
-At the end of the {{refreshOnly}} synchronization,
-the server sends a synchronization cookie to the client as a state
-indicator of the client copy after the synchronization is completed.
-The client will present the received cookie when it requests
-the next incremental synchronization to the server.
-
-When {{refreshAndPersist}} synchronization is used,
-the server sends a synchronization cookie at the end of the
-refresh stage by sending a Sync Info message with TRUE refreshDone.
-It also sends a synchronization cookie by attaching it to
-{{SearchResultEntry}} generated in the persist stage of the
-synchronization search. During the persist stage, the server
-can also send a Sync Info message containing the synchronization
-cookie at any time the server wants to update the client-side state
-indicator.  The server also updates a synchronization indicator
-of the client at the end of the persist stage.
-
-In the LDAP Sync protocol, entries are uniquely identified by
-the {{EX:entryUUID}} attribute value. It can function as a reliable
+At the end of the {{refreshOnly}} synchronization, the server sends
+a synchronization cookie to the client as a state indicator of the
+client copy after the synchronization is completed.  The client
+will present the received cookie when it requests the next incremental
+synchronization to the server.
+
+When {{refreshAndPersist}} synchronization is used, the server sends
+a synchronization cookie at the end of the refresh stage by sending
+a Sync Info message with TRUE refreshDone.  It also sends a
+synchronization cookie by attaching it to {{SearchResultEntry}}
+generated in the persist stage of the synchronization search. During
+the persist stage, the server can also send a Sync Info message
+containing the synchronization cookie at any time the server wants
+to update the client-side state indicator.  The server also updates
+a synchronization indicator of the client at the end of the persist
+stage.
+
+In the LDAP Sync protocol, entries are uniquely identified by the
+{{EX:entryUUID}} attribute value. It can function as a reliable
 identifier of the entry. The DN of the entry, on the other hand,
-can be changed over time and hence cannot be considered as the reliable
-identifier.  The {{EX:entryUUID}} is attached to each {{SearchResultEntry}}
-or {{SearchResultReference}} as a part of the synchronization control.
+can be changed over time and hence cannot be considered as the
+reliable identifier.  The {{EX:entryUUID}} is attached to each
+{{SearchResultEntry}} or {{SearchResultReference}} as a part of the
+synchronization control.
 
 
 H2: Syncrepl Details
 
 The syncrepl engine utilizes both the {{refreshOnly}} and the
-{{refreshAndPersist}} operations of the LDAP Sync protocol.
-If a syncrepl specification is included in a database definition,
-{{slapd}} (8) launches a syncrepl engine as a {{slapd}} (8) thread
-and schedules its execution. If the {{refreshOnly}} operation is
-specified, the syncrepl engine will be rescheduled at the interval
-time after a synchronization operation is completed.
-If the {{refreshAndPersist}} operation is specified, the engine will
-remain active and process the persistent synchronization messages
-from the provider.
-
-The syncrepl engine utilizes both the present phase and the
-delete phase of the refresh synchronization. It is possible to
-configure a per-scope session log in the provider server
-which stores the {{EX:entryUUID}}s of a finite
-number of entries deleted from a replication content.
-Multiple replicas of single provider content share the same
-per-scope session log. The syncrepl engine uses the delete phase
-if the session log is present and the state of the consumer
-server is recent enough that no session log entries are truncated
-after the last synchronization of the client.
-The syncrepl engine uses the present phase if no session log
-is configured for the replication content or if the
-consumer replica is too outdated to be covered by the session log.
-The current design of the session log store is memory based, so
-the information contained in the session log is not persistent
-over multiple provider invocations. It is not currently supported
-to access the session log store by using LDAP operations. It is
-also not currently supported to impose access control to the session log.
-
-As a further optimization, even in the case the synchronization search
-is not associated with any session log, no entries will be transmitted
-to the consumer server when there has been no update in the replication
-context.
+{{refreshAndPersist}} operations of the LDAP Sync protocol.  If a
+syncrepl specification is included in a database definition, {{slapd}}
+(8) launches a syncrepl engine as a {{slapd}} (8) thread and schedules
+its execution. If the {{refreshOnly}} operation is specified, the
+syncrepl engine will be rescheduled at the interval time after a
+synchronization operation is completed.  If the {{refreshAndPersist}}
+operation is specified, the engine will remain active and process
+the persistent synchronization messages from the provider.
+
+The syncrepl engine utilizes both the present phase and the delete
+phase of the refresh synchronization. It is possible to configure
+a per-scope session log in the provider server which stores the
+{{EX:entryUUID}}s of a finite number of entries deleted from a
+replication content.  Multiple replicas of single provider content
+share the same per-scope session log. The syncrepl engine uses the
+delete phase if the session log is present and the state of the
+consumer server is recent enough that no session log entries are
+truncated after the last synchronization of the client.  The syncrepl
+engine uses the present phase if no session log is configured for
+the replication content or if the consumer replica is too outdated
+to be covered by the session log.  The current design of the session
+log store is memory based, so the information contained in the
+session log is not persistent over multiple provider invocations.
+It is not currently supported to access the session log store by
+using LDAP operations. It is also not currently supported to impose
+access control to the session log.
+
+As a further optimization, even in the case the synchronization
+search is not associated with any session log, no entries will be
+transmitted to the consumer server when there has been no update
+in the replication context.
 
 The syncrepl engine, which is a consumer-side replication engine,
 can work with any backends. The LDAP Sync provider can be configured
-as an overlay on any backend, but works best with the {{back-bdb}} or
-{{back-hdb}} backend. The provider can not support refreshAndPersist
-mode on {{back-ldbm}} due to limits in that backend's locking architecture.
+as an overlay on any backend, but works best with the {{back-bdb}}
+or {{back-hdb}} backend. The provider can not support refreshAndPersist
+mode on {{back-ldbm}} due to limits in that backend's locking
+architecture.
 
 The LDAP Sync provider maintains a {{EX:contextCSN}} for each
 database as the current synchronization state indicator of the
 provider content.  It is the largest {{EX:entryCSN}} in the provider
-context such that no transactions for an entry having
-smaller {{EX:entryCSN}} value remains outstanding.
-The {{EX:contextCSN}} could not just be set to the largest issued
-{{EX:entryCSN}} because {{EX:entryCSN}} is obtained before
-a transaction starts and transactions are not committed in the
-issue order.
+context such that no transactions for an entry having smaller
+{{EX:entryCSN}} value remains outstanding.  The {{EX:contextCSN}}
+could not just be set to the largest issued {{EX:entryCSN}} because
+{{EX:entryCSN}} is obtained before a transaction starts and
+transactions are not committed in the issue order.
 
 The provider stores the {{EX:contextCSN}} of a context in the
 {{EX:contextCSN}} attribute of the context suffix entry. The attribute
 is not written to the database after every update operation though;
-instead it is maintained primarily in memory. At database start time
-the provider reads the last saved {{EX:contextCSN}} into memory and
-uses the in-memory copy exclusively thereafter. By default, changes
-to the {{EX:contextCSN}} as a result of database updates will not be
-written to the database until the server is cleanly shut down. A
-checkpoint facility exists to cause the contextCSN to be written
-out more frequently if desired.
-
-Note that at startup time, if the
-provider is unable to read a {{EX:contextCSN}} from the suffix entry,
-it will scan the entire database to determine the value, and this
-scan may take quite a long time on a large database. When a {{EX:contextCSN}}
-value is read, the database will still be scanned for any {{EX:entryCSN}}
-values greater than it, to make sure the {{EX:contextCSN}} value truly
-reflects the greatest committed {{EX:entryCSN}} in the database. On
-databases which support inequality indexing, setting an eq index
-on the {{EX:entryCSN}} attribute and configuring {{contextCSN}} checkpoints
-will greatly speed up this scanning step.
-
-If no {{EX:contextCSN}} can be determined by reading and scanning the
-database, a new value will be generated. Also, if scanning the database
-yielded a greater {{EX:entryCSN}} than was previously recorded in the
-suffix entry's {{EX:contextCSN}} attribute, a checkpoint will be immediately
-written with the new value.
-
-The consumer stores its replica state, which is the provider's
-{{EX:contextCSN}} received as a synchronization cookie,
-in the {{EX:syncreplCookie}} attribute of the immediate child
-of the context suffix whose DN is {{cn=syncrepl<rid>,<suffix>}}
-and object class is {{EX:syncConsumerSubentry}}.
-The replica state maintained by a consumer server is used as the
-synchronization state indicator when it performs subsequent incremental
-synchronization with the provider server. It is also used as a
-provider-side synchronization state indicator when it functions as
-a secondary provider server in a cascading replication configuration.
-<rid> is the replica ID uniquely identifying the replica locally in the
-syncrepl consumer server. <rid> is an integer which has no more than
-three decimal digits.
-
-It is possible to retrieve the
-{{EX:syncConsumerSubentry}} by performing an LDAP search with
-the respective entry as the base object and with the base scope.
-
-Because a general search filter can be used in the syncrepl specification,
-some entries in the context may be omitted from the synchronization content.
-The syncrepl engine creates a glue entry to fill in the holes
-in the replica context if any part of the replica content is
-subordinate to the holes. The glue entries will not be returned
-as the search result unless {{ManageDsaIT}} control is provided.
+instead it is maintained primarily in memory. At database start
+time the provider reads the last saved {{EX:contextCSN}} into memory
+and uses the in-memory copy exclusively thereafter. By default,
+changes to the {{EX:contextCSN}} as a result of database updates
+will not be written to the database until the server is cleanly
+shut down. A checkpoint facility exists to cause the contextCSN to
+be written out more frequently if desired.
+
+Note that at startup time, if the provider is unable to read a
+{{EX:contextCSN}} from the suffix entry, it will scan the entire
+database to determine the value, and this scan may take quite a
+long time on a large database. When a {{EX:contextCSN}} value is
+read, the database will still be scanned for any {{EX:entryCSN}}
+values greater than it, to make sure the {{EX:contextCSN}} value
+truly reflects the greatest committed {{EX:entryCSN}} in the database.
+On databases which support inequality indexing, setting an eq index
+on the {{EX:entryCSN}} attribute and configuring {{contextCSN}}
+checkpoints will greatly speed up this scanning step.
+
+If no {{EX:contextCSN}} can be determined by reading and scanning
+the database, a new value will be generated. Also, if scanning the
+database yielded a greater {{EX:entryCSN}} than was previously
+recorded in the suffix entry's {{EX:contextCSN}} attribute, a
+checkpoint will be immediately written with the new value.
+
+The consumer also stores its replica state, which is the provider's
+{{EX:contextCSN}} received as a synchronization cookie, in the
+{{EX:contextCSN}} attribute of the suffix entry.  The replica state
+maintained by a consumer server is used as the synchronization state
+indicator when it performs subsequent incremental synchronization
+with the provider server. It is also used as a provider-side
+synchronization state indicator when it functions as a secondary
+provider server in a cascading replication configuration.  Since
+the consumer and provider state information are maintained in the
+same location within their respective databases, any consumer can
+be promoted to a provider (and vice versa) without any special
+actions.
+
+Because a general search filter can be used in the syncrepl
+specification, some entries in the context may be omitted from the
+synchronization content.  The syncrepl engine creates a glue entry
+to fill in the holes in the replica context if any part of the
+replica content is subordinate to the holes. The glue entries will
+not be returned in the search result unless {{ManageDsaIT}} control
+is provided.
 
 Also as a consequence of the search filter used in the syncrepl
-specification, it is possible for a modification to remove an
-entry from the replication scope even though the entry has not
-been deleted on the provider. Logically the entry must be deleted on the
-consumer but in {{refreshOnly}} mode the provider cannot detect
-and propagate this change without the use of the session log.
+specification, it is possible for a modification to remove an entry
+from the replication scope even though the entry has not been deleted
+on the provider. Logically the entry must be deleted on the consumer
+but in {{refreshOnly}} mode the provider cannot detect and propagate
+this change without the use of the session log.
+
 
 H2: Configuring Syncrepl
 
 Because syncrepl is a consumer-side replication engine, the syncrepl
-specification is defined in {{slapd.conf}} (5) of the consumer server,
-not in the provider server's configuration file.
-The initial loading of the replica content can be performed either
-by starting the syncrepl engine with no synchronization cookie
-or by populating the consumer replica by adding and demoting an
-{{TERM:LDIF}} file dumped as a backup at the provider.
-{{slapadd}} (8) supports the replica promotion and demotion.
+specification is defined in {{slapd.conf}} (5) of the consumer
+server, not in the provider server's configuration file.  The initial
+loading of the replica content can be performed either by starting
+the syncrepl engine with no synchronization cookie or by populating
+the consumer replica by adding an {{TERM:LDIF}} file dumped as a
+backup at the provider.
 
 When loading from a backup, it is not required to perform the initial
-loading from the up-to-date backup of the provider content. The syncrepl
-engine will automatically synchronize the initial consumer replica to
-the current provider content. As a result, it is not required
-to stop the provider server in order to avoid the replica inconsistency
-caused by the updates to the provider content during the
-content backup and loading process.
+loading from the up-to-date backup of the provider content. The
+syncrepl engine will automatically synchronize the initial consumer
+replica to the current provider content. As a result, it is not
+required to stop the provider server in order to avoid the replica
+inconsistency caused by the updates to the provider content during
+the content backup and loading process.
 
 When replicating a large scale directory, especially in a bandwidth
 constrained environment, it is advised to load the consumer replica
-from a backup instead of performing a full initial load using syncrepl.
+from a backup instead of performing a full initial load using
+syncrepl.
+
 
 H3: Set up the provider slapd
 
-The provider is implemented as an overlay, so the overlay itself must
-first be configured in {{slapd.conf}} (5) before it can be used. The
-provider has only two configuration directives, for setting checkpoints
-on the {{EX:contextCSN}} and for configuring the session log.
-Because the
-LDAP Sync search is subject to access control, proper access control
-privileges should be set up for the replicated content.
+The provider is implemented as an overlay, so the overlay itself
+must first be configured in {{slapd.conf}} (5) before it can be
+used. The provider has only two configuration directives, for setting
+checkpoints on the {{EX:contextCSN}} and for configuring the session
+log.  Because the LDAP Sync search is subject to access control,
+proper access control privileges should be set up for the replicated
+content.
 
 The {{EX:contextCSN}} checkpoint is configured by the
 
 >      syncprov-checkpoint <ops> <minutes>
 
-directive. Checkpoints are only tested after successful write operations.
-If {{<ops>}} operations or more than {{<minutes>}} time has passed
-since the last checkpoint, a new checkpoint is performed.
+directive. Checkpoints are only tested after successful write
+operations.  If {{<ops>}} operations or more than {{<minutes>}}
+time has passed since the last checkpoint, a new checkpoint is
+performed.
 
 The session log is configured by the
 
->      syncprov-sessionlog <sid> <size>
+>      syncprov-sessionlog <size>
 
-directive, where {{<sid>}} is the ID of the per-scope session log
-in the provider server and {{<size>}} is the maximum number of
-session log entries the session log can record. {{<sid>}}
-is an integer no longer than 3 decimal digits. If the consumer
-server sends a synchronization cookie containing {{sid=<sid>}}
-where {{<sid>}} matches the session log ID specified in the directive,
-the LDAP Sync search is to utilize the session log.
+directive, where {{<size>}} is the maximum number of session log
+entries the session log can record. When a session log is configured,
+it is automatically used for all LDAP Sync searches within the
+database.
 
 Note that using the session log requires searching on the {{entryUUID}}
-attribute. Setting an eq index on this attribute will greatly
-benefit the performance of the session log on the provider.
+attribute. Setting an eq index on this attribute will greatly benefit
+the performance of the session log on the provider.
 
 A more complete example of the {{slapd.conf}} content is thus:
 
 >      database bdb
 >      suffix dc=Example,dc=com
+>      rootdn dc=Example,dc=com
 >      directory /var/ldap/db
 >      index objectclass,entryCSN,entryUUID eq
 >
 >      overlay syncprov
 >      syncprov-checkpoint 100 10
->      syncprov-sessionlog 100
+>      syncprov-sessionlog 100
 
 
 H3: Set up the consumer slapd
 
-The syncrepl replication is specified in the database section
-of {{slapd.conf}} (5) for the replica context.
-The syncrepl engine is backend independent and the directive
-can be defined with any database type.
+The syncrepl replication is specified in the database section of
+{{slapd.conf}} (5) for the replica context.  The syncrepl engine
+is backend independent and the directive can be defined with any
+database type.
 
+>      database hdb
+>      suffix dc=Example,dc=com
+>      rootdn dc=Example,dc=com
+>      directory /var/ldap/db
+>      index objectclass,entryCSN,entryUUID eq
+>
 >      syncrepl rid=123
 >              provider=ldap://provider.example.com:389
 >              type=refreshOnly
@@ -349,54 +352,56 @@ can be defined with any database type.
 >              scope=sub
 >              attrs="cn,sn,ou,telephoneNumber,title,l"
 >              schemachecking=off
->              updatedn="cn=replica,dc=example,dc=com"
 >              bindmethod=simple
 >              binddn="cn=syncuser,dc=example,dc=com"
 >              credentials=secret
 
 In this example, the consumer will connect to the provider slapd
 at port 389 of {{FILE:ldap://provider.example.com}} to perform a
-polling ({{refreshOnly}}) mode of synchronization once a day.  It will
-bind as {{EX:cn=syncuser,dc=example,dc=com}} using simple authentication
-with password "secret".  Note that the access control privilege of
-{{EX:cn=syncuser,dc=example,dc=com}} should be set appropriately 
-in the provider to retrieve the desired replication content.
-The consumer will write to its database with the privilege of the
-{{EX:cn=replica,dc=example,dc=com}} entry as specified in the
-{{EX:updatedn=}} directive. The {{EX:updatedn}} entry should have
-write permission to the replica content.
+polling ({{refreshOnly}}) mode of synchronization once a day.  It
+will bind as {{EX:cn=syncuser,dc=example,dc=com}} using simple
+authentication with password "secret".  Note that the access control
+privilege of {{EX:cn=syncuser,dc=example,dc=com}} should be set
+appropriately in the provider to retrieve the desired replication
+content. Also the search limits must be high enough on the provider
+to allow the syncuser to retrieve a complete copy of the requested
+content.  The consumer uses the rootdn to write to its database so
+it always has full permissions to write all content.
 
 The synchronization search in the above example will search for the
-entries whose objectClass is organizationalPerson in the entire subtree
-rooted at {{EX:dc=example,dc=com}}. The requested attributes are
-{{EX:cn}}, {{EX:sn}}, {{EX:ou}}, {{EX:telephoneNumber}},
+entries whose objectClass is organizationalPerson in the entire
+subtree rooted at {{EX:dc=example,dc=com}}. The requested attributes
+are {{EX:cn}}, {{EX:sn}}, {{EX:ou}}, {{EX:telephoneNumber}},
 {{EX:title}}, and {{EX:l}}. The schema checking is turned off, so
-that the consumer {{slapd}} (8) will not enforce entry schema checking
-when it process updates from the provider {{slapd}} (8).
+that the consumer {{slapd}} (8) will not enforce entry schema
+checking when it process updates from the provider {{slapd}} (8).
 
-For more detailed information on the syncrepl directive,
-see the {{SECT:syncrepl}} section of {{SECT:The slapd Configuration File}}
+For more detailed information on the syncrepl directive, see the
+{{SECT:syncrepl}} section of {{SECT:The slapd Configuration File}}
 chapter of this admin guide.
-                     
+
+
 H3: Start the provider and the consumer slapd
 
 The provider {{slapd}} (8) is not required to be restarted.
-{{contextCSN}} is automatically generated as needed:
-it might originally contained in the {{TERM:LDIF}} file,
-generated by {{slapadd}} (8), generated upon changes in the context,
-or generated when the first LDAP Sync search arrived at the provider.
-
-When starting a consumer {{slapd}} (8), it is possible to provide a
-synchronization cookie as the {{-c cookie}} command line option
-in order to start the synchronization from a specific state.
-The cookie is a comma separated list of name=value pairs. Currently
-supported syncrepl cookie fields are {{csn=<csn>}}, {{sid=<sid>}}, and
-{{rid=<rid>}}. {{<csn>}} represents the current synchronization state
-of the consumer replica. {{<sid>}} is the identity of the per-scope
-session log to which this consumer will be associated. {{<rid>}} identifies
-a consumer replica locally within the consumer server. It is used to relate
-the cookie to the syncrepl definition in {{slapd.conf}} (5) which has
-the matching replica identifier.
-Both {{<sid>}} and {{<rid>}} have no more than 3 decimal digits.
-The command line cookie overrides the synchronization cookie
-stored in the consumer replica database.
+{{contextCSN}} is automatically generated as needed: it might be
+originally contained in the {{TERM:LDIF}} file, generated by
+{{slapadd}} (8), generated upon changes in the context, or generated
+when the first LDAP Sync search arrives at the provider.  If an
+LDIF file is being loaded which did not previously contain the
+{{contextCSN}}, the {{-w}} option should be used with {{slapadd}}
+(8) to cause it to be generated. This will allow the server to
+startup a little quicker the first time it runs.
+
+When starting a consumer {{slapd}} (8), it is possible to provide
+a synchronization cookie as the {{-c cookie}} command line option
+in order to start the synchronization from a specific state.  The
+cookie is a comma separated list of name=value pairs. Currently
+supported syncrepl cookie fields are {{csn=<csn>}} and {{rid=<rid>}}.
+{{<csn>}} represents the current synchronization state of the
+consumer replica.  {{<rid>}} identifies a consumer replica locally
+within the consumer server. It is used to relate the cookie to the
+syncrepl definition in {{slapd.conf}} (5) which has the matching
+replica identifier.  The {{<rid>}} must have no more than 3 decimal
+digits.  The command line cookie overrides the synchronization
+cookie stored in the consumer replica database.