dwww Home | Manual pages | Find package

SLAPD-ASYNCMETA(5)            File Formats Manual            SLAPD-ASYNCMETA(5)

NAME
       slapd-asyncmeta - asynchronous metadirectory backend to slapd

SYNOPSIS
       /etc/ldap/slapd.conf

DESCRIPTION
       The  asyncmeta backend to slapd(8) performs basic LDAP proxying with re-
       spect to a set of remote LDAP servers, called "targets".   The  informa-
       tion  contained in these servers can be presented as belonging to a sin-
       gle Directory Information Tree (DIT).

       A good knowledge of the functionality of the slapd-meta(5)  backend   is
       recommended.    This   backend has been designed as an asynchronous ver-
       sion of the meta backend. Unlike meta , the operation  handling  threads
       are  no  longer pending on the response from the remote server, thus de-
       creasing the number of threads necessary to handle the same load.  While
       asyncmeta  maintains the functionality of meta and has a largely similar
       codebase, some changes in operation and some  new  configuration  direc-
       tives have been added. Some configuration options, such as conn-pool-max
       ,  conn-ttl , single-conn , and use-temporary-conn have been removed, as
       they are no longer relevant.

       New connection handling:

       Unlike meta, which caches bound connections, the asyncmeta works with  a
       configured  maximum  number of connections per target.  For each request
       redirected to a target, a different connection is selected.   Each  con-
       nection  has a queue, to which the request is added before it is sent to
       the remote server, and is removed after the last response for  that  re-
       quest is received.
        For  each  new  request,  a  new connection is chosen using round-robin
       scheduling.

       Overlays:

       Due to implementation specifics, there is no guarantee that any  of  the
       existing OpenLDAP overlays will work with asyncmeta backend.

EXAMPLES
       Refer to slapd-meta(5) for configuration examples.

CONFIGURATION
       These  slapd.conf options apply to the ASYNCMETA backend database.  That
       is, they must follow a "database asyncmeta" line  and  come  before  any
       subsequent  "backend"  or  "database" lines.  Other database options are
       described in the slapd.conf(5) manual page.

