Openldap
   HOME

TheInfoList



OR:

OpenLDAP is a free,
open-source Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use the source code, design documents, or content of the product. The open-source model is a decentralized sof ...
implementation of the
Lightweight Directory Access Protocol The Lightweight Directory Access Protocol (LDAP ) is an open, vendor-neutral, industry standard application protocol for accessing and maintaining distributed directory information services over an Internet Protocol (IP) network. Directory servi ...
(LDAP) developed by the OpenLDAP Project. It is released under its own BSD-style license called the OpenLDAP Public License. LDAP is a platform-independent protocol. Several common
Linux Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, which ...
distributions include OpenLDAP Software for LDAP support. The software also runs on
BSD The Berkeley Software Distribution or Berkeley Standard Distribution (BSD) is a discontinued operating system based on Research Unix, developed and distributed by the Computer Systems Research Group (CSRG) at the University of California, Berk ...
-variants, as well as
AIX Aix or AIX may refer to: Computing * AIX, a line of IBM computer operating systems *An Alternate Index, for a Virtual Storage Access Method Key Sequenced Data Set * Athens Internet Exchange, a European Internet exchange point Places Belgi ...
, Android,
HP-UX HP-UX (from "Hewlett Packard Unix") is Hewlett Packard Enterprise's proprietary implementation of the Unix operating system, based on Unix System V (initially System III) and first released in 1984. Current versions support HPE Integrity Ser ...
,
macOS macOS (; previously OS X and originally Mac OS X) is a Unix operating system developed and marketed by Apple Inc. since 2001. It is the primary operating system for Apple's Mac computers. Within the market of desktop and lapt ...
,
OpenVMS OpenVMS, often referred to as just VMS, is a multi-user, multiprocessing and virtual memory-based operating system. It is designed to support time-sharing, batch processing, transaction processing and workstation applications. Customers using Ope ...
,
Solaris Solaris may refer to: Arts and entertainment Literature, television and film * ''Solaris'' (novel), a 1961 science fiction novel by Stanisław Lem ** ''Solaris'' (1968 film), directed by Boris Nirenburg ** ''Solaris'' (1972 film), directed by ...
,
Microsoft Windows Windows is a group of several proprietary graphical operating system families developed and marketed by Microsoft. Each family caters to a certain sector of the computing industry. For example, Windows NT for consumers, Windows Server for serv ...
(NT and derivatives, e.g. 2000, XP, Vista, Windows 7, etc.), and
z/OS z/OS is a 64-bit operating system for IBM z/Architecture mainframes, introduced by IBM in October 2000. It derives from and is the successor to OS/390, which in turn was preceded by a string of MVS versions.Starting with the earliest: * O ...
.


History

The OpenLDAP project was started in 1998 by Kurt Zeilenga. The project started by cloning the LDAP reference source from the
University of Michigan , mottoeng = "Arts, Knowledge, Truth" , former_names = Catholepistemiad, or University of Michigania (1817–1821) , budget = $10.3 billion (2021) , endowment = $17 billion (2021)As o ...
where a long-running project had supported development and evolution of the
LDAP The Lightweight Directory Access Protocol (LDAP ) is an open, vendor-neutral, industry standard application protocol for accessing and maintaining distributed directory information services over an Internet Protocol (IP) network. Directory servi ...
protocol until that project's final release in 1996. , the OpenLDAP project has four core team members: Howard Chu (chief architect), Quanah Gibson-Mount, Hallvard Furuseth, and Kurt Zeilenga. There are numerous other important and active contributors including Ondrej Kuznik, Luke Howard, Ryan Tandy, and Gavin Henry. Past core team members include Pierangelo Masarati.


Components

