Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SLAPO-DDS(5)		       File Formats Manual		    SLAPO-DDS(5)

NAME
     slapo-dds - Dynamic Directory Services overlay to slapd

SYNOPSIS
     /usr/local/etc/openldap/slapd.conf

DESCRIPTION
     The  dds  overlay	to  slapd(8) implements dynamic objects as per RFC 2589.
     The name dds stands for Dynamic Directory Services.  It allows one  to  de-
     fine dynamic objects, characterized by the dynamicObject objectClass.

     Dynamic objects have a limited lifetime, determined by a time-to-live (TTL)
     that  can	be  refreshed by means of a specific refresh extended operation.
     This operation allows one to set the Client Refresh  Period  (CRP),  namely
     the  period  between refreshes that is required to preserve the dynamic ob-
     ject from expiration.  The expiration time is computed by	adding	the  re-
     quested  TTL  to  the  current time.  When dynamic objects reach the end of
     their lifetime without being  further  refreshed,	they  are  automatically
     deleted.	There  is  no guarantee of immediate deletion, so clients should
     not count on it.

     Dynamic objects can have subordinates, provided these also are dynamic  ob-
     jects.   RFC 2589 does not specify what the behavior of a dynamic directory
     service should be when a dynamic object  with  (dynamic)  subordinates  ex-
     pires.  In this implementation, the lifetime of dynamic objects with subor-
     dinates is prolonged until all the dynamic subordinates expire.

     This slapd.conf(5) directive adds the dds overlay to the current database:

     overlay dds

     The  database must have a rootdn specified, otherwise, the dds overlay will
     not be able to delete expired objects. The dds overlay may be used with any
     backend that implements the add, modify,  search,	and  delete  operations.
     Since  its use may result in many internal entry lookups, adds and deletes,
     it should be best used in conjunction with backends  that	have  reasonably
     good write performances.

     The  config directives that are specific to the dds overlay are prefixed by
     dds-, to avoid potential conflicts with directives specific to the underly-
     ing database or to other stacked overlays.

     dds-max-ttl <time>
	    Specifies the max TTL value.  This is also	the  default  TTL  newly
	    created  dynamic  objects  receive,  unless  dds-default-ttl is set.
	    When the client with a refresh extended  operation	requests  a  TTL
	    higher  than  it, sizeLimitExceeded is returned.  This value must be
	    between 86400 (1 day, the default)	and  31557600  (1  year  plus  6
	    hours, as per RFC 2589).

     dds-min-ttl <time>
	    Specifies the min TTL value; clients requesting a lower TTL by means
	    of the refresh extended operation actually obtain this value as CRP.
	    If set to 0 (the default), no lower limit is set.

     dds-default-ttl <time>
	    Specifies  the  default TTL value that newly created dynamic objects
	    get.  If set to 0 (the default), the dds-max-ttl is used.

     dds-interval <time>
	    Specifies the interval between  expiration	checks;  defaults  to  1
	    hour.

     dds-tolerance <time>
	    Specifies  an  extra  time	that is added to the timer that actually
	    wakes up the thread that will delete an expired dynamic object.   So
	    the  nominal lifetime of the entry is that specified in the entryTtl
	    attribute, but its lifetime will actually be entryTtl  +  tolerance.
	    Note  that	there is no guarantee that the lifetime of a dynamic ob-
	    ject will be exactly the requested TTL; due  to  implementation  de-
	    tails,  it may be longer, which is allowed by RFC 2589.  By default,
	    tolerance is 0.

     dds-max-dynamicObjects <num>
	    Specifies the maximum number of dynamic objects that can  simultane-
	    ously  exist  within a naming context.  This allows one to limit the
	    amount of resources (mostly in terms of  run-queue	size)  that  are
	    used by dynamic objects.  By default, no limit is set.

     dds-state {TRUE|false}
	    Specifies  if  the	Dynamic Directory Services feature is enabled or
	    not.  By default it is; however, a proxy does not need to keep track
	    of dynamic objects itself, it only needs to inform the frontend that
	    support for dynamic objects is available.

ACCESS CONTROL
     The dds overlay restricts the refresh operation by requiring manage  access
     to the entryTtl attribute (see slapd.access(5) for details about the manage
     access privilege).  Since the entryTtl is an operational, NO-USER-MODIFICA-
     TION attribute, no direct write access to it is possible.	So the dds over-
     lay  turns  refresh extended operation into an internal modification to the
     value of the entryTtl attribute with the relax control set.

     RFC 2589 recommends that anonymous clients should not be allowed to refresh
     a dynamic object.	This can be implemented by appropriately crafting access
     control to obtain the desired effect.

     Example: restrict refresh to authenticated clients

	    access to attrs=entryTtl
		 by users manage
		 by * read

     Example: restrict refresh to the creator of the dynamic object

	    access to attrs=entryTtl
		 by dnattr=creatorsName manage
		 by * read

     Another suggested usage of dynamic objects is to  implement  dynamic  meet-
     ings;  in this case, all the participants to the meeting are allowed to re-
     fresh the meeting object, but only the creator can delete it (otherwise  it
     will be deleted when the TTL expires)

     Example:  assuming  participant is a valid DN-valued attribute, allow users
     to start a meeting and to join it; restrict refresh  to  the  participants;
     restrict delete to the creator

	    access to dn.base="cn=Meetings"
		      attrs=children
		 by users write

	    access to dn.onelevel="cn=Meetings"
		      attrs=entry
		 by dnattr=creatorsName write
		 by * read

	    access to dn.onelevel="cn=Meetings"
		      attrs=participant
		 by dnattr=creatorsName write
		 by users selfwrite
		 by * read

	    access to dn.onelevel="cn=Meetings"
		      attrs=entryTtl
		 by dnattr=participant manage
		 by * read

REPLICATION
     This implementation of RFC 2589 provides a restricted interpretation of how
     dynamic  objects  replicate.   Only the provider takes care of handling dy-
     namic object expiration, while consumers simply see the dynamic object as a
     plain object.

     When replicating these objects, one needs to explicitly exclude the dynami-
     cObject class and the entryTtl attribute.	This implementation of RFC  2589
     introduces a new operational attribute, entryExpireTimestamp, that contains
     the expiration timestamp.	This must be excluded from replication as well.

     The quick and dirty solution is to set schemacheck=off in the syncrepl con-
     figuration  and, optionally, exclude the operational attributes from repli-
     cation, using

	    syncrepl ...
		 exattrs=entryTtl,entryExpireTimestamp

     In any case the overlay must be either  statically  built	in  or	run-time
     loaded by the consumer, so that it is aware of the entryExpireTimestamp op-
     erational attribute; however, it must not be configured in the shadow data-
     base.   Currently, there is no means to remove the dynamicObject class from
     the entry; this may be seen as a feature, since it allows one  to	see  the
     dynamic properties of the object.

FILES
     /usr/local/etc/openldap/slapd.conf
	    default slapd configuration file

SEE ALSO
     slapd.conf(5), slapd-config(5), slapd(8).

AUTHOR
     Implemented by Pierangelo Masarati.

OpenLDAP 2.6.13 		   2026/03/09			    SLAPO-DDS(5)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=slapo-dds&sektion=5&manpath=FreeBSD+Ports+15.1.quarterly>

home | help