mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
3418 lines
142 KiB
Plaintext
3418 lines
142 KiB
Plaintext
|
||
|
||
Internet-Draft Editor: J. Sermersheim
|
||
Intended Category: Standard Track Novell, Inc
|
||
Document: draft-ietf-ldapbis-protocol-13.txt Mar 2003
|
||
Obsoletes: RFC 2251
|
||
|
||
|
||
LDAP: The Protocol
|
||
|
||
|
||
Status of this Memo
|
||
|
||
This document is an Internet-Draft and is in full conformance with
|
||
all provisions of Section 10 of RFC2026.
|
||
|
||
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."
|
||
|
||
The list of current Internet-Drafts can be accessed at
|
||
http://www.ietf.org/ietf/1id-abstracts.txt
|
||
|
||
The list of Internet-Draft Shadow Directories can be accessed at
|
||
http://www.ietf.org/shadow.html.
|
||
|
||
Distribution of this memo is unlimited. Technical discussion of this
|
||
document will take place on the IETF LDAP Revision Working Group
|
||
(LDAPbis) mailing list <ietf-ldapbis@openldap.org>. Please send
|
||
editorial comments directly to the editor <jimse@novell.com>.
|
||
|
||
|
||
Abstract
|
||
|
||
This document describes the protocol elements, along with their
|
||
semantics and encodings, for the Lightweight Directory Access
|
||
Protocol (LDAP). LDAP provides access to distributed directory
|
||
services that act in accordance with X.500 data and service models.
|
||
These protocol elements are based on those described in the X.500
|
||
Directory Access Protocol (DAP).
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction.....................................................2
|
||
2. Conventions......................................................3
|
||
3. Protocol Model...................................................3
|
||
4. Elements of Protocol.............................................3
|
||
4.1. Common Elements................................................4
|
||
4.1.1. Message Envelope.............................................4
|
||
4.1.2. String Types.................................................6
|
||
4.1.3. Distinguished Name and Relative Distinguished Name...........6
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 1
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
4.1.4. Attribute Descriptions.......................................6
|
||
4.1.5. Attribute Value..............................................7
|
||
4.1.6. Attribute Value Assertion....................................7
|
||
4.1.7. Attribute....................................................7
|
||
4.1.8. Matching Rule Identifier.....................................8
|
||
4.1.9. Result Message...............................................8
|
||
4.1.10. Referral...................................................10
|
||
4.1.11. Controls...................................................11
|
||
4.2. Bind Operation................................................12
|
||
4.3. Unbind Operation..............................................14
|
||
4.4. Unsolicited Notification......................................15
|
||
4.5. Search Operation..............................................16
|
||
4.6. Modify Operation..............................................23
|
||
4.7. Add Operation.................................................24
|
||
4.8. Delete Operation..............................................25
|
||
4.9. Modify DN Operation...........................................26
|
||
4.10. Compare Operation............................................27
|
||
4.11. Abandon Operation............................................28
|
||
4.12. Extended Operation...........................................28
|
||
4.13. Start TLS Operation..........................................29
|
||
5. Protocol Element Encodings and Transfer.........................31
|
||
5.1. Protocol Encoding.............................................31
|
||
5.2. Transfer Protocols............................................31
|
||
6. Implementation Guidelines.......................................32
|
||
6.1. Server Implementations........................................32
|
||
6.2. Client Implementations........................................32
|
||
7. Security Considerations.........................................32
|
||
8. Acknowledgements................................................33
|
||
9. Normative References............................................33
|
||
10. Editor's Address...............................................34
|
||
Appendix A - LDAP Result Codes.....................................35
|
||
A.1 Non-Error Result Codes.........................................35
|
||
A.2 Error Result Codes.............................................35
|
||
A.3 Classes and Precedence of Error Result Codes...................35
|
||
Appendix C - Change History........................................46
|
||
C.1 Changes made to RFC 2251:......................................46
|
||
C.2 Changes made to draft-ietf-ldapbis-protocol-00.txt:............46
|
||
C.3 Changes made to draft-ietf-ldapbis-protocol-01.txt:............47
|
||
C.4 Changes made to draft-ietf-ldapbis-protocol-02.txt:............47
|
||
C.5 Changes made to draft-ietf-ldapbis-protocol-03.txt:............49
|
||
C.6 Changes made to draft-ietf-ldapbis-protocol-04.txt:............51
|
||
C.7 Changes made to draft-ietf-ldapbis-protocol-05.txt:............51
|
||
C.8 Changes made to draft-ietf-ldapbis-protocol-06.txt:............52
|
||
C.9 Changes made to draft-ietf-ldapbis-protocol-07.txt:............55
|
||
C.10 Changes made to draft-ietf-ldapbis-protocol-08.txt:...........55
|
||
C.11 Changes made to draft-ietf-ldapbis-protocol-09.txt:...........55
|
||
C.12 Changes made to draft-ietf-ldapbis-protocol-10.txt:...........55
|
||
C.13 Changes made to draft-ietf-ldapbis-protocol-11.txt:...........56
|
||
C.14 Changes made to draft-ietf-ldapbis-protocol-12.txt:...........56
|
||
Appendix D - Outstanding Work Items................................56
|
||
|
||
|
||
1. Introduction
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 2
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
The Directory is "a collection of open systems cooperating to provide
|
||
directory services" [X.500]. A Directory user, which may be a human
|
||
or other entity, accesses the Directory through a client (or
|
||
Directory User Agent (DUA)). The client, on behalf of the directory
|
||
user, interacts with one or more servers (or Directory System Agents
|
||
(DSA)). Clients interact with servers using a directory access
|
||
protocol.
|
||
|
||
This document details the protocol elements of Lightweight Directory
|
||
Access Protocol, along with their semantics. Following the
|
||
description of protocol elements, it describes the way in which the
|
||
protocol is encoded and transferred.
|
||
|
||
This document is an integral part of the LDAP Technical Specification
|
||
[Roadmap].
|
||
|
||
This document replaces RFC 2251. Appendix C holds a detailed log of
|
||
changes to RFC 2251. Prior to Working Group Last Call, this appendix
|
||
will be distilled to a summary of changes to RFC 2251.
|
||
|
||
|
||
2. Conventions
|
||
|
||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||
"SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are
|
||
to be interpreted as described in [RFC2119].
|
||
|
||
|
||
3. 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 a server. 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.
|
||
|
||
Note 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.
|
||
|
||
Note that the core protocol operations defined in this document can
|
||
be mapped to a subset of the X.500(1997) directory abstract service.
|
||
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 DAP requests.
|
||
|
||
|
||
4. Elements of Protocol
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 3
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
The LDAP protocol is described using Abstract Syntax Notation 1
|
||
(ASN.1) [X.680], and is transferred using a subset of ASN.1 Basic
|
||
Encoding Rules [X.690]. Section 5.1 specifies how the protocol is
|
||
encoded and transferred.
|
||
|
||
In order to support future Standards Track extensions to this
|
||
protocol, extensibility is implied where it is allowed (per ASN.1).
|
||
In addition, ellipses (...) have been supplied in ASN.1 types that
|
||
are explicitly extensible as discussed in [LDAPIANA]. Because of the
|
||
implied extensibility, clients and servers MUST ignore trailing
|
||
SEQUENCE elements whose tags they do not recognize.
|
||
|
||
Changes to the LDAP protocol other than through the extension
|
||
mechanisms described here require a different version number. A
|
||
client indicates the version it is using as part of the bind request,
|
||
described in section 4.2. If a client has not sent a bind, the server
|
||
MUST assume the client is using version 3 or later.
|
||
|
||
Clients may determine the protocol versions a server supports by
|
||
reading the supportedLDAPVersion attribute from the root DSE
|
||
[Models]. Servers which implement version 3 or later MUST provide
|
||
this attribute.
|
||
|
||
|
||
4.1. Common Elements
|
||
|
||
This section describes the LDAPMessage envelope PDU (Protocol Data
|
||
Unit) 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:
|
||
|
||
LDAPMessage ::= SEQUENCE {
|
||
messageID MessageID,
|
||
protocolOp CHOICE {
|
||
bindRequest 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,
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 4
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
modDNResponse ModifyDNResponse,
|
||
compareRequest CompareRequest,
|
||
compareResponse CompareResponse,
|
||
abandonRequest AbandonRequest,
|
||
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 and the 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 MAY return the Notice of Disconnection
|
||
described in section 4.4.1, with resultCode protocolError, and MUST
|
||
immediately close the connection.
|
||
|
||
In other cases where the client or server cannot parse a PDU, it
|
||
SHOULD abruptly close the connection where further communication
|
||
(including providing notice) would be pernicious. Otherwise, server
|
||
implementations MUST return an appropriate response to the request,
|
||
with the resultCode set to protocolError.
|
||
|
||
The ASN.1 type Controls is defined in section 4.1.11.
|
||
|
||
|
||
4.1.1.1. Message ID
|
||
|
||
All LDAPMessage envelopes encapsulating responses contain the
|
||
messageID value of the corresponding request LDAPMessage.
|
||
|
||
The message ID of a request MUST have a non-zero value different from
|
||
the values of any other requests outstanding in the LDAP session of
|
||
which this message is a part. The zero value is reserved for the
|
||
unsolicited notification message.
|
||
|
||
Typical clients increment a counter for each request.
|
||
|
||
A client MUST NOT send a request with the same message ID as an
|
||
earlier request on the same connection unless it can be determined
|
||
that the server is no longer servicing the earlier request. Otherwise
|
||
the behavior is undefined. For operations that do not return
|
||
responses (unbind, abandon, and abandoned operations), the client
|
||
SHOULD assume the operation is in progress until a subsequent bind
|
||
request completes.
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 5
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
4.1.2. String Types
|
||
|
||
The LDAPString is a notational convenience to indicate that, although
|
||
strings of LDAPString type encode as OCTET STRING types, the
|
||
[ISO10646] character set (a superset of Unicode) is used, encoded
|
||
following the UTF-8 algorithm [RFC2279]. Note that in the UTF-8
|
||
algorithm characters which are the same as ASCII (0x0000 through
|
||
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 -- UTF-8 encoded,
|
||
-- ISO 10646 characters
|
||
|
||
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. Although an LDAPOID is
|
||
encoded as an OCTET STRING, values are limited to the definition of
|
||
numericoid given in Section 1.3 of [Models].
|
||
|
||
LDAPOID ::= OCTET STRING -- Constrained to numericoid [Models]
|
||
|
||
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 [LDAPDN].
|
||
|
||
LDAPDN ::= LDAPString
|
||
-- Constrained to distinguishedName [LDAPDN]
|
||
|
||
RelativeLDAPDN ::= LDAPString
|
||
-- Constrained to name-component [LDAPDN]
|
||
|
||
|
||
4.1.4. Attribute Descriptions
|
||
|
||
The definition and encoding rules for attribute descriptions are
|
||
defined in Section 2.5 of [Models]. Briefly, an attribute description
|
||
is an attribute type and zero or more options.
|
||
|
||
AttributeDescription ::= LDAPString
|
||
-- Constrained to attributedescription
|
||
-- [Models]
|
||
|
||
An AttributeDescriptionList describes a list of 0 or more attribute
|
||
descriptions. (A list of zero elements has special significance in
|
||
the Search request.)
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 6
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
AttributeDescriptionList ::= SEQUENCE OF
|
||
AttributeDescription
|
||
|
||
|
||
4.1.5. Attribute Value
|
||
|
||
A field of type AttributeValue is an OCTET STRING containing an
|
||
encoded attribute value data type. The value is encoded according to
|
||
its LDAP-specific encoding definition. The LDAP-specific encoding
|
||
definitions for different syntaxes and attribute types may be found
|
||
in other documents, and in particular [Syntaxes].
|
||
|
||
AttributeValue ::= OCTET STRING
|
||
|
||
Note that there is no defined limit on the size of this encoding;
|
||
thus protocol values may include multi-megabyte attributes (e.g.
|
||
photographs).
|
||
|
||
Attributes may be defined which have arbitrary and non-printable
|
||
syntax. Implementations MUST NOT display nor attempt to decode as
|
||
ASN.1, a value if its syntax is not known. The implementation may
|
||
attempt to discover the subschema of the source entry, and retrieve
|
||
the values of attributeTypes from it.
|
||
|
||
Clients MUST NOT send attribute values in a request that are not
|
||
valid according to the syntax defined for the attributes.
|
||
|
||
|
||
4.1.6. Attribute Value Assertion
|
||
|
||
The AttributeValueAssertion type definition is similar to the one in
|
||
the X.500 directory standards. It contains an attribute description
|
||
and a matching rule assertion value suitable for that type.
|
||
|
||
AttributeValueAssertion ::= SEQUENCE {
|
||
attributeDesc AttributeDescription,
|
||
assertionValue AssertionValue }
|
||
|
||
AssertionValue ::= OCTET STRING
|
||
|
||
The syntax of the AssertionValue depends on the context of the LDAP
|
||
operation being performed. For example, the syntax of the EQUALITY
|
||
matching rule for an attribute is used when performing a Compare
|
||
operation. Often this is the same syntax used for values of the
|
||
attribute type, but in some cases the assertion syntax differs from
|
||
the value syntax. See objectIdentiferFirstComponentMatch in
|
||
[Syntaxes] for an example.
|
||
|
||
|
||
4.1.7. Attribute
|
||
|
||
An attribute consists of an attribute description and one or more
|
||
values of that attribute description. (Though attributes MUST have at
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 7
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
least one value when stored, due to access control restrictions the
|
||
set may be empty when transferred from the server to the client. This
|
||
is described in section 4.5.2, concerning the PartialAttributeList
|
||
type.)
|
||
|
||
Attribute ::= SEQUENCE {
|
||
type AttributeDescription,
|
||
vals SET OF AttributeValue }
|
||
|
||
Each attribute value is distinct in the set (no duplicates). The set
|
||
of attribute values is unordered. Implementations MUST NOT reply upon
|
||
any apparent ordering being repeatable.
|
||
|
||
|
||
4.1.8. Matching Rule Identifier
|
||
|
||
Matching rules are defined in 4.1.3 of [Models]. A matching rule is
|
||
identified in the LDAP protocol by the printable representation of
|
||
either its numericoid, or one of its short name descriptors, e.g.
|
||
"caseIgnoreIA5Match" or "1.3.6.1.4.1.453.33.33".
|
||
|
||
MatchingRuleId ::= LDAPString
|
||
|
||
Servers which support matching rules for use in the extensibleMatch
|
||
search filter MUST list the matching rules they implement in
|
||
subschema entries, using the matchingRules attributes. The server
|
||
SHOULD also list there, using the matchingRuleUse attribute, the
|
||
attribute types with which each matching rule can be used. More
|
||
information is given in section 4.5 of [Syntaxes].
|
||
|
||
|
||
4.1.9. Result Message
|
||
|
||
The LDAPResult is the construct used in this protocol to return
|
||
success or failure indications from servers to clients. To various
|
||
requests, servers will return responses of LDAPResult or responses
|
||
containing the components of LDAPResult to indicate the final status
|
||
of a protocol operation request.
|
||
|
||
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),
|
||
adminLimitExceeded (11),
|
||
unavailableCriticalExtension (12),
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 8
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
confidentialityRequired (13),
|
||
saslBindInProgress (14),
|
||
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),
|
||
-- 70 reserved for CLDAP --
|
||
affectsMultipleDSAs (71),
|
||
-- 72-79 unused --
|
||
other (80),
|
||
... },
|
||
-- 81-90 reserved for APIs --
|
||
matchedDN LDAPDN,
|
||
diagnosticMessage LDAPString,
|
||
referral [3] Referral OPTIONAL }
|
||
|
||
The result codes enumeration is extensible as defined in Section 3.5
|
||
of [LDAPIANA]. The meanings of the result codes are given in Appendix
|
||
A.
|
||
|
||
The diagnosticMessage field of this construct may, at the server's
|
||
option, be used to return a string containing a textual, human-
|
||
readable (terminal control and page formatting characters should be
|
||
avoided) diagnostic message. As this diagnostic message is not
|
||
standardized, implementations MUST NOT rely on the values returned.
|
||
If the server chooses not to return a textual diagnostic, the
|
||
diagnosticMessage field of the LDAPResult type MUST contain a zero
|
||
length string.
|
||
|
||
For certain result codes (typically, but not restricted to
|
||
noSuchObject, aliasProblem, invalidDNSyntax and
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 9
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
aliasDereferencingProblem), the matchedDN field is set to the name of
|
||
the lowest entry (object or alias) in the directory that was matched.
|
||
If no aliases were dereferenced while attempting to locate the entry,
|
||
this will be a truncated form of the name provided, or if aliases
|
||
were dereferenced, of the resulting name, as defined in section 12.5
|
||
of [X.511]. The matchedDN field contains a zero length string with
|
||
all other result codes.
|
||
|
||
|
||
4.1.10. Referral
|
||
|
||
The referral result code indicates that the contacted server does not
|
||
hold the target entry of the request. 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 one or
|
||
more references to one or more servers or services that may be
|
||
accessed via LDAP or other protocols. Referrals can be returned in
|
||
response to any operation request (except unbind and abandon which do
|
||
not have responses). At least one URL MUST be present in the
|
||
Referral.
|
||
|
||
During a search operation, after the baseObject is located, and
|
||
entries are being evaluated, the referral is not returned. Instead,
|
||
continuation references, described in section 4.5.3, are returned
|
||
when the search scope spans multiple naming contexts, and several
|
||
different servers would need to be contacted to complete the
|
||
operation.
|
||
|
||
Referral ::= SEQUENCE OF LDAPURL -- one or more
|
||
|
||
LDAPURL ::= LDAPString -- limited to characters permitted in
|
||
-- URLs
|
||
|
||
If the client wishes to progress the operation, it MUST follow the
|
||
referral by contacting one of the servers. If multiple URLs are
|
||
present, the client assumes that any URL may be used to progress the
|
||
operation.
|
||
|
||
URLs for servers implementing the LDAP protocol are written according
|
||
to [LDAPURL]. If an alias was dereferenced, the <dn> part of the URL
|
||
MUST be present, with the new target object name. If the <dn> part is
|
||
present, the client MUST use this name in its next request to
|
||
progress 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) may provide a different filter
|
||
in a referral for a search operation. If the filter part of the URL
|
||
is present in an LDAPURL, the client MUST 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. Other aspects of
|
||
the new request may be the same or different as the request which
|
||
generated the referral.
|
||
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 10
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
Note that UTF-8 characters appearing in a DN or search filter may not
|
||
be legal for URLs (e.g. spaces) and MUST be escaped using the %
|
||
method in [RFC2396].
|
||
|
||
Other kinds of URLs may be returned, so long as the operation could
|
||
be performed using that protocol.
|
||
|
||
|
||
4.1.11. Controls
|
||
|
||
A control is a way to specify extension information for an LDAP
|
||
message. A control only alters the semantics of the message it is
|
||
attached to.
|
||
|
||
Controls ::= SEQUENCE OF Control
|
||
|
||
Control ::= SEQUENCE {
|
||
controlType LDAPOID,
|
||
criticality BOOLEAN DEFAULT FALSE,
|
||
controlValue OCTET STRING OPTIONAL }
|
||
|
||
The controlType field MUST be a UTF-8 encoded dotted-decimal
|
||
representation of an OBJECT IDENTIFIER which uniquely identifies the
|
||
control. This prevents conflicts between control names.
|
||
|
||
The criticality field is either TRUE or FALSE and only applies to
|
||
request messages that have a corresponding response message. For all
|
||
other messages (such as abandonRequest, unbindRequest and all
|
||
response messages), the criticality field is treated as FALSE.
|
||
|
||
If the server recognizes the control type and it is appropriate for
|
||
the operation, the server will make use of the control when
|
||
performing the operation.
|
||
|
||
If the server does not recognize the control type or it is not
|
||
appropriate for the operation, and the criticality field is TRUE, the
|
||
server MUST NOT perform the operation, and MUST instead return the
|
||
resultCode unavailableCriticalExtension.
|
||
|
||
If the control is unrecognized or inappropriate but the criticality
|
||
field is FALSE, the server MUST ignore the control.
|
||
|
||
The controlValue contains any information associated with the
|
||
control, and its format is defined for the control. Implementations
|
||
MUST be prepared to handle arbitrary contents of the controlValue
|
||
octet string, including zero bytes. It is absent only if there is no
|
||
value information which is associated with a control of its type.
|
||
|
||
This document does not specify any controls. Controls may be
|
||
specified in other documents. The specification of a control consists
|
||
of:
|
||
|
||
- the OBJECT IDENTIFIER assigned to the control,
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 11
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
- whether the control is always noncritical, always critical, or
|
||
critical at the client's option,
|
||
|
||
- the format of the controlValue contents of the control,
|
||
|
||
- the semantics of the control,
|
||
|
||
- and optionally, semantics regarding the combination of the control
|
||
with other controls.
|
||
|
||
Servers list the controlType of all request controls they recognize
|
||
in the supportedControl attribute [Models] in the root DSE.
|
||
|
||
Controls should not be combined unless the semantics of the
|
||
combination has been specified. The semantics of control
|
||
combinations, if specified, are generally found in the control
|
||
specification most recently published. In the absence of combination
|
||
semantics, the behavior of the operation is undefined.
|
||
Additionally, the order of a combination of controls in the SEQUENCE
|
||
is ignored unless the control specification(s) describe(s)
|
||
combination semantics.
|
||
|
||
|
||
4.2. Bind Operation
|
||
|
||
The function of the Bind Operation is to allow authentication
|
||
information to be exchanged between the client and server. Prior to
|
||
the first BindRequest, the implied identity is anonymous. Refer to
|
||
[AuthMeth] for the authentication-related semantics of this
|
||
operation.
|
||
|
||
The Bind Request 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 OPTIONAL }
|
||
|
||
Parameters of the Bind Request are:
|
||
|
||
- version: A version number indicating the version of the protocol
|
||
to be used in this protocol session. This document describes
|
||
version 3 of the LDAP protocol. Note that there is no version
|
||
negotiation, and the client just sets this parameter to the
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 12
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
version it desires. If the server does not support the specified
|
||
version, it responds with protocolError in the resultCode field of
|
||
the BindResponse.
|
||
|
||
- name: The name of the directory object that the client wishes to
|
||
bind as. This field may take on a null value (a zero length
|
||
string) for the purposes of anonymous binds ([AuthMeth] section 7)
|
||
or when using SASL authentication ([AuthMeth] section 4.3). Server
|
||
behavior is undefined when the name is a null value, simple
|
||
authentication is used, and a password is specified. The server
|
||
SHOULD NOT perform any alias dereferencing in determining the
|
||
object to bind as.
|
||
|
||
- authentication: information used to authenticate the name, if any,
|
||
provided in the Bind Request. This type is extensible as defined
|
||
in Section 3.6 of [LDAPIANA]. Servers that do not support a choice
|
||
supplied by a client will return authMethodNotSupported in the
|
||
result code of the BindResponse.
|
||
|
||
Authorization is the use of this authentication information when
|
||
performing operations. Authorization MAY be affected by factors
|
||
outside of the LDAP Bind Request, such as lower layer security
|
||
services.
|
||
|
||
|
||
4.2.1. Processing of the Bind Request
|
||
|
||
Upon receipt of a BindRequest, the server MUST ensure there are no
|
||
outstanding operations in progress on the connection (This simplifies
|
||
server implementation). The server then proceeds to authenticate the
|
||
client in either a single-step, or multi-step bind process. Each step
|
||
requires the server to return a BindResponse to indicate the status
|
||
of authentication.
|
||
|
||
If the client did not bind before sending a request and receives an
|
||
operationsError, it may then send a Bind Request. If this also fails
|
||
or the client chooses not to bind on the existing connection, it may
|
||
close the connection, reopen it and begin 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. Authentication from earlier binds is subsequently
|
||
ignored. A failed or abandoned Bind Operation has the effect of
|
||
leaving the connection in an anonymous state. To arrive at a known
|
||
authentication state after abandoning a bind operation, clients may
|
||
unbind, rebind, or make use of the BindResponse. If a SASL transfer
|
||
encryption or integrity mechanism has been negotiated, and that
|
||
mechanism does not support the changing of credentials from one
|
||
identity to another, then the client MUST instead establish a new
|
||
connection.
|
||
|
||
For some SASL authentication mechanisms, it may be necessary for the
|
||
client to invoke the BindRequest multiple times. This is indicated by
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 13
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
the server sending a BindResponse with the resultCode set to
|
||
saslBindInProgress. This indicates that the server requires the
|
||
client to send a new bind request, with the same sasl mechanism, to
|
||
continue the authentication process. If at any stage the client
|
||
wishes to abort the bind process it MAY unbind and then drop the
|
||
underlying connection. Clients MUST NOT invoke operations between two
|
||
Bind Requests made as part of a multi-stage bind.
|
||
|
||
A client may abort a SASL bind negotiation by sending a BindRequest
|
||
with a different value in the mechanism field of SaslCredentials, or
|
||
an AuthenticationChoice other than sasl.
|
||
|
||
If the client sends a BindRequest with the sasl mechanism field as an
|
||
empty string, the server MUST return a BindResponse with
|
||
authMethodNotSupported as the resultCode. This will allow clients to
|
||
abort a negotiation if it wishes to try again with the same SASL
|
||
mechanism.
|
||
|
||
|
||
4.2.2. Bind Response
|
||
|
||
The Bind Response is defined as follows.
|
||
|
||
BindResponse ::= [APPLICATION 1] SEQUENCE {
|
||
COMPONENTS OF LDAPResult,
|
||
serverSaslCreds [7] OCTET STRING OPTIONAL }
|
||
|
||
BindResponse consists simply of an indication from the server of the
|
||
status of the client's request for authentication.
|
||
|
||
A successful bind operation is indicated by a BindResponse with a
|
||
resultCode set to success (0). Otherwise, an appropriate resultCode
|
||
is set in the BindResponse. For bind, the protocolError (2)
|
||
resultCode may be used to indicate that the version number supplied
|
||
by the client is unsupported.
|
||
|
||
If the server does not support the client's requested protocol
|
||
version, it MUST set the resultCode to protocolError.
|
||
|
||
If the client receives a BindResponse response where the resultCode
|
||
was protocolError, it MUST close the connection as the server will be
|
||
unwilling to accept further operations. (This is for compatibility
|
||
with earlier versions of LDAP, in which the bind was always the first
|
||
operation, and there was no negotiation.)
|
||
|
||
The serverSaslCreds are 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 simple 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
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 14
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
The function of the Unbind Operation is to terminate a protocol
|
||
session. The Unbind Operation is defined as follows:
|
||
|
||
UnbindRequest ::= [APPLICATION 2] NULL
|
||
|
||
The Unbind Operation has no response defined. Upon transmission of an
|
||
UnbindRequest, a protocol client MUST assume that the protocol
|
||
session is terminated. Upon receipt of an UnbindRequest, a protocol
|
||
server MUST assume that the requesting client has terminated the
|
||
session and that all outstanding requests may be discarded, and MUST
|
||
close the connection.
|
||
|
||
|
||
4.4. Unsolicited Notification
|
||
|
||
An unsolicited notification is an LDAPMessage sent from the server to
|
||
the client which is not in response to any LDAPMessage received by
|
||
the server. It is used to signal an extraordinary condition in the
|
||
server or in the connection between the client and the server. The
|
||
notification is of an advisory nature, and the server will not expect
|
||
any response to be returned from the client.
|
||
|
||
The unsolicited notification is structured as an LDAPMessage in which
|
||
the messageID is 0 and protocolOp is of the extendedResp form. The
|
||
responseName field of the ExtendedResponse is present. The LDAPOID
|
||
value MUST be unique for this notification, and not be used in any
|
||
other situation.
|
||
|
||
One unsolicited notification (Notice of Disconnection) is defined in
|
||
this document.
|
||
|
||
|
||
4.4.1. Notice of Disconnection
|
||
|
||
This notification may be used by the server to advise the client that
|
||
the server is about to close the connection due to an error
|
||
condition. Note that this notification is NOT a response to an unbind
|
||
requested by the client: the server MUST follow the procedures of
|
||
section 4.3. This notification is intended to assist clients in
|
||
distinguishing between an error condition and a transient network
|
||
failure. As with a connection close due to network failure, the
|
||
client MUST NOT assume that any outstanding requests which modified
|
||
the directory have succeeded or failed.
|
||
|
||
The responseName is 1.3.6.1.4.1.1466.20036, the response field is
|
||
absent, and the resultCode is used to indicate the reason for the
|
||
disconnection.
|
||
|
||
The following resultCode values are to be used in this notification:
|
||
|
||
- protocolError: The server has received data from the client in
|
||
which the LDAPMessage structure could not be parsed.
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 15
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
- strongAuthRequired: The server has detected that an established
|
||
underlying security association protecting communication between
|
||
the client and server has unexpectedly failed or been compromised.
|
||
|
||
- unavailable: This server will stop accepting new connections and
|
||
operations on all existing connections, and be unavailable for an
|
||
extended period of time. The client may make use of an alternative
|
||
server.
|
||
|
||
After sending this notice, the server MUST close the connection.
|
||
After receiving this notice, the client MUST NOT transmit any further
|
||
on the connection, and may abruptly close the connection.
|
||
|
||
|
||
4.5. Search Operation
|
||
|
||
The Search Operation allows a client to request that a search be
|
||
performed on its behalf by a server. This can be used to read
|
||
attributes from a single entry, from entries immediately below a
|
||
particular entry, or a whole subtree of entries.
|
||
|
||
|
||
4.5.1. Search Request
|
||
|
||
The Search Request is defined as 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 {
|
||
and [0] SET SIZE (1..MAX) OF Filter,
|
||
or [1] SET SIZE (1..MAX) 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 }
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 16
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
SubstringFilter ::= SEQUENCE {
|
||
type AttributeDescription,
|
||
-- at least one must be present,
|
||
-- initial and final can occur at most once
|
||
substrings SEQUENCE OF CHOICE {
|
||
initial [0] AssertionValue,
|
||
any [1] AssertionValue,
|
||
final [2] AssertionValue } }
|
||
|
||
MatchingRuleAssertion ::= SEQUENCE {
|
||
matchingRule [1] MatchingRuleId OPTIONAL,
|
||
type [2] AttributeDescription OPTIONAL,
|
||
matchValue [3] AssertionValue,
|
||
dnAttributes [4] BOOLEAN DEFAULT FALSE }
|
||
|
||
Parameters of the Search Request are:
|
||
|
||
- baseObject: An LDAPDN that is the base object entry relative to
|
||
which the search is to be performed.
|
||
|
||
- scope: An indicator of the scope of the search to be performed.
|
||
The semantics of the possible values of this field are identical
|
||
to the semantics of the scope field in the X.511 Search Operation.
|
||
|
||
- derefAliases: An indicator as to how alias objects (as defined in
|
||
X.501) are to be handled in searching. The semantics of the
|
||
possible values of this field are:
|
||
|
||
neverDerefAliases: do not dereference aliases in searching
|
||
or in locating the base object of the search;
|
||
|
||
derefInSearching: dereference aliases in subordinates of
|
||
the 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 and in
|
||
locating the base object of the search.
|
||
|
||
- sizeLimit: A size limit that restricts the maximum number of
|
||
entries to be returned as a result of the search. A value of 0 in
|
||
this field indicates that no client-requested size limit
|
||
restrictions are in effect for the search. Servers may enforce a
|
||
maximum number of entries to return.
|
||
|
||
- timeLimit: A time limit that restricts the maximum time (in
|
||
seconds) allowed for a search. A value of 0 in this field
|
||
indicates that no client-requested time limit restrictions are in
|
||
effect for the search.
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 17
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
- typesOnly: An indicator as to whether search results will contain
|
||
both attribute descriptions and values, or just attribute
|
||
descriptions. Setting this field to TRUE causes only attribute
|
||
descriptions (no values) to be returned. Setting this field to
|
||
FALSE causes both attribute descriptions and values to be
|
||
returned.
|
||
|
||
- filter: A filter that defines the conditions that must be
|
||
fulfilled in order for the search to match a given entry.
|
||
|
||
The 'and', 'or' and 'not' choices can be used to form combinations
|
||
of filters. At least one filter element MUST be present in an
|
||
'and' or 'or' choice. The others match against individual
|
||
attribute values of entries in the scope of the search.
|
||
(Implementor's note: the 'not' filter is an example of a tagged
|
||
choice in an implicitly-tagged module. In BER this is treated as
|
||
if the tag was explicit.)
|
||
|
||
A server MUST evaluate filters according to the three-valued logic
|
||
of X.511 (1993) section 7.8.1. In summary, a filter is evaluated
|
||
to either "TRUE", "FALSE" or "Undefined". If the filter evaluates
|
||
to TRUE for a particular entry, then the attributes of that entry
|
||
are returned as part of the search result (subject to any
|
||
applicable access control restrictions). If the filter evaluates
|
||
to FALSE or Undefined, then the entry is ignored for the search.
|
||
|
||
A filter of the "and" choice is TRUE if all the filters in the SET
|
||
OF evaluate to TRUE, FALSE if at least one filter is FALSE, and
|
||
otherwise Undefined. A filter of the "or" choice is FALSE if all
|
||
of the filters in the SET OF evaluate to FALSE, TRUE if at least
|
||
one filter is TRUE, and Undefined otherwise. A filter of the "not"
|
||
choice is TRUE if the filter being negated is FALSE, FALSE if it
|
||
is TRUE, and Undefined if it is Undefined.
|
||
|
||
The present match evaluates to TRUE where there is an attribute or
|
||
subtype of the specified attribute description present in an
|
||
entry, and FALSE otherwise (including a presence test with an
|
||
unrecognized attribute description.)
|
||
|
||
The matching rule for equalityMatch filter items is defined by the
|
||
EQUALITY matching rule for the attribute type.
|
||
|
||
The matching rule and assertion syntax for AssertionValues in a
|
||
substrings filter item is defined by the SUBSTR matching rule for
|
||
the attribute type.
|
||
|
||
The matching rule for greaterOrEqual and lessOrEqual filter items
|
||
is defined by the ORDERING matching rule for the attribute type.
|
||
|
||
The matching rule for approxMatch filter items is implementation-
|
||
defined. If approximate matching is not supported by the server,
|
||
the filter item should be treated as an equalityMatch.
|
||
|
||
The extensibleMatch is new in this version of LDAP. If the
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 18
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
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 (the filter item evaluates to TRUE if it matches
|
||
with at least one attribute in the entry, FALSE if it does not
|
||
match any attribute in the entry, and Undefined if the
|
||
matchingRule is not recognized or the assertionValue cannot be
|
||
parsed.) If the type field is present and matchingRule is present,
|
||
the matchingRule MUST be one permitted for use with that type,
|
||
otherwise the filter item is undefined. If the dnAttributes field
|
||
is set to TRUE, the match is applied against all the
|
||
AttributeValueAssertions in an entry's distinguished name as well,
|
||
and also evaluates to TRUE if there is at least one attribute in
|
||
the distinguished name for which the filter item evaluates to
|
||
TRUE. (Editors note: The dnAttributes field is present so that
|
||
there does not need to be multiple versions of generic matching
|
||
rules such as for word matching, one to apply to entries and
|
||
another to apply to entries and dn attributes as well).
|
||
|
||
A filter item evaluates to Undefined when the server would not be
|
||
able to determine whether the assertion value matches an entry. If
|
||
an attribute description in an equalityMatch, substrings,
|
||
greaterOrEqual, lessOrEqual, approxMatch or extensibleMatch filter
|
||
is not recognized by the server, a matching rule id in the
|
||
extensibleMatch is not recognized by the server, the assertion
|
||
value cannot be parsed, or the type of filtering requested is not
|
||
implemented, then the filter is Undefined. Thus for example if a
|
||
server did not recognize the attribute type shoeSize, a filter of
|
||
(shoeSize=*) would evaluate to FALSE, and the filters
|
||
(shoeSize=12), (shoeSize>=12) and (shoeSize<=12) would evaluate to
|
||
Undefined.
|
||
|
||
Servers MUST NOT return errors if attribute descriptions or
|
||
matching rule ids are not recognized, or assertion values cannot
|
||
be parsed. More details of filter processing are given in section
|
||
7.8 of [X.511].
|
||
|
||
- attributes: A list of the attributes to be returned from each
|
||
entry which matches the search filter. There are two special
|
||
values which may be used: an empty list with no attributes, and
|
||
the attribute description string "*". Both of these signify that
|
||
all user attributes are to be returned. (The "*" allows the client
|
||
to request all user attributes in addition to any specified
|
||
operational attributes).
|
||
|
||
Attributes MUST be named at most once in the list, and are
|
||
returned at most once in an entry. If there are attribute
|
||
descriptions in the list which are not recognized, they are
|
||
ignored by the server.
|
||
|
||
If the client does not want any attributes returned, it can
|
||
specify a list containing only the attribute with OID "1.1". This
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 19
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
OID was chosen arbitrarily and does not correspond to any
|
||
attribute in use.
|
||
|
||
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 controls or other restrictions.
|
||
Furthermore, servers will not return operational attributes, such
|
||
as objectClasses 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 [Syntaxes].)
|
||
|
||
Note that an X.500 "list"-like operation can be emulated by the
|
||
client requesting a one-level LDAP search operation with a filter
|
||
checking for the presence of the objectClass attribute, and that an
|
||
X.500 "read"-like operation can be emulated by a base object LDAP
|
||
search operation with the same filter. A server which provides a
|
||
gateway to X.500 is not required to use the Read or List operations,
|
||
although it may choose to do so, and if it does, it must provide the
|
||
same semantics as the X.500 search operation.
|
||
|
||
|
||
4.5.2. Search Result
|
||
|
||
The results of the search attempted by the server upon receipt of a
|
||
Search Request are returned in Search Responses, which are LDAP
|
||
messages containing either SearchResultEntry, SearchResultReference,
|
||
or SearchResultDone data types.
|
||
|
||
SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
|
||
objectName LDAPDN,
|
||
attributes PartialAttributeList }
|
||
|
||
PartialAttributeList ::= 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 values were excluded from the result.)
|
||
|
||
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
|
||
search of the DIT.
|
||
|
||
If the LDAP session is operating over a connection-oriented transport
|
||
such as TCP, the server will return to the client a sequence of
|
||
responses in separate LDAP messages. There may be zero or more
|
||
responses containing SearchResultEntry, one for each entry found
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 20
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
during the search. There may also be zero or more responses
|
||
containing SearchResultReference, one for each area not explored by
|
||
this server during the search. The SearchResultEntry and
|
||
SearchResultReference PDUs may come in any order. Following all the
|
||
SearchResultReference responses and all SearchResultEntry responses
|
||
to be returned by the server, the server will return a response
|
||
containing the SearchResultDone, which contains an indication of
|
||
success, or detailing any errors that have occurred.
|
||
|
||
Each entry returned in a SearchResultEntry will contain all
|
||
appropriate attributes as specified in the attributes field of the
|
||
Search Request. Return of attributes is subject to access control and
|
||
other administrative policy.
|
||
|
||
Some attributes may be constructed by the server and appear in a
|
||
SearchResultEntry attribute list, although they are not stored
|
||
attributes of an entry. Clients SHOULD NOT assume that all attributes
|
||
can be modified, even if permitted by access control.
|
||
|
||
If the server's schema defines a textual name for an attribute type,
|
||
it MUST use a textual name for attributes of that attribute type by
|
||
specifying one of the textual names as the value of the attribute
|
||
type. Otherwise, the server uses the object identifier for the
|
||
attribute type by specifying the object identifier, in ldapOID form,
|
||
as the value of attribute type.
|
||
|
||
|
||
4.5.3. Continuation References in the Search Result
|
||
|
||
If the server was able to locate the entry referred to by the
|
||
baseObject but was unable to search all the entries in the scope at
|
||
and under the baseObject, the server may return one or more
|
||
SearchResultReference entries, each containing a reference to another
|
||
set of servers for continuing the operation. A server MUST NOT return
|
||
any SearchResultReference if it has not located the baseObject and
|
||
thus has not searched any entries; in this case it would return a
|
||
SearchResultDone containing a referral resultCode.
|
||
|
||
If a server holds a copy or partial copy of the subordinate naming
|
||
context, it may use the search filter to determine whether or not to
|
||
return a SearchResultReference response. Otherwise
|
||
SearchResultReference responses are always returned when in scope.
|
||
|
||
The SearchResultReference is of the same data type as the Referral.
|
||
URLs for servers implementing the LDAP protocol are written according
|
||
to [LDAPURL]. The <dn> part MUST be present in the URL, with the new
|
||
target object name. The client MUST use this name in its next
|
||
request. Some servers (e.g. part of a distributed index exchange
|
||
system) may provide a different filter in the URLs of the
|
||
SearchResultReference. If the filter part of the URL is present in an
|
||
LDAP URL, the client MUST use the new filter in its next request to
|
||
progress the search, and if the filter part is absent the client will
|
||
use again the same filter. If the originating search scope was
|
||
singleLevel, the scope part of the URL will be baseObject. Other
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 21
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
aspects of the new search request may be the same or different as the
|
||
search which generated the continuation references.
|
||
Other kinds of URLs may be 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 to the base object.
|
||
|
||
In order to complete the search, the client MUST issue a new search
|
||
operation for each SearchResultReference that is returned. Note that
|
||
the abandon operation described in section 4.11 applies only to a
|
||
particular operation sent on a connection between a client and
|
||
server, and if the client has multiple outstanding search operations,
|
||
it MUST abandon each operation individually.
|
||
|
||
|
||
4.5.3.1. Example
|
||
|
||
For example, suppose the contacted server (hosta) holds the entry
|
||
"DC=Example,DC=NET" and the entry "CN=Manager,DC=Example,DC=NET". It
|
||
knows that either LDAP-capable servers (hostb) or (hostc) hold
|
||
"OU=People,DC=Example,DC=NET" (one is the master and the other server
|
||
a shadow), and that LDAP-capable server (hostd) holds the subtree
|
||
"OU=Roles,DC=Example,DC=NET". If a subtree search of
|
||
"DC=Example,DC=NET" is requested to the contacted server, it may
|
||
return the following:
|
||
|
||
SearchResultEntry for DC=Example,DC=NET
|
||
SearchResultEntry for CN=Manager,DC=Example,DC=NET
|
||
SearchResultReference {
|
||
ldap://hostb/OU=People,DC=Example,DC=NET
|
||
ldap://hostc/OU=People,DC=Example,DC=NET
|
||
}
|
||
SearchResultReference {
|
||
ldap://hostd/OU=Roles,DC=Example,DC=NET
|
||
}
|
||
SearchResultDone (success)
|
||
|
||
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,DC=Example,DC=NET", the server might respond as follows:
|
||
|
||
SearchResultEntry for OU=People,DC=Example,DC=NET
|
||
SearchResultReference {
|
||
ldap://hoste/OU=Managers,OU=People,DC=Example,DC=NET
|
||
}
|
||
SearchResultReference {
|
||
ldap://hostf/OU=Consultants,OU=People,DC=Example,DC=NET
|
||
}
|
||
SearchResultDone (success)
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 22
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
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 a subtree search of "DC=Example,DC=ORG" to hosta, the
|
||
server may return only a SearchResultDone containing a referral.
|
||
|
||
SearchResultDone (referral) {
|
||
ldap://hostg/DC=Example,DC=ORG??sub
|
||
}
|
||
|
||
|
||
4.6. Modify Operation
|
||
|
||
The Modify Operation allows a client to request that a modification
|
||
of an entry be performed on its behalf by a server. The Modify
|
||
Request is defined as follows:
|
||
|
||
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 }
|
||
|
||
Parameters of the Modify Request are:
|
||
|
||
- object: The object to be modified. The value of this field
|
||
contains the DN of the entry to be modified. The server will not
|
||
perform any alias dereferencing in determining the object to be
|
||
modified.
|
||
|
||
- modification: A list of modifications to be performed on the
|
||
entry. The entire list of entry modifications MUST be performed in
|
||
the order they are listed, as a single 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 values that may be taken on by the 'operation' field
|
||
in each modification construct have the following semantics
|
||
respectively:
|
||
|
||
add: add values listed to the given attribute, creating the
|
||
attribute if necessary;
|
||
|
||
delete: delete values listed from the given attribute,
|
||
removing the entire attribute if no values are listed, or
|
||
if all current values of the attribute are listed for
|
||
deletion;
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 23
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
replace: replace all existing values of the given attribute
|
||
with the new values listed, creating the attribute if it
|
||
did not already exist. A replace with no value will delete
|
||
the entire attribute if it exists, and is ignored if the
|
||
attribute does not exist.
|
||
|
||
The result of the modification attempted by the server upon receipt
|
||
of a Modify Request is returned in a Modify Response, defined as
|
||
follows:
|
||
|
||
ModifyResponse ::= [APPLICATION 7] LDAPResult
|
||
|
||
Upon receipt of a Modify Request, a server will perform the necessary
|
||
modifications to the DIT.
|
||
|
||
The server will return to the client a single Modify Response
|
||
indicating either the successful completion of the DIT modification,
|
||
or the reason that the modification failed. Note that due to the
|
||
requirement for atomicity in applying the list of modifications in
|
||
the Modify Request, the client may expect that no modifications of
|
||
the DIT have been performed if the Modify Response received indicates
|
||
any sort of error, and that all requested modifications have been
|
||
performed if the Modify Response indicates successful completion of
|
||
the Modify Operation. If the connection fails, whether the
|
||
modification occurred or not is indeterminate.
|
||
|
||
The Modify Operation cannot be used to remove from an entry any of
|
||
its distinguished values, those values which form the entry's
|
||
relative distinguished name. An attempt to do so will result in the
|
||
server returning the error notAllowedOnRDN. The Modify DN Operation
|
||
described in section 4.9 is used to rename an entry.
|
||
|
||
Note that due to the simplifications made in LDAP, there is not a
|
||
direct mapping of the modifications in an LDAP ModifyRequest onto the
|
||
EntryModifications of a DAP ModifyEntry operation, and different
|
||
implementations of LDAP-DAP gateways may use different means of
|
||
representing the change. If successful, the final effect of the
|
||
operations on the entry MUST be identical.
|
||
|
||
|
||
4.7. Add Operation
|
||
|
||
The Add Operation allows a client to request the addition of an entry
|
||
into the directory. 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 the Add Request are:
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 24
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
- entry: the Distinguished Name of the entry to be added. Note that
|
||
the server will not dereference any aliases in locating the entry
|
||
to be added.
|
||
|
||
- attributes: the list of attributes that make up the content of the
|
||
entry being added. Clients MUST include distinguished values
|
||
(those forming the entry's own RDN) in this list, the objectClass
|
||
attribute, and values of any mandatory attributes of the listed
|
||
object classes. Clients MUST NOT supply NO-USER-MODIFICATION
|
||
attributes such as the createTimestamp or creatorsName attributes,
|
||
since the server maintains these automatically.
|
||
|
||
The entry named in the entry field of the AddRequest MUST NOT exist
|
||
for the AddRequest to succeed. The parent of the object and alias
|
||
entries to be added MUST exist. For example, if the client attempted
|
||
to add "CN=JS,DC=Example,DC=NET", the "DC=Example,DC=NET" entry did
|
||
not exist, and the "DC=NET" entry did exist, then the server would
|
||
return the error noSuchObject with the matchedDN field containing
|
||
"DC=NET". If the parent entry exists but is not in a naming context
|
||
held by the server, the server SHOULD return a referral to the server
|
||
holding the parent entry.
|
||
|
||
Server implementations SHOULD NOT restrict where entries can be
|
||
located in the directory unless DIT structure rules are in place.
|
||
Some servers MAY allow the administrator to restrict the classes of
|
||
entries which can be added to the directory.
|
||
|
||
Upon receipt of an Add Request, a server will attempt to add the
|
||
requested entry. The result of the add attempt will be returned to
|
||
the client in the Add Response, defined as follows:
|
||
|
||
AddResponse ::= [APPLICATION 9] LDAPResult
|
||
|
||
A response of success indicates that the new entry is present in the
|
||
directory.
|
||
|
||
|
||
4.8. Delete Operation
|
||
|
||
The Delete Operation allows a client to request the removal of an
|
||
entry from the directory. The Delete Request is defined as follows:
|
||
|
||
DelRequest ::= [APPLICATION 10] LDAPDN
|
||
|
||
The Delete Request consists of the Distinguished Name of the entry to
|
||
be deleted. Note that the server will not dereference aliases while
|
||
resolving the name of the target entry to be removed, and that only
|
||
leaf entries (those with no subordinate entries) can be deleted with
|
||
this operation.
|
||
|
||
The result of the delete attempted by the server upon receipt of a
|
||
Delete Request is returned in the Delete Response, defined as
|
||
follows:
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 25
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
DelResponse ::= [APPLICATION 11] LDAPResult
|
||
|
||
Upon receipt of a Delete Request, a server will attempt to perform
|
||
the entry removal requested. The result of the delete attempt will be
|
||
returned to the client in the Delete Response.
|
||
|
||
|
||
4.9. Modify DN Operation
|
||
|
||
The Modify DN Operation allows a client to change the leftmost (least
|
||
significant) component of the name of an entry in the directory,
|
||
and/or to move a subtree of entries to a new location in the
|
||
directory. The Modify DN Request is defined as follows:
|
||
|
||
ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
|
||
entry LDAPDN,
|
||
newrdn RelativeLDAPDN,
|
||
deleteoldrdn BOOLEAN,
|
||
newSuperior [0] LDAPDN OPTIONAL }
|
||
|
||
Parameters of the Modify DN Request are:
|
||
|
||
- entry: the Distinguished Name of the entry to be changed. This
|
||
entry may or may not have subordinate entries. Note that the
|
||
server will not dereference any aliases in locating the entry to
|
||
be changed.
|
||
|
||
- newrdn: the RDN that will form the leftmost component of the new
|
||
name of the entry.
|
||
|
||
- deleteoldrdn: a boolean parameter that controls whether the old
|
||
RDN attribute values are to be retained as attributes of the
|
||
entry, or deleted from the entry.
|
||
|
||
- newSuperior: if present, this is the Distinguished Name of an
|
||
existing object entry which becomes the immediate superior of the
|
||
existing entry.
|
||
|
||
The result of the name change attempted by the server upon receipt of
|
||
a 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 perform
|
||
the name change. The result of the name change attempt will be
|
||
returned to the client in the Modify DN Response.
|
||
|
||
For example, if the entry named in the "entry" parameter was "cn=John
|
||
Smith,c=US", the newrdn parameter was "cn=John Cougar Smith", and the
|
||
newSuperior parameter was absent, then this operation would attempt
|
||
to rename the entry to be "cn=John Cougar Smith,c=US". If there was
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 26
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
already an entry with that name, the operation would fail with error
|
||
code entryAlreadyExists.
|
||
|
||
If the deleteoldrdn parameter is TRUE, the values forming the old RDN
|
||
are deleted from the entry. If the deleteoldrdn parameter is FALSE,
|
||
the values forming the old RDN will be retained as non-distinguished
|
||
attribute values of the entry. The server may not perform the
|
||
operation and return an error code if the setting of the deleteoldrdn
|
||
parameter would cause a schema inconsistency in the entry.
|
||
|
||
Note that X.500 restricts the ModifyDN operation to only affect
|
||
entries that are contained within a single server. If the LDAP server
|
||
is mapped onto DAP, then this restriction will apply, and the
|
||
resultCode affectsMultipleDSAs will be returned if this error
|
||
occurred. In general clients MUST NOT expect to be able to perform
|
||
arbitrary movements of entries and subtrees between servers.
|
||
|
||
|
||
4.10. Compare Operation
|
||
|
||
The Compare Operation allows a client to compare an assertion
|
||
provided with an entry in the directory. The Compare Request is
|
||
defined as follows:
|
||
|
||
CompareRequest ::= [APPLICATION 14] SEQUENCE {
|
||
entry LDAPDN,
|
||
ava AttributeValueAssertion }
|
||
|
||
Parameters of the Compare Request are:
|
||
|
||
- entry: the name of the entry to be compared with. Note that the
|
||
server SHOULD NOT dereference any aliases in locating the entry to
|
||
be compared with.
|
||
|
||
- ava: the assertion with which an attribute in the entry is to be
|
||
compared.
|
||
|
||
The result of the compare attempted by the server upon receipt of a
|
||
Compare Request is returned in the Compare Response, defined as
|
||
follows:
|
||
|
||
CompareResponse ::= [APPLICATION 15] LDAPResult
|
||
|
||
Upon receipt of a Compare Request, a server will attempt to perform
|
||
the requested comparison using the EQUALITY matching rule for the
|
||
attribute type. The result of the comparison will be returned to the
|
||
client in the Compare Response. Note 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 interrogated by other means.
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 27
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
4.11. Abandon Operation
|
||
|
||
The function of the Abandon Operation is to allow a client to request
|
||
that the server abandon an outstanding operation. The Abandon Request
|
||
is defined as follows:
|
||
|
||
AbandonRequest ::= [APPLICATION 16] MessageID
|
||
|
||
The MessageID MUST be that of an operation which was requested
|
||
earlier in this connection. The abandon request itself has its own
|
||
message id. This is distinct from the id of the earlier operation
|
||
being abandoned.
|
||
|
||
There is no response defined in the Abandon Operation. Upon
|
||
transmission of an Abandon Operation, the server MAY abandon the
|
||
operation identified by the Message ID in the Abandon Request.
|
||
Operation responses are not sent for successfully abandoned
|
||
operations. Clients can determine that an operation has been
|
||
abandoned by performing a subsequent bind operation.
|
||
|
||
Abandon and Unbind operations cannot be abandoned. The ability to
|
||
abandon other (particularly update) operations is at the discretion
|
||
of the server.
|
||
|
||
In the event that a server receives an Abandon Request on a Search
|
||
Operation in the midst 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.
|
||
|
||
Clients MUST NOT send abandon requests for the same operation
|
||
multiple times, and MUST also be prepared to receive results from
|
||
operations it has abandoned (since these may have been in transit
|
||
when the abandon was requested, or are not able to be abandoned).
|
||
|
||
Servers MUST discard abandon requests for message IDs they do not
|
||
recognize, for operations which cannot be abandoned, and for
|
||
operations which have already been abandoned.
|
||
|
||
|
||
4.12. Extended Operation
|
||
|
||
An extension mechanism has been added in this version of LDAP, in
|
||
order to allow additional operations to be defined for services not
|
||
available elsewhere in this protocol, for instance digitally signed
|
||
operations and results.
|
||
|
||
The extended operation allows clients to make requests and receive
|
||
responses with predefined syntaxes and semantics. These may be
|
||
defined in RFCs or be private to particular implementations. Each
|
||
request MUST have a unique OBJECT IDENTIFIER assigned to it.
|
||
|
||
ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 28
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
requestName [0] LDAPOID,
|
||
requestValue [1] OCTET STRING OPTIONAL }
|
||
|
||
The requestName is a dotted-decimal representation of the OBJECT
|
||
IDENTIFIER corresponding to the request. The requestValue is
|
||
information in a form 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 }
|
||
|
||
If the server does not recognize the request name, it MUST return
|
||
only the response fields from LDAPResult, containing the
|
||
protocolError result code.
|
||
|
||
4.13. Start TLS Operation
|
||
|
||
The Start Transport Layer Security (StartTLS) operation provides the
|
||
ability to establish Transport Layer Security [RFC2246] on an LDAP
|
||
connection.
|
||
|
||
4.13.1. Start TLS Request
|
||
|
||
A client requests TLS establishment by transmitting a Start TLS
|
||
request PDU to the server. The Start TLS request is defined in terms
|
||
of an ExtendedRequest. The requestName is "1.3.6.1.4.1.1466.20037",
|
||
and the requestValue field is absent.
|
||
|
||
The client MUST NOT send any PDUs on this connection following this
|
||
request until it receives a Start TLS extended response.
|
||
|
||
4.13.2. Start TLS Response
|
||
|
||
When a Start TLS request is made, servers supporting the operation
|
||
MUST return a Start TLS response PDU to the requestor. The Start TLS
|
||
response responseName is also "1.3.6.1.4.1.1466.20037", and the
|
||
response field is absent.
|
||
|
||
The server MUST set the resultCode field to either success or one of
|
||
the other values outlined in section 4.13.2.2.
|
||
|
||
4.13.2.1. "Success" Response
|
||
|
||
If the Start TLS Response contains a resultCode of success, this
|
||
indicates that the server is willing and able to negotiate TLS. Refer
|
||
to section 5.3 of [AuthMeth] for details.
|
||
|
||
4.13.2.2. Response other than "success"
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 29
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
If the ExtendedResponse contains a resultCode other than success,
|
||
this indicates that the server is unwilling or unable to negotiate
|
||
TLS.
|
||
|
||
If the Start TLS extended request was not successful, the resultCode
|
||
will be one of:
|
||
|
||
operationsError (operations sequencing incorrect; e.g. TLS already
|
||
established)
|
||
|
||
protocolError (TLS not supported or incorrect PDU structure)
|
||
|
||
referral (this server doesn't do TLS, try this one)
|
||
|
||
unavailable (e.g. some major problem with TLS, or server is
|
||
shutting down)
|
||
|
||
The server MUST return operationsError if the client violates any of
|
||
the Start TLS extended operation sequencing requirements described in
|
||
section 5.3 of [AuthMeth].
|
||
|
||
If the server does not support TLS (whether by design or by current
|
||
configuration), it MUST set the resultCode to protocolError, or to
|
||
referral. The server MUST include an actual referral value in the
|
||
LDAP Result if it returns a resultCode of referral. The client's
|
||
current session is unaffected if the server does not support TLS. The
|
||
client MAY proceed with any LDAP operation, or it MAY close the
|
||
connection.
|
||
|
||
The server MUST return unavailable if it supports TLS but cannot
|
||
establish a TLS connection for some reason, e.g. the certificate
|
||
server not responding, it cannot contact its TLS implementation, or
|
||
if the server is in process of shutting down. The client MAY retry
|
||
the StartTLS operation, or it MAY proceed with any other LDAP
|
||
operation, or it MAY close the connection.
|
||
|
||
4.13.3. Closing a TLS Connection
|
||
|
||
Two forms of TLS connection closure--graceful and abrupt--are
|
||
supported.
|
||
|
||
4.13.3.1. Graceful Closure
|
||
|
||
Either the client or server MAY terminate the TLS connection and
|
||
leave the LDAP session intact by sending a TLS closure alert.
|
||
|
||
Before sending a TLS closure alert, the client MUST either wait for
|
||
any outstanding LDAP operations to complete, or explicitly abandon
|
||
them.
|
||
|
||
After the initiator of a close has sent a TLS closure alert, it MUST
|
||
discard any TLS messages until it has received a TLS closure alert
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 30
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
from the other party. It will cease to send TLS Record Protocol
|
||
PDUs, and following the receipt of the alert, MAY send and receive
|
||
LDAP PDUs.
|
||
|
||
The other party, if it receives a TLS closure alert, MUST immediately
|
||
transmit a TLS closure alert. It will subsequently cease to send TLS
|
||
Record Protocol PDUs, and MAY send and receive LDAP PDUs.
|
||
|
||
4.13.3.2. Abrupt Closure
|
||
|
||
Either the client or server MAY abruptly close the TLS connection by
|
||
dropping the underlying transfer protocol connection. In this
|
||
circumstance, a server MAY send the client a Notice of Disconnection
|
||
before dropping the underlying connection.
|
||
|
||
|
||
5. Protocol Element Encodings and Transfer
|
||
|
||
One underlying service is defined here. Clients and servers SHOULD
|
||
implement the mapping of LDAP over TCP described in 5.2.1.
|
||
|
||
|
||
5.1. Protocol Encoding
|
||
|
||
The protocol elements of LDAP are encoded for exchange using the
|
||
Basic Encoding Rules (BER) [X.690] of ASN.1 [X.680]. However, due to
|
||
the high overhead involved in using certain elements of the BER, the
|
||
following additional restrictions are placed on BER-encodings of LDAP
|
||
protocol elements:
|
||
|
||
(1) Only the definite form of length encoding will be used.
|
||
|
||
(2) OCTET STRING values will be encoded in the primitive form only.
|
||
|
||
(3) If the value of a BOOLEAN type is true, the encoding MUST have
|
||
its contents octets set to hex "FF".
|
||
|
||
(4) If a value of a 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 to ASN.1 types encapsulated inside of
|
||
OCTET STRING values, such as attribute values, unless otherwise
|
||
noted.
|
||
|
||
|
||
5.2. Transfer Protocols
|
||
|
||
This protocol is designed to run over connection-oriented, reliable
|
||
transports, with all 8 bits in an octet being significant in the data
|
||
stream.
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 31
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
5.2.1. Transmission Control Protocol (TCP)
|
||
|
||
The encoded LDAPMessage PDUs are mapped directly onto the TCP
|
||
bytestream using the BER-based encoding described in section 5.1. It
|
||
is recommended that server implementations running over the TCP
|
||
provide a protocol listener on the assigned port, 389. Servers may
|
||
instead provide a listener on a different port number. Clients MUST
|
||
support contacting servers on any valid TCP port.
|
||
|
||
|
||
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 [Syntaxes].
|
||
Servers MAY also recognize additional attribute type names.
|
||
|
||
|
||
6.2. Client Implementations
|
||
|
||
Clients that follow referrals or search continuation references MUST
|
||
ensure that they do not loop between servers. They MUST NOT
|
||
repeatedly contact the same server for the same request with the same
|
||
target entry name, scope and filter. Some clients use a counter that
|
||
is incremented each time referral handling occurs for an operation,
|
||
and these kinds of clients MUST be able to handle a DIT with at least
|
||
ten layers of naming contexts between the root and a leaf entry.
|
||
|
||
In the absence of prior agreements with servers, clients SHOULD NOT
|
||
assume that servers support any particular schemas beyond those
|
||
referenced in section 6.1. Different schemas can have different
|
||
attribute types with the same names. The client can retrieve the
|
||
subschema entries referenced by the subschemaSubentry attribute in
|
||
the entries held by the server.
|
||
|
||
|
||
7. Security Considerations
|
||
|
||
When used with a connection-oriented transport, this version of the
|
||
protocol provides facilities for simple authentication using a
|
||
cleartext password, as well as any SASL mechanism [RFC2222]. SASL
|
||
allows for integrity and privacy services to be negotiated.
|
||
|
||
It is also permitted that the server can return its credentials to
|
||
the client, if it chooses to do so.
|
||
|
||
Use of cleartext password is strongly discouraged where the
|
||
underlying transport service cannot guarantee confidentiality and may
|
||
result in disclosure of the password to unauthorized parties.
|
||
|
||
When used with SASL, it should be noted that the name field of the
|
||
BindRequest is not protected against modification. Thus if the
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 32
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
distinguished name of the client (an LDAPDN) is agreed through the
|
||
negotiation of the credentials, it takes precedence over any value in
|
||
the unprotected name field.
|
||
|
||
Implementations which cache attributes and entries obtained via LDAP
|
||
MUST ensure that access controls are maintained if that information
|
||
is to be provided to multiple clients, since servers may have access
|
||
control policies which prevent the return of entries or attributes in
|
||
search results except to particular authenticated clients. For
|
||
example, caches could serve result information only to the client
|
||
whose request caused it to be in the cache.
|
||
|
||
Protocol servers may return referrals which redirect protocol clients
|
||
to peer servers. It is possible for a rogue application to inject
|
||
such referrals into the data stream in an attempt to redirect a
|
||
client to a rogue server. Protocol clients are advised to be aware of
|
||
this, and possibly reject referrals when confidentiality measures are
|
||
in place. Protocol clients are advised to ignore referrals from the
|
||
Start TLS operation.
|
||
|
||
|
||
8. Acknowledgements
|
||
|
||
This document is an update to RFC 2251, by Mark Wahl, Tim Howes, and
|
||
Steve Kille. Their work along with the input of individuals of the
|
||
IETF LDAPEXT, LDUP, LDAPBIS, and other Working Groups is gratefully
|
||
acknowledged.
|
||
|
||
|
||
9. Normative References
|
||
|
||
[X.500] ITU-T Rec. X.500, "The Directory: Overview of Concepts,
|
||
Models and Service", 1993.
|
||
|
||
[Roadmap] K. Zeilenga (editor), "LDAP: Technical Specification Road
|
||
Map", draft-ietf-ldapbis-roadmap-xx.txt (a work in
|
||
progress).
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", RFC 2119, March 1997.
|
||
|
||
[X.680] ITU-T Recommendation X.680 (1997) | ISO/IEC 8824-1:1998
|
||
Information Technology - Abstract Syntax Notation One
|
||
(ASN.1): Specification of basic notation
|
||
|
||
[X.690] ITU-T Rec. X.690, "Specification of ASN.1 encoding rules:
|
||
Basic, Canonical, and Distinguished Encoding Rules", 1994.
|
||
|
||
[LDAPIANA] K. Zeilenga, "IANA Considerations for LDAP", draft-ietf-
|
||
ldapbis-xx.txt (a work in progress).
|
||
|
||
[ISO10646] Universal Multiple-Octet Coded Character Set (UCS) -
|
||
Architecture and Basic Multilingual Plane, ISO/IEC 10646-1
|
||
: 1993.
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 33
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
[RFC2279] Yergeau, F., "UTF-8, a transformation format of Unicode
|
||
and ISO 10646", RFC 2279, January 1998.
|
||
|
||
[Models] K. Zeilenga, "LDAP: The Models", draft-ietf-ldapbis-
|
||
models-xx.txt (a work in progress).
|
||
|
||
[LDAPDN] K. Zeilenga (editor), "LDAP: String Representation of
|
||
Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, (a
|
||
work in progress).
|
||
|
||
[Syntaxes] K. Dally (editor), "LDAP: Syntaxes", draft-ietf-ldapbis-
|
||
syntaxes-xx.txt, (a work in progress).
|
||
|
||
[X.501] ITU-T Rec. X.501, "The Directory: Models", 1993.
|
||
|
||
[X.511] ITU-T Rec. X.511, "The Directory: Abstract Service
|
||
Definition", 1993.
|
||
|
||
[RFC2396] Berners-Lee, T., Fielding, R., and L. Masinter Uniform
|
||
Resource Identifiers (URI): Generic Syntax", RFC 2396,
|
||
August 1998.
|
||
|
||
[AuthMeth] R. Harrison (editor), "LDAP: Authentication Methods",
|
||
draft-ietf-ldapbis-authmeth-xx.txt, (a work in progress).
|
||
|
||
[RFC2222] Meyers, J., "Simple Authentication and Security Layer",
|
||
RFC 2222, October 1997.
|
||
|
||
|
||
10. Editor's Address
|
||
|
||
Jim Sermersheim
|
||
Novell, Inc.
|
||
1800 South Novell Place
|
||
Provo, Utah 84606, USA
|
||
jimse@novell.com
|
||
+1 801 861-3088
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 34
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
Appendix A - LDAP Result Codes
|
||
|
||
This normative appendix details additional considerations regarding
|
||
LDAP result codes and provides a brief, general description of each
|
||
LDAP result code enumerated in Section 4.1.10.
|
||
|
||
Additional result codes MAY be defined for use with extensions.
|
||
Client implementations SHALL treat any result code which they do not
|
||
recognize as an unknown error condition.
|
||
|
||
A.1 Non-Error Result Codes
|
||
These result codes (called "non-error" result codes) do not indicate
|
||
an error condition:
|
||
success(0),
|
||
compareTrue(6),
|
||
compareFalse(7),
|
||
referral(10), and
|
||
saslBindInProgress(14).
|
||
|
||
The success(0), compareTrue(6), and compare(7) result codes indicate
|
||
successful completion (and, hence, are called to as "successful"
|
||
result codes).
|
||
|
||
The referral(10) and saslBindInProgress(14) indicate the client is
|
||
required to take additional action to complete the operation
|
||
|
||
|
||
A.2 Error Result Codes
|
||
|
||
A.3 Classes and Precedence of Error Result Codes
|
||
|
||
Result codes that indicate error conditions (and, hence, are called
|
||
"error" result codes) fall into 6 classes. The following list
|
||
specifies the precedence of error classes to be used when more than
|
||
one error is detected [X511]:
|
||
1) Name Errors (codes 32 - 34, 36)
|
||
- a problem related to a name (DN or RDN),
|
||
2) Update Errors (codes 64 - 69, 71)
|
||
- a problem related to an update operation,
|
||
3) Attribute Errors (codes 16 - 21)
|
||
- a problem related to a supplied attribute,
|
||
4) Security Errors (codes 8, 13, 48 - 50)
|
||
- a security related problem,
|
||
5) Service Problem (codes 3, 4, 7, 11, 12, 51 - 54, 80)
|
||
- a problem related to the provision of the service, and
|
||
6) Protocol Problem (codes 1, 2)
|
||
- a problem related to protocol structure or semantics.
|
||
|
||
If the server detects multiple errors simultaneously, the server
|
||
SHOULD report the error with the highest precedence.
|
||
|
||
Existing LDAP result codes are described as follows:
|
||
|
||
success (0)
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 35
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
Indicates successful completion of an operation.
|
||
|
||
This result code is normally not returned by the compare
|
||
operation, see compareFalse (5) and compareTrue (6). It is
|
||
possible that a future extension mechanism would allow this
|
||
to be returned by a compare operation.
|
||
|
||
|
||
operationsError (1)
|
||
|
||
Indicates that the operation is not properly sequenced with
|
||
relation to other operations (of same or different type).
|
||
|
||
For example, this code is returned if the client attempts to
|
||
Start TLS [RFC2246] while there are other operations
|
||
outstanding or if TLS was already established.
|
||
|
||
|
||
|
||
protocolError (2)
|
||
|
||
Indicates the server received data which has incorrect
|
||
structure.
|
||
|
||
For bind operation only, the code may be resulted to indicate
|
||
the server does not support the requested protocol version.
|
||
|
||
|
||
timeLimitExceeded (3)
|
||
|
||
Indicates that the time limit specified by the client was
|
||
exceeded before the operation could be completed.
|
||
|
||
|
||
sizeLimitExceeded (4)
|
||
|
||
Indicates that the size limit specified by the client was
|
||
exceeded before the operation could be completed.
|
||
|
||
|
||
compareFalse (5)
|
||
|
||
Indicates that the operation successfully completes and the
|
||
assertion has evaluated to FALSE.
|
||
|
||
This result code is normally only returned by the compare
|
||
operation.
|
||
|
||
|
||
compareTrue (6)
|
||
|
||
Indicates that the operation successfully completes and the
|
||
assertion has evaluated to TRUE.
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 36
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
This result code is normally only returned by the compare
|
||
operation.
|
||
|
||
|
||
authMethodNotSupported (7)
|
||
|
||
Indicates that the authentication method or mechanism is not
|
||
supported.
|
||
|
||
|
||
strongAuthRequired (8)
|
||
|
||
Except when returned in a Notice of Disconnect (see section
|
||
4.4.1), this indicates that the server requires the client to
|
||
authentication using a strong(er) mechanism.
|
||
|
||
|
||
referral (10)
|
||
|
||
Indicates that a referral needs to be chased to complete the
|
||
operation (see section 4.1.11).
|
||
|
||
|
||
adminLimitExceeded (11)
|
||
|
||
Indicates that an administrative limit has been exceeded.
|
||
|
||
|
||
unavailableCriticalExtension (12)
|
||
|
||
Indicates that server cannot perform a critical extension
|
||
(see section 4.1.12).
|
||
|
||
|
||
confidentialityRequired (13)
|
||
|
||
Indicates that data confidentiality protections are required.
|
||
|
||
|
||
saslBindInProgress (14)
|
||
|
||
Indicates the server requires the client to send a new bind
|
||
request, with the same SASL mechanism, to continue the
|
||
authentication process (see section 4.2).
|
||
|
||
|
||
noSuchAttribute (16)
|
||
|
||
Indicates that the named entry does not contain the specified
|
||
attribute or attribute value.
|
||
|
||
|
||
undefinedAttributeType (17)
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 37
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
Indicates that a request field contains an undefined
|
||
attribute type.
|
||
|
||
|
||
inappropriateMatching (18)
|
||
|
||
Indicates that a request cannot be completed due to an
|
||
inappropriate matching.
|
||
|
||
|
||
constraintViolation (19)
|
||
|
||
Indicates that the client supplied an attribute value which
|
||
does not conform to constraints placed upon it by the data
|
||
model.
|
||
|
||
For example, this code is returned when the multiple values
|
||
are supplied to an attribute which has a SINGLE-VALUE
|
||
constraint.
|
||
|
||
|
||
attributeOrValueExists (20)
|
||
|
||
Indicates that the client supplied an attribute or value to
|
||
be added to an entry already exists.
|
||
|
||
|
||
invalidAttributeSyntax (21)
|
||
|
||
Indicates that a purported attribute value does not conform
|
||
to the syntax of the attribute.
|
||
|
||
|
||
noSuchObject (32)
|
||
|
||
Indicates that the object does not exist in the DIT.
|
||
|
||
|
||
aliasProblem (33)
|
||
|
||
Indicates that an alias problem has occurred. Typically an
|
||
alias has been dereferenced which names no object.
|
||
|
||
|
||
invalidDNSyntax (34)
|
||
|
||
Indicates that a LDAPDN or RelativeLDAPDN field (e.g. search
|
||
base, target entry, ModifyDN newrdn, etc.) of a request does
|
||
not conform to the required syntax or contains attribute
|
||
values which do not conform to the syntax of the attribute's
|
||
type.
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 38
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
aliasDereferencingProblem (36)
|
||
|
||
Indicates that a problem occurred while dereferencing an
|
||
alias. Typically an alias was encountered in a situation
|
||
where it was not allowed or where access was denied.
|
||
|
||
|
||
inappropriateAuthentication (48)
|
||
|
||
Indicates the server requires the client which had attempted
|
||
to bind anonymously or without supplying credentials to
|
||
provide some form of credentials,
|
||
|
||
|
||
invalidCredentials (49)
|
||
|
||
Indicates the supplied password or SASL credentials are
|
||
invalid.
|
||
|
||
|
||
insufficientAccessRights (50)
|
||
|
||
Indicates that the client does not have sufficient access
|
||
rights to perform the operation.
|
||
|
||
|
||
busy (51)
|
||
|
||
Indicates that the server is busy.
|
||
|
||
|
||
unavailable (52)
|
||
|
||
Indicates that the server is shutting down or a subsystem
|
||
necessary to complete the operation is offline.
|
||
|
||
|
||
unwillingToPerform (53)
|
||
|
||
Indicates that the server is unwilling to perform the
|
||
operation.
|
||
|
||
|
||
loopDetect (54)
|
||
|
||
Indicates that the server has detected an internal loop.
|
||
|
||
|
||
namingViolation (64)
|
||
|
||
Indicates that the entry name violates naming restrictions.
|
||
|
||
objectClassViolation (65)
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 39
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
Indicates that the entry violates object class restrictions.
|
||
|
||
|
||
notAllowedOnNonLeaf (66)
|
||
|
||
Indicates that operation is inappropriately acting upon a
|
||
non-leaf entry.
|
||
|
||
|
||
notAllowedOnRDN (67)
|
||
|
||
Indicates that the operation is inappropriately attempting to
|
||
remove a value which forms the entry's relative distinguished
|
||
name.
|
||
|
||
|
||
entryAlreadyExists (68)
|
||
|
||
Indicates that the request cannot be added fulfilled as the
|
||
entry already exists.
|
||
|
||
|
||
objectClassModsProhibited (69)
|
||
|
||
Indicates that the attempt to modify the object class(es) of
|
||
an entry objectClass attribute is prohibited.
|
||
|
||
For example, this code is returned when a when a client
|
||
attempts to modify the structural object class of an entry.
|
||
|
||
|
||
affectsMultipleDSAs (71)
|
||
|
||
Indicates that the operation cannot be completed as it
|
||
affects multiple servers (DSAs).
|
||
|
||
|
||
other (80)
|
||
|
||
Indicates the server has encountered an internal error.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 40
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
Appendix B - Complete ASN.1 Definition
|
||
|
||
This appendix is normative.
|
||
|
||
Lightweight-Directory-Access-Protocol-V3 DEFINITIONS
|
||
IMPLICIT TAGS
|
||
EXTENSIBILITY IMPLIED ::=
|
||
|
||
BEGIN
|
||
|
||
LDAPMessage ::= SEQUENCE {
|
||
messageID MessageID,
|
||
protocolOp CHOICE {
|
||
bindRequest 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 }
|
||
|
||
MessageID ::= INTEGER (0 .. maxInt)
|
||
|
||
maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) --
|
||
|
||
LDAPString ::= OCTET STRING -- UTF-8 encoded,
|
||
-- [ISO10646] characters
|
||
|
||
LDAPOID ::= OCTET STRING -- Constrained to numericoid [Models]
|
||
|
||
LDAPDN ::= LDAPString
|
||
|
||
RelativeLDAPDN ::= LDAPString
|
||
|
||
AttributeDescription ::= LDAPString
|
||
-- Constrained to attributedescription
|
||
-- [Models]
|
||
|
||
AttributeDescriptionList ::= SEQUENCE OF
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 41
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
AttributeDescription
|
||
|
||
AttributeValue ::= OCTET STRING
|
||
|
||
AttributeValueAssertion ::= SEQUENCE {
|
||
attributeDesc AttributeDescription,
|
||
assertionValue AssertionValue }
|
||
|
||
AssertionValue ::= OCTET STRING
|
||
|
||
Attribute ::= SEQUENCE {
|
||
type AttributeDescription,
|
||
vals SET OF AttributeValue }
|
||
|
||
MatchingRuleId ::= LDAPString
|
||
|
||
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),
|
||
adminLimitExceeded (11),
|
||
unavailableCriticalExtension (12),
|
||
confidentialityRequired (13),
|
||
saslBindInProgress (14),
|
||
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 --
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 42
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
namingViolation (64),
|
||
objectClassViolation (65),
|
||
notAllowedOnNonLeaf (66),
|
||
notAllowedOnRDN (67),
|
||
entryAlreadyExists (68),
|
||
objectClassModsProhibited (69),
|
||
-- 70 reserved for CLDAP --
|
||
affectsMultipleDSAs (71),
|
||
-- 72-79 unused --
|
||
other (80),
|
||
... },
|
||
-- 81-90 reserved for APIs --
|
||
matchedDN LDAPDN,
|
||
diagnosticMessage LDAPString,
|
||
referral [3] Referral OPTIONAL }
|
||
|
||
Referral ::= SEQUENCE OF LDAPURL
|
||
|
||
LDAPURL ::= LDAPString -- limited to characters permitted in
|
||
-- URLs
|
||
|
||
Controls ::= SEQUENCE OF Control
|
||
|
||
Control ::= SEQUENCE {
|
||
controlType LDAPOID,
|
||
criticality BOOLEAN DEFAULT FALSE,
|
||
controlValue OCTET STRING OPTIONAL }
|
||
|
||
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 OPTIONAL }
|
||
|
||
BindResponse ::= [APPLICATION 1] SEQUENCE {
|
||
COMPONENTS OF LDAPResult,
|
||
serverSaslCreds [7] OCTET STRING OPTIONAL }
|
||
|
||
UnbindRequest ::= [APPLICATION 2] NULL
|
||
|
||
SearchRequest ::= [APPLICATION 3] SEQUENCE {
|
||
baseObject LDAPDN,
|
||
scope ENUMERATED {
|
||
baseObject (0),
|
||
singleLevel (1),
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 43
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
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 {
|
||
and [0] SET SIZE (1..MAX) OF Filter,
|
||
or [1] SET SIZE (1..MAX) 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,
|
||
-- initial and final can occur at most once
|
||
substrings SEQUENCE OF CHOICE {
|
||
initial [0] AssertionValue,
|
||
any [1] AssertionValue,
|
||
final [2] AssertionValue } }
|
||
|
||
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
|
||
|
||
ModifyRequest ::= [APPLICATION 6] SEQUENCE {
|
||
object LDAPDN,
|
||
modification SEQUENCE OF SEQUENCE {
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 44
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
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 {
|
||
entry LDAPDN,
|
||
newrdn RelativeLDAPDN,
|
||
deleteoldrdn BOOLEAN,
|
||
newSuperior [0] LDAPDN OPTIONAL }
|
||
|
||
ModifyDNResponse ::= [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 {
|
||
COMPONENTS OF LDAPResult,
|
||
responseName [10] LDAPOID OPTIONAL,
|
||
response [11] OCTET STRING OPTIONAL }
|
||
|
||
END
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 45
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
Appendix C - Change History
|
||
<Note to RFC editor: This section is to be removed prior to RFC
|
||
publication>
|
||
|
||
C.1 Changes made to RFC 2251:
|
||
|
||
C.1.1 Editorial
|
||
|
||
- Bibliography References: Changed all bibliography references to
|
||
use a long name form for readability.
|
||
- Changed occurrences of "unsupportedCriticalExtension"
|
||
"unavailableCriticalExtension"
|
||
- Fixed a small number of misspellings (mostly dropped letters).
|
||
|
||
C.1.2 Section 1
|
||
|
||
- Removed IESG note.
|
||
|
||
C.1.3 Section 9
|
||
|
||
- Added references to RFCs 1823, 2234, 2829 and 2830.
|
||
|
||
|
||
C.2 Changes made to draft-ietf-ldapbis-protocol-00.txt:
|
||
|
||
C.2.1 Section 4.1.6
|
||
|
||
- In the first paragraph, clarified what the contents of an
|
||
AttributeValue are. There was confusion regarding whether or not
|
||
an AttributeValue that is BER encoded (due to the "binary" option)
|
||
is to be wrapped in an extra OCTET STRING.
|
||
- To the first paragraph, added wording that doesn't restrict other
|
||
transfer encoding specifiers from being used. The previous wording
|
||
only allowed for the string encoding and the ;binary encoding.
|
||
- To the first paragraph, added a statement restricting multiple
|
||
options that specify transfer encoding from being present. This
|
||
was never specified in the previous version and was seen as a
|
||
potential interoperability problem.
|
||
- Added a third paragraph stating that the ;binary option is
|
||
currently the only option defined that specifies the transfer
|
||
encoding. This is for completeness.
|
||
|
||
C.2.2 Section 4.1.7
|
||
|
||
- Generalized the second paragraph to read "If an option specifying
|
||
the transfer encoding is present in attributeDesc, the
|
||
AssertionValue is encoded as specified by the option...".
|
||
Previously, only the ;binary option was mentioned.
|
||
|
||
C.2.3 Sections 4.2, 4.9, 4.10
|
||
|
||
- Added alias dereferencing specifications. In the case of modDN,
|
||
followed precedent set on other update operations (... alias is
|
||
not dereferenced...) In the case of bind and compare stated that
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 46
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
servers SHOULD NOT dereference aliases. Specifications were added
|
||
because they were missing from the previous version and caused
|
||
interoperability problems. Concessions were made for bind and
|
||
compare (neither should have ever allowed alias dereferencing) by
|
||
using SHOULD NOT language, due to the behavior of some existing
|
||
implementations.
|
||
|
||
C.2.4 Sections 4.5 and Appendix A
|
||
|
||
- Changed SubstringFilter.substrings.initial, any, and all from
|
||
LDAPString to AssertionValue. This was causing an incompatibility
|
||
with X.500 and confusion among other TS RFCs.
|
||
|
||
|
||
C.3 Changes made to draft-ietf-ldapbis-protocol-01.txt:
|
||
|
||
C.3.1 Section 3.4
|
||
|
||
- Reworded text surrounding subschemaSubentry to reflect that it is
|
||
a single-valued attribute that holds the schema for the root DSE.
|
||
Also noted that if the server masters entries that use differing
|
||
schema, each entry's subschemaSubentry attribute must be
|
||
interrogated. This may change as further fine-tuning is done to
|
||
the data model.
|
||
|
||
C.3.2 Section 4.1.12
|
||
|
||
- Specified that the criticality field is only used for requests and
|
||
not for unbind or abandon. Noted that it is ignored for all other
|
||
operations.
|
||
|
||
C.3.3 Section 4.2
|
||
|
||
- Noted that Server behavior is undefined when the name is a null
|
||
value, simple authentication is used, and a password is specified.
|
||
|
||
C.3.4 Section 4.2.(various)
|
||
|
||
- Changed "unauthenticated" to "anonymous" and "DN" and "LDAPDN" to
|
||
"name"
|
||
|
||
C.3.5 Section 4.2.2
|
||
|
||
- Changed "there is no authentication or encryption being performed
|
||
by a lower layer" to "the underlying transport service cannot
|
||
guarantee confidentiality"
|
||
|
||
C.3.6 Section 4.5.2
|
||
|
||
- Removed all mention of ExtendedResponse due to lack of
|
||
implementation.
|
||
|
||
C.4 Changes made to draft-ietf-ldapbis-protocol-02.txt:
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 47
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
C.4.1 Section 4
|
||
|
||
- Removed "typically" from "and is typically transferred" in the
|
||
first paragraph. We know of no (and can conceive of no) case where
|
||
this isn't true.
|
||
- Added "Section 5.1 specifies how the LDAP protocol is encoded." To
|
||
the first paragraph. Added this cross reference for readability.
|
||
- Changed "version 3 " to "version 3 or later" in the second
|
||
paragraph. This was added to clarify the original intent.
|
||
- Changed "protocol version" to "protocol versions" in the third
|
||
paragraph. This attribute is multi-valued with the intent of
|
||
holding all supported versions, not just one.
|
||
|
||
C.4.2 Section 4.1.8
|
||
|
||
- Changed "when transferred in protocol" to "when transferred from
|
||
the server to the client" in the first paragraph. This is to
|
||
clarify that this behavior only happens when attributes are being
|
||
sent from the server.
|
||
|
||
C.4.3 Section 4.1.10
|
||
|
||
- Changed "servers will return responses containing fields of type
|
||
LDAPResult" to "servers will return responses of LDAPResult or
|
||
responses containing the components of LDAPResponse". This
|
||
statement was incorrect and at odds with the ASN.1. The fix here
|
||
reflects the original intent.
|
||
- Dropped '--new' from result codes ASN.1. This simplification in
|
||
comments just reduces unneeded verbiage.
|
||
|
||
C.4.4 Section 4.1.11
|
||
|
||
- Changed "It contains a reference to another server (or set of
|
||
servers)" to "It contains one or more references to one or more
|
||
servers or services" in the first paragraph. This reflects the
|
||
original intent and clarifies that the URL may point to non-LDAP
|
||
services.
|
||
|
||
C.4.5 Section 4.1.12
|
||
|
||
- Changed "The server MUST be prepared" to "Implementations MUST be
|
||
prepared" in the eighth paragraph to reflect that both client and
|
||
server implementations must be able to handle this (as both parse
|
||
controls).
|
||
|
||
C.4.6 Section 4.4
|
||
|
||
- Changed "One unsolicited notification is defined" to "One
|
||
unsolicited notification (Notice of Disconnection) is defined" in
|
||
the third paragraph. For clarity and readability.
|
||
|
||
C.4.7 Section 4.5.1
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 48
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
- Changed "checking for the existence of the objectClass attribute"
|
||
to "checking for the presence of the objectClass attribute" in the
|
||
last paragraph. This was done as a measure of consistency (we use
|
||
the terms present and presence rather than exists and existence in
|
||
search filters).
|
||
|
||
C.4.8 Section 4.5.3
|
||
|
||
- Changed "outstanding search operations to different servers," to
|
||
"outstanding search operations" in the fifth paragraph as they may
|
||
be to the same server. This is a point of clarification.
|
||
|
||
C.4.9 Section 4.6
|
||
|
||
- Changed "clients MUST NOT attempt to delete" to "clients MUST NOT
|
||
attempt to add or delete" in the second to last paragraph.
|
||
- Change "using the "delete" form" to "using the "add" or "delete"
|
||
form" in the second to last paragraph.
|
||
|
||
C.4.10 Section 4.7
|
||
|
||
- Changed "Clients MUST NOT supply the createTimestamp or
|
||
creatorsName attributes, since these will be generated
|
||
automatically by the server." to "Clients MUST NOT supply NO-USER-
|
||
MODIFICATION attributes such as createTimestamp or creatorsName
|
||
attributes, since these are provided by the server." in the
|
||
definition of the attributes field. This tightens the language to
|
||
reflect the original intent and to not leave a hole in which one
|
||
could interpret the two attributes mentioned as the only non-
|
||
writable attributes.
|
||
|
||
C.4.11 Section 4.11
|
||
|
||
- Changed "has been" to "will be" in the fourth paragraph. This
|
||
clarifies that the server will (not has) abandon the operation.
|
||
|
||
|
||
C.5 Changes made to draft-ietf-ldapbis-protocol-03.txt:
|
||
|
||
C.5.1 Section 3.2.1
|
||
|
||
- Changed "An attribute is a type with one or more associated
|
||
values. The attribute type is identified by a short descriptive
|
||
name and an OID (object identifier). The attribute type governs
|
||
whether there can be more than one value of an attribute of that
|
||
type in an entry, the syntax to which the values must conform, the
|
||
kinds of matching which can be performed on values of that
|
||
attribute, and other functions." to " An attribute is a
|
||
description (a type and zero or more options) with one or more
|
||
associated values. The attribute type governs whether the
|
||
attribute can have multiple values, the syntax and matching rules
|
||
used to construct and compare values of that attribute, and other
|
||
functions. Options indicate modes of transfer and other
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 49
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
functions.". This points out that an attribute consists of both
|
||
the type and options.
|
||
|
||
C.5.2 Section 4
|
||
|
||
- Changed "Section 5.1 specifies the encoding rules for the LDAP
|
||
protocol" to "Section 5.1 specifies how the protocol is encoded
|
||
and transferred."
|
||
|
||
C.5.3 Section 4.1.2
|
||
|
||
- Added ABNF for the textual representation of LDAPOID. Previously,
|
||
there was no formal BNF for this construct.
|
||
|
||
C.5.4 Section 4.1.4
|
||
|
||
- Changed "This identifier may be written as decimal digits with
|
||
components separated by periods, e.g. "2.5.4.10"" to "may be
|
||
written as defined by ldapOID in section 4.1.2" in the second
|
||
paragraph. This was done because we now have a formal BNF
|
||
definition of an oid.
|
||
|
||
C.5.5 Section 4.1.5
|
||
|
||
- Changed the BNF for AttributeDescription to ABNF. This was done
|
||
for readability and consistency (no functional changes involved).
|
||
- Changed "Options present in an AttributeDescription are never
|
||
mutually exclusive." to "Options MAY be mutually exclusive. An
|
||
AttributeDescription with mutually exclusive options is treated as
|
||
an undefined attribute type." for clarity. It is generally
|
||
understood that this is the original intent, but the wording could
|
||
be easily misinterpreted.
|
||
- Changed "Any option could be associated with any AttributeType,
|
||
although not all combinations may be supported by a server." to
|
||
"Though any option or set of options could be associated with any
|
||
AttributeType, the server support for certain combinations may be
|
||
restricted by attribute type, syntaxes, or other factors.". This
|
||
is to clarify the meaning of 'combination' (it applies both to
|
||
combination of attribute type and options, and combination of
|
||
options). It also gives examples of *why* they might be
|
||
unsupported.
|
||
|
||
C.5.6 Section 4.1.11
|
||
|
||
- Changed the wording regarding 'equally capable' referrals to "If
|
||
multiple URLs are present, the client assumes that any URL may be
|
||
used to progress the operation.". The previous language implied
|
||
that the server MUST enforce rules that it was practically
|
||
incapable of. The new language highlights the original intent--
|
||
that is, that any of the referrals may be used to progress the
|
||
operation, there is no inherent 'weighting' mechanism.
|
||
|
||
C.5.7 Section 4.5.1 and Appendix A
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 50
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
- Added the comment "-- initial and final can occur at most once",
|
||
to clarify this restriction.
|
||
|
||
C.5.8 Section 5.1
|
||
|
||
- Changed heading from "Mapping Onto BER-based Transport Services"
|
||
to "Protocol Encoding".
|
||
|
||
C.5.9 Section 5.2.1
|
||
|
||
- Changed "The LDAPMessage PDUs" to "The encoded LDAPMessage PDUs"
|
||
to point out that the PDUs are encoded before being streamed to
|
||
TCP.
|
||
|
||
C.6 Changes made to draft-ietf-ldapbis-protocol-04.txt:
|
||
|
||
C.6.1 Section 4.5.1 and Appendix A
|
||
|
||
- Changed the ASN.1 for the and and or choices of Filter to have a
|
||
lower range of 1. This was an omission in the original ASN.1
|
||
|
||
C.6.2 Various
|
||
|
||
- Fixed various typo's
|
||
|
||
C.7 Changes made to draft-ietf-ldapbis-protocol-05.txt:
|
||
|
||
C.7.1 Section 3.2.1
|
||
|
||
- Added "(as defined in Section 12.4.1 of [X.501])" to the fifth
|
||
paragraph when talking about "operational attributes". This is
|
||
because the term "operational attributes" is never defined.
|
||
Alternately, we could drag a definition into the spec, for now,
|
||
I'm just pointing to the reference in X.501.
|
||
|
||
C.7.2 Section 4.1.5
|
||
|
||
- Changed "And is also case insensitive" to "The entire
|
||
AttributeDescription is case insensitive". This is to clarify
|
||
whether we're talking about the entire attribute description, or
|
||
just the options.
|
||
|
||
- Expounded on the definition of attribute description options. This
|
||
doc now specifies a difference between transfer and tagging
|
||
options and describes the semantics of each, and how and when
|
||
subtyping rules apply. Now allow options to be transmitted in any
|
||
order but disallow any ordering semantics to be implied. These
|
||
changes are the result of ongoing input from an engineering team
|
||
designed to deal with ambiguity issues surrounding attribute
|
||
options.
|
||
|
||
C.7.3 Sections 4.1.5.1 and 4.1.6
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 51
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
- Refer to non "binary" transfer encodings as "native encoding"
|
||
rather than "string" encoding to clarify and avoid confusion.
|
||
|
||
C.8 Changes made to draft-ietf-ldapbis-protocol-06.txt:
|
||
|
||
C.8.1 Title
|
||
|
||
- Changed to "LDAP: The Protocol" to be consisted with other working
|
||
group documents
|
||
|
||
C.8.2 Abstract
|
||
|
||
- Moved above TOC to conform to new guidelines
|
||
|
||
- Reworded to make consistent with other WG documents.
|
||
|
||
- Moved 2119 conventions to "Conventions" section
|
||
|
||
C.8.3 Introduction
|
||
|
||
- Created to conform to new guidelines
|
||
|
||
C.8.4 Models
|
||
|
||
- Removed section. There is only one model in this document
|
||
(Protocol Model)
|
||
|
||
C.8.5 Protocol Model
|
||
|
||
- Removed antiquated paragraph: "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 of using
|
||
the directory."
|
||
|
||
- Removed antiquated paragraph concerning LDAP v1 and v2 and
|
||
referrals.
|
||
|
||
C.8.6 Data Model
|
||
|
||
- Removed Section 3.2 and subsections. These have been moved to
|
||
[Models]
|
||
|
||
C.8.7 Relationship to X.500
|
||
|
||
- Removed section. It has been moved to [Roadmap]
|
||
|
||
C.8.8 Server Specific Data Requirements
|
||
|
||
- Removed section. It has been moved to [Models]
|
||
|
||
C.8.9 Elements of Protocol
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 52
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
- Added "Section 5.1 specifies how the protocol is encoded and
|
||
transferred." to the end of the first paragraph for reference.
|
||
|
||
- Reworded notes about extensibility, and now talk about implied
|
||
extensibility and the use of ellipses in the ASN.1
|
||
|
||
- Removed references to LDAPv2 in third and fourth paragraphs.
|
||
|
||
C.8.10 Message ID
|
||
|
||
- Reworded second paragraph to "The message ID of a request MUST
|
||
have a non-zero value different from the values of any other
|
||
requests outstanding in the LDAP session of which this message is
|
||
a part. The zero value is reserved for the unsolicited
|
||
notification message." (Added notes about non-zero and the zero
|
||
value).
|
||
|
||
C.8.11 String Types
|
||
|
||
- Removed ABNF for LDAPOID and added "Although an LDAPOID is encoded
|
||
as an OCTET STRING, values are limited to the definition of
|
||
numericoid given in Section 1.3 of [Models]."
|
||
|
||
C.8.12 Distinguished Name and Relative Distinguished Name
|
||
|
||
- Removed ABNF and referred to [Models] and [LDAPDN] where this is
|
||
defined.
|
||
|
||
C.8.13 Attribute Type
|
||
|
||
- Removed sections. It's now in the [Models] doc.
|
||
|
||
C.8.14 Attribute Description
|
||
|
||
- Removed ABNF and aligned section with [Models]
|
||
|
||
- Moved AttributeDescriptionList here.
|
||
|
||
C.8.15 Transfer Options
|
||
|
||
- Added section and consumed much of old options language (while
|
||
aligning with [Models]
|
||
|
||
C.8.16 Binary Transfer Option
|
||
|
||
- Clarified intent regarding exactly what is to be BER encoded.
|
||
|
||
- Clarified that clients must not expect ;binary when not asking for
|
||
it (;binary, as opposed to ber encoded data).
|
||
|
||
|
||
C.8.17 Attribute
|
||
|
||
- Use the term "attribute description" in lieu of "type"
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 53
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
- Clarified the fact that clients cannot rely on any apparent
|
||
ordering of attribute values.
|
||
|
||
C.8.18 LDAPResult
|
||
|
||
- To resultCode, added ellipses "..." to the enumeration to indicate
|
||
extensibility. and added a note, pointing to [LDAPIANA]
|
||
|
||
- Removed error groupings ad refer to Appendix A.
|
||
|
||
C.8.19 Bind Operation
|
||
|
||
- Added "Prior to the BindRequest, the implied identity is
|
||
anonymous. Refer to [AuthMeth] for the authentication-related
|
||
semantics of this operation." to the first paragraph.
|
||
|
||
- Added ellipses "..." to AuthenticationChoice and added a note
|
||
"This type is extensible as defined in Section 3.6 of [LDAPIANA].
|
||
Servers that do not support a choice supplied by a client will
|
||
return authMethodNotSupported in the result code of the
|
||
BindResponse."
|
||
|
||
- Simplified text regarding how the server handles unknown versions.
|
||
Removed references to LDAPv2
|
||
|
||
C.8.20 Sequencing of the Bind Request
|
||
|
||
- Aligned with [AuthMeth] In particular, paragraphs 4 and 6 were
|
||
removed, while a portion of 4 was retained (see C.8.9)
|
||
|
||
C.8.21 Authentication and other Security Service
|
||
|
||
- Section was removed. Now in [AuthMeth]
|
||
|
||
C.8.22 Continuation References in the Search Result
|
||
|
||
- Added "If the originating search scope was singleLevel, the scope
|
||
part of the URL will be baseObject."
|
||
|
||
C.8.23 Security Considerations
|
||
|
||
- Removed reference to LDAPv2
|
||
|
||
C.8.24 Result Codes
|
||
|
||
- Added as normative appendix A
|
||
|
||
C.8.25 ASN.1
|
||
|
||
- Added EXTENSIBILITY IMPLIED
|
||
|
||
- Added a number of comments holding referenced to [Models] and
|
||
[ISO10646].
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 54
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
- Removed AttributeType. It is not used.
|
||
|
||
|
||
C.9 Changes made to draft-ietf-ldapbis-protocol-07.txt:
|
||
|
||
- Removed all mention of transfer encodings and the binary attribute
|
||
option
|
||
|
||
- Further alignment with [Models].
|
||
|
||
- Added extensibility ellipsis to protocol op choice
|
||
|
||
- In 4.1.1, clarified when connections may be dropped due to
|
||
malformed PDUs
|
||
|
||
- Specified which matching rules and syntaxes are used for various
|
||
filter items
|
||
|
||
C.10 Changes made to draft-ietf-ldapbis-protocol-08.txt:
|
||
|
||
C.10.1 Section 4.1.1.1:
|
||
|
||
- Clarified when it is and isn't appropriate to return an already
|
||
used message id.
|
||
|
||
C.10.2 Section 4.1.11:
|
||
|
||
- Clarified that a control only applies to the message it's attached
|
||
to.
|
||
|
||
- Explained that the criticality field is only applicable to certain
|
||
request messages.
|
||
|
||
- Added language regarding the combination of controls.
|
||
|
||
C.10.3 Section 4.11:
|
||
|
||
- Explained that Abandon and Unbind cannot be abandoned, and
|
||
illustrated how to determine whether an operation has been
|
||
abandoned.
|
||
|
||
|
||
C.11 Changes made to draft-ietf-ldapbis-protocol-09.txt:
|
||
|
||
- Fixed formatting
|
||
|
||
|
||
C.12 Changes made to draft-ietf-ldapbis-protocol-10.txt:
|
||
|
||
C.12.1 Section 4.1.4:
|
||
|
||
- Removed second paragraph as this language exists in MODELS
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 55
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
C.12.2 Section 4.2.1:
|
||
|
||
- Replaced fourth paragraph. It was accidentally removed in an
|
||
earlier edit.
|
||
|
||
C.12.2 Section 4.13:
|
||
|
||
- Added section describing the StartTLS operation (moved from
|
||
authmeth)
|
||
|
||
C.13 Changes made to draft-ietf-ldapbis-protocol-11.txt:
|
||
|
||
C.13.1 Section 4.1.9
|
||
|
||
- Changed "errorMessage" to "diagnosticMessage". Simply to indicate
|
||
that the field may be non-empty even if a non-error resultCode is
|
||
present.
|
||
|
||
C.13.2 Section 4.2:
|
||
|
||
- Reconciled language in "name" definition with [AuthMeth]
|
||
|
||
C.13.3 Section 4.2.1
|
||
|
||
- Renamed to "Processing of the Bind Request", and moved some text
|
||
from 4.2 into this section.
|
||
|
||
- Rearranged paragraphs to flow better.
|
||
|
||
- Specified that (as well as failed) an abandoned bind operation
|
||
will leave the connection in an anonymous state.
|
||
|
||
C.13.4 Section 4.5.3
|
||
|
||
- Generalized the second paragraph which cited indexing and
|
||
searchreferralreferences.
|
||
|
||
C.14 Changes made to draft-ietf-ldapbis-protocol-12.txt:
|
||
|
||
- Reworked bind errors.
|
||
- General clarifications and edits
|
||
|
||
Appendix D - Outstanding Work Items
|
||
|
||
D.0 General
|
||
- Integrate notational consistency agreements WG will discuss
|
||
notation consistency. Once agreement happens, reconcile draft.
|
||
|
||
- Reconcile problems with [Models]. Section 3.2 was wholly removed.
|
||
There were some protocol semantics in that section that need to be
|
||
brought back. Specifically, there was the notion of the server
|
||
implicitly adding objectclass superclasses when a value is added.
|
||
|
||
D.1 Make result code usage consistent.
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 56
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
|
||
- While there is a result code appendix, ensure it speaks of result
|
||
codes in a general sense, and only highlight specific result codes
|
||
in the context of an operation when that operation ties more
|
||
specific meanings to that result code.
|
||
|
||
|
||
D.2 Verify references.
|
||
|
||
- Many referenced documents have changed. Ensure references and
|
||
section numbers are correct.
|
||
|
||
D.3 Usage of Naming Context
|
||
|
||
- Make sure occurrences of "namingcontext" and "naming context" are
|
||
consistent with [Models]. Use in section 6.2 should be reworked.
|
||
It's layers of indirection that matter, not number of contexts.
|
||
(That is, referrals can be returned for a number of reasons (cross
|
||
reference, superior, subordinate, busy, not master, etc.)
|
||
|
||
Other uses are fine.
|
||
|
||
D.4 Review 2119 usage
|
||
|
||
|
||
D.5 Reconcile with I-D Nits
|
||
|
||
|
||
D.23 Section 4.5.3
|
||
|
||
- A server MUST NOT return any SearchResultReference if it has not
|
||
located the baseObject and thus has not searched any entries; in
|
||
this case it would return a SearchResultDone containing a referral
|
||
resultCode.
|
||
|
||
- Add "Similarly, a server MUST NOT return a SearchResultReference
|
||
when the scope of the search is baseObject. If a client receives
|
||
such a SearchResultReference it MUST interpret is as a protocol
|
||
error and MUST NOT follow it." to the first paragraph.
|
||
The technical specification doesn't have to describe how a
|
||
protocol peer should react when its partner violates an absolute.
|
||
|
||
OR return noSuchObject.
|
||
|
||
- Add "If the scope part of the LDAP URL is present, the client MUST
|
||
use the new scope in its next request to progress the search. If
|
||
the scope part is absent the client MUST use subtree scope to
|
||
complete subtree searches and base scope to complete one level
|
||
searches." to the third paragraph.
|
||
|
||
D.25 Section 4.6
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 57
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
- Resolve the meaning of "and is ignored if the attribute does not
|
||
exist". See "modify: "non-existent attribute"" on the list. Not
|
||
sure if there's really an issue here. Will look at archive
|
||
|
||
D.27 Section 4.10
|
||
|
||
- Specify what happens when the attr is missing vs. attr isn't in
|
||
schema. Also what happens if there's no equality matching rule.
|
||
noSuchAttribute, undefinedAttributeType, inappropriateMatching
|
||
|
||
D.30 Section 5.1
|
||
|
||
- Add "control and extended operation values" to last paragraph. See
|
||
"LBER (BER Restrictions)" on list.
|
||
|
||
D.32 Section 6.1
|
||
|
||
- Add "that are used by those attributes" to the first paragraph.
|
||
- Add "Servers which support update operations MUST, and other
|
||
servers SHOULD, support strong authentication mechanisms described
|
||
in [RFC2829]." as a second paragraph. Likely should just say
|
||
Requirements of authentication methods, SASL mechanisms, and TLS
|
||
are described in [AUTHMETH]." (also apply to next two below)
|
||
- Add "Servers which provide access to sensitive information MUST,
|
||
and other servers SHOULD support privacy protections such as those
|
||
described in [RFC2829] and [RFC2830]." as a third paragraph.
|
||
|
||
D.33 Section 7
|
||
|
||
- Add "Servers which support update operations MUST, and other
|
||
servers SHOULD, support strong authentication mechanisms described
|
||
in [RFC2829]." as a fourth paragraph.
|
||
- Add "In order to automatically follow referrals, clients may need
|
||
to hold authentication secrets. This poses significant privacy and
|
||
security concerns and SHOULD be avoided." as a sixth paragraph.
|
||
There are concerns with "automatic" chasing regardless of which,
|
||
if any, authentication method/mechanism is used.
|
||
|
||
- Add notes regarding DoS attack found by CERT advisories.
|
||
|
||
D.34 Appendix C
|
||
|
||
- C.9. Explain why we removed ;binary, and what clients can do to
|
||
get around potential problems (likely refer to an I-D)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 58
|
||
Lightweight Directory Access Protocol Version 3
|
||
|
||
Full Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (2002). All Rights Reserved.
|
||
|
||
This document and translations of it may be copied and furnished to
|
||
others, and derivative works that comment on or otherwise explain it
|
||
or assist in its implementation may be prepared, copied, published
|
||
and distributed, in whole or in part, without restriction of any
|
||
kind, provided that the above copyright notice and this paragraph are
|
||
included on all such copies and derivative works. However, this
|
||
document itself may not be modified in any way, such as by removing
|
||
the copyright notice or references to the Internet Society or other
|
||
Internet organizations, except as needed for the purpose of
|
||
developing Internet standards in which case the procedures for
|
||
copyrights defined in the Internet Standards process must be
|
||
followed, or as required to translate it into languages other than
|
||
English.
|
||
|
||
The limited permissions granted above are perpetual and will not be
|
||
revoked by the Internet Society or its successors or assigns.
|
||
|
||
This document and the information contained herein is provided on an
|
||
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
|
||
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
|
||
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
|
||
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
|
||
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Sermersheim Internet-Draft - Expires Sep 2003 Page 59 |