OpenLDAP has four main components: *
slapd The SLAPD (Standalone LDAP Daemon) and SLURPD (Stand-alone LDAP update replication daemon) originally evolved within the long-running project that developed the LDAP protocol. It was developed at the University of Michigan, and was the first Light ...
– stand-alone LDAP
daemon Daimon or Daemon (Ancient Greek: , "god", "godlike", "power", "fate") originally referred to a lesser deity or guiding spirit such as the daimons of ancient Greek religion and Greek mythology, mythology and of later Hellenistic religion and Hell ...
and associated modules and tools. * lloadd - stand-alone LDAP load balancing proxy server * libraries implementing the LDAP
protocol Protocol may refer to: Sociology and politics * Protocol (politics), a formal agreement between nation states * Protocol (diplomacy), the etiquette of diplomacy and affairs of state * Etiquette, a code of personal behavior Science and technolog ...
and
ASN.1 Abstract Syntax Notation One (ASN.1) is a standard interface description language for defining data structures that can be serialized and deserialized in a cross-platform way. It is broadly used in telecommunications and computer networking, and ...
Basic Encoding Rules (BER) * client software: ldapsearch, ldapadd, ldapdelete, and others Additionally, the OpenLDAP Project is home to a number of subprojects: * JLDAP – LDAP class libraries for Java * JDBC-LDAP – Java
JDBC Java Database Connectivity (JDBC) is an application programming interface (API) for the programming language Java, which defines how a client may access a database. It is a Java-based data access technology used for Java database connectivity. I ...
– LDAP Bridge driver * ldapc++ – LDAP class libraries for
C++ C++ (pronounced "C plus plus") is a high-level general-purpose programming language created by Danish computer scientist Bjarne Stroustrup as an extension of the C programming language, or "C with Classes". The language has expanded significan ...
* LMDB – memory-mapped database library


Backends


Overall concept

Historically the OpenLDAP server (slapd, the Standalone LDAP Daemon) architecture was split between a frontend that handles network access and protocol processing, and a backend that deals strictly with data storage. This split design was a feature of the original University of Michigan code written in 1996 and carried on in all subsequent OpenLDAP releases. The original code included one main database backend and two experimental/demo backends. The architecture is modular and many different backends are now available for interfacing to other technologies, not just traditional databases. Note: In older (1.x) releases, the terms "backend" and "database" were often used interchangeably. To be precise, a "backend" is a class of storage interface, and a "database" is an instance of a backend. The slapd server can use arbitrarily many backends at once, and can have arbitrarily many instances of each backend (i.e., arbitrarily many databases) active at once.


Available backends

Currently 17 different backends are provided in the OpenLDAP distribution, and various third parties are known to maintain other backends independently. The standard backends are loosely organized into three different categories: * Data storage backends – these actually store data ** back-bdb: the first transactional backend for OpenLDAP, built on
Berkeley DB Berkeley DB (BDB) is an unmaintained embedded database software library for key/value data, historically significant in open source software. Berkeley DB is written in C with API bindings for many other programming languages. BDB stores arbitr ...
, removed with OpenLDAP 2.5. ** back-hdb: a variant of back-bdb that is fully hierarchical and supports subtree renames, removed with OpenLDAP 2.5. ** back-ldif: built on plain text
LDIF The LDAP Data Interchange Format (LDIF) is a standard plain text data interchange format for representing Lightweight Directory Access Protocol (LDAP) directory content and update requests. LDIF conveys directory content as a set of records, on ...
files ** back-mdb: a transactional backend built on OpenLDAP's
Lightning Memory-Mapped Database Lightning Memory-Mapped Database (LMDB) is a software library that provides an embedded transactional database in the form of a key-value store. LMDB is written in C with API bindings for several programming languages. LMDB stores arbitrary ...
(LMDB) ** back-ndb: a transactional backend built on MySQL's NDB cluster engine, removed with OpenLDAP 2.6. ** back-wiredtiger: an experimental transactional backend built on
WiredTiger WiredTiger is a NoSQL, Open Source extensible platform for data management. It is released under version 2 or 3 of the GNU General Public License. WiredTiger uses MultiVersion Concurrency Control ( MVCC) architecture. MongoDB acquired WiredTiger ...
, introduced with OpenLDAP 2.5. * Proxy backends – these act as gateways to other data storage systems ** back-asyncmeta: an asynchronous proxy with meta-directory features, introduced with OpenLDAP 2.5. ** back-ldap: simple proxy to other LDAP servers ** back-meta: proxy with meta-directory features ** back-passwd: uses a Unix system's passwd and group data ** back-relay: internally redirects to other slapd backends ** back-sql: talks to arbitrary SQL databases, deprecated with OpenLDAP 2.5. * Dynamic backends – these generate data on the fly ** back-config: slapd configuration via LDAP ** back-dnssrv: Locates LDAP servers via DNS ** back-monitor: slapd statistics via LDAP ** back-null: a sink/no-op backend, analogous to Unix /dev/null ** back-perl: invokes arbitrary perl modules in response to LDAP requests, deprecated with OpenLDAP 2.5. ** back-shell: invokes shell scripts for LDAP requests, removed with OpenLDAP 2.5. ** back-sock: forwards LDAP requests over IPC to arbitrary daemons Some backends available in older OpenLDAP releases have been retired from use, most notably back-ldbm which was inherited from the original UMich code, and back-tcl which was similar to back-perl and back-shell. Support for other backends will soon be withdrawn as well. back-ndb is removed now since the partnership with MySQL that led to its development was terminated by Oracle after Oracle acquired MySQL. back-bdb and back-hdb have been removed in favor of back-mdb since back-mdb is superior in all aspects of performance, reliability, and manageability. In practice, backends like -perl and -sock allow interfacing to any arbitrary programming language, thus providing limitless capabilities for customization and expansion. In effect the slapd server becomes an RPC engine with a compact, well-defined and ubiquitous API.


