view Side-By-Side changes
Network Working Group M. Wahl INTERNET-DRAFT Critical Angle Inc. Replaces: RFC1777, RFC 17981777 T. Howes Netscape Communications Corp. S. KilleISODE ConsortiumIsode Limited Expires in six months from22 October 199625 March 1997 Intended Category: Standards Track Lightweight Directory Access Protocol (v3)<draft-ietf-asid-ldapv3-protocol-03.txt><draft-ietf-asid-ldapv3-protocol-04.txt> Table of Contents - see end of document. 1. Status of this Memo This document is an Internet-Draft. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." To learn the current status of any Internet-Draft, please check the "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow Directories on ds.internic.net (US East Coast), nic.nordu.net (Europe), ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific Rim). 2. Abstract The protocol described in this document is designed to provide access to directories supporting the X.500 models, while not incurring the resource requirements of the X.500 Directory Access Protocol (DAP). This protocol is specifically targeted at management applications and browser applications that provide read/write interactive access to directories. When used with a directory supporting the X.500 protocols, it is intended to be a complement to the X.500 DAP. Key aspects of this version of LDAP are: - All protocol elements ofLDAPLDAPv2 (RFC 1777)and CLDAP (RFC 1798)are supported.- Protocol elements areThe protocol is carried directly over TCP or other transport, bypassing much of the session/presentationoverhead. Connectionless transport (UDP) is also supported for efficient lookup operations.overhead of X.500 DAP. - Most protocol data elements can be encoded as ordinary strings (e.g., Distinguished Names). - Referrals to other servers may be returned. - SASL and SSL mechanisms may be used with LDAP to provide connection security services. Wahl,Howes &Howes, Kille[Page 1]Page 1 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996March 1997 -New featuresAttribute values and Distinguished Names have beenadded, such asinternationalized through theabilities to retrieve attribute values in binary or search results in pages. - Important featuresuse ofX.500(1993) and X.500(1997) are included. - Referrals to other servers can be returned.the ISO 10646 character set. - The protocol can be extended to supportbilaterally-definednew operations, and controls may be used to extend existing operations. -Several session controlsSchema may berequested bypublished in theclient.directory for use by clients. 3. Models Interest in X.500 [1] directory technologies in the Internet hasleadled to efforts to reduce the high"costcost ofentry"entry associated with use of these technologies. This document continues the efforts to define directory protocolalternatives: it updatesalternatives, updating the LDAP [2] protocolspecification, adding support for new features, including some support for connecting to X.500 services that implement the 1993 or 1997 edition protocols.specification. 3.1. Protocol Model The general model adopted by this protocol is one of clients performing protocol operations against servers. In this model, a client transmits a protocol request describing the operation to be performed to aserver, whichserver. The server is then responsible for performing the necessary operation(s) in the directory. Upon completion of the operation(s), the server returns a response containing any results or errors to the requesting client. In keeping with the goal of easing the costs associated with use of the directory, it is an objective of this protocol to minimize the complexity of clients so as to facilitate widespread deployment of applications capable ofutilizingusing the directory. Notethat,that although servers are required to return responses whenever such responses are defined in the protocol, there is no requirement for synchronous behavior on the part of either clients or servers. Requests and responses for multiple operations may be exchanged between a client and server in any order, provided the client eventually receives a response for every request that requires one. In LDAP versions 1 and 2, no provision was made for protocol servers returning referrals to clients. However, for improved performance and distribution this version of the protocol permits servers to return to clients referrals to otherservers if requested.servers. This allowsservers, if requested by clients,servers to offload the work of contacting other servers to progress operations.Clients may also request that no referrals be returned, in which case the server must ensure that the operation is performed against the directory, or else return an error. This is the default. Wahl, Howes & Kille [Page 2] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996Note thatthisthe core protocol operations defined in this document can be mapped to a strict subset of the X.500(1997) directory abstract service, so it can be cleanly provided by the DAP. However there is not a one-to-one mapping between LDAP protocol operations and DAP operations: server implementations acting as a gateway to X.500 directories may need to make multiple DAPrequests to perform extended operations.requests. 3.2. Data Model This section provides a brief introduction to the X.500 data model, as used by LDAP. Wahl, Howes, Kille Page 2 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 The LDAP protocol assumes there are one or more servers which jointly provide access to a Directory Information Tree (DIT). The tree is made up of entries. Entries have names: one or more attribute values from the entryitselfform its relative distinguished name (RDN), whichmustMUST be unique among all its siblings. The concatenation of the relative distinguished names of thelinesequence of entries from a particular entry to an immediate subordinate of the root of the tree forms that entry's Distinguished Name (DN), which is unique in the tree. An example of a Distinguished Name is CN=Steve Kille,O=ISODE Consortium,O=Isode Limited, C=GB Some servers may hold cache or shadow copies of entries, which can be used to answer search and comparison queries, but will return referrals or contact other servers if modification operations are requested. Servers which perform caching or shadowing MUST ensure that they do not violate any access control constraints placed on the data by the originating server. The largest collection of entries, starting at an entry that is mastered by a particular server, and including all its subordinates and their subordinates, down toan entry which isthe entries which are mastered byadifferentserver,servers, is termed a naming context.For example, in the following sample DIT, one server might master only the entry C=GB, and another server master both the entries O=Foo,C=US and O=Bar,C=US. Each of these entries are in a separate naming context.The root of the DIT isnot an entrya DSA-specific Entry (DSE) and not part of any namingcontext. (ROOT) | C=GB /------------/ \--------------\ O=Foo O=Bar 3.2.1context: each server has different attribute values in the root DSE. 3.2.1. Attributes of Entries Entries consist of a set of attributes. An attribute is a type with one or more associated values. The attributetype,type is identified by a short descriptive name and an OID (objectidentifier),identifier). The attribute type governs the maximum number of values permissible for an attribute of that type in an entry, the syntax to which the values must conform, thetypeskinds of matching which can be performed on values of that attribute, and other functions.Wahl, Howes & Kille [Page 3] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996An example of an attribute is "mail". There may be one or more values of this attribute, they must be IA5 strings, and they are case insensitive (e.g. "foo@bar.com" will match "FOO@BAR.COM"). Each entrymustMUST have an objectClass attribute. The objectClass attribute specifies the object classes of an entry, which along with the system and user schema determine the permitted attributes of an entry. Values of this attribute may be modified by clients, but the objectClass attribute cannot be removed. Servers may restrict the modifications of this attribute to prevent the basic structural class of the entry from being changed (e.g. one cannot change a person into a country).A small number ofWahl, Howes, Kille Page 3 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 Some attributes, termed operational attributes, are used by servers for administering the directory system itself. They are not returned in search results unlessthey wereexplicitly requested by name. Attributes which are not operational, such as "mail", will have their schema and syntax constraints enforced by servers, but servers will generally not make use of their values. Serversmust notMUST NOT permit clients to add attributes to an entry unless those attributes are permitted by the object class definitions, the schema controlling that entry (specified in the subschemasubentry- see below), or are operational attributes known to that server and used for administrative purposes. Note that there is a particular objectClass 'extensibleObject' defined in [5] which permits all user attributes to be present in an entry. Entries may contain, among others, the following operational attributes, defined in [5]. These attributes are maintained automatically by the server and are not modifiable by clients: - creatorsName: the Distinguished Name of the user who added this entry to the directory. - createTimestamp: the time this entry was added to the directory. - modifiersName: the Distinguished Name of the user who last modified this entry. - modifyTimestamp: the time this entry was last modified. - subschemaSubentry: the Distinguished Name of the subschemasubentryentry which controls the schema for this entry.- entryName: the Distinguished Name of the entry.Servers may implement other operational attributes.Servers which also make use of X.500(1993) protocols will provide support for more of the attributes defined in X.501, including administrativeRole and dseType. Some servers may permit the retrieval of subschema attributes directly from user entries. 3.2.23.2.2. SubschemaSubentry A subentry is a special kind of entry which is used by servers and holds attributes for administering the directory system. Subentries are defined in clause 11.6 of X.501 [6].Entries Subschemasubentriesentries are used for administering information about the directory schema, in particular the object classes and attribute types supported by directory servers.Wahl, Howes & Kille [Page 4] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996Aserver may provide access to one or moresingle subschemasubentries to permit clients to interrogate theentry contains all schemawhich is in force fordefinitions used by entries in a particular part of thedirectory.directory tree. A server which masters entries and permits clients to modify these entriesmustMUST implement and provide access to these subschemasubentries,entries, so that its clients may discover the attributes and object classes which are permitted to be present. It is strongly recommended that all other servers implementsubschema subentriesthis as well. The following fourattributes, defined in [6] with string representations in [5], mustattributes MUST be present in all subschemasubentries:entries: -CN:cn: this attributemustMUST be used to form the RDN of the subschemasubentry.entry. - objectClass: the attributemustMUST have at least the values "top" and "subschema". Wahl, Howes, Kille Page 4 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 - objectClasses: each value of this attribute specifies an object class known to the server. - attributeTypes: each value of this attribute specifies an attribute type known to the server. These are defined in [5]. Otheroperationalattributes may be present in subschemasubentries, in particular dseType, subtreeSpecification, ditStructureRules, nameForms, ditContentRules,entries, to reflect additional supported capabilities. These include matchingRules, matchingRuleUse,createTimestamp, creatorsName, modifyTimestamp, modifiersName, entryName, as describeddITStructureRules, dITContentRules and nameForms. Servers SHOULD provide the attributes createTimestamp and modifyTimestamp in[6].subschema entries, in order to allow clients to maintain their caches of schema information. Servers which follow X.500(93) models may implement subschema using the X.500 subschema mechanisms. LDAP clients MUST NOT assume that servers implement any of the other aspects of X.500 subschema. ClientsmustMUST only retrievetheseattributes from asubentrysubschema entry by requestingthem by name inabaseObjectbase object search of thesubentry.entry, where the search filter is "(objectClass=subschema)". (This will allow LDAPv3 servers which gateway to X.500 to detect that subentry information is being requested.) 3.3. Relationship to X.500 This document defines LDAP in terms of X.500 as an X.500 access mechanism. An LDAP servermustMUST act in accordance with the X.500(1993) series of ITURecommendationsrecommendations when providing the service. However, it is not required that an LDAP server make use of any X.500 protocols in providing this service, e.g. LDAP can be mapped onto any other directory system so long as the X.500 data and service model as used in LDAP is not violated in the LDAP interface. 3.4. Server-specific Data Requirements An LDAP servermustMUST provide information about itself and other information that is specific to each server. This is represented as a number of attributes located in the root DSE (DSA-Specific Entry), which is named with the zero-length LDAPDN. These attributes are retrievable if a client performs a base object search of theroot,root with filter "(objectClass=*)", however they are subject to access control restrictions.They must notThe root DSE MUST NOT be included if the client performs a subtree search starting from the root. Serversin general will notmay allow clients to modify these attributes.Wahl, Howes & Kille [Page 5] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996The following attributes of the root DSE are defined in section 5.1.3 of [5]. Additional attributes may be defined in later documents. -administratorAddress: a URL containing address of administrator. - currentTime: the current time. - serverName: the Distinguished Name of the server. - certificationPath: the server's certificate path. -namingContexts: naming contexts held in the server. Naming contexts are defined in section 17 of X.501 [6]. - subschemaSubentry: subschema subentries known by this server. Wahl, Howes, Kille Page 5 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 - altServer: alternative servers in case this one is later unavailable. - supportedExtension: list of supported extended operations. - supportedControl: list of supportedsessioncontrols. - supportedSASLMechanisms: list of supported SASL security features. - supportedLDAPVersion: LDAP versions implemented by the server. If the server does not masteror shadowentries and does not know the locations of schema information, the subschemaSubentry attributemustis notbepresent in the root DSE. If the serverholds master or shadow copies ofmasters directory entries under one or more schema rules, there may be any number of values of the subschemaSubentry attribute in the root DSE. 4. Elements of Protocol The LDAP protocol is described using Abstract Syntax Notation 1[3]. It(ASN.1) [3], and is typically transferred using a subset oftheASN.1 Basic EncodingRules.Rules [11]. In order to support future extensions to this protocol, clients and serversmustMUST ignore elements of SEQUENCEs whose tags they do not recognize. Note that unlike X.500, each change to the LDAP protocol other than through the extension mechanisms will have a different version number. A client will indicate the version it supports as part of the bind request, described in section4.1.2.4.2. If a client has not sent a bind, the server MUST assume that version 3 is supported in the client (since version 2 required that the client bind first). Clients may determine the protocol version a server supports by reading the supportedLDAPVersion attribute from the root DSE. Servers which implement version 3 or later versions MUST provide this attribute. Servers which only implement version 2 may not provide this attribute. 4.1. Common Elements This section describes the LDAPMessage envelope PDU format, as well as data type definitions which are used in the protocol operations. 4.1.1. Message Envelope For the purposes of protocol exchanges, all protocol operations are encapsulated in a common envelope, the LDAPMessage, which is defined as follows: Wahl,Howes &Howes, Kille[Page 6]Page 6 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996March 1997 LDAPMessage ::= SEQUENCE { messageID MessageID,cldapUserName LDAPDN OPTIONAL,protocolOp CHOICE { bindRequest BindRequest, bindResponse BindResponse, unbindRequest UnbindRequest, searchRequest SearchRequest, searchResEntry SearchResultEntry, searchResDone SearchResultDone, searchResRef SearchResultReference,searchResFull SearchResultFull,modifyRequest ModifyRequest, modifyResponse ModifyResponse, addRequest AddRequest, addResponse AddResponse, delRequest DelRequest, delResponse DelResponse, modDNRequest ModifyDNRequest, modDNResponse ModifyDNResponse, compareRequest CompareRequest, compareResponse CompareResponse, abandonRequest AbandonRequest,sessionRequest SessionRequest, sessionResponse SessionResponse,extendedReq ExtendedRequest, extendedResp ExtendedResponse}}, controls [0] Controls OPTIONAL } MessageID ::= INTEGER (0 .. maxInt) maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- The function of the LDAPMessage is to provide an envelope containing common fields required in all protocol exchanges. At this time the only common fields are the message ID andcldapUserName. All LDAPMessage envelopes encapsulating responses contain the messageID value ofthe controls. If the server receives a PDU from the client in which the LDAPMessage SEQUENCE tag cannot be recognized, the messageID cannot be parsed, the tag of the protocolOp is not recognized as a request, or the encoding structures or lengths of data fields are found to be incorrect, then the server MUST return the notice of disconnection described in section 4.4.1, with resultCode protocolError, and immediately close the connection. In other cases that the server cannot parse the request received by the client, the server MUST return an appropriate response to the request, with the resultCode set to protocolError. If the client receives a PDU from the server which cannot be parsed, the client may discard the PDU, or may abruptly close the connection. The ASN.1 type Controls is defined in section 4.1.12. 4.1.1.1. Message ID All LDAPMessage envelopes encapsulating responses contain the messageID value of the corresponding request LDAPMessage. Wahl, Howes, Kille Page 7 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 The message IDis required toof a request MUST have a value different from the values of any other requests outstanding in the LDAP session of which this message is a part. A clientmust notMUST NOT send a second request with the same message ID asanotheran earlier request on the same connection if thefirst request is outstanding. If it does so,client has not received the final response from the earlier request. Otherwise the behavior is undefined.Typically a client willTypical clients increment a counter for each request.For all requests except for search, unbind and abandon, the message ID is outstanding until the client receives the response for that operation. For a searchRequest which has not been abandoned, the message ID is outstanding until the SearchResultDone for that search is received. Wahl, Howes & Kille [Page 7] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996A clientmust notMUST NOT reuse the message id of an abandonRequest or of the abandoned operation until it has received a response from the server for another request invoked subsequent to the abandonRequest, as the abandonRequest itself does not have a response. 4.1.2. String Types ThecldapUserName identifies the requesting user for this message. It is only present for backwards compatibility with RFC 1798, if this LDAPMessage is carried in a connectionless transport protocol, such as UDP. Its significance is equivalent to a bind with a zero-length password. When the LDAP session is carried in a connection-oriented transport protocol this field must be absent. LDAPv3 client implementors must not use this field in connectionless requests, but instead concatenate a bind request with the other operations in the request. Concatenation and connectionless transport are described in section 5.1.3. 4.1.2. String Types The LDAPStringLDAPString is a notational convenience to indicate that, although strings of LDAPString type encode as OCTET STRING types, the ISO 10646[15][13] character set (a superset of Unicode) is used, encoded following the UTF-8 algorithm[16].[14]. Note that in the UTF-8algorithm,algorithm characters which are the same as ASCII(0000(0x0000 through007F)0x007F) are represented as that same ASCII character in a single byte. The other byte values are used to form a variable-length encoding of an arbitrary character. LDAPString ::= OCTET STRING The LDAPOID is a notational convenience to indicate that the permitted value of this string is a (UTF-8 encoded) dotted-decimal representation of an OBJECT IDENTIFIER. LDAPOID ::= OCTET STRING For example, 1.3.6.1.4.1.1466.1.2.3 4.1.3. Distinguished Name and Relative Distinguished Name An LDAPDN and a RelativeLDAPDN are respectively defined to be the representation of a Distinguished Name and a Relative Distinguished Name after encoding according to the specification in [4], such that <distinguished-name> ::= <name> <relative-distinguished-name> ::= <name-component> where <name> and <name-component> are as defined in [4]. LDAPDN ::= LDAPString RelativeLDAPDN ::= LDAPString Only Attribute Types can be present in a relative distinguished name component; the options of Attribute Descriptions (next section)must notMUST NOT be used in specifying distinguished names. Wahl,Howes &Howes, Kille[Page 8]Page 8 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996March 1997 4.1.4. Attribute Typeand DescriptionAn AttributeType takes on as its value the textual string associated with that AttributeType in its specification.This string must begin with a letter, and only contain ASCII letters and digit characters. If this string is not known, theAttributeTypewill take the ASCII representation of its::= LDAPString Each attribute type has a unique OBJECTIDENTIFIER,IDENTIFIER which has been assigned to it. This identifier may be written as decimal digits with components separated by periods,e.g.,e.g. "2.5.4.10".TheA specification may also assign one or more textual names for an attributetype strings which are used in this version of LDAP are described in [5].type. These names MUST begin with a letter, and only contain ASCII letters, digit characters and hyphens. They are case insensitive.AttributeType ::= LDAPString An AttributeDescription(These ASCII characters are identical to ISO 10646 characters whose UTF-8 encoding is asuperset of the definition ofsingle byte between 0x00 and 0x7F.) If theAttributeType. Itserver has a textual name for an attribute type, it MUST use that name for attributes returned in search results. The dotted-decimal OBJECT IDENTIFIER is only used if there is no textual name for an attribute type. Attribute type names are non-unique, as two different specifications may choose the sameASN.1 definition, but allows additional options to be specified. They are also case insensitive. AttributeDescriptionname. A server which masters or shadows entries SHOULD list all the attribute types it supports in the subschema entries, using the attributeTypes attribute. Servers which support an open-ended set of attributes SHOULD include at least the attributeTypes value for the 'objectClass' attribute. Clients MAY retrieve the attributeTypes value from subschema entries in order to obtain the OBJECT IDENTIFIER and other information associated with attribute types. Some attribute type names which are used in this version of LDAP are described in [5]. Servers may implement additional attribute types. 4.1.5. Attribute Description An AttributeDescription is a superset of the definition of the AttributeType. It has the same ASN.1 definition, but allows additional options to be specified. They are also case insensitive. AttributeDescription ::= LDAPString A value of AttributeDescription is based on the following BNF: <AttributeDescription> ::= <AttributeType> [ ";" <options> ] <options> ::= <option> | <option> ";" <options> <option> ::=<language-option> | <binary-option> | <dynamic-option> <language-option> ::= "lang=" <lang-code> <lang-code> ::= <printable-ascii> <binary-option> ::= "binary" <dynamic-option> ::= "dynamic" If the "binary" option is present, this overrides any string-based encoding representation defined for that attribute in [5]. Instead the attribute is to be transferred as an encoded binary value [11]. If the "lang=" option is present, this associates a natural language with values for that attribute. The binary and language options may both be present in an AttributeDescription. (The language code has no effect on the character set encoding for string representations of DirectoryString syntax values; UTF-8 is always used). If the "dynamic" option is present, this implies that the values are not permanent parts of the directory entry<opt-char> <opt-char>* <opt-char> ::= ASCII-equivalent letters, numbers andmay disappear unexpectedly.hyphen Wahl,Howes &Howes, Kille[Page 9]Page 9 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996March 1997 Examples of valid AttributeDescription:CN givenName;lang=en-US CN;lang=ja-JP-kanji CN;lang=ja-JP-romajicn userCertificate;binary1.3.6.1.4.1.1466.99.98.97;binary;dynamicOne option, "binary", is defined in this document. Additional documents may define other options. An AttributeDescription with one or more options is treated as a subtype of the attribute without any options. Options present in an AttributeDescription are neverexclusive and may be listedmutually exclusive. Implementations should generate the <options> list sorted in ascending order, and servers MUST treat anyorder. Not all options are applicable not every attribute, however. For example, if a client requests a "description" attribute,two AttributeDescription with the same AttributeType and options as equivalent. A servermay returnwill treat anattribute "description;lang=fr". However if the client requests a "description;lang=en", the server mustAttributeDescription with any options it does notreturn "description" or "description;lang=fr", but may return "description;lang=en;dynamic". Later documents may define additional options.implement as an unrecognized attribute type. The data type "AttributeDescriptionList" describes a list of 0 or more attribute types. (A list of zero elements has special significance in the Search request.) AttributeDescriptionList ::= SEQUENCE OF AttributeDescription4.1.5.4.1.5.1. Binary Option If the "binary" option is present in an AttributeDescription, it overrides any string-based encoding representation defined for that attribute in [5]. Instead the attribute is to be transferred as a binary value encoded using the Basic Encoding Rules [11]. The syntax of the binary value is an ASN.1 data type definition which is referenced by the "SYNTAX" part of the attribute type definition. The presence or absence of the "binary" option only affects the transfer of attribute values in protocol; servers store any particular attribute in a single format. If a client requests that a server return an attribute in the binary format, but the server cannot generate that format, the server MUST treat this attribute type as an unrecognized attribute type. Similarly, clients MUST NOT expect servers to return an attribute in binary format if the client requested that attribute by name without the binary option. This option is intended to be used with attributes whose syntax is a complex ASN.1 data type, and the structure of values of that type is needed by clients. Examples of this kind of syntax are "Certificate" and "CertificateList". 4.1.6. Attribute Value A field of type AttributeValue takes on as its value eitheran octeta string encoding of a AttributeValue data type, or an OCTET STRING containing an encoded binary value, depending on whether the "binary" option is present in the companion AttributeDescription to this AttributeValue. The definition of string encodings for different syntaxes and types may be found incompanions to this document,other documents, and in particular [5]. Wahl, Howes, Kille Page 10 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 AttributeValue ::= OCTET STRING Note that there is no defined limit on the size of this encoding; thus PDUs including multi-megabyte attributes (e.g. photographs) may be returned.If the client has limited memory or storage capabilities itAttributes maywish to set the attrSizeLimit session control before invoking a search operation. Clients and server implementors shouldbeaware that attributes whose type names they do not recognize maydefined which haveanarbitrary and non-printable syntax. Implementationsmust not eitherMUST NEITHER simply displayornor attempt to decode as ASN.1 a value if its syntax is not known. The implementation may attempt to discover the subschemasubentryof the source entry, and retrieve thevaluevalues of attributeTypes from it.Wahl, Howes & Kille [Page 10] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 4.1.6.4.1.7. Attribute Value Assertion The AttributeValueAssertion type definition is similar to the one in the X.500 directory standards. It contains an attribute description andaan equality matching rule assertion value suitable for that type. AttributeValueAssertion ::= SEQUENCE { attributeDesc AttributeDescription, assertionValue AssertionValue } AssertionValue ::= OCTET STRING If the "binary" option is present in attributeDesc, this signals to the server that the assertionValue is a binary encoding of the assertion value. For all the string-valued user attributes described in [5], the assertion value syntax is the same as the value syntax. Clients may use attribute values as assertion values in compare requests and search filters. Note however that the assertion syntax may be differentthanfrom the value syntax for operational attributes or for non-equality matching rules.4.1.7.These attributes may have an assertion syntax which contains only part of the value. See section 20.2.1.8 of X.501 [6] for examples. 4.1.8. Attribute An attribute consists of a type and one or more values of that type. (Though attributesmustMUST have at least one value when stored, due to access control restrictions the set may be empty when transferred in protocol. This is described in section 4.5.2, concerning the PartialAttributeList type.) Attribute ::= SEQUENCE { type AttributeDescription, vals SET OF AttributeValue }4.1.8.The order of attribute values within the vals set is undefined and implementation-dependent, and MUST NOT be relied upon. Wahl, Howes, Kille Page 11 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 4.1.9. Matching Rule Identifier An X.501(1993) Matching Rule is identified in the LDAP protocol by theASCIIprintable representation of its OBJECT IDENTIFIER, either as one of the strings given in [5], or as decimal digits with components separated by periods, e.g. "caseIgnoreIA5Match" or "1.3.6.1.4.1.453.33.33". MatchingRuleId ::= LDAPString4.1.9.Servers which support matching rules for use in extensibleMatch MUST list the matching rules they implement in subschema entries. This is done with the matchingRules and matchingRuleUse attributes. 4.1.10. Result Message The LDAPResult is the construct used in this protocol to return success or failure indications from servers to clients. In response to variousrequests,requests servers will return responses containing fields of type LDAPResult to indicate the final status of a protocol operation request. Wahl,Howes &Howes, Kille[Page 11]Page 12 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996March 1997 LDAPResult ::= SEQUENCE { resultCode ENUMERATED { success (0), operationsError (1), protocolError (2), timeLimitExceeded (3), sizeLimitExceeded (4), compareFalse (5), compareTrue (6), authMethodNotSupported (7), strongAuthRequired (8), -- 9 reserved -- referral (10), -- new adminLimitExceeded (11), -- new unavailableCriticalExtension (12), -- new -- 13-15 unused -- noSuchAttribute (16), undefinedAttributeType (17), inappropriateMatching (18), constraintViolation (19), attributeOrValueExists (20), invalidAttributeSyntax (21), -- 22-31 unused -- noSuchObject (32), aliasProblem (33), invalidDNSyntax (34), -- 35 reserved for undefined isLeaf -- aliasDereferencingProblem (36), -- 37-47 unused -- inappropriateAuthentication (48), invalidCredentials (49), insufficientAccessRights (50), busy (51), unavailable (52), unwillingToPerform (53), loopDetect (54), -- 55-63 unused -- namingViolation (64), objectClassViolation (65), notAllowedOnNonLeaf (66), notAllowedOnRDN (67), entryAlreadyExists (68), objectClassModsProhibited (69),resultsTooLarge (70),--cl only70 reserved for CLDAP -- affectsMultipleDSAs (71), -- new -- 72-79 unused -- other (80) }, -- 81-90 reserved for APIs -- matchedDN LDAPDN, errorMessage LDAPString, referral [3] Referral OPTIONAL } Wahl,Howes &Howes, Kille[Page 12]Page 13 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996March 1997 All the result codes with the exception of success, compareFalse and compareTrue are to be treated as meaning the operation could not be completed in its entirety. Most of the result codes are based on problem indications from X.511 error data types. Result codes from 16 to 21 indicate an AttributeProblem, codes 32, 33, 34 and 36 indicate a NameProblem, codes 48, 49 and 50 indicate a SecurityProblem, codes 51 to 54 indicate a ServiceProblem, and codes 64 to 69 and 71 indicates an UpdateProblem. If a client receives a result code which is not listed above, it is to be treated as an unknown error condition. The errorMessage field of this construct may, at theserversserver's option, be used to return a string containing a textual, human-readable (terminal control and page formatting characters should be avoided) error diagnostic. As this error diagnostic is not standardized, implementationsmust notMUST NOT rely on the values returned. If the server chooses not to return a textual diagnostic, the errorMessage field of the LDAPResult typemustMUST contain a zero length string. ForresultCodesresult codes of noSuchObject, aliasProblem, invalidDNSyntax and aliasDereferencingProblem, the matchedDN field is set to the name of the lowest entry (object or alias) in theDITdirectory that was matched. If no aliases were dereferenced while attempting to locate the entry, this will be a truncated form of the nameprovided.provided, or if aliases were dereferenced, of the resulting name, as defined in section 12.5 of X.511 [15]. The matchedDN field is to be set to aNULL DN (azero lengthstring)string with all other result codes.4.1.10.4.1.11. Referral The referral field is present in an LDAPResult if the LDAPResult.resultCode field value is referral, and absent with all other result codes. It contains a reference to another server (or set of servers) which may be accessed via LDAP or other protocols.At least one LDAPURL mustReferrals can bepresentreturned inthe Reference. Referral ::= SEQUENCEresponses to any operation request (except unbind and abandon which do not have responses). At least one LDAPURL MUST be present in the reference. Referral ::= SEQUENCE OF LDAPURL LDAPURL ::= LDAPString -- limited to characters permitted in URLs The clientmayMUST contactanyone of the listed URLs[14][7] of servers to continue the request. Each server in the listmustMUST be capable of processing the operation and presenting a consistent view of theDITdirectory to theclient.client, so the client may choose any URL in the list. (The mechanisms for how servers achieve this are outside the scope of this document.) Wahl, Howes, Kille Page 14 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 URLs for servers implementing the LDAP protocol are written according to [9]. If an alias was dereferenced, thedn<dn> part of the URLmustMUST be present, with the new target object name. If this is present, the clientmustMUST use this name in its next request to progressthis search,the operation, and if it is not present the client will use the same name as in the original request. Some servers (e.g. participating in distributed indexing) maychange theprovide an different filter in a referral for a search operation. If the filter part of the URL is present in an LDAPURL, the clientmustMUST use this filter in its next request to progress this search, and if it is not present the client MUST use the same filter as it used for that search. Note that UTF-8 characters appearing in a DN or search filter may not be legal for URLs (e.g. spaces) andmustMUST be escaped using the % method in RFC 1738.Wahl, Howes & Kille [Page 13] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996Other kinds of URLs may bereturnedreturned, so long as the operation could be performed using thatprotocol, and the client has indicated (in a session control) that it could support thatprotocol.If the client has not indicated that it4.1.12. Controls A control iscapable of handling referrals, the server must attempta way toprogress the referral on behalfspecify extension information. Controls which are sent as part ofthe client. Only if it fails to do so may it returnareferral, and the URLs in this referral must be of the LDAP form. 4.2. Bind Operation The function of the Bind Operation is to allow authentication informationrequest apply only tobe exchanged between the clientthat request andserver. The Bind Request is defined as follows: BindRequestare not saved. Controls ::=[APPLICATION 0]SEQUENCE{ version INTEGER (1 .. 127), name LDAPDN, authentication AuthenticationChoice } AuthenticationChoice ::= CHOICE { simple [0] OCTET STRING, -- 1 and 2 reserved sasl [3] SaslCredentials } SaslCredentialsOF Control Control ::= SEQUENCE {mechanism LDAPString, credentialscontrolType LDAPOID, criticality BOOLEAN DEFAULT FALSE, controlValue OCTET STRING OPTIONAL }ParametersThe controlType field MUST be a UTF-8 encoded dotted-decimal representation of an OBJECT IDENTIFIER which uniquely identifies theBind Request are: - version: A version number indicating the version of the protocol to be used in this protocol session.control. Thisdocument describes version 3 of the LDAP protocol. Note that thereprevents conflicts between control names. The criticality field isno version negotiation, andeither TRUE or FALSE. If theclient should just set this parameter toserver recognizes theversioncontrol type and itdesires. The client may request version 2, in which caseis appropriate for the operation, the servermust implement onlywill make use of theprotocol as described in [2], andcontrol when performing the operation. If the server does notreturn any v3-specific result codes or protocol fields. - name: The name ofrecognize thedirectory object thatcontrol type and theclient wishes to bind as. Thiscriticality fieldmay take on a null value (a zero length string) foris TRUE, thepurposes of anonymous binds, when authentication has been performed at a lower layer, or when using SASL credentials with a mechanism that includesserver MUST NOT perform theLDAPDN inoperation, and MUST instead return thecredentials. - authentication: information used to authenticateresultCode unsupportedCriticalExtension. If thename, if any, provided incontrol is not appropriate for theBind Request. Upon receipt of a Bind Request, a protocol server will authenticateoperation and criticality field is TRUE, therequesting client, if necessary. Theserverwill thenMUST NOT perform the operation, and MUST instead returna Bind Response totheclient indicatingresultCode unsupportedCriticalExtension. If thestatus ofcontrol is unrecognized or inappropriate but theauthentication. Wahl, Howes & Kille [Page 14] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 4.2.1. Sequencing ofcriticality field is FALSE, theBind Request For some authentication mechanisms, it may be necessaryserver MUST ignore the control. The controlValue contains any information associated with the control, and its format is defined for theclientcontrol. The server MUST be prepared toinvokehandle arbitrary contents of theBindRequest multiple times. If atcontrolValue octet string, including zero bytes. It is absent only if there is no value information which is associated with a control of its type. Wahl, Howes, Kille Page 15 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 This document does not define anystagecontrols. Controls may be defined in later documents. The definition of a control consists of: - theclient wishesOBJECT IDENTIFIER assigned toabortthebind process it should dropcontrol, - whether theunderlying connection. Clients must not invoke operations between two Bind requests made as part of a multi-stage bind. Unlike LDAP v2,control is always noncritical, always critical, or critical at theclient need not send a Bind Request inclient's option, - thefirst PDUformat of theconnection. The client may request any operations andcontrolValue contents of theserver must treat these as unauthenticated (unless authentication has already occurred at a lower layer). Ifcontrol. Servers list theserver requires thatcontrols which they recognize in theclient bind first,supportedControl attribute in theserver must reject any request other than binding or unbinding withroot DSE. 4.2. Bind Operation The function of the"operationsError" result. IfBind Operation is to allow authentication information to be exchanged between the clientdid not bind before sending a request and receives an operationsError, it must close the connection, reopen itandbegin again by first sending a PDU with aserver. The BindRequest. This will aid in interoperating with servers implementing other versionsRequest is defined as follows: BindRequest ::= [APPLICATION 0] SEQUENCE { version INTEGER (1 .. 127), name LDAPDN, authentication AuthenticationChoice } AuthenticationChoice ::= CHOICE { simple [0] OCTET STRING, -- 1 and 2 reserved sasl [3] SaslCredentials } SaslCredentials ::= SEQUENCE { mechanism LDAPString, credentials OCTET STRING } Parameters ofLDAP. Clients may send multiple bind requests on an association to change their credentials.the Bind Request are: - version: Asubsequent bind process hasversion number indicating theeffectversion ofabandoning all search and compare operations outstanding. Authentication or controls from earlier binds are subsequently ignored, and so if the bind fails,theconnection will be treated as anonymous. Clients must resend their session controls if needed after rebinding, as session controls may be resetprotocol todefaults by servers. 4.2.2 Authentication and Other Security Services The simple authentication option provides minimal authentication facilities, with the contentsbe used in this protocol session. This document describes version 3 of theauthentication field consisting only of a cleartext password.LDAP protocol. Note thatthe use of cleartext passwords is not recommended over open networks whenthere is noauthentication or encryption being performed by a lower layer; seeversion negotiation, and the"Security Considerations" section. If no authentication isclient just sets this parameter tobe performed, or has been performed at a lower layer, thenthesimple authentication option should be chosen, andversion it desires. If thepassword be of zero length. (This is often done by LDAPv2 clients.) The sasl choice allows for any mechanism defined for use with SASL [17] or listedclient requests protocol version 2, a server that supports the version 2 protocol as described inAppendix B to[2] will not return any v3-specific protocol fields. (Note that not all LDAP servers will support protocol version 2, since they may beused. The mechanism field containsunable to generate the attribute syntaxes associated with version 2.) - name: The name of themechanism. The credentials field contains the arbitrary data used for authentication, inside an OCTET STRING wrapper. Notedirectory object thatunlike some Internet application protocols where SASL is used, LDAP is not text-based, thus no base64 transformations are performedthe client wishes to bind as. This field may take on a null value (a zero length string) for thecredentials. If any SASL-based integritypurposes of anonymous binds, when authentication has been performed at a lower layer, orconfidentiality services are enabled, they take effect followingwhen using SASL credentials with a mechanism that includes thetransmission byLDAPDN in theserver and reception bycredentials. - authentication: information used to authenticate theclient ofname, if any, provided in thefinal BindResponse with resultCode success.Bind Request. Wahl,Howes &Howes, Kille[Page 15]Page 16 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 4.2.3.March 1997 Upon receipt of a BindResponseRequest, a protocol server will authenticate the requesting client, if necessary. The server will then return a Bind Responseis defined as follows. BindResponse ::= [APPLICATION 1] SEQUENCE { COMPONENTS OF LDAPResult, supportedVersion [5] INTEGER (1..127) OPTIONAL, serverURL [6] LDAPURL OPTIONAL, serverCreds [7] AuthenticationChoice OPTIONAL } A BindResponse consists simply of an indication fromto theserver ofclient indicating the status of theclient's request forauthentication.If the bind was successful,4.2.1. Sequencing of theresultCode will be success, otherwiseBind Request For some authentication mechanisms, itwillmay beone of: operationsError protocolError authMethodNotSupported strongAuthRequired referral inappropriateAuthentication invalidCredentials unavailable unavailableCriticalExtension Ifnecessary for the clientreceives a BindResponse response where the resultCode was protocolError and the supportedVersion field is absent, it must close the connection as the server will be unwillingtoaccept further operations. (This is for compatibility with earlier versions of LDAP.) The serverURL containsinvoke theURL of this LDAP server, if itBindRequest multiple times. If at any stage the client wishes toprovide an "authoritative" URL for itself. Typically this will be a URL of the "ldap:" type, indicatingabort theofficial host name,bind process it MAY unbind and MUST drop thenameunderlying connection. Clients MUST NOT invoke operations between two Bind requests made as part of a multi-stage bind. Unlike LDAP v2, theURL will containclient need not send a Bind Request in theencoded namefirst PDU of theserver itself.connection. TheserverCreds are usedclient may request any operations and the server MUST treat these aspart ofunauthenticated (unless authentication has already occurred at aSASL-defined bind mechanism; to allowlower layer). If the server requires that the clientto authenticatebind first, the serverto which it is communicating,MUST reject any request other than binding orto perform "challenge-response" authentication. If the client boundunbinding with thepassword choice, or"operationsError" result. If theSASL mechanism doesclient did notrequire the server to return information to the client,bind before sending a request and receives an operationsError, it may then send a Bind Request. If thisfield isalso fails or the client chooses not tobe included in the result. The supportedVersion field contains the minimum ofbind on theversion supplied by the client inexisting connection, it will close theBindRequestconnection, reopen it andthe highest version of LDAP supportedbegin again by first sending a PDU with a Bind Request. This will aid in interoperating with servers implementing other versions of LDAP. Clients MAY send multiple bind requests on a connection to change their credentials. A subsequent bind process has theserver. Ifeffect of abandoning all operations outstanding on theclient andconnection. (This simplifies serverboth implementimplementation.) Authentication from earlier binds are subsequently ignored, and so if theprotocol described in this document it will havebind fails, thevalue 3. This fieldconnection will beabsent when responding totreated as anonymous. If aversion 2SASL transfer encryption orearlier client. Wahl, Howes & Kille [Page 16] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 4.3. Unbind Operation The function ofintegrity mechanism has been negotiated, and that mechanism does not support theUnbind Operation ischanging of credentials from one identity toterminateanother, then the client MUST instead establish aprotocol session. The Unbind Operation is defined as follows: UnbindRequest ::= [APPLICATION 2] NULLnew connection. 4.2.2. Authentication and Other Security Services TheUnbind Operation has no response defined. Upon transmissionsimple authentication option provides minimal authentication facilities, with the contents of the authentication field consisting only ofan UnbindRequest,aprotocol client may assumecleartext password. Note that theprotocol session is terminated. Upon receiptuse ofan UnbindRequest,cleartext passwords is not recommended over open networks when there is no authentication or encryption being performed by aprotocol server may assume thatlower layer; see therequesting client"Security Considerations" section. If no authentication is to be performed, or hasterminated the session and that all outstanding requests may be discarded, and may closebeen performed at a lower layer, then theconnection. All session controls willsimple authentication option MUST beforgottenchosen, andsearch result caches willthe password becleared when a connection closes. 4.4. Session Control Operation SessionRequest ::= [APPLICATION 17] Controls SessionResponse ::= [APPLICATION 18] SEQUENCE { COMPONENTS OF LDAPResult, unsupportedCtlsof zero length. (This is often done by LDAPv2 clients.) The sasl choice allows for any mechanism defined for use with SASL [12]SEQUENCE OF LDAPString } Controls ::= SEQUENCE OF SEQUENCE { controlType LDAPString, criticality BOOLEAN DEFAULT FALSE, controlValueThe mechanism field contains the name of the mechanism. The credentials field contains the arbitrary data used for authentication, inside an OCTET STRING} Session Controlswrapper. Note that unlike some Internet application protocols where SASL is used, LDAP is not text-based, thus no base64 transformations arerequests madeperformed on the credentials. Wahl, Howes, Kille Page 17 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 If any SASL-based integrity or confidentiality services are enabled, they take effect following the transmission by the server and reception by the clientwhich affect its interactionof the final BindResponse with resultCode success. If theserver. Controls are not saved after a session unbinds or disconnects abruptly, and do not affect other sessions to this or other servers. Session controls do not affect operations which have alreadyconnection has beenrequested on this connection, e.g. ifauthenticated at a lower layer, the clientsendscan override this by sending asearchbind requestand subsequently sends a sessionControlRequest while the server isinthe middle of sending responses, the session controlswhichwere in force when the search operation began still apply for all the results of that search untiltheSearchResultDone is returned. Session controls are not cumulative, andAuthenticationChoice includes asessionnon-empty password or SASL credentials. 4.2.3. Bind Response The Bind Response is defined as follows. BindResponse ::= [APPLICATION 1] SEQUENCE { COMPONENTS OF LDAPResult, serverCreds [7] SaslCredentials OPTIONAL } A BindResponse consists simply of an indication from the server of the status of the client's requestwill override all session controls which were set by a previous request.for authentication. Ifa control was set on a previous request andthe bind wasnot mentioned in a subsequent request,successful, the resultCode will be success, otherwise it will bereset by theone of: - operationsError (server encountered an internal error) - protocolError (unrecognized version number or incorrect PDU structure) - authMethodNotSupported (unrecognized SASL mechanism name) - strongAuthRequired (e.g. server does not accept cleartext password) - referral (this server cannot accept this bind, try another) - inappropriateAuthentication (server requires the client toits default value. (This permits session controls, such as supportedProtocol, to have multiple values.)provide credentials or use a different authentication mechanism) - invalidCredentials (e.g. wrong password supplied or bad signature) - unavailable (e.g. server is shutting down) If the serverisdoes notcapable of setting one or moresupport the client's requestedcontrols,protocol version, itshouldMUST setas many as possible.the resultCode to protocolError. Ifany ofthecontrols whichclient receives a BindResponse response where theserver could not set are marked as critical,resultCode was protocolError, itmust returnMUST close theunavailableCriticalExtension error. The controlType field must eitherconnection as the server will bea string defined in this section, or a dotted-decimal representationunwilling to accept further operations. (This is for compatibility with earlier versions ofan OBJECT IDENTIFIER. This will aidLDAP, inpreventing conflicts between privately-defined control extensions. String nameswhich the bind was always the first operation, and there was no negotiation.) The serverCreds arecase insensitive. Wahl, Howes &used as part of a SASL-defined bind mechanism to allow the client to authenticate the server to which it is communicating, or to perform "challenge-response" authentication. If the client bound with the password choice, or the SASL mechanism does not require the server to return information to the client, then this field is not to be included in the result. 4.3. Unbind Operation The function of the Unbind Operation is to terminate a protocol session. The Unbind Operation is defined as follows: UnbindRequest ::= [APPLICATION 2] NULL Wahl, Howes, Kille[Page 17]Page 18 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996March 1997 Thefollowing controls have been defined: NAME CRITICAL? VALUE CONTAINS DEFAULT =================== ================ =============== ============= attrSizeLimit clients option integerUnbind Operation has nolimit dontUseCopy clients option boolean FALSE usePartialCopy clients option boolean FALSE referringServer non-critical URL none chainingProhibited clients option boolean FALSE supportedProtocol non-criticalresponse defined. Upon transmission of an UnbindRequest, a protocolname none useAliasOnUpdate clients option boolean FALSE manageDsaIT critical boolean FALSE preferredLanguage non-critical string no preference The attrSizeLimit controlclient maybe critical or non-critical atassume that theclient's request. The value field contains either an empty string, implying no limit, or a string representationprotocol session is terminated. Upon receipt of an UnbindRequest, apositive integer, e.g. "10000". The default if this control is not present isprotocol server may assume thatthere is no limit. The attrSizeLimit numberthe requesting client has terminated the session and that all outstanding requests may be discarded, and may close the connection. 4.4. Unsolicited Notification An unsolicited notification isa size in bytes ofan LDAPMessage sent from thelargest encoded value whichserver to the client which iscapable of processing. Servers shouldnotreturn attribute valuesina searchresponsewhich are larger than this size. (If attribute values are excluded because of this control,to any LDAPMessage received by theincompleteEntry attribute must be present with the value TRUEserver. It is used to signal an extraordinary condition in theSearchResultEntry). The dontUseCopy control may be criticalserver ornon-critical atin theclient's request. The value field contains either "TRUE" or "FALSE". The default if this control is not set is "FALSE". This control only affectsconnection between theSearchclient andCompare operations. If presentthe server. The notification is of an advisory nature, andset to "TRUE", servers shouldthe server will notmake use of information from cached or shadowed copies of entries in these operations. This control overridesexpect anysetting of the usePartialCopy control. The usePartialCopy control mayresponse to becritical or non-critical atreturned from theclient's request. The value field contains either "TRUE" or "FALSE".client. Thedefault if this control is not setunsolicited notification is"FALSE". This control only affectsstructured as an LDAPMessage in which theSearchmessageID is 0 andCompare operations. IfprotocolOp is of thedontUsecopy controlextendedResp form. The responseName field of the ExtendedResponse isset to "TRUE",present. The LDAPOID value MUST be unique for thiscontrol is ignored. If usePartialCopy is presentnotification, andset to "TRUE", then if a contacted server holds at least one attributenot be used ina shadow or cached copyany other situation. One unsolicited notification is defined in this document. 4.4.1. Notice ofan entry, then that entryDisconnection This notification may be usedto satisfyby therequest, even if not allserver to advise therequested attributes are inclient that theshadowed copy. If this control is "FALSE" and dontUseCopyserver isalso "FALSE",about to close theserver must not return attributes fromconnection due to anincomplete shadow copy oferror condition. Note that this notification is NOT a response to anentry unless none of theunbind requestedattributes or their subtypes were excluded fromby theshadow copy. (How servers replicate information and configure shadowing is outsideclient: thescopeserver MUST follow the procedures ofthis specification.) The referringServer controlsection 4.3. This notification isalways non-critical. The value field contains the URL of another server which referredintended to assist clients in distinguishing between anoperationerror condition and a transient network failure. As with a connection close due tothis server. This control must only be present ifnetwork failure, theconnectionclient MUST NOT assume that any outstanding requests which modified the directory have succeeded or failed. The responseName isbeing made only to process a referral. If1.3.6.1.4.1.1466.20036, theconnection will be held open to handle referrals from multiple servers this control must be omitted. Thereresponse field isno protocol effect of this control; itabsent, and the resultCode is used toassist in tracing knowledge inconsistencies inindicate thedistributed directory. Wahl, Howes & Kille [Page 18] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 The chainingProhibited control may be critical or non-critical atreason for theclient's request.disconnection. Thevalue mustfollowing resultCode values are to beeither "TRUE" or "FALSE". To aid interoperability with LDAPv2 clients, the default if this control is not set is "FALSE". Ifused in thiscontrol is present and set to "TRUE", thenotification: - protocolError: The servermusthas received data from the client in which the LDAPMessage structure could notcontact any other servers as part of processing operations requested by this client, if it wouldbepossible to instead return toparsed. - strongAuthRequired: The server has detected that an established underlying security association protecting communication between the clienta referral. If theand serveris a gateway to X.500,has unexpectedly failed or been compromised. - unavailable: This server will stop accepting new connections andDAP is not a supportedoperations on all existing connections, and be unavailable for an extended period of time. The clientreferral protocol (see next paragraph),may make use of an alternative server. After sending this notice, the servermust setMUST close thechainingProhibited service control on any DAP or DSP requests it makes. The supportedProtocol control is always non-critical. The field is a string name of a protocol whichconnection. After receiving this notice, the clientimplements. The name ofMUST NOT transmit any further on theprotocolconnection, and maybe "ldap", "cldap", "dap", any IANA-assigned protocol name or URL mechanism, or "*"abruptly close the connection. Wahl, Howes, Kille Page 19 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 4.5. Search Operation The Search Operation allows a client toindicaterequest thatany type of referral may be returned. If this control is present,aserver must returnsearch be performed on its behalf by areferral, rather than itself chain to another server using one of the indicated protocol.server. Thiscontrol maycan bepresent multiple times in a session control if the client wishesused toname multiple protocols it supports. If the supportedProtocol control is absent and the server is capable of contacting other servers, then it must not return results with referrals, as described in 4.1.10, or SearchResultContinuation, as described in 4.5.3, unless the server is not capable of contacting other servers, in which case it may returnread attributes from areferralsingle entry, from entries immediately below a particular entry, orcontinuation containingaURLwhole subtree oftype "LDAP". Itentries. 4.5.1. Search Request The Search Request isrecommended that clients,defined asa minimum, support LDAP referrals,follows: SearchRequest ::= [APPLICATION 3] SEQUENCE { baseObject LDAPDN, scope ENUMERATED { baseObject (0), singleLevel (1), wholeSubtree (2) }, derefAliases ENUMERATED { neverDerefAliases (0), derefInSearching (1), derefFindingBaseObj (2), derefAlways (3) }, sizeLimit INTEGER (0 .. maxInt), timeLimit INTEGER (0 .. maxInt), typesOnly BOOLEAN, filter Filter, attributes AttributeDescriptionList } Filter ::= CHOICE { andset the supportedProtocol control to be "ldap". The useAliasOnUpdate control may be critical[0] SET OF Filter, ornon-critical at the client's request. The value must be either "TRUE" or "FALSE". To aid interoperability with LDAPv2 clients, the default if this control is[1] SET OF Filter, notset is "FALSE". If[2] Filter, equalityMatch [3] AttributeValueAssertion, substrings [4] SubstringFilter, greaterOrEqual [5] AttributeValueAssertion, lessOrEqual [6] AttributeValueAssertion, presentand set to TRUE, the server[7] AttributeDescription, approxMatch [8] AttributeValueAssertion, extensibleMatch [9] MatchingRuleAssertion } SubstringFilter ::= SEQUENCE { type AttributeDescription, -- at least one mustpermit alias names tobeused as componentspresent substrings SEQUENCE OF CHOICE { initial [0] LDAPString, any [1] LDAPString, final [2] LDAPString } } MatchingRuleAssertion ::= SEQUENCE { matchingRule [1] MatchingRuleId OPTIONAL, type [2] AttributeDescription OPTIONAL, matchValue [3] AssertionValue, dnAttributes [4] BOOLEAN DEFAULT FALSE } Parameters ofa Distinguished Name in Add, Modify and Delete operations. IftheserverSearch Request are: Wahl, Howes, Kille Page 20 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 - baseObject: An LDAPDN that isa gatewaythe base object entry relative toX.500, it must setwhich theuseAliasOnUpdate critical extension on any DAP/DSP AddEntry, ModifyEntry and RemoveEntry requests it makes if this controlsearch is"TRUE". This control does not affect the ModifyDN operation, which only allows Distinguished Namesto beprovided. The manageDsaIT control is always critical. The value mustperformed. - scope: An indicator of the scope of the search to beeither "TRUE" or "FALSE".performed. Thedefault, ifsemantics of the possible values of thiscontrol is not set, is "FALSE". This control affectsfield are identical to thename resolution behaviorsemantics of theserverscope field in the X.511 Search Operation. - derefAliases: An indicator as topermit a managerhow alias objects are toread and modify knowledge references and other X.500 server-specific attributes. Ifbe handled in searching. The semantics of theserver is a gateway to X.500, it must setpossible values of this field are: neverDerefAliases: do not dereference aliases in searching or in locating themanageDsaIT critical extension, as well asbase object of theappropriate common arguments, on any DAP/DSP requests it makes, based on this control. Wahl, Howes & Kille [Page 19] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 The preferredLanguage control is always non-critical. The usesearch; derefInSearching: dereference aliases in subordinates ofthis controlthe base object in searching, but not in locating the base object of the search; derefFindingBaseObj: dereference aliases in locating the base object of the search, but not when searching subordinates of the base object; derefAlways: dereference aliases both in searching andits impact onin locating thedirectory willbase object of the search. - sizelimit: A sizelimit that restricts the maximum number of entries to bedefinedreturned as a result of the search. A value of 0 infuture drafts. The default ifthiscontrol is not set, isfield indicates thatthere isnopreferred language. 4.5. Search Operation The Search Operation allows a client to requestsizelimit restrictions are in effect for the search. - timelimit: A timelimit that restricts the maximum time (in seconds) allowed for a search. A value of 0 in this field indicates that no timelimit restrictions are in effect for the search. - typesOnly: An indicator as to whether search results will contain both attribute types and values, or just attribute types. Setting this field to TRUE causes only attribute types (no values) to beperformed on its behalf by a server. This can be usedreturned. Setting this field toread attributes from a single entry, orFALSE causes both attribute types and values to be returned. - filter: A filter that defines the conditions that must be fulfilled in order for the search to match awhole subtreegiven entry. The 'and', 'or' and 'not' choices may be used to form boolean combinations ofentries. 4.5.1. Search Requestfilters. At least one filter element MUST be present in an 'and' or 'or' choice. TheSearch Request is defined as follows: SearchRequest ::= [APPLICATION 3] SEQUENCE { baseObject LDAPDN,others match against individual attribute values of entries in the scopeENUMERATED { baseObject (0), singleLevel (1), wholeSubtree (2) }, derefAliases ENUMERATED { neverDerefAliases (0), derefInSearching (1), derefFindingBaseObj (2), derefAlways (3) }, sizeLimit INTEGER (0 .. maxInt), timeLimit INTEGER (0 .. maxInt), typesOnly BOOLEAN,of the search. (Implementor's note: the 'not' filterFilter, attributes AttributeDescriptionList, pageSizeLimit [0] INTEGER OPTIONAL, sortKeys [1] SortKeyList OPTIONAL, prevSearchId [2] MessageID OPTIONAL, startLocation [3] INTEGER OPTIONAL } SortKeyList ::= SEQUENCE OF SEQUENCE { attributeType AttributeType, orderingRule [0] MatchingRuleId OPTIONAL, reverseOrder [1] BOOLEAN DEFAULT FALSE } Filter ::= CHOICE { and [0] SET OF Filter, or [1] SET OF Filter, not [2] Filter, equalityMatch [3] AttributeValueAssertion, substrings [4] SubstringFilter, greaterOrEqual [5] AttributeValueAssertion, lessOrEqual [6] AttributeValueAssertion, present [7] AttributeType, approxMatch [8] AttributeValueAssertion, extensibleMatch [9] MatchingRuleAssertion }is an example of a tagged choice in an implicitly-tagged module. In BER this is treated as if the tag was explicit.) Wahl,Howes &Howes, Kille[Page 20]Page 21 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 SubstringFilter ::= SEQUENCE {March 1997 The extensibleMatch is new in this version of LDAP. If the matchingRule field is absent, the typeAttributeDescription, -- at least one mustfield MUST bepresent substrings SEQUENCE OF CHOICE { initial [0] LDAPString, any [1] LDAPString, final [2] LDAPString } } MatchingRuleAssertion ::= SEQUENCE { matchingRule [1] MatchingRuleId OPTIONAL, type [2] AttributeType OPTIONAL, matchValue [3] AssertionValue, dnAttributes [4] BOOLEAN DEFAULT FALSE } Parameters ofpresent, and theSearch Request are: - baseObject: An LDAPDNequality match is performed for that type. If the type field is absent and matchingRule is present, thebase objectmatchValue is compared against all attributes in an entryrelative towhich support that matchingRule, and thesearch is to be performed. - scope: An indicator ofmatchingRule determines thescope ofsyntax for thesearch toassertion value. If the type field is present and matchingRule is present, the matchingRule MUST beperformed. The semantics ofone permitted for use with that type. If thepossible values of thisdnAttributes fieldare identicalis set to TRUE, thesemantics ofmatch is applied against all thescope fieldattributes inthe X.511 Search Operation. - derefAliases: An indicatoran entry's distinguished name asto how alias objects are to be be handled in searching.well. (Editors note: Thesemantics of the possible values of thisdnAttributes fieldare: neverDerefAliases: dois present so that there does notdereference aliases in searching or in locating the base objectneed to be multiple versions ofthe search; derefInSearching: dereference aliases in subordinatesgeneric matching rules such as wordMatch, one to apply to entries and another to apply to entries and dn attributes as well). Servers MUST ignore parts of filters which use unrecognized attribute types (that part of thebase object in searching, butfilter does notin locatingmatch any entry). If thebase object ofentire filter is ignored, no entries match. A server may return thesearch; derefFindingBaseObject: dereference aliases in locating the base object of the search, buterror inappropriateMatching if it does notwhen searching subordinates of the base object; derefAlways: dereference aliases both in searching and in locating the base objectpermit a particular form of matching (e.g. substrings match on an integer value). Servers may return thesearch. - sizelimit: A sizelimit that restrictserror invalidAttributeSyntax if themaximum numbervalue part ofentries to be returned asaresult of the search. A valuesearch filter is improperly specified. More details of0 in this field indicates that no sizelimit restrictionsfilter processing are given ineffect for the search.section 7.8 of X.511 [15]. -timelimit:attributes: Atimelimit that restrictslist of themaximum time (in seconds) allowed forattributes from each entry found as asearch. A valueresult of0 in this field indicates that no timelimit restrictions are in effect forthesearch. - typesOnly: An indicator as to whethersearchresults will contain both attribute types and values, or just attribute types. Setting this field to TRUE causes only attribute types (no values) to be returned. Setting this field to FALSE causes both attribute types and valuesto be returned.Wahl, Howes & Kille [Page 21] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 - filter: A filter that defines the conditionsAn empty list signifies thatmust be fulfilledall user attributes from each entry found inorder forthe search are tomatch a given entry. The 'and', 'or' and 'not' choices may be used to form boolean combinations of filters. At least one filter element mustbepresent in an 'and' or 'or' choice. The others match against individual attribute values of entries in the scope of the search. The extensibleMatch is new in this version of LDAP. If the matchingRule field is absent, the type field must be present, and the equality match is performed for that type. If the type field is absent and matchingRule is present, the matchValue is compared against all attributes in an entry which support that matchingRule, and the matchingRule determines the syntax for the assertion value. If the type field is present and matchingRule is present, the matchingRule must be one permitted for use with that type. If the dnAttributes field is set to TRUE, the match is applied against all the attributes in an entry's distinguished name as well. (Editors note: The dnAttributes field is present so that there does not need to be multiple versions of generic matching rules such as wordMatch, one to apply to entries and another to apply to entries and dn attributes as well). - attributes: A list of the attributes from each entry found as a result of the search to be returned. An empty list signifies that all user attributes from each entry found in the search are to be returned, as doesreturned, as does the special attribute description string "*". (the latter technique allows the client to request all user attributes along with selected operational attributes). If the client does not want any attributes returned, it can request only the attribute with OID"1.1"."1.1" (this OID is arbitrary). AttributesmustMUST be named at most once in the list, and are returned at most once in an entry. Servers MUST ignore requests for unrecognized attribute types. If no attributes specified by the client are recognized, then no attributes will be included in the result entries. Client implementors should note that even if all user attributes are requested, some attributes of the entry may not be included in search results due to access control or other restrictions. Furthermore, servers will not return operational attributes, such asmodifyRightsobjectClasses or attributeTypes, unless they are listed by name, since there may be extremely large number of values for certain operational attributes. (A list of operational attributes for use in LDAP is given in [5].)- pageSizeLimit: if present, then if more entries are toNote that an X.500 "list"-like operation can bereturned than the pageSizeLimit,emulated by theserver must return only as many as this limit before returningclient requesting a one-level LDAP search operation with a filter checking for theSearchResultDone response. Ifexistence of thesame or fewer entries than this limit are toobjectClass attribute, and that an X.500 "read"-like operation can bereturned,emulated by a base object LDAP search operation with the same filter. A servermust return all the entries and the SearchResultDone response. The pageSizeLimit does not affect SearchResultReference responses,whichareprovides a gateway to X.500 is notcounted as entries and of which any number may be returned by the server. If operating over connectionless data transport,required to use theclient must not set this field.Read or List operations, although it may choose to do so. Wahl,Howes &Howes, Kille[Page 22]Page 22 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 If a pageSizeLimit was set and reached duringMarch 1997 4.5.2. Search Result The results of thesearch,search attempted by theclient will be able to request moreserver upon receipt ofthe entries usingasubsequent SearchRequest with the prevSearchId field present. It is strongly recommended that clients include the sortKeys field when including this field. - sortKeys: If this field is present, then it specifies one or more attribute types and matching rules, and theSearch Request are returnedentries must be sortedinorder based on theseSearch Responses, which are LDAP messages containing either SearchResultEntry, SearchResultReference, ExtendedResponse or SearchResultDone data types.IfSearchResultEntry ::= [APPLICATION 4] SEQUENCE { objectName LDAPDN, attributes PartialAttributeList } PartialAttributeList ::= SEQUENCE OF SEQUENCE { type AttributeDescription, vals SET OF AttributeValue } -- implementors should note that thereverseOrder field is set to TRUE, thenPartialAttributeList may have -- zero elements (if none of theentries will be presented in reverse sorted order. Only if the server does not recognize anyattributes of that entry were -- requested, or could be returned), and that theattribute types, the ordering rule associated with an attribute type is not applicable,vals set may also -- have zero elements (if types only was requested, ornone ofall values were -- excluded from theattributes inresult.) SearchResultReference ::= [APPLICATION 19] SEQUENCE OF LDAPURL -- at least one LDAPURL element must be present SearchResultDone ::= [APPLICATION 5] LDAPResult Upon receipt of a Search Request, a server will perform the necessary searchresponses areofthese types, thenthesortKeys field is not used and result entries are returned in random order.DIT. If theserver does not support sorting with the requested attributes or matching rules, then it must return only protocolError (whichLDAP session iswhat an LDAPv2operating over a connection-oriented transport such as TCP, the serverwould return), undefinedAttributeType or inappropriateMatching and no searchResultEntrywill return to the client a sequence of responses in separate LDAP messages. There may be zero orsearchResultReference responses. Ifmore responses containing SearchResultEntry, one for each entry found during thesortKeys field is absent, there is no defined ordersearch. There may also be zero or more responses containing SearchResultReference, one forreturning entries in a search result. - prevSearchId: If this field is present,each area not explored by thisinforms theserverthat, with possibly the exception ofduring thevalue ofsearch. The SearchResultEntry and SearchResultReference PDUs may come in any order. Following all thestartLocation field, this request is identicalSearchResultReference responses and all SearchResultEntry responses toa searchRequest made previously on this association. Ifbe returned by the server, the serverdoes not recognize this aswill return a response containing themessage idSearchResultDone, which contains an indication ofa previous search operation, it must silently ignore this field and perform this search as normal. The client must ensuresuccess, or detailing any errors that have occurred. Each entry returned in a SearchResultEntry will contain allfields, other than startLocation, are the sameattributes, complete with associated values if necessary, as specified in theearlier search, otherwise the contentsattributes field of theentriesSearch Request. Return of attributes is subject to access control and other administrative policy. Some attributes may be returnedfrom this search are not defined. If clients are performingin binary format (indicated by thesame search more than twice on an association, thenAttributeDescription in theprevSearchId field of all butresponse having thefirst search must containbinary option present). Some attributes may be constructed by themessageIDserver and appear in a SearchResultEntry attribute list, although they are not stored attributes of an entry. Clients MUST NOT assume thatfirst search. - startLocation: this field mayall attributes can bepresentmodified, even if permitted by access control. Response LDAPMessages of thepageSizeLimit is present. After filtering and selectingExtendedResponse form are reserved for returning information associated with a control requested by theentries toclient. These may bereturneddefined ina search,future versions of this document. Wahl, Howes, Kille Page 23 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 4.5.3. Continuation References in the Search Result If the serverwill discard this many entries before startingwas able toreturn SearchResultEntry responses. Thus setting startLocation 0 islocate thesame as not including a startLocation field. Ifentry referred to by theclient sends a value of startLocation which is larger thanbaseObject but was unable to search all thenumber ofentries in theresult,scope at and under theserver will onlybaseObject, the server may returnanyone or more SearchResultReference, each containing a reference to another set of servers for continuing the operation. The server will return a SearchResultReferenceresponses,for each new base object with a particular scope andthen the SearchResultDone response. (Thefilter. A servershould indicate in the SearchResultDone a value of totalCount whichMUST NOT return any SearchResultReference if it has not located theclient may use to make a better choice of startLocationbaseObject and thus has not searched any entries; in this case it would return asubsequent search).SearchResultDone containing a referral resultCode. ThestartLocation does not affectSearchResultReferenceresponses, which are not counted as entries. Wahl, Howes & Kille [Page 23] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 Itisstrongly recommended that clients include the sortKeys field when including this field. If the client includes the attribute type name 'modifyRights' inof thesearch request attributesame data typelist when performing a baseObject search, thenas theserver may returnReferral. URLs for servers implementing themodifyRights attribute asLDAP protocol are written according to [9]. The <dn> partofMUST be present in theresponse attributes for that entry.URL, with the new target object name. Thevalue ofclient MUST use thisattribute is describedname insection 6.2.2.1its next request. Some servers (e.g. part of[5], and corresponds toa distributed index exchange system) may provide a different filter in theX.511(93) ModifyRights fieldURLs of theReadResponse. Note that an X.500 "list"-like operation can be emulated bySearchResultReference. If theclient requesting a one-level LDAP search operation with afilterchecking for the existencepart of theobjectClass attribute, and thatURL is present in anX.500 "read"-like operation can be emulated by a base objectLDAPsearch operation withURL, thesame filter. A server which provides a gatewayclient MUST use the new filter in its next request toX.500progress the search, and if the filter part isnot required toabsent the client will use again theRead or List operations, although itfilter from the original search. Other kinds of URLs maychoosebe returned so long as the operation could be performed using that protocol. The name of an unexplored subtree in a SearchResultReference need not be subordinate todo so. Ifthe base object. In order to complete the search, the client MUST issue a new searchfilter includes an equality match ofoperation for each SearchResultReference that is returned. Note that theobjectClass attributeabandon operation described in section 4.11 applies only to a particular operation sent on a connection between a client and server, andthe value "subentry", thenif the client has multiple outstanding search operations to different servers, it MUST abandon each operation individually. 4.5.3.1. Example For example, suppose the contacted server (hosta) holds the entry "O=MNN,C=WW" and the entry "CN=Manager,O=MNN,C=WW". It knows that either LDAP-capable servers (hostb) or (hostc) hold "OU=People,O=MNN,C=WW" (one isconverting to an X.500 protocol,thesubentries service control must be set. Thus clients must not search for both subentriesmaster andordinary entries withthe other server asingleshadow), and that LDAP-capable server (hostd) holds the subtree "OU=Roles,O=MNN,C=WW". If a subtree searchoperation. 4.5.2. Search Result The resultsof "O=MNN,C=WW" is requested to thesearch attempted bycontacted server, the serverupon receipt of a Search Request are returned in Search Responses, which are LDAP messages containing either SearchResultEntry, SearchResultReference, SearchResultDone or SearchResultFull data types.may return the following responses: SearchResultEntry::= [APPLICATION 4] SEQUENCE { objectName LDAPDN, attributes PartialAttributeList } PartialAttributeList ::= SEQUENCE OF SEQUENCEfor O=MNN,C=WW SearchResultEntry for CN=Manager,O=MNN,C=WW SearchResultReference {type AttributeDescription, vals SET OF AttributeValueldap://hostb/OU=People,O=MNN,C=WW ldap://hostc/OU=People,O=MNN,C=WW }-- implementors should note that the PartialAttributeList may have -- zero elements (if none of the attributes of that entry were -- requested, or could be returned), and that the vals set may also -- have zero elements (if types only was requested, or all the values -- exceeded the attribute size limit or were excluded because of -- access control).SearchResultReference::= [APPLICATION 19] SEQUENCE OF LDAPURL -- at least one LDAPURL element must be present SearchResultDone ::= [APPLICATION 5] SEQUENCE{COMPONENTS OF LDAPResult, totalCount [8] INTEGER OPTIONALldap://hostd/OU=Roles,O=MNN,C=WW } SearchResultDone (success) Wahl,Howes &Howes, Kille[Page 24]Page 24 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 SearchResultFull ::= SEQUENCE OF CHOICE { entry SearchResultEntry, reference SearchResultReference, resultCode SearchResultDone } Upon receipt of a Search Request,March 1997 Client implementors should note that when following a SearchResultReference, additional SearchResultReference may be generated. Continuing the example, if the client contacted the serverwill perform(hostb) and issued thenecessarysearchoffor theDIT. Ifsubtree "OU=People,O=MNN,C=WW", theLDAP session is operating over a connection-oriented transport suchserver might respond asTCP,follows: SearchResultEntry for OU=People,O=MNN,C=WW SearchResultReference { ldap://hoste/OU=Managers,OU=People,O=MNN,C=WW } SearchResultReference { ldap://hostf/OU=Consultants,OU=People,O=MNN,C=WW } SearchResultDone (success) If the contacted server does not hold the base object for the search, then it will return a referral to the client. For example, if the client requests asequencesubtree search ofresponses in separate LDAP messages. There may be zero or more responses containing SearchResultEntry, one for each entry found during"O=XYZ,C=US" to hosta, thesearch. Thereserver mayalso be zero or more responsesreturn only a SearchResultDone containingSearchResultReference, one for each area not explored by this server during the search. The SearchResultEntry and SearchResultReferences may come in any order. Following all the SearchResultReference responses and all SearchResultEntry responses up to a pageSizeLimit (if any), the server will returnaresponse containing the SearchResultDone, which contains an indication of success, or detailing any errors that have occurred. If the LDAP session is operating overreferral. SearchResultDone (referral) { ldap://hostg/O=XYZ,C=US } 4.6. Modify Operation The Modify Operation allows aconnectionless transport such as UDP, the server will return to theclientonly one responsetothe search, an LDAPMessage containingrequest that aSearchResultFull data type. All (if any) but the last elementmodification ofthean entry be performed on its behalf by a server. The Modify Request is defined as follows: ModifyRequest ::= [APPLICATION 6] SEQUENCE { object LDAPDN, modification SEQUENCE OFmust beSEQUENCE { operation ENUMERATED { add (0), delete (1), replace (2) }, modification AttributeTypeAndValues } } AttributeTypeAndValues ::= SEQUENCE { type AttributeDescription, vals SET OF AttributeValue } Parameters of theSearchResultEntry or SearchResultReference types, and the last mustModify Request are: - object: The object to be modified. The value of this field contains the DN of theSearchResultDone type. The SearchResultFull is never returned over a connection-oriented transport. Eachentryreturned in a SearchResultEntryto be modified. The server willcontain all attributes, complete with associated values if necessary, as specifiednot perform any alias dereferencing in determining theattributes field of the Search Request. Returnobject to be modified. Wahl, Howes, Kille Page 25 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 - modification: A list ofattributes is subjectmodifications toaccess control and other administrative policy. Some attributes maybereturned in binary format (indicated byperformed on theAttributeDescriptionentry. The entire list of entry modifications MUST be performed in theresponse having the binary option present), or inorder they are listed, as alanguage-specific subtype (indicated by the AttributeDescription insingle atomic operation. While individual modifications may violate theresponse havingdirectory schema, thelanguage option present). The following are not strictly attributes of anresulting entry(or a subentry), but may appear inafter theresultentire listif requested. - entryName. This operational attribute is maintained by the server and appears to be present in each entry. The valueofthis attributemodifications is performed MUST conform to thedistinguished namerequirements of theentry from which it is read. It is expecteddirectory schema. The values that may be taken on by theclient would request and the server would return this attribute'operation' field inbinary. - modifyRights. Each value iseach modification construct have theencoding of an element of modifyRights. The attribute is specificfollowing semantics respectively: add: add values listed to theparticular search operation andgiven attribute, creating therequestor, and must not be cached or replicated. Wahl, Howes & Kille [Page 25] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 - incompleteEntry. This attribute's value is TRUEattribute ifone or more attributes are not present innecessary; delete: delete values listed from thePartialAttributeList, because their size would have exceededgiven attribute, removing the entire attributesize limit,if no values are listed, or ifa partial shadow copyall current values of theentry was used to satisfy the request and some requested attributesattribute arenot returned. It is never set just because typesOnly was set to TRUE, or because a requestedlisted for deletion; replace: replace all existing values of the given attributewas not actually present inwith theentry. - fromEntry. The server may return this attribute's value as FALSEnew values listed, creating the attribute if itis known thatdid not already exist. A replace with no value will delete thesearch is based upon a shadow or cached copyentire attribute. The result of theentry, and may return it as TRUE ifmodify attempted by the servermasters the entry. Inupon receipt of aSearchResultEntry,Modify Request is returned in a Modify Response, defined asan encoding optimization, the valuefollows: ModifyResponse ::= [APPLICATION 7] LDAPResult Upon receipt ofthe objectName LDAPDN may haveatrailing '*' characterModify Request, a server will perform the necessary modifications toreferthe DIT. The server will return to thebaseObjectclient a single Modify Response indicating either the successful completion of thecorresponding searchRequest. For example, ifDIT modification, or thebaseObject is specified as "o=UofM, c=US", thenreason that thefollowing objectName LDAPDNsmodification failed. Note that due to the requirement for atomicity ina response would haveapplying theindicated meanings objectName returned actual LDAPDN denoted ____________________________________________________ "*" "o=UofM, c=US" "cn=Babs Jensen, *" "cn=Babs Jensen, o=UofM, c=US" Iflist of modifications in thepageSizeLimit field was present,Modify Request, theserverclient mayindicate the total numberexpect that no modifications ofentries which couldthe DIT havematchedbeen performed if thesearch filter inModify Response received indicates any sort of error, and that all requested modifications have been performed if thefield totalCountModify Response indicates successful completion of theSearchResultDone. The total count would beModify Operation. If thesame or greater thanconnection fails, whether thenumber of SearchResultEntry responses returned at this time. If itmodification occurred or not isgreater, thenindeterminate. Note that due to theserver didsimplifications made in LDAP, there is notreturn alla direct mapping of theresponses becausemodifications in an LDAP ModifyRequest onto thepageSizeLimit was reached. This field is not affected by any requested startLocation field. Client implementors should note that subsequent search requests with the same fields may returnEntryModifications of a DAP ModifyEntry operation, and differentvalue for totalCount ifimplementations of LDAP-DAP gateways may use different means of representing theDIT is being modified by other users. The totalCount field must be absent ifchange. If successful, thepageSizeLimit field was not included infinal effect of therequest. Servers should not returnoperations on theresultCode sizeLimitExceeded merely becauseentry MUST be identical. Wahl, Howes, Kille Page 26 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 4.7. Add Operation The Add Operation allows apageSizeLimit was reached. 4.5.3. Continuation References in the Search Result If the server was ableclient tolocaterequest the addition of an entryreferred to by the baseObject but was unable to search allinto theentries indirectory. The Add Request is defined as follows: AddRequest ::= [APPLICATION 8] SEQUENCE { entry LDAPDN, attributes AttributeList } AttributeList ::= SEQUENCE OF SEQUENCE { type AttributeDescription, vals SET OF AttributeValue } Parameters of thescope at and underAdd Request are: - entry: thebaseObject,Distinguished Name of theserver may return one or more SearchResultReference, each containing a referenceentry toanother setbe added. Note that all components ofserversthe name except forcontinuingtheoperation. The server must return at most one SearchResultReferencelast RDN component MUST exist fora new subordinate base object with a particular scope and filter. A server must not return a SearchResultReference if it has not locatedthebaseObject and thus hasadd to succeed. Note also that the server will notsearcheddereference anyentries;aliases inthis case it would return a SearchResultDone containing a referral resultCode. Wahl, Howes & Kille [Page 26] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 The SearchResultReference is of the same data type aslocating theReferral. A URL in a SearchResultReferenceentry to be added, and that servers may enforce restrictions on where entries mayonlybeincluded if the client has indicated (inlocated. - attributes: thesession controls) that it is able to handlelist of attributes thatprotocol. Ifmake up theclient has not indicated any protocols whichcontent of theserver could use to returnentry being added. Clients MUST include distinguished values (those forming the entry's own RDN) ina SearchResultReference,this list, theserver must itself processobjectClass attribute, and values of any mandatory attributes of theentire search. Iflisted object classes. The result of theserver could not contact all other servers, it may return one or more SearchResultReference for unexplored subtrees, and must indicate also that only partial results were returnedadd attempted bysettingtheresultCodeserver upon receipt of a Add Request is returned in theSearchResultDone to be something other than success, suchAdd Response, defined astimeLimitExceeded. URLs for servers implementing the LDAP protocol are written accordingfollows: AddResponse ::= [APPLICATION 9] LDAPResult Upon receipt of an Add Request, a server will attempt to[9].perform the add requested. Thedn part must be present inresult of theURL, withadd attempt will be returned to thenew target object name. Theclientmust use this name in its next request. Some servers (e.g. participatingindistributed indexing) may changethefilter. IfAdd Response. 4.8. Delete Operation The Delete Operation allows a client to request thefilter partremoval ofthe URL is present inanLDAP URL, the client must use this filter in its next request to progress this search, and ifentry from thefilterdirectory. The Delete Request isabsent the client will use the same filterdefined asit used for that search. Other kindsfollows: DelRequest ::= [APPLICATION 10] LDAPDN The Delete Request consists ofURLs may be returned so long astheoperation could be performed using that protocol, andDistinguished Name of theclient has indicated (in a session control) that it is ableentry tohandlebe deleted. Note thatprotocol. Thethe server will not dereference aliases while resolving the name ofan unexplored subtree in a SearchResultReference need notthe target entry to be removed, and that only leaf entries (those with no subordinateto the base object if an alias was dereferenced, however it must notentries) may bea prefixdeleted with this operation. The result of thebase object, otherwise the client will loop. (Client implementations must detect loops; see section 6.2.) Note:delete attempted by the"X.500 Non-Specific Subordinate Reference"server upon receipt of a Delete Request isnot permittedreturned inLDAP. Servers must not return multiple SearchResultReference forthesame subtree, and any oneDelete Response, defined as follows: DelResponse ::= [APPLICATION 11] LDAPResult Upon receipt of(not all of) the servers listed inaSearchResultReference may be contacted to perform the entire search inDelete Request, aparticular subtree. 4.5.3.1. Example For example, suppose the contactedserver(hosta) holds the entry "O=MNN,C=WW" andwill attempt to perform the entry"CN=Manager,O=MNN,C=WW". It knows that either LDAP-capable servers (hostb) or (hostc) hold "OU=People,O=MNN,C=WW" (one isremoval requested. The result of themaster anddelete attempt will be returned to theother server a shadow), and that LDAP-capable server (hostd) holdsclient in thesubtree "OU=Roles,O=MNN,C=WW". If a subtree search of "O=MNN,C=WW" is requested to the contacted server in which chainingProhibited is set and referrals are permitted, and the filter is objectClass=*, the server may return the following responses:Delete Response. Wahl,Howes &Howes, Kille[Page 27]Page 27 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 SearchResultEntry for O=MNN,C=WW SearchResultEntry for CN=Manager,O=MNN,C=WW SearchResultReference { ldap://hostb/OU=People,O=MNN,C=WW ldap://hostc/OU=People,O=MNN,C=WW } SearchResultReference { ldap://hostd/OU=Roles,O=MNN,C=WW } SearchResultDone (entries = 2) Client implementors should note that when following a SearchResultReference, additional SearchResultReference may be generated. Continuing the example, if the client contacted the server (hostb) and issued the search for the subtree "OU=People,O=MNN,C=WW", the server might respond as follows: SearchResultEntry for OU=People,O=MNN,C=WW SearchResultReference { ldap://hoste/OU=Managers,OU=People,O=MNN,C=WW } SearchResultReference { ldap://hostf/OU=Consultants,OU=People,O=MNN,C=WW } 4.6.March 1997 4.9. Modify DN Operation The Modify DN Operation allows a client torequest that a modificationchange the last component of the name of an entrybe performed on its behalf byin the directory, or to move aserver.subtree of entries to a new location in the directory. The Modify DN Request is defined as follows:ModifyRequestModifyDNRequest ::= [APPLICATION6]12] SEQUENCE {objectentry LDAPDN,modification SEQUENCE OF SEQUENCE { operation ENUMERATED { add (0), delete (1), replace (2) }, modification AttributeTypeAndValues } } AttributeTypeAndValues ::= SEQUENCE { type AttributeDescription, vals SET OF AttributeValuenewrdn RelativeLDAPDN, deleteoldrdn BOOLEAN, newSuperior [0] LDAPDN OPTIONAL } Parameters of the Modify DN Request are: -object: The object to be modified. The value of this field containsentry: theDNDistinguished Name of the entry to bemodified. The server willchanged. This entry may or may notperform any alias dereferencing in determininghave subordinate entries. - newrdn: theobject to be modified unlessRDN that will form theuseAliasOnUpdate session control is set to TRUE. Wahl, Howes & Kille [Page 28] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 - A listlast component ofmodifications to be performed on the entry to be modified. The entire list of entry modifications must be performed intheorder they are listed, asnew name. - deleteoldrdn: asingle atomic operation. While individual modifications may violate the directory schema, the resulting entry after the entire list of modifications is performed must conform to the requirements of the directory schema. The valuesboolean parameter thatmay be taken on by the 'operation' field in each modification construct havecontrols whether thefollowing semantics respectively: add: addold RDN attribute valueslistedare to be retained as attributes of thegiven attribute, creating the attribute if necessary; delete: delete values listedentry, or deleted from thegiven attribute, removing the entire attribute if no values are listed, orentry. - newSuperior: ifall current values ofpresent, this is theattribute are listed for deletion; replace: replace all existing valuesDistinguished Name of thegiven attribute with the new values listed, creatingentry which becomes theattribute if it did not already exist. A replace with no value will deleteimmediate superior of theentire attribute.existing entry. The result of themodifyname change attempted by the server upon receipt of a Modify DN Request is returned inathe Modify DN Response, defined as follows:ModifyResponseModifyDNResponse ::= [APPLICATION7]13] LDAPResult Upon receipt of aModify Request,ModifyDNRequest, a server willperform the necessary modificationsattempt to perform theDIT.name change. Theserverresult of the name change attempt willreturnbe returned to the clienta singlein the ModifyResponse indicating eitherDN Response. If thesuccessful completion ofdeleteoldrdn parameter is TRUE, theDIT modification, orvalues forming thereason thatold RDN are deleted from themodification failed. Note that due toentry. If therequirement for atomicity in applyingdeleteoldrdn parameter is FALSE, thelist of modifications invalues forming theModify Request, the client may expect that no modificationsold RDN will be retained as non-distinguished attribute values of theDIT have been performed ifentry. The server may not perform theModify Response received indicates any sort of error,operation andthat all requested modifications have been performedreturn an error code if theModify Response indicates successful completionsetting of theModify Operation. If the connection fails, whetherdeleteoldrdn parameter would cause a schema inconsistency in themodification occurred or not is indeterminate.entry. Note thatdue toX.500 restricts thesimplifications made in LDAP, there is notModifyDN operation to only affect entries that are contained within adirect mapping ofsingle server. If themodifications in anLDAPModifyRequestserver is mapped ontothe EntryModifications of a a DAP ModifyEntry operation,DAP, then this restriction will apply, anddifferent implementations of LDAP-DAP gateways may use different means of representing the change. The final effect of the operations ontheentryresultCode affectsMultipleDSAs will beidentical.returned if this error occurred. In general clients must not expect to be able to perform arbitrary movements of entries and subtrees between servers. Wahl,Howes &Howes, Kille[Page 29]Page 28 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 4.7. AddMarch 1997 4.10. Compare Operation TheAddCompare Operation allows a client torequest the addition ofcompare an assertion provided with an entryintoin the directory. TheAddCompare Request is defined as follows:AddRequestCompareRequest ::= [APPLICATION8]14] SEQUENCE { entry LDAPDN,attributes AttributeList } AttributeList ::= SEQUENCE OF SEQUENCE { type AttributeDescription, vals SET OF AttributeValueava AttributeValueAssertion } Parameters of theAddCompare Request are: - entry: theDistinguished Namename of the entry to beadded. Note that all components of the name except forcompared with. - ava: thelast RDN component must exist forassertion with which an attribute in theadd to succeed. Note also that the server will not dereference any aliases in locating the entryentry is to beadded (unless the useAliasOnUpdate session control is TRUE), and that there are never any entries subordinate to an alias entry. - attributes: the list of attributes that make up the content of the entry being added. Clients must included distinguished values in this list.compared. The result of theaddcompare attempted by the server upon receipt of aAddCompare Request is returned in theAddCompare Response, defined as follows:AddResponseCompareResponse ::= [APPLICATION9]15] LDAPResult Upon receipt ofan Adda Compare Request, a server will attempt to perform theadd requested.requested comparison. The result of theadd attemptcomparison will be returned to the client in theAddCompare Response.4.8. DeleteNote that errors and the result of comparison are all returned in the same construct. Note that some directory systems may establish access controls which permit the values of certain attributes (such as userPassword) to be compared but not read. In a search result, it may be that an attribute of that type would be returned, but with an empty set of values. 4.11. Abandon Operation TheDeletefunction of the Abandon Operationallowsis to allow a client to request that theremoval ofserver abandon anentry from the directory.outstanding operation. TheDeleteAbandon Request is defined as follows:DelRequestAbandonRequest ::= [APPLICATION10] LDAPDN16] MessageID TheDelete Request consists of the Distinguished Name of the entry toMessageID MUST bedeleted. Notethatthe server will not dereference aliases while resolving the nameof a an operation which was requested earlier in this connection. (The abandon request itself has its own message id. This is distinct from thetarget entry to be removed, unlessid of theuseAliasOnUpdate session controlearlier operation being abandoned.) There isTRUE. The resultno response defined in the Abandon Operation. Upon transmission of an Abandon Operation, a client may expect that thedelete attemptedoperation identified by theserver upon receipt ofMessage ID in the Abandon Request has been abandoned. In the event that aDeleteserver receives an Abandon Requestis returnedon a Search Operation in theDelete Response, defined as follows: DelResponse ::= [APPLICATION 11] LDAPResultmidst of transmitting responses to the search, that server MUST cease transmitting entry responses to the abandoned request immediately, and MUST NOT send the SearchResponseDone. Of course, the server MUST ensure that only properly encoded LDAPMessage PDUs are transmitted. Wahl,Howes &Howes, Kille[Page 30]Page 29 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 Upon receipt of a Delete Request, a server will attempt to perform the entry removal requested. The result ofMarch 1997 Clients MUST NOT send abandon requests for thedelete attempt willsame operation multiple times, and MUST also bereturnedprepared tothe clientreceive results from operations it has abandoned (since these may have been in transit when theDelete Response. Note that only leaf objects (with no subordinates) mayabandon was requested). Servers MUST discard abandon requests for message IDs they do not recognize, for operations which cannot bedeleted with this operation. 4.9. Modify DN Operation The Modify DNabandoned, and for operations which have already been abandoned. 4.12. Extended Operationallows a client to change the last component of the nameAn extension mechanism has been added in this version ofan entryLDAP, inthe directory, ororder tomove a subtree of entriesallow additional operations toa new locationbe defined for services not available elsewhere inthe directory.this protocol, for instance digitally signed operations and results. TheModify DN Request isextended operation allows clients to make requests and receive responses with predefined syntaxes and semantics. These may be definedas follows: ModifyDNRequestin RFCs or be private to particular implementations. Each operation MUST have a unique OBJECT IDENTIFIER assigned to it. ExtendedRequest ::= [APPLICATION12]23] SEQUENCE {entry LDAPDN, newrdn RelativeLDAPDN, deleteoldrdn BOOLEAN, newSuperiorrequestName [0]LDAPDNLDAPOID, requestValue [1] OCTET STRING OPTIONAL }Parameters of the Modify DN Request are: - entry: the nameThe requestName is a dotted-decimal representation of theentryOBJECT IDENTIFIER corresponding tobe changed. - newrdn:theRDNrequest. The requestValue is information in a form defined by that request, encapsulated inside an OCTET STRING. The server willformrespond to this with an LDAPMessage containing thelast component ofExtendedResponse. ExtendedResponse ::= [APPLICATION 24] SEQUENCE { COMPONENTS OF LDAPResult, responseName [10] LDAPOID OPTIONAL, response [11] OCTET STRING OPTIONAL } If thenew name. - deleteoldrdn: a boolean parameter that controls whetherserver does not recognize theold RDN attribute values is to be retained as attributes ofrequest name, it MUST return only theentry, or deletedresponse fields from LDAPResult, containing theentry. - newSuperior: if present, this isprotocolError result code. 5. Protocol Element Encodings and Transfer Two underlying services are defined here. At a minimum, clients and servers SHOULD implement thenamemapping of LDAP over TCP described in 5.2.1. 5.1. Mapping Onto BER-based Transport Services The protocol elements of LDAP are encoded for exchange using theentry which becomes the immediate superiorBasic Encoding Rules (BER) [11] of ASN.1 [3]. However, due to theexisting entry. The resulthigh overhead involved in using certain elements of thename change attempted byBER, theserver upon receiptfollowing additional restrictions are placed on BER-encodings ofa Modify DN Request is returned in the Modify DN Response, defined as follows: ModifyDNResponse ::= [APPLICATION 13] LDAPResult Upon receipt of a ModifyDNRequest, a server will attempt to performLDAP protocol elements: Wahl, Howes, Kille Page 30 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 (1) Only thename change. The resultdefinite form ofthe name change attemptlength encoding will bereturned to the clientused. (2) OCTET STRINGs will be encoded in theModify DN Response. The attributes that make up the old RDN are deleted from the entry, or kept, depending onprimitive form only. (3) If thesettingvalue of a BOOLEAN type is true, thedeleteoldrdn parameter. Note that X.500 restricts the ModifyDN operationencoding MUST have its contents octets set toonly affect entries that are contained within a single server.hex "FF". (4) Ifthe LDAP servera value of a type ismapped onto DAP, then this restriction will apply, and the resultCode affectsMultipleDSAs willits default value, it MUST bereturned. In general clients mustabsent. Only some BOOLEAN and INTEGER types have default values in this protocol definition. These restrictions do notexpect to be ableapply toperform arbitrary movementsASN.1 types encapsulated inside ofentries and subtrees. Wahl, Howes & Kille [Page 31] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 4.10. Compare Operation The Compare Operation allows a clientOCTET STRINGs, such as attribute values, unless otherwise noted. 5.2. Transfer Protocols This protocol is designed tocompare an assertion providedrun over connection-oriented, reliable transports, with all 8 bits in anentryoctet being significant in thedirectory.data stream. 5.2.1. Transmission Control Protocol (TCP) TheCompare RequestLDAPMessage PDUs are mapped directly onto the TCP bytestream. It isdefined as follows: CompareRequest ::= [APPLICATION 14] SEQUENCE { entry LDAPDN, ava AttributeValueAssertion } Parameters ofrecommended that server implementations running over theCompare Request are: - entry:TCP MAY provide a protocol listener on thenameassigned port, 389. Servers may instead provide a listener on a different port number. Clients MUST support contacting servers on any valid TCP port. 5.2.2. Secure Socket Layer over TCP (SSL) LDAP is an application protocol which may be carried inside of a Secure Sockets Layer connection [8]. After establishing theentry to be compared with. - ava:SSL connection over TCP, theassertion with which an attribute inLDAPMessage PDUs are mapped directly onto theentry isbytestream to becompared. The result of the compare attemptedencoded by SSL. Server implementations running over SSL/TCP MAY provide a protocol listener on the assigned port for LDAPS, port 636. SSL may be used to provide to the serverupon receiptthe authenticated identity ofa Compare Request is returned intheCompare Response, definedclient, asfollows: CompareResponse ::= [APPLICATION 15] SEQUENCE { COMPONENTS OF LDAPResult, matchedSubtype [9] AttributeDescription OPTIONAL } When the resultCode is compareTruea distinguished name, and thematchedSubtype fieldserver MAY use this information when making access control decisions. This authentication ispermitted to contain the name ofunaffected if theattribute whoseclient binds and specifies no valuematched the ava infor theCompare operation. Servers which do not implement attribute hierarchies will omit this element. Upon receipt of a Compare Request,password nor aserver will attempt to perform the requested comparison.SASL mechanism. Theresult of the comparison will be returned to theclientinmay override theCompare Response.authentication by binding with a distinguished name and a non-empty password or a SASL mechanism. Note thaterrors and the result of comparison are all returned in the same construct. Note that some directory systems may establish access controls which permit the values of certain attributes (such as userPassword) to be compared but not read. In a search result,itmay beis expected thatan attributefuture versions ofthat type would be returned, but withthis document will reference anempty set of values. 4.11. Abandon Operation The function of the Abandon Operation is to allow a client to request that the server abandonIETF specification for equivalent transport layer security services, when one becomes available. 6. Implementation Guidelines This document describes anoutstanding operation. The Abandon Request isInternet protocol. Terms are definedas follows: AbandonRequest ::= [APPLICATION 16] MessageIDin [10]. 6.1. Server Implementations TheMessageID mustserver MUST bethat of a Search or Compare operation which was requested earlier during this association. Other typescapable ofoperations cannot be abandoned. (The abandon request itself has its own message id. This is distinct fromrecognizing all theid ofmandatory attribute type names and implement theearlier operation being abandoned.)syntaxes specified in [5]. Servers may also recognize additional attribute type names. Wahl,Howes &Howes, Kille[Page 32]Page 31 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 There is no response defined in the Abandon Operation. Upon transmission of an Abandon Operation, a client may expectMarch 1997 6.2. Client Implementations Clients which request referrals MUST ensure that they do not loop between servers. They MUST NOT repeatedly contact theoperation identified by the Message ID insame server for theAbandon Request has been abandoned. Insame request with theevent thatsame target entry name, scope and filter. Some clients may be using aserver receivescounter that is incremented each time referral handling occurs for anAbandon Request onoperation, and these kind of clients MUST be able to handle aSearch Operation inDIT with at least ten layers of naming contexts between themidstroot and a leaf entry. 7. Security Considerations When used with a connection-oriented transport, this version oftransmitting responses tothesearch, that server must cease transmitting entry responses toprotocol provides facilities for theabandoned request immediately. Of course,LDAP v2 authentication mechanism, simple authentication using a cleartext password, as well as any SASL mechanism [12]. It is also permitted that the servermust ensure that only properly encoded LDAPMessages are transmitted. Clients must not send abandon requests forcan return its credentials to thesame operation multiple times. Servers must discard abandon requests for message idsclient, if itdoes not recognize, for operationschooses to do so. This document also defines a mapping of LDAP over the Secure Sockets Layer (SSL), which can provide strong authentication, integrity and privacy of the connection. Use of cleartext password is strongly discouraged where the underlying transport service cannotbe abandoned,guarantee confidentiality andfor operations which have already been abandoned. 4.12. Extended Operation Itmaybe desirable in some communities to define additional operations for services not available in this protocol, for instance digitally signed operations and results. Thus an extension mechanism has been addedresult inthis versiondisclosure ofLDAP. The extended operation allows clientsthe password tomake requests and receive responsesunauthorized parties. When used withpredefined syntaxes and semantics. These may be defined in RFCs orSASL, it should beprivate to particular implementations. Each operation must have a unique OBJECT IDENTIFIER assigned to it. ExtendedRequest ::= [APPLICATION 23] SEQUENCE { requestName [0] LDAPOID, requestValue [1] OCTET STRING } The requestName is a dotted-decimal representation ofnoted that theOBJECT IDENTIFIER corresponding toname field of therequest. The requestValueBindRequest is not protected against modification. Thus if there isinformation inaform defined by that request, encapsulated inside an OCTET STRING. The server will respond to this with an LDAPMessage containing the ExtendedResponse. ExtendedResponse ::= [APPLICATION 24] SEQUENCE { COMPONENTS OF LDAPResult, responseName [10] LDAPOID OPTIONAL, response [11] OCTET STRING OPTIONAL } Ifclient name (LDAPDN) agreed through theserver does not recognizenegotiation of theoperation name,credentials, itmust return only the standard response fields, containingtakes precedence over any value in theprotocolError result code. 5. Protocol Element Encodingsunprotected name field. Implementations which cache attributes andTransfer Four underlying servicesentries obtained via LDAP MUST ensure that access controls aredefined here. At a minimum, clientsmaintained if that information is to be provided to multiple clients. 8. Acknowledgements This document is an update to RFC 1777, by Wengyik Yeong, Tim Howes, andservers must implement the mappingSteve Kille. Design ideas included in this document are based on those discussed in ASID and other IETF Working Groups. The contributions ofLDAP over TCP describedindividuals in5.1.1.these working groups is gratefully acknowledged. 9. Bibliography [1] ITU-T Rec. X.500, "The Directory: Overview of Concepts, Models and Service", 1993. [2] W. Yeong, T. Howes, S. Kille, "Lightweight Directory Access Protocol", RFC 1777, March 1995. Wahl,Howes &Howes, Kille[Page 33]Page 32 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 5.1. Mapping Onto BER-based Transport Services This protocol is designed to run over connection-oriented, reliable transports, with all 8 bits in an octet being significant in the data stream. The protocol elementsMarch 1997 [3] ITU-T Rec. X.680, "Abstract Syntax Notation One (ASN.1) - Specification ofLDAP are encoded for exchange using theBasicEncoding Rules (BER) [11] of ASN.1 [3]. However, due to the high overhead involved in using certain elements of the BER, the following additional restrictions are placed on BER-encodingsNotation", 1994. [4] S. Kille, M. Wahl, "A UTF-8 String Representation of Distinguished Names", INTERNET-DRAFT <draft-ietf-asid-ldapv3-dn-01.txt>. [5] M. Wahl, A. Coulbeck, T. Howes, S. Kille, W. Yeong, C. Robbins, "Lightweight X.500 Directory Access Protocol Attribute Syntax Definitions", INTERNET-DRAFT <draft-ietf-asid-ldapv3-attributes-04.txt>, March 1997. [6] ITU-T Rec. X.501, "The Directory: Models", 1993. [7] T. Berners-Lee, L. Masinter, M. McCahill, "Uniform Resource Locators (URL)", RFC 1738, Dec. 1994. [8] A. Freier, P. Karlton, P. Kocher, "The SSL Protocol Version 3.0", INTERNET-DRAFT <draft-ietf-tls-ssl-version3-00.txt>, Nov. 1996. [9] T. Howes, M. Smith, "An LDAPprotocol elements: (1) Only the definite form of length encoding will be used. (2) OCTET STRINGs will be encodedURL Format", RFC 1959, June 1996. [10] S. Bradner, "Key words for use inthe primitive form only. (3) If the value of a BOOLEAN type is true, the encoding must have its contents octets setRFCs tohex "FF". (4) If a valueIndicate Requirement Levels", INTERNET-DRAFT <draft-bradner-key-words-03.txt>. [11] ITU-T Rec. X.690, "Specification ofa type is its default value, it must be absent. Only some BOOLEAN and INTEGER types have default values in this protocol definition. These restrictions do not apply toASN.1types encapsulated inside of OCTET STRINGs, such as attribute values, unless otherwise noted. 5.1.1. Transmission Control Protocol (TCP) The LDAPMessage PDUs are mapped directly onto the TCP bytestream. Server implementations running over the TCP should provide a protocol listener on the assigned port, 389. 5.1.2. Connection Oriented Transport Service (COTS) The connection is established. No special use of T-Connect is made. Each LDAPMessage PDU is mapped directly onto T-Data. 5.1.3. User Datagram Protocol (UDP) The LDAPMessage PDUs are mapped directly onto UDP datagrams. A datagram may contain one or more concatenated requests. Only one response datagram is returned, containing all the responses concatenated together. The only operations which the client may request are sessionRequest, searchRequest, compareRequestencoding rules: Basic, Canonical, andextendedReq. The server may return sessionResponse, searchResFull, compareResponseDistinguished Encoding Rules", 1994. [12] J. Meyers, "Simple Authentication andextendedResp. If any of the requests in an incoming datagram generates an error (a result other than success, compareTrue or compareFalse), the server should ignore any following requests in that datagram. Server implementations running over the UDP should provideSecurity Layer", INTERNET-DRAFT <draft-myers-auth-sasl-04.txt>, July 1996. [13] Universal Multiple-Octet Coded Character Set (UCS) - Architecture and Basic Multilingual Plane, ISO/IEC 10646-1 : 1993. [14] F. Yergeau, "UTF-8, aprotocol listener on the assigned port, 389. Wahl,transformation format of Unicode and ISO 10646", RFC 2044, October 1996. [15] ITU-T Rec. X.511, "The Directory: Abstract Service Definition", 1993. 10. Authors' Address Mark Wahl Critical Angle Inc. 4815 W Braker Lane #502-385 Austin, TX 78759 USA EMail: M.Wahl@critical-angle.com Tim Howes&Netscape Communications Corp. 501 E. Middlefield Rd. Mountain View, CA 94043 USA Wahl, Howes, Kille[Page 34]Page 33 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 5.1.4. Secure Socket Layer over TCP (SSL) LDAP is an application protocol which may be carried inside of an Secure Sockets Layer connection [8]. After establishing the SSL connection over TCP, the LDAPMessage PDUs are mapped directly onto the bytestream. Server implementations running over SSL/TCP should provide a protocol listener on the assigned port for LDAP-SSL, port 636. Note: it is expected that future versions of this document may reference an IETF specification for equivalent transport layer security services, should one become available. 6. Implementation Guidelines 6.1. Server Implementations The server must be capable of recognizing all the mandatory attribute type names and implement the syntaxes specified in [5]. Servers may also recognize additional attribute type names. 6.2. Client Implementations 6.2.1. CLDAP Retry For simple lookup applications using the connectionless transport protocol UDP, use of a retry algorithm with multiple servers similar to that commonly used in DNS stub resolver implementations is recommended. The location of a CLDAP server or servers may be better specified using IP addresses (simple or broadcast) rather than names that must first be looked up in another directory such as DNS. 6.2.2. Loop Detection Clients which request referrals must ensure that they do not loop between servers. They must not progress a referral or reference in a subtree search where the new name is a superior of the name requested. They must not repeatedly contact the same server twice with the same target entry name. Some clients may be using a counter that is incremented each time referral handling is handled for an operation, and these kind of clients must be able to handle a DIT with up to ten layers of naming contexts between the root and a leaf entry. 7. Security Considerations When used with a connection-oriented transport, this version of the protocol provides facilities for the LDAP v2 authentication mechanism, simple authentication using a cleartext password, as well as any SASL mechanism [17]. It is also permitted that the server can return its credentials to the client, if it chooses to do so. Wahl, Howes & Kille [Page 35] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 This document also defines a mapping of LDAP over the Secure Sockets Layer (SSL), which can provide strong authentication, integrity and privacy of the connection. Use of cleartext password is strongly discouraged where the underlying transport service cannot guarantee confidentiality. A password hashing mechanism is given in Appendix B. When used with SASL, it should be noted that the name field of the BindRequest is not protected against modification. Thus if there is a client name (LDAPDN) agreed through the negotiation of the credentials, it must take precedence over any value in the unprotected name field. When used with the connectionless transport, no security services are available. There has been some discussion about the desirability of authentication with connectionless LDAP requests. This might take the form of a clear text password (which would go against the current IAB drive to remove such things from protocols) or some arbitrary credentials. It is felt that, in general, authentication would incur sufficient overhead to negate the advantages of the connectionless basis of LDAP. If an application requires authenticated access to the directory then connectionless LDAP is not an appropriate protocol. 8. Acknowledgements This document is an update to RFC 1777, by Wengyik Yeong, Tim Howes, and Steve Kille. It also includes material from RFC 1798, by Alan Young. Design ideas included in this document are based on those discussed in ASID and other IETF Working Groups. The contributions of individuals in these working groups is gratefully acknowledged. 9. Bibliography [1] ITU-T Rec. X.500, "The Directory: Overview of Concepts, Models and Service", 1993. [2] W. Yeong, T. Howes, S. Kille, "Lightweight Directory Access Protocol", RFC 1777, March 1995. [3] ITU-T Rec. X.680, "Abstract Syntax Notation One (ASN.1) - Specification of Basic Notation", 1994. [4] S. Kille, M. Wahl, "A UTF-8 String Representation of Distinguished Names", INTERNET-DRAFT <draft-ietf-asid-ldapv3-dn-00.txt>. [5] M. Wahl, A. Coulbeck, T. Howes, S. Kille, W. Yeong, C. Robbins, "Lightweight X.500 Directory Access Protocol Standard and Pilot Attribute Definitions", INTERNET-DRAFT <draft-ietf-asid-ldapv3-attributes-02.txt>, August 1996. [6] ITU-T Rec. X.501, "The Directory: Models", 1993. [7] ITU-T Rec. X.520, "The Directory: Selected Attribute Types", 1993. Wahl, Howes & Kille [Page 36] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 [8] A. Freier, P. Karlton, P. Kocher, "The SSL Protocol Version 3.0", INTERNET-DRAFT <draft-freier-ssl-version3-01.txt>, March 1996. [9] T. Howes, M. Smith, "An LDAP URL Format", RFC 1959, June 1996. [10] ITU-T Rec. X.518, "The Directory: Procedures for Distributed Operation", 1993. [11] ITU-T Rec. X.690, "Specification of ASN.1 encoding rules: Basic, Canonical, and Distinguished Encoding Rules", 1994. [12] ITU-T Rec. X.509, "The Directory: Authentication Framework", 1993. [13] ITU-T Rec. X.511, "The Directory: Abstract Service Definition", 1993. [14] T. Berners-Lee, L. Masinter, M. McCahill, "Uniform Resource Locators (URL)", RFC 1738, Dec. 1994. [15] Universal Multiple-Octet Coded Character Set (UCS) - Architecture and Basic Multilingual Plane, ISO/IEC 10646-1 : 1993. [16] M. Davis, UTF-8, (WG2 N1036) DAM for ISO/IEC 10646-1. [17] J. Meyers, "Simple Authentication and Security Layer", INTERNET-DRAFT <draft-myers-auth-sasl-04.txt>, July 1996. 10. Authors' Address Mark Wahl Critical Angle Inc. 4815 W Braker Lane #502-385 Austin, TX 78759 USA EMail: M.Wahl@critical-angle.com Tim Howes Netscape Communications Corp. 501 E. Middlefield Rd. Mountain View, CA 94043 USA Phone: +1 415 254-1900 EMail: howes@netscape.com Wahl, Howes & Kille [Page 37] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 Steve Kille ISODE Consortium The Dome, The Square Richmond TW9 1DT UK Phone: +44-181-332-9091 EMail: S.Kille@isode.com Appendix A - Complete ASN.1 Definition Lightweight-Directory-Access-Protocol-V3 DEFINITIONS IMPLICIT TAGS ::= BEGIN LDAPMessage ::= SEQUENCE { messageID MessageID, cldapUserName LDAPDN OPTIONAL, protocolOp CHOICE { bindRequest BindRequest, bindResponse BindResponse, unbindRequest UnbindRequest, searchRequest SearchRequest, searchResEntry SearchResultEntry, searchResDone SearchResultDone, searchResRef SearchResultReference, searchResFull SearchResultFull, modifyRequest ModifyRequest, modifyResponse ModifyResponse, addRequest AddRequest, addResponse AddResponse, delRequest DelRequest, delResponse DelResponse, modDNRequest ModifyDNRequest, modDNResponse ModifyDNResponse, compareRequest CompareRequest, compareResponse CompareResponse, abandonRequest AbandonRequest, sessionRequest SessionRequest, sessionResponse SessionResponse, extendedReq ExtendedRequest, extendedResp ExtendedResponse } } MessageID ::= INTEGER (0 .. maxInt) maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- LDAPString ::= OCTET STRING LDAPOID ::= OCTET STRING Wahl, Howes & Kille [Page 38] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 LDAPDN ::= LDAPString RelativeLDAPDN ::= LDAPString AttributeType ::= LDAPString AttributeDescription ::= LDAPString AttributeDescriptionList ::= SEQUENCE OF AttributeDescription AttributeValue ::= OCTET STRING AttributeValueAssertion ::= SEQUENCE { attributeDesc AttributeDescription, assertionValue AssertionValue } AssertionValue ::= OCTET STRING Attribute ::= SEQUENCE { type AttributeDescription, vals SET OF AttributeValue } MatchingRuleId ::= LDAPString Wahl, Howes & Kille [Page 39] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 LDAPResult ::= SEQUENCE { resultCode ENUMERATED { success (0), operationsError (1), protocolError (2), timeLimitExceeded (3), sizeLimitExceeded (4), compareFalse (5), compareTrue (6), authMethodNotSupported (7), strongAuthRequired (8), -- 9 reserved -- referral (10), -- new adminLimitExceeded (11), -- new unavailableCriticalExtension (12), -- new -- 13-15 unused -- noSuchAttribute (16), undefinedAttributeType (17), inappropriateMatching (18), constraintViolation (19), attributeOrValueExists (20), invalidAttributeSyntax (21), -- 22-31 unused -- noSuchObject (32), aliasProblem (33), invalidDNSyntax (34), -- 35 reserved for undefined isLeaf -- aliasDereferencingProblem (36), -- 37-47 unused -- inappropriateAuthentication (48), invalidCredentials (49), insufficientAccessRights (50), busy (51), unavailable (52), unwillingToPerform (53), loopDetect (54), -- 55-63 unused -- namingViolation (64), objectClassViolation (65), notAllowedOnNonLeaf (66), notAllowedOnRDN (67), entryAlreadyExists (68), objectClassModsProhibited (69), resultsTooLarge (70), -- cl only affectsMultipleDSAs (71), -- new -- 72-79 unused -- other (80) }, -- 81-90 reserved for APIs -- matchedDN LDAPDN, errorMessage LDAPString, referral [3] Referral OPTIONAL } Referral ::= SEQUENCE OF LDAPURL Wahl, Howes & Kille [Page 40] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 LDAPURL ::= LDAPString -- limited to characters permitted in URLs BindRequest ::= [APPLICATION 0] SEQUENCE { version INTEGER (1 .. 127), name LDAPDN, authentication AuthenticationChoice } AuthenticationChoice ::= CHOICE { simple [0] OCTET STRING, -- 1 and 2 reserved sasl [3] SaslCredentials } SaslCredentials ::= SEQUENCE { mechanism LDAPString, credentials OCTET STRING } BindResponse ::= [APPLICATION 1] SEQUENCE { COMPONENTS OF LDAPResult, supportedVersion [5] INTEGER (1..127) OPTIONAL, serverURL [6] LDAPURL OPTIONAL, serverCreds [7] AuthenticationChoice OPTIONAL } UnbindRequest ::= [APPLICATION 2] NULL SessionRequest ::= [APPLICATION 17] Controls SessionResponse ::= [APPLICATION 18] SEQUENCE { COMPONENTS OF LDAPResult, unsupportedCtls [12] SEQUENCE OF LDAPString } Controls ::= SEQUENCE OF SEQUENCE { controlType LDAPString, criticality BOOLEAN DEFAULT FALSE, controlValue OCTET STRING } SearchRequest ::= [APPLICATION 3] SEQUENCE { baseObject LDAPDN, scope ENUMERATED { baseObject (0), singleLevel (1), wholeSubtree (2) }, derefAliases ENUMERATED { neverDerefAliases (0), derefInSearching (1), derefFindingBaseObj (2), derefAlways (3) }, sizeLimit INTEGER (0 .. maxInt), timeLimit INTEGER (0 .. maxInt), typesOnly BOOLEAN, filter Filter, attributes AttributeDescriptionList, pageSizeLimit [0] INTEGER OPTIONAL, sortKeys [1] SortKeyList OPTIONAL, prevSearchId [2] MessageID OPTIONAL, startLocation [3] INTEGER OPTIONAL } Wahl, Howes &March 1997 Phone: +1 415 254-1900 EMail: howes@netscape.com Steve Kille[Page 41] INTERNET-DRAFT Lightweight Directory Access Protocol (v3) October 1996 SortKeyList ::= SEQUENCE OF SEQUENCE { attributeType AttributeType, orderingRule [0] MatchingRuleId OPTIONAL, reverseOrder [1] BOOLEAN DEFAULT FALSE } Filter ::= CHOICE { and [0] SET OF Filter, or [1] SET OF Filter, not [2] Filter, equalityMatch [3] AttributeValueAssertion, substrings [4] SubstringFilter, greaterOrEqual [5] AttributeValueAssertion, lessOrEqual [6] AttributeValueAssertion, present [7] AttributeType, approxMatch [8] AttributeValueAssertion, extensibleMatch [9] MatchingRuleAssertion } SubstringFilterIsode Limited The Dome, The Square Richmond TW9 1DT UK Phone: +44-181-332-9091 EMail: S.Kille@isode.com Appendix A - Complete ASN.1 Definition Lightweight-Directory-Access-Protocol-V3 DEFINITIONS IMPLICIT TAGS ::=SEQUENCE { type AttributeDescription, -- at least one must be present substrings SEQUENCE OF CHOICE { initial [0] LDAPString, any [1] LDAPString, final [2] LDAPString } } MatchingRuleAssertionBEGIN LDAPMessage ::= SEQUENCE {matchingRule [1] MatchingRuleId OPTIONAL, type [2] AttributeType OPTIONAL, matchValue [3] AssertionValue, dnAttributes [4] BOOLEAN DEFAULT FALSE } SearchResultEntry ::= [APPLICATION 4] SEQUENCEmessageID MessageID, protocolOp CHOICE {objectName LDAPDN, attributes PartialAttributeListbindRequest BindRequest, bindResponse BindResponse, unbindRequest UnbindRequest, searchRequest SearchRequest, searchResEntry SearchResultEntry, searchResDone SearchResultDone, searchResRef SearchResultReference, modifyRequest ModifyRequest, modifyResponse ModifyResponse, addRequest AddRequest, addResponse AddResponse, delRequest DelRequest, delResponse DelResponse, modDNRequest ModifyDNRequest, modDNResponse ModifyDNResponse, compareRequest CompareRequest, compareResponse CompareResponse, abandonRequest AbandonRequest, extendedReq ExtendedRequest, extendedResp ExtendedResponse }, controls [0] Controls OPTIONAL }PartialAttributeListMessageID ::=SEQUENCE OF SEQUENCE { type AttributeDescription, vals SET OF AttributeValue } -- implementors should note that the PartialAttributeList may have -- zero elements (if none of the attributes of that entry were -- requested, or could be returned), and that the vals set may also -- have zero elements (if types only was requested, or all the valuesINTEGER (0 .. maxInt) maxInt INTEGER ::= 2147483647 --exceeded the attribute size limit or were excluded because of(2^^31 - 1) --access control). SearchResultReferenceLDAPString ::=[APPLICATION 19] SEQUENCE OF LDAPURL -- at least one LDAPURL element must be present SearchResultDoneOCTET STRING LDAPOID ::=[APPLICATION 5] SEQUENCE { COMPONENTS OF LDAPResult, totalCount [8] INTEGER OPTIONAL }OCTET STRING LDAPDN ::= LDAPString Wahl,Howes &Howes, Kille[Page 42]Page 34 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 SearchResultFullMarch 1997 RelativeLDAPDN ::=SEQUENCE OF CHOICE { entry SearchResultEntry, reference SearchResultReference, resultCode SearchResultDone } ModifyRequestLDAPString AttributeType ::=[APPLICATION 6] SEQUENCE { object LDAPDN, modification SEQUENCE OF SEQUENCE { operation ENUMERATED { add (0), delete (1), replace (2) }, modification AttributeTypeAndValues } } AttributeTypeAndValuesLDAPString AttributeDescription ::= LDAPString AttributeDescriptionList ::= SEQUENCE{ type AttributeDescription, vals SETOF AttributeDescription AttributeValue} ModifyResponse::=[APPLICATION 7] LDAPResult AddRequestOCTET STRING AttributeValueAssertion ::=[APPLICATION 8]SEQUENCE {entry LDAPDN, attributes AttributeListattributeDesc AttributeDescription, assertionValue AssertionValue }AttributeListAssertionValue ::= OCTET STRING Attribute ::=SEQUENCE OFSEQUENCE { type AttributeDescription, vals SET OF AttributeValue }AddResponse ::= [APPLICATION 9] LDAPResult DelRequest ::= [APPLICATION 10] LDAPDN DelResponse ::= [APPLICATION 11] LDAPResult ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { entry LDAPDN, newrdn RelativeLDAPDN, deleteoldrdn BOOLEAN, newSuperior [0] LDAPDN OPTIONAL } ModifyDNResponseMatchingRuleId ::=[APPLICATION 13]LDAPString LDAPResultCompareRequest ::= [APPLICATION 14] SEQUENCE { entry LDAPDN, ava AttributeValueAssertion } CompareResponse::=[APPLICATION 15]SEQUENCE {COMPONENTS OF LDAPResult, matchedSubtype [9] AttributeDescription OPTIONAL } AbandonRequest ::= [APPLICATION 16] MessageID ExtendedRequest ::= [APPLICATION 23] SEQUENCEresultCode ENUMERATED {requestName [0] LDAPOID, requestValue [1] OCTET STRING }success (0), operationsError (1), protocolError (2), timeLimitExceeded (3), sizeLimitExceeded (4), compareFalse (5), compareTrue (6), authMethodNotSupported (7), strongAuthRequired (8), -- 9 reserved -- referral (10), -- new adminLimitExceeded (11), -- new unavailableCriticalExtension (12), -- new -- 13-15 unused -- noSuchAttribute (16), undefinedAttributeType (17), inappropriateMatching (18), constraintViolation (19), attributeOrValueExists (20), invalidAttributeSyntax (21), -- 22-31 unused -- noSuchObject (32), aliasProblem (33), invalidDNSyntax (34), -- 35 reserved for undefined isLeaf -- aliasDereferencingProblem (36), -- 37-47 unused -- inappropriateAuthentication (48), invalidCredentials (49), insufficientAccessRights (50), busy (51), Wahl,Howes &Howes, Kille[Page 43]Page 35 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 ExtendedResponseMarch 1997 unavailable (52), unwillingToPerform (53), loopDetect (54), -- 55-63 unused -- namingViolation (64), objectClassViolation (65), notAllowedOnNonLeaf (66), notAllowedOnRDN (67), entryAlreadyExists (68), objectClassModsProhibited (69), -- 70 reserved for CLDAP -- affectsMultipleDSAs (71), -- new -- 72-79 unused -- other (80) }, -- 81-90 reserved for APIs -- matchedDN LDAPDN, errorMessage LDAPString, referral [3] Referral OPTIONAL } Referral ::= SEQUENCE OF LDAPURL LDAPURL ::= LDAPString -- limited to characters permitted in URLs Controls ::=[APPLICATION 24]SEQUENCE{ COMPONENTSOFLDAPResult, responseName [10] LDAPOID OPTIONAL, response [11]Control Control ::= SEQUENCE { controlType LDAPOID, criticality BOOLEAN DEFAULT FALSE, controlValue OCTET STRING OPTIONAL }-- not part of LDAP core protocol, see Appendix B -- ProtectedPasswordBindRequest ::= [APPLICATION 0] SEQUENCE {time1version INTEGER (1 .. 127), name LDAPDN, authentication AuthenticationChoice } AuthenticationChoice ::= CHOICE { simple [0]UTCTime OPTIONAL, time2 [1] UTCTime OPTIONAL, random1 [2] BIT STRING OPTIONAL, random2OCTET STRING, -- 1 and 2 reserved sasl [3]BIT STRING OPTIONAL, algorithmIdentifier [4] LDAPOID, encipheredPassword [5] BIT STRINGSaslCredentials }StrongCredentialsSaslCredentials ::= SEQUENCE {certification-path [0] AF.CertificationPath OPTIONAL, bind-token [1] DAS.Token } END Appendix B - X.500 Authentication Mechanisms This Appendix defines two SASL authentication mechanisms which may be used with LDAP. These mechanisms are only for authentication, they have no effect on the protocol encodings and are not designed to provide integrity or confidentiality services. If an implementation supports these elements, then the following additional encoding restrictions apply to these elements: - BIT STRING values are to be encoded in primitive form only. Unused bits in the final octet of the encoding of a BIT STRING value, if there are any, should always be set to zero. - UTC Times must be encoded with the "Z" suffix, not as a local time. The client may include one of these mechanisms and its credential in the BindRequest. The server will return a BindResponse of either: - success, and the serverCreds field absent, implying that the server successfully authenticated the client but is not returning any authentication information about the server, - success, and the serverCreds field present, with the samemechanismas that requested by the client, and theLDAPString, credentialsof the server itself, - any of the resultCodes listen in 4.2.3, with theOCTET STRING } BindResponse ::= [APPLICATION 1] SEQUENCE { COMPONENTS OF LDAPResult, serverCredsfield absent, indicating that the server did not successfully authenticate the client or another problem occurred.[7] SaslCredentials OPTIONAL } UnbindRequest ::= [APPLICATION 2] NULL Wahl,Howes &Howes, Kille[Page 44]Page 36 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 B.1. X.511-Protected The "X.511-Protected" authentication mechanism allows a hash of the password, combined optionally with the current timeMarch 1997 SearchRequest ::= [APPLICATION 3] SEQUENCE { baseObject LDAPDN, scope ENUMERATED { baseObject (0), singleLevel (1), wholeSubtree (2) }, derefAliases ENUMERATED { neverDerefAliases (0), derefInSearching (1), derefFindingBaseObj (2), derefAlways (3) }, sizeLimit INTEGER (0 .. maxInt), timeLimit INTEGER (0 .. maxInt), typesOnly BOOLEAN, filter Filter, attributes AttributeDescriptionList } Filter ::= CHOICE { andrandom numbers, to be sent to[0] SET OF Filter, orreturned from the server. The protected field contains the hash value. This prevents a password from being carried in the clear. The mechanism field is set to the string "X.511-Protected", and the credentials field contain the DER encoding of a value of the following ASN.1 type: ProtectedPassword[1] SET OF Filter, not [2] Filter, equalityMatch [3] AttributeValueAssertion, substrings [4] SubstringFilter, greaterOrEqual [5] AttributeValueAssertion, lessOrEqual [6] AttributeValueAssertion, present [7] AttributeDescription, approxMatch [8] AttributeValueAssertion, extensibleMatch [9] MatchingRuleAssertion } SubstringFilter ::= SEQUENCE { type AttributeDescription, -- at least one must be present substrings SEQUENCE OF CHOICE { initial [0] LDAPString, any [1] LDAPString, final [2] LDAPString } } MatchingRuleAssertion ::= SEQUENCE { matchingRule [1] MatchingRuleId OPTIONAL, type [2] AttributeDescription OPTIONAL, matchValue [3] AssertionValue, dnAttributes [4] BOOLEAN DEFAULT FALSE } SearchResultEntry ::= [APPLICATION 4] SEQUENCE { objectName LDAPDN, attributes PartialAttributeList } PartialAttributeList ::= SEQUENCE OF SEQUENCE { type AttributeDescription, vals SET OF AttributeValue } SearchResultReference ::= [APPLICATION 19] SEQUENCE OF LDAPURL SearchResultDone ::= [APPLICATION 5] LDAPResult Wahl, Howes, Kille Page 37 INTERNET-DRAFT Lightweight Directory Access Protocol (v3) March 1997 ModifyRequest ::= [APPLICATION 6] SEQUENCE { object LDAPDN, modification SEQUENCE OF SEQUENCE { operation ENUMERATED { add (0), delete (1), replace (2) }, modification AttributeTypeAndValues } } AttributeTypeAndValues ::= SEQUENCE { type AttributeDescription, vals SET OF AttributeValue } ModifyResponse ::= [APPLICATION 7] LDAPResult AddRequest ::= [APPLICATION 8] SEQUENCE { entry LDAPDN, attributes AttributeList } AttributeList ::= SEQUENCE OF SEQUENCE { type AttributeDescription, vals SET OF AttributeValue } AddResponse ::= [APPLICATION 9] LDAPResult DelRequest ::= [APPLICATION 10] LDAPDN DelResponse ::= [APPLICATION 11] LDAPResult ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {time1entry LDAPDN, newrdn RelativeLDAPDN, deleteoldrdn BOOLEAN, newSuperior [0]UTCTime OPTIONAL, time2 [1] UTCTime OPTIONAL, random1 [2] BIT STRING OPTIONAL, random2 [3] BIT STRING OPTIONAL, algorithmIdentifier [4] LDAPOID, encipheredPassword [5] BIT STRINGLDAPDN OPTIONAL }The use of the time1, time2, random1, random2 and encryptedPassword fields are as defined in ITU-T Rec. X.509 [12] and the functional profile for X.500 for the environment in which this authentication mechanism is to be used. The name field of the BindRequest must be a nonempty string when this mechanism is being used to authenticate the client. Note that this security mechanism is not intended to protect against attackers modifying the bind name field or other protocol elements. B.2. X.511-Strong Strong authentication to the directory can be accomplished using the "X.511-Strong". The mechanism field is set to the string "X.511-Strong", and the credentials field set to a DER-encoding of a value of the following ASN.1 type: StrongCredentialsModifyDNResponse ::= [APPLICATION 13] LDAPResult CompareRequest ::= [APPLICATION 14] SEQUENCE { entry LDAPDN, ava AttributeValueAssertion } CompareResponse ::= [APPLICATION 15] LDAPResult AbandonRequest ::= [APPLICATION 16] MessageID ExtendedRequest ::= [APPLICATION 23] SEQUENCE { requestName [0] LDAPOID, requestValue [1] OCTET STRING OPTIONAL } ExtendedResponse ::= [APPLICATION 24] SEQUENCE {certification-path [0] AF.CertificationPathCOMPONENTS OF LDAPResult, responseName [10] LDAPOID OPTIONAL,bind-token [1] DAS.Tokenresponse [11] OCTET STRING OPTIONAL }The ASN.1 type "CertificationPath" is defined in [12], and the ASN.1 type "Token" is defined in [13]. When the credentials are being used to authenticate the client, it is recommended that the certification-path field be present, which will contain minimally the client's certificate. If the certification-path field is supplied, then the name field of the BindRequest must be an empty string, and the server will obtain the name of the client from the subject field of the certification-path userCertificate.END Wahl,Howes &Howes, Kille[Page 45]Page 38 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 It is recommended for interoperability that if the server's or client's certificates contain RSA public keys, the PKCS md5WithRSAEncryption (1.2.840.113549.1.1.4) algorithm should be used.March 1997 Table of Contents 1. Status of this Memo .................................... 1 2. Abstract ............................................... 1 3. Models ................................................. 2 3.1. Protocol Model ........................................ 2 3.2. Data Model ............................................3 3.2.12 3.2.1. Attributes of Entries............................................................... 33.2.23.2.2. SubschemaSubentryEntries ................................... 4 3.3. Relationship to X.500 ................................. 5 3.4. Server-specific Data Requirements ..................... 5 4. Elements of Protocol ................................... 6 4.1. Common Elements ....................................... 6 4.1.1. Message Envelope .................................... 6 4.1.1.1. Message ID ........................................ 7 4.1.2. String Types ........................................ 8 4.1.3. Distinguished Name and Relative Distinguished Name .. 8 4.1.4. Attribute Typeand Description ............................................................ 9 4.1.5. AttributeValueDescription ............................... 9 4.1.5.1. Binary Option ..................................... 10 4.1.6. Attribute Value ..................................... 10 4.1.7. Attribute Value Assertion ........................... 114.1.7.4.1.8. Attribute ........................................... 114.1.8.4.1.9. Matching Rule Identifier ............................11 4.1.9.12 4.1.10. Result Message...................................... 11 4.1.10...................................... 12 4.1.11. Referral ...........................................1314 4.1.12. Controls ........................................... 15 4.2. Bind Operation....................................... 14........................................ 16 4.2.1. Sequencing of the Bind Request ......................15 4.2.217 4.2.2. Authentication and Other Security Services........... 15.......... 17 4.2.3. Bind Response .......................................1618 4.3. Unbind Operation..................................... 17...................................... 18 4.4.Session Control Operation ............................ 17Unsolicited Notification .............................. 19 4.4.1. Notice of Disconnection ............................. 19 4.5. Search Operation........................................................................... 20 4.5.1. Search Request ...................................... 20 4.5.2. Search Result .......................................2423 4.5.3. Continuation References in the Search Result ........2624 4.5.3.1. Example ...........................................2724 4.6. Modify Operation..................................... 28...................................... 25 4.7. Add Operation........................................ 30......................................... 27 4.8. Delete Operation..................................... 30...................................... 27 4.9. Modify DN Operation.................................. 31................................... 28 4.10. Compare Operation................................... 32.................................... 29 4.11. Abandon Operation................................... 32.................................... 29 4.12. Extended Operation.................................. 33................................... 30 5. Protocol Element Encodings and Transfer ................3330 5.1. Mapping Onto BER-based Transport Services............ 34 5.1.1.............. 30 5.2. Transfer Protoocols ................................... 31 5.2.1. Transmission Control Protocol (TCP)................ 34 5.1.2. Connection Oriented Transport Service (COTS) ....... 34 5.1.3. User Datagram Protocol (UDP) ....................... 34 5.1.4.................. 31 5.2.2. Secure Socket Layer over TCP (SSL)................. 35.................. 31 6. Implementation Guidelines ..............................3531 6.1. Server Implementations............................... 35................................ 31 6.2. Client Implementations ................................ 32 Wahl,Howes &Howes, Kille[Page 46]Page 39 INTERNET-DRAFT Lightweight Directory Access Protocol (v3)October 1996 6.2. Client Implementations ............................... 35 6.2.1. CLDAP Retry ......................................... 35 6.2.2. Loop Detection ...................................... 35March 1997 7. Security Considerations ................................3532 8. Acknowledgements .......................................3632 9. Bibliography ...........................................3632 10. Authors' Address...................................... 37....................................... 33 Appendix A - Complete ASN.1 Definition .....................38 Appendix B - X.500 Authentication Mechanisms ............... 44 B.1. X.511-Protected ....................................... 45 B.2. X.511-Strong .......................................... 45 <draft-ietf-asid-ldapv3-protocol-03.txt>34 <draft-ietf-asid-ldapv3-protocol-04.txt> Expires:April 5,September 25, 1997[Page 47]----