The Go Directory project is working towards releasing an LDAP package suite written entirely in Go.
This suite as a whole is undergoing heavy development and is considered purely EXPERIMENTAL. Breaking changes are guaranteed during this development phase. As such, it is not yet suitable for production environments.
All packages in this suite are released under the terms of the MIT license. See each repository's LICENSE file for details.
Community participation is greatly desired. This project is a gargantuan effort, and every bit helps. Email me if interested.
The go-directory suite is comprised of the following packages.
The UNRELEASED go-directory/dsa package implements the directory system agent (an LDAP server). It incorporates vjeantet/ldapserver and vjeantet/goldap/message through vendoring.
This package, though bulky in its own right, mainly serves as a conductor for all of the other packages (below) that are imported.
The go-directory/common package provides fundamental "common elements", such as error constants, helpers. It is considered a LOW LEVEL package, in that it does not import any other suite package itself, while all other suite packages import it.
Over time, this package will grow in attempt to address this issue.
The go-directory/config package implements a cn=config abstraction layer for use by go-directory/dsa. It serves as the persistent configuration element of the DSA, controlling runtime behavior and many other facets.
The go-directory/dib package implements the basis of the X.500 directory information base, from which directory information trees can emerge. The package supports both ephemeral (memory-based) and persistent (bolt DB file) storage backend options through simple transparent interfaces.
boltdb/bolt is an integral imported component of this package.
The go-directory/dua package implements the directory user agent (client). It is a (renamed) fork of go-ldap/ldap.
WARNING: Users should NOT import this package for their own client purposes. This package exists solely as a component of the go-directory/dsa package for communicating with other DSAs for the purposes of chaining, replication and other distribution-related functions.
Users should continue using the original go-ldap/ldap package.
This package is slated to be radically modified in service to this issue.
The go-directory/ldif package implements the LDAP Data Interchange Format. It is a fork of go-ldap/ldif.
WARNING: Users should NOT import this package for their own purposes. This package exists solely as a component of the go-directory/dsa package for backend purposes.
Users should continue using the original go-ldap/ldif package.
The go-directory/schema package implements a complete RFC 4512-compliant schema definition store and parser. The package supports the concepts of views, in which an authoritative *schema.SubschemaSubentry instance can "seed" specific separate and independents subschemaSubentry contexts.
The package contains the ldapSyntaxes, matchingRules, attributeTypes, matchingRuleUses, objectClasses, dITContentRules, nameForms and dITStructureRules syntax definitions not included in the go-directory/syntax package merely for reasons of logical separation.
The package also includes a package subdirectory at go-directory/schema/indexer. This package serves to "digest" an instance of *schema.SubschemaSubentry into a matrix of fast-lookup tables (maps).
The go-directory/syntax package is a near-complete implementation of RFC 4517. It contains myriad types and methods for most of the constructs defined in the aforementioned standard.
The main purpose of this package is to confirm a particular value complies with the associated syntax and, where applicable, to conduct EQUALITY, SUBSTR and ORDERING matching operations between so-called "real" values and an assertion value delivered by way of an LDAP search filter.
See the following subsections for more specialized syntaxes implemented from other standards or pseudo standards.
The go-directory/syntax/aci package is a complete Netscape/Sun ACIv3 implementation. It incorporates the ENTIRE specification into simple interrogative types produced by a reliable parser.
Though not a true standard, the ACIv3 specification has been adopted by nearly all directory server products on the market today. It is hardened and time tested.
This package does NOT include an ACDF (or, Access Control Decision Function). This functionality is intended to reside within the go-directory/dsa package itself, as it will involve both an analysis of one or more rules and correlative queries to the storage backend.
The go-directory/syntax/filter package is a complete interface-based RFC 4515 implementation. It offers a fast, reliable parser which produces easly-traversable types for assertion processing.
An ASN.1 BER codec is not yet implemented in this package, but this effort is coming.
The go-directory/syntax/subspec package is a complete interface-based RFC 3672 subtreeSpecification implementation.
The package offers a fast, reliable parser which produces easily-traversable types for subtree processing. In many respects, it mirrors the design and functionality of go-directory/syntax/filter. This package will be pivotal in terms of subentries and collective attribute functionality implementation planned for later this year.
This package includes an ASN.1 DER codec.
The go-directory/syntax/x509 package is a near-complete RFC 4523 implementation, offering syntaxes and matching rules for X.509 elements defined in the standard.
This package includes an ASN.1 DER codec.
- Jesse Coretta (project lead, maintainer)
- Valere Jeantet (maintainer of ldapserver and goldap)
- The maintainers of boltdb/bolt
- The maintainers of go-asn1-ber
- The maintainers of go-ldap/ldap and go-ldap/ldif