Overlays


Overall concept

Ordinarily an LDAP request is received by the frontend, decoded, and then passed to a backend for processing. When the backend completes a request, it returns a result to the frontend, which then sends the result to the LDAP client. An overlay is a piece of code that can be inserted between the frontend and the backend. It is thus able to intercept requests and trigger other actions on them before the backend receives them, and it can also likewise act on the backend's results before they reach the frontend. Overlays have complete access to the slapd internal APIs, and so can invoke anything the frontend or other backends could perform. Multiple overlays can be used at once, forming a stack of modules between the frontend and the backend. Overlays provide a simple means to augment the functionality of a database without requiring that an entirely new backend be written, and allow new functionalities to be added in compact, easily debuggable and maintainable modules. Since the introduction of the overlay feature in OpenLDAP 2.2 many new overlays have been contributed from the OpenLDAP community.


Available overlays

Currently there are 25 overlays in the core OpenLDAP distribution, with another 24 overlays in the user-contributed code section, and more awaiting approval for inclusion. * The core overlays include: ** accesslog: log server activity in another LDAP database, for LDAP-accessible logging ** auditlog: log server activity in a flat text file ** autoca: Automatic Certificate Authority (OpenLDAP 2.5) ** chain: intercept referrals and chain them instead; code is part of back-ldap ** collect: implement X.500-style collective attributes (aka Netscape Class Of Service) ** constraint: restrict the acceptable values for particular attributes ** dds: dynamic data service – short-lived, self-expiring entries ** deref: return information about entries referenced in a given search result ** dyngroup: simple dynamic group support ** dynlist: more sophisticated dynamic group support plus more ** homedir: Remote home directory provisioning (OpenLDAP 2.5) ** memberof: support for memberOf and similar backlink attributes ** otp: allows OATH One-Time Passwords to be used in conjunction with the LDAP user password (OpenLDAP 2.5) ** pcache: cache search results, mainly to improve performance for proxied servers ** ppolicy: LDAP Password Policy – password quality, expiration, etc. ** refint: referential integrity ** remoteauth: Allows delegation of authentication requests to remote directories. Works with Active Directory. (OpenLDAP 2.5) ** retcode: set predetermined return codes for various operations; used for client debugging ** rwm: rewrite module, for various alterations of LDAP data ** seqmod: serialize writes to individual entries ** sssvlv: Server Side Sorting and Virtual List Views ** syncprov: Syncrepl Provider, implements the master side of a replication agreement ** translucent: Semi-transparent pass-through, for locally augmenting data on a proxied server ** unique: for enforcing uniqueness of attribute values within a tree ** valsort: maintain various sort orders for values of an attribute * The contrib overlays include: ** addpartial: receive Add requests and turn them into Modifies if the target entry already exists ** adremap: remaps attributes for PAM/NSS MS AD support (OpenLDAP 2.5) ** allop: returns all operational attributes, for clients that don't know how to request them ** authzid: implements RFC 3829 support (OpenLDAP 2.5) ** autogroup: dynamically managed static groups ** cloak: hide attributes unless explicitly requested in a search ** datamorph: stores enumerated values and fixed size integers (OpenLDAP 2.5) ** denyop: reject arbitrarily configured requests ** dupent: return multivalued results as separate entries ** lastbind: record the timestamp of a user's last successful authentication ** lastmod: maintain the timestamp of the last change within a tree ** nops: filter out redundant modifies ** noopsrch: count entries that would be returned by a search ** nssov: Answer NSS and PAM requests directly in slapd, replaces nss-ldap and pam-ldap. ** ppm: adds additional password checking criteria to the slapo-ppolicy overlay (OpenLDAP 2.5) ** proxyOld: support an obsolete encoding of ProxyAuthz used by Sun et al. ** pw-radius: allows bind operations to be passed to the specified radius server(s) (OpenLDAP 2.5) ** rbac: intercepts, decodes and enforces specific RBAC policies per the Apache Fortress RBAC data formats (OpenLDAP 2.5) ** smbk5pwd: Maintain Samba and Kerberos passwords ** trace: Log every LDAP request and response ** totp: provides one time password support (OpenLDAP 2.5) ** usn: Update Sequence Numbers (OpenLDAP 2.5) ** variant: allows attributes/values to be shared between several entries (OpenLDAP 2.5) ** vc: provides the verify credentials extended operation (OpenLDAP 2.5)