SPECIAL CONFIGURATION DIRECTIVES
       Target configuration starts with the "uri" directive.  All the  configu-
       ration  directives  that  are  not specific to targets should be defined
       first for clarity, including those that  are  common  to  all  backends.
       They are:

       default-target none
              This  directive forces the backend to reject all those operations
              that must resolve to a single target in  case  none  or  multiple
              targets are selected.  They include: add, delete, modify, modrdn;
              compare is not included, as well as bind since, as they don't al-
              ter  entries,  in  case of multiple matches an attempt is made to
              perform the operation on any  candidate  target,  with  the  con-
              straint  that  at most one must succeed.  This directive can also
              be used when processing targets to mark a specific target as  de-
              fault.

       dncache-ttl {DISABLED|forever|<ttl>}
              This  directive  sets  the  time-to-live  of  the DN cache.  This
              caches the target that holds a given DN to speed up target selec-
              tion in case multiple  targets  would  result  from  an  uncached
              search;  forever  means cache never expires; disabled means no DN
              caching; otherwise a valid ( > 0 ) ttl is required, in the format
              illustrated for the idle-timeout directive.

       onerr {CONTINUE|report|stop}
              This directive allows one to select the behavior in case an error
              is returned by one target during a  search.   The  default,  con-
              tinue,  consists in continuing the operation, trying to return as
              much data as possible.  If the value is set to stop,  the  search
              is  terminated as soon as an error is returned by one target, and
              the error is immediately propagated to the client.  If the  value
              is set to report, the search is continued to the end but, in case
              at least one target returned an error code, the first non-success
              error code is returned.

       max-timeout-ops <number>
              Specify the number of consecutive timed out requests, after which
              the connection will be considered faulty and dropped.

       max-pending-ops <number>
              The  maximum  number of pending requests stored in a connection's
              queue.  The  default  is  128.  When  this  number  is  exceeded,
              LDAP_BUSY will be returned to the client.

       max-target-conns <number>
              The   maximum   number   of   connections   per   target.  Unlike
              slapd-meta(5), no new connections will be created once this  num-
              ber is reached. The default value is 255.

       norefs <NO|yes>
              If  yes,  do  not return search reference responses.  By default,
              they are returned unless request is LDAPv2.  If  set  before  any
              target  specification,  it affects all targets, unless overridden
              by any per-target directive.

       noundeffilter <NO|yes>
              If yes, return success instead of searching if a filter is  unde-
              fined  or contains undefined portions.  By default, the search is
              propagated after replacing  undefined  portions  with  (!(object-
              Class=*)), which corresponds to the empty result set.  If set be-
              fore  any  target  specification,  it affects all targets, unless
              overridden by any per-target directive.

       protocol-version {0,2,3}
              This directive indicates what protocol version must  be  used  to
              contact  the remote server.  If set to 0 (the default), the proxy
              uses the same protocol version used by the client, otherwise  the
              requested protocol is used.  The proxy returns unwillingToPerform
              if  an operation that is incompatible with the requested protocol
              is attempted.  If set before any target specification, it affects
              all targets, unless overridden by any per-target directive.

       pseudoroot-bind-defer {YES|no}
              This directive, when set to yes, causes the authentication to the
              remote servers with the pseudo-root identity  (the  identity  de-
              fined in each idassert-bind directive) to be deferred until actu-
              ally  needed  by  subsequent operations.  Otherwise, all binds as
              the rootdn are propagated to the targets.

       quarantine <interval>,<num>[;<interval>,<num>[...]]
              Turns on quarantine of URIs that  returned  LDAP_UNAVAILABLE,  so
              that  an  attempt to reconnect only occurs at given intervals in-
              stead of any time a client requests an  operation.   The  pattern
              is: retry only after at least interval seconds elapsed since last
              attempt,  for  exactly  num times; then use the next pattern.  If
              num for the last pattern is "+", it retries  forever;  otherwise,
              no  more  retries  occur.   This directive must appear before any
              target specification; it affects all targets with the  same  pat-
              tern.

       rebind-as-user {NO|yes}
              If this option is given, the client's bind credentials are remem-
              bered  for  rebinds, when trying to re-establish a broken connec-
              tion, or when chasing a referral, if chase-referrals  is  set  to
              yes.

       session-tracking-request {NO|yes}
              Adds  session tracking control for all requests.  The client's IP
              and hostname, and the identity associated  to  each  request,  if
              known,  are sent to the remote server for informational purposes.
              This directive is incompatible with setting  protocol-version  to
              2.   If  set before any target specification, it affects all tar-
              gets, unless overridden by any per-target directive.