Other modules

Backends and overlays are the two most commonly used types of modules. Backends were typically built into the slapd binary, but they may also be built as dynamically loaded modules, and overlays are usually built as dynamic modules. In addition, slapd supports dynamic modules for implementing new LDAP syntaxes, matching rules, controls, and extended operations, as well as for implementing custom access control mechanisms and password hashing mechanisms. OpenLDAP also supports SLAPI, the plugin architecture used by Sun and Netscape/Fedora/Red Hat. In current releases, the SLAPI framework is implemented inside a slapd overlay. While many plugins written for Sun/Netscape/Fedora/Red Hat are compatible with OpenLDAP, very few members of the OpenLDAP community use SLAPI.


Available modules

* Native slapd modules ** acl/posixgroup – support posixGroup membership in access controls ** comp_match – support component-based matching ** kinit – maintain/refresh a Kerberos TGT for slapd ** passwd/ – additional password hashing mechanisms. Currently includes Kerberos, Netscape,
RADIUS In classical geometry, a radius ( : radii) of a circle or sphere is any of the line segments from its center to its perimeter, and in more modern usage, it is also their length. The name comes from the latin ''radius'', meaning ray but also the ...
, and
SHA-2 SHA-2 (Secure Hash Algorithm 2) is a set of cryptographic hash functions designed by the United States National Security Agency (NSA) and first published in 2001. They are built using the Merkle–Damgård construction, from a one-way compression ...
. * SLAPI plugins ** addrdnvalue – add RDN value to an entry if it was omitted in an Add request


Release summary

The major (functional) releases of OpenLDAP Software include: * OpenLDAP Version 1 was a general clean-up of the last release from the University of Michigan project (release 3.3), and consolidation of additional changes. * OpenLDAP Version 2.0, released in August 2000, included major enhancements including LDAP version 3 (LDAPv3) support, Internet Protocol version 6 (
IPv6 Internet Protocol version 6 (IPv6) is the most recent version of the Internet Protocol (IP), the communication protocol, communications protocol that provides an identification and location system for computers on networks and routes traffic ...
) support, and numerous other enhancements. * OpenLDAP Version 2.1, released in June 2002, included the transactional database backend (based on Berkeley Database or BDB),
Simple Authentication and Security Layer Simple Authentication and Security Layer (SASL) is a framework for authentication and data security in Internet protocols. It decouples authentication mechanisms from application protocols, in theory allowing any authentication mechanism supported ...
(SASL) support, and Meta, Monitor, and Virtual experimental backends. * OpenLDAP Version 2.2, released in December 2003, included the LDAP "sync" Engine with replication support (syncrepl), the overlay interface, and numerous database and RFC-related functional enhancements. * OpenLDAP Version 2.3, released in June 2005, included the Configuration Backend (dynamic configuration), additional overlays including RFC-compliant Password Policy software, and numerous additional enhancements. * OpenLDAP Version 2.4, released in October 2007, introduced N-way MultiMaster replication, Stand-by master, and the ability to delete and modify Schema elements on the fly, plus many more. * OpenLDAP Version 2.5, released in April 2021, introduced the LDAP load balancing proxy server, LDAP transaction support, HA proxy protocol v2 support, plus much more. * OpenLDAP Version 2.6, released in October 2021, introduced additional load balancing strategies and additional options to improve coherence with certain LDAP controls and extended operations to the LDAP Load Balancer Daemon and the ability to log directly to a file rather than via syslog for both slapd and lloadd


Replication

OpenLDAP supports replication using Content Synchronization as specified in RFC 4533. This spec is hereafter referred to as "syncrepl". In addition to the base specification, an enhancement known as delta-syncrepl is also supported. Additional enhancements have been implemented to support
multi-master replication Multi-master replication is a method of database replication which allows data to be stored by a group of computers, and updated by any member of the group. All members are responsive to client data queries. The multi-master replication system i ...
.


syncrepl

The basic synchronization operation is described in RFC 4533. The protocol is defined such that a persistent database of changes is not required. Rather the set of changes is implied via change sequence number (CSN) information stored in each entry and optimized via an optional session log which is particularly useful to track recent deletes. The model of operation is that a replication client (consumer) sends a "content synchronizing search" to a replication server (provider). The consumer can provide a cookie in this search (especially when it has been in sync with the provider previously). In the OpenLDAP implementation of the RFC 4533, this cookie includes the latest CSN that has been received from the provider (called the contextCSN). The provider then returns as search results (or, see optimization below, sync info replies) the present (unchanged entry only used in the present phase of the refresh stage) (no attributes), added, modified (represented in the refresh phase as an add with all current attributes), or deleted (no attributes) entries to put the consumer into a synchronized state based on what is known via their cookie. If the cookie is absent or indicates that the consumer is totally out of sync, then the provider will, in the refresh stage, send an add for each entry it has. In the ideal case, the refresh stage of the response contains only a delete phase with just a small set of adds (including those that represent the current result of modifies) and deletes that have occurred since the time the consumer last synchronized with the provider. However, due to limited session log state (also non-persistent) kept in the provider, a present phase may be required, particularly including the presentation of all unchanged entries as a means (inefficient) of implying what has been deleted in the provider since the consumer last synchronized. The search can be done in either refresh or refreshAndPersist mode, which implies what stages occur. The refresh stage always occurs first. During the refresh stage, two phases may occur: present and delete, where present always occurs before delete. The phases are delimited via a sync info response that specifies which phase is completed. The refresh and persist stages are also delimited via such sync info response. An optional optimization to more compactly represent a group of entries that are to be presented or deleted is to use a sync info response containing a syncIdSet that identifies the list of entryUUID values of those entries. The present phase is differentiated from the delete phase as follows. Entries that present unchanged entries may only be returned in the present phase. Entries that delete entries may only be provided in the delete phase. In either phase, add entries (including adds that represent all current attributes of modified entries) can be returned. At the end of a present phase, each entry that the consumer has that was not identified in an add entry or present response during the present phase is implicitly no longer in the provider and thus must be deleted at the consumer so as to synchronize the consumer with the provider. Once the persist stage begins, the provider sends search results that indicate only the add, modify and delete of entries (no present unchanged entry indications) for those entries changed since the refresh stage completed. The persist stage continues indefinitely, meaning that search has no final "done" response. By contrast, in the refresh mode only a refresh stage occurs and such stage completes with a done response that also ends the present or delete phase (whichever phase was currently active).


delta-syncrepl

This protocol keeps a persistent database of write accesses (changes) and can represent each modify precisely (meaning only the attributes that have changed). It is still built on the standard syncrepl specification, which always sends changes as complete entries. But in delta-syncrepl, the transmitted entries are actually sent from a log database, where each change in the main database is recorded as a log entry. The log entries are recorded using the LDAP Log Schema.


See also

*
List of LDAP software The following is a list of software programs that can communicate with and/or host directory services via the Lightweight Directory Access Protocol (LDAP). Client software Cross-platform * Admin4 - an open source LDAP browser and directory cl ...


References


External links

*
The OpenLDAP Foundation


A tutorial on the OpenLDAP client API

article by Marty Heyman 13 September 2007 {{Use dmy dates, date=July 2020 Free software programmed in C Cross-platform free software Directory services