TARGET SPECIFICATION
       Target specification starts with a "uri" directive:

       uri <protocol>://[<host>]/<naming context> [...]
              Identical to meta.  See slapd-meta(5) for details.

       acl-authcDN <administrative DN for access control purposes>
              DN which is used to query the target server for acl checking,  as
              in  the  LDAP  backend; it is supposed to have read access on the
              target server to attributes used on the proxy for  acl  checking.
              There  is  no risk of giving away such values; they are only used
              to check permissions.  The acl-authcDN identity is  by  no  means
              implicitly  used  by  the  proxy  when the client connects anony-
              mously.

       acl-passwd <password>
              Password used with the acl-authcDN above.

       bind-timeout <microseconds>
              This directive defines the timeout, in  microseconds,  used  when
              polling  for  response after an asynchronous bind connection. See
              slapd-meta(5) for details.

       chase-referrals {YES|no}
              enable/disable automatic referral chasing, which is delegated  to
              the  underlying  libldap,  with rebinding eventually performed if
              the rebind-as-user directive is used.  The default  is  to  chase
              referrals.   If  set  before any target specification, it affects
              all targets, unless overridden by any per-target directive.

       client-pr {accept-unsolicited|DISABLE|<size>}
              This feature allows one to use RFC  2696  Paged  Results  control
              when  performing  search operations with a specific target, irre-
              spective of the client's request. See slapd-meta(5) for details.

       default-target [<target>]
              The "default-target" directive can also  be  used  during  target
              specification.   With no arguments it marks the current target as
              the default.  The optional number marks target  <target>  as  the
              default one, starting from 1.  Target <target> must be defined.

       filter <pattern>
              This  directive  allows specifying a regex(5) pattern to indicate
              what search filter terms are actually served by a target.

              In a search request, if the search filter matches the pattern the
              target is considered while fulfilling the request; otherwise  the
              target  is ignored. There may be multiple occurrences of the fil-
              ter directive for each target.

       idassert-authzFrom <authz-regexp>
              if defined, selects what local identities are authorized  to  ex-
              ploit  the identity assertion feature.  The string <authz-regexp>
              follows the rules  defined  for  the  authzFrom  attribute.   See
              slapd.conf(5),  section  related  to authz-policy, for details on
              the syntax of this field.

       idassert-bind    bindmethod=none|simple|sasl    [binddn=<simple     DN>]
              [credentials=<simple     password>]     [saslmech=<SASL    mech>]
              [secprops=<properties>] [realm=<realm>]  [authcId=<authentication
              ID>]   [authzId=<authorization  ID>]  [authz={native|proxyauthz}]
              [mode=<mode>]     [flags=<flags>]      [starttls=no|yes|critical]
              [tls_cert=<file>]       [tls_key=<file>]      [tls_cacert=<file>]
              [tls_cacertdir=<path>]       [tls_reqcert=never|allow|try|demand]
              [tls_reqsan=never|allow|try|demand]  [tls_cipher_suite=<ciphers>]
              [tls_ecname=<names>]         [tls_protocol_min=<major>[.<minor>]]
              [tls_crlcheck=none|peer|all]  Allows one to define the parameters
              of the authentication method that is internally used by the proxy
              to  authorize  connections  that  are  authenticated   by   other
              databases. See slapd-meta(5) for details.

       idle-timeout <time>
              This  directive causes a a persistent connection  to  be  dropped
              after it  has been idle for the specified  time.  The  connection
              will  be  re-created  the  next  time  it  is selected for use. A
              connection is considered idle if no attempts have  been  made  by
              the backend to use it to send a request to the backend server. If
              there  are  still  pending  requests in its queue, the connection
              will be dropped after the last request one has either received  a
              result or has timed out.

              [<d>d][<h>h][<m>m][<s>[s]]

              where  <d>,  <h>,  <m>  and <s> are respectively treated as days,
              hours,  minutes  and  seconds.   If   set   before   any   target
              specification,  it  affects all targets, unless overridden by any
              per-target directive.

       keepalive <idle>:<probes>:<interval>
              The keepalive parameter sets the  values  of  idle,  probes,  and
              interval  used  to  check  whether a socket is alive; idle is the
              number of seconds a connection needs to remain  idle  before  TCP
              starts  sending keepalive probes; probes is the maximum number of
              keepalive probes TCP should send before dropping the  connection;
              interval  is  interval  in  seconds  between individual keepalive
              probes.  Only some systems support  the  customization  of  these
              values; the keepalive parameter is ignored otherwise, and system-
              wide settings are used.

       tcp-user-timeout <milliseconds>
              If  non-zero,  corresponds  to  the  TCP_USER_TIMEOUT  set on the
              target connections,  overriding  the  operating  system  setting.
              Only some systems support the customization of this parameter, it
              is ignored otherwise and system-wide settings are used.

       map {attribute|objectclass} [<local name>|*] {<foreign name>|*}
              This  maps  object classes and attributes as in the LDAP backend.
              See slapd-ldap(5).

       network-timeout <time>
              Sets the network  timeout  value  after  which  poll(2)/select(2)
              following  a  connect(2)  returns  in  case  of no activity while
              sending an operation to the  remote  target.   The  value  is  in
              milliseconds,  and  it  can be specified as for idle-timeout.  If
              set before any target  specification,  it  affects  all  targets,
              unless overridden by any per-target directive.

       nretries {forever|never|<nretries>}
              This  directive  defines  how  many times forwarding an operation
              should be retried in case of temporary failure  in  contacting  a
              target.  The  number of retries is per operation, so if a bind to
              the  target  is  necessary  first,  the   remaining   number   is
              decremented.  If  defined  before  any  target  specification, it
              applies to all targets (by default, 3 times);  the  global  value
              can   be   overridden   by   redefinitions   inside  each  target
              specification.

       subtree-{exclude|include} <rule>
              This directive allows one to indicate what subtrees are  actually
              served by a target. See slapd-meta(5) for details.

       suffixmassage <local suffix> <remote suffix>
              slapd-asyncmeta  does  not support the rewrite engine used by the
              LDAP and META backends.  suffixmassage can be used to perform  DN
              suffix  rewriting,  the  same  way as the obsoleted suffixmassage
              directive previously used by the LDAP backend.

       t-f-support {NO|yes|discover}
              enable if the remote server supports absolute  filters  (see  RFC
              4526  for  details).   If set to discover, support is detected by
              reading the remote server's root DSE.  If set before  any  target
              specification,  it  affects all targets, unless overridden by any
              per-target directive.

       timeout [<op>=]<val> [...]
              This  directive  allows  one  to  set   per-operation   timeouts.
              Operations can be

              <op> ::= bind, add, delete, modrdn, modify, compare, search

              By default, the timeout for all operations is 2 seconds.

              See slapd-meta(5) for details.

       tls {none|[try-]start|[try-]propagate|ldaps}
              B      [starttls=no]      [tls_cert=<file>]      [tls_key=<file>]
              [tls_cacert=<file>]                        [tls_cacertdir=<path>]
              [tls_reqcert=never|allow|try|demand]
              [tls_reqsan=never|allow|try|demand]  [tls_cipher_suite=<ciphers>]
              [tls_ecname=<names>] [tls_crlcheck=none|peer|all]
              Specify TLS settings regular connections.

              If the first parameter is not "none" then this configures the TLS
              settings to  be  used  for  regular  connections.   The  StartTLS
              extended  operation will be used when establishing the connection
              unless the URI directive protocol scheme is  ldaps://.   In  that
              case  this  keyword  may  only be set to "ldaps" and the StartTLS
              operation will not be used.

              With propagate, the proxy issues the StartTLS operation  only  if
              the  original connection has a TLS layer set up.  The try- prefix
              instructs the  proxy  to  continue  operations  if  the  StartTLS
              operation failed; its use is not recommended.

              The  TLS  settings  default  to  the  same  as the main slapd TLS
              settings, except for  tls_reqcert  which  defaults  to  "demand",
              tls_reqsan  which  defaults  to  "allow",  and  starttls which is
              overshadowed by the first keyword and thus ignored.

              If set before any target specification, it affects  all  targets,
              unless overridden by any per-target directive.

SCENARIOS
       See slapd-meta(5) for configuration scenarios.

ACLs
       ACL behavior is identical to meta. See slapd-meta(5).

ACCESS CONTROL
       The  asyncmeta  backend does not honor all ACL semantics as described in
       slapd.access(5).  In general, access checking is delegated to the remote
       server(s).  Only read (=r) access to the entry pseudo-attribute  and  to
       the  other  attribute  values  of  the  entries  returned  by the search
       operation is honored, which is performed by the frontend.

FILES
       /etc/ldap/slapd.conf
              default slapd configuration file

SEE ALSO
       slapd.conf(5), slapd-ldap(5), slapd-meta(5), slapo-pcache(5),  slapd(8),
       regex(7), re_format(7).

AUTHOR
       Nadezhda Ivanova, based on back-meta by Pierangelo Masarati.

OpenLDAP 2.6.10+dfsg-1             2025/05/22                SLAPD-ASYNCMETA(5)

Generated by dwww version 1.16 on Tue Dec 16 05:00:25 CET 2025.