mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
3812 lines
147 KiB
Plaintext
3812 lines
147 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Network Working Group J. Sermersheim, Ed.
|
|||
|
Request for Comments: 4511 Novell, Inc.
|
|||
|
Obsoletes: 2251, 2830, 3771 June 2006
|
|||
|
Category: Standards Track
|
|||
|
|
|||
|
|
|||
|
Lightweight Directory Access Protocol (LDAP): The Protocol
|
|||
|
|
|||
|
Status of This Memo
|
|||
|
|
|||
|
This document specifies an Internet standards track protocol for the
|
|||
|
Internet community, and requests discussion and suggestions for
|
|||
|
improvements. Please refer to the current edition of the "Internet
|
|||
|
Official Protocol Standards" (STD 1) for the standardization state
|
|||
|
and status of this protocol. Distribution of this memo is unlimited.
|
|||
|
|
|||
|
Copyright Notice
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2006).
|
|||
|
|
|||
|
Abstract
|
|||
|
|
|||
|
This document describes the protocol elements, along with their
|
|||
|
semantics and encodings, of 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 ....................................................3
|
|||
|
1.1. Relationship to Other LDAP Specifications ..................3
|
|||
|
2. Conventions .....................................................3
|
|||
|
3. Protocol Model ..................................................4
|
|||
|
3.1. Operation and LDAP Message Layer Relationship ..............5
|
|||
|
4. Elements of Protocol ............................................5
|
|||
|
4.1. Common Elements ............................................5
|
|||
|
4.1.1. Message Envelope ....................................6
|
|||
|
4.1.2. String Types ........................................7
|
|||
|
4.1.3. Distinguished Name and Relative Distinguished Name ..8
|
|||
|
4.1.4. Attribute Descriptions ..............................8
|
|||
|
4.1.5. Attribute Value .....................................8
|
|||
|
4.1.6. Attribute Value Assertion ...........................9
|
|||
|
4.1.7. Attribute and PartialAttribute ......................9
|
|||
|
4.1.8. Matching Rule Identifier ...........................10
|
|||
|
4.1.9. Result Message .....................................10
|
|||
|
4.1.10. Referral ..........................................12
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 1]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
4.1.11. Controls ..........................................14
|
|||
|
4.2. Bind Operation ............................................16
|
|||
|
4.2.1. Processing of the Bind Request .....................17
|
|||
|
4.2.2. Bind Response ......................................18
|
|||
|
4.3. Unbind Operation ..........................................18
|
|||
|
4.4. Unsolicited Notification ..................................19
|
|||
|
4.4.1. Notice of Disconnection ............................19
|
|||
|
4.5. Search Operation ..........................................20
|
|||
|
4.5.1. Search Request .....................................20
|
|||
|
4.5.2. Search Result ......................................27
|
|||
|
4.5.3. Continuation References in the Search Result .......28
|
|||
|
4.6. Modify Operation ..........................................31
|
|||
|
4.7. Add Operation .............................................33
|
|||
|
4.8. Delete Operation ..........................................34
|
|||
|
4.9. Modify DN Operation .......................................34
|
|||
|
4.10. Compare Operation ........................................36
|
|||
|
4.11. Abandon Operation ........................................36
|
|||
|
4.12. Extended Operation .......................................37
|
|||
|
4.13. IntermediateResponse Message .............................39
|
|||
|
4.13.1. Usage with LDAP ExtendedRequest and
|
|||
|
ExtendedResponse ..................................40
|
|||
|
4.13.2. Usage with LDAP Request Controls ..................40
|
|||
|
4.14. StartTLS Operation .......................................40
|
|||
|
4.14.1. StartTLS Request ..................................40
|
|||
|
4.14.2. StartTLS Response .................................41
|
|||
|
4.14.3. Removal of the TLS Layer ..........................41
|
|||
|
5. Protocol Encoding, Connection, and Transfer ....................42
|
|||
|
5.1. Protocol Encoding .........................................42
|
|||
|
5.2. Transmission Control Protocol (TCP) .......................43
|
|||
|
5.3. Termination of the LDAP session ...........................43
|
|||
|
6. Security Considerations ........................................43
|
|||
|
7. Acknowledgements ...............................................45
|
|||
|
8. Normative References ...........................................46
|
|||
|
9. Informative References .........................................48
|
|||
|
10. IANA Considerations ...........................................48
|
|||
|
Appendix A. LDAP Result Codes .....................................49
|
|||
|
A.1. Non-Error Result Codes ....................................49
|
|||
|
A.2. Result Codes ..............................................49
|
|||
|
Appendix B. Complete ASN.1 Definition .............................54
|
|||
|
Appendix C. Changes ...............................................60
|
|||
|
C.1. Changes Made to RFC 2251 ..................................60
|
|||
|
C.2. Changes Made to RFC 2830 ..................................66
|
|||
|
C.3. Changes Made to RFC 3771 ..................................66
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 2]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
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 the Lightweight
|
|||
|
Directory Access Protocol (LDAP), along with their semantics.
|
|||
|
Following the description of protocol elements, it describes the way
|
|||
|
in which the protocol elements are encoded and transferred.
|
|||
|
|
|||
|
1.1. Relationship to Other LDAP Specifications
|
|||
|
|
|||
|
This document is an integral part of the LDAP Technical Specification
|
|||
|
[RFC4510], which obsoletes the previously defined LDAP technical
|
|||
|
specification, RFC 3377, in its entirety.
|
|||
|
|
|||
|
This document, together with [RFC4510], [RFC4513], and [RFC4512],
|
|||
|
obsoletes RFC 2251 in its entirety. Section 3.3 is obsoleted by
|
|||
|
[RFC4510]. Sections 4.2.1 (portions) and 4.2.2 are obsoleted by
|
|||
|
[RFC4513]. Sections 3.2, 3.4, 4.1.3 (last paragraph), 4.1.4, 4.1.5,
|
|||
|
4.1.5.1, 4.1.9 (last paragraph), 5.1, 6.1, and 6.2 (last paragraph)
|
|||
|
are obsoleted by [RFC4512]. The remainder of RFC 2251 is obsoleted
|
|||
|
by this document. Appendix C.1 summarizes substantive changes in the
|
|||
|
remainder.
|
|||
|
|
|||
|
This document obsoletes RFC 2830, Sections 2 and 4. The remainder of
|
|||
|
RFC 2830 is obsoleted by [RFC4513]. Appendix C.2 summarizes
|
|||
|
substantive changes to the remaining sections.
|
|||
|
|
|||
|
This document also obsoletes RFC 3771 in entirety.
|
|||
|
|
|||
|
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].
|
|||
|
|
|||
|
Character names in this document use the notation for code points and
|
|||
|
names from the Unicode Standard [Unicode]. For example, the letter
|
|||
|
"a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 3]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Note: a glossary of terms used in Unicode can be found in [Glossary].
|
|||
|
Information on the Unicode character encoding model can be found in
|
|||
|
[CharModel].
|
|||
|
|
|||
|
The term "transport connection" refers to the underlying transport
|
|||
|
services used to carry the protocol exchange, as well as associations
|
|||
|
established by these services.
|
|||
|
|
|||
|
The term "TLS layer" refers to Transport Layer Security (TLS)
|
|||
|
services used in providing security services, as well as associations
|
|||
|
established by these services.
|
|||
|
|
|||
|
The term "SASL layer" refers to Simply Authentication and Security
|
|||
|
Layer (SASL) services used in providing security services, as well as
|
|||
|
associations established by these services.
|
|||
|
|
|||
|
The term "LDAP message layer" refers to the LDAP Message Protocol
|
|||
|
Data Unit (PDU) services used in providing directory services, as
|
|||
|
well as associations established by these services.
|
|||
|
|
|||
|
The term "LDAP session" refers to combined services (transport
|
|||
|
connection, TLS layer, SASL layer, LDAP message layer) and their
|
|||
|
associations.
|
|||
|
|
|||
|
See the table in Section 5 for an illustration of these four terms.
|
|||
|
|
|||
|
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 an
|
|||
|
operation, the server typically returns a response containing
|
|||
|
appropriate data to the requesting client.
|
|||
|
|
|||
|
Protocol operations are generally independent of one another. Each
|
|||
|
operation is processed as an atomic action, leaving the directory in
|
|||
|
a consistent state.
|
|||
|
|
|||
|
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 generally may be
|
|||
|
exchanged between a client and server in any order. If required,
|
|||
|
synchronous behavior may be controlled by client applications.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 4]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
The core protocol operations defined in this document can be mapped
|
|||
|
to a subset of the X.500 (1993) Directory Abstract Service [X.511].
|
|||
|
However, there is not a one-to-one mapping between LDAP operations
|
|||
|
and X.500 Directory Access Protocol (DAP) operations. Server
|
|||
|
implementations acting as a gateway to X.500 directories may need to
|
|||
|
make multiple DAP requests to service a single LDAP request.
|
|||
|
|
|||
|
3.1. Operation and LDAP Message Layer Relationship
|
|||
|
|
|||
|
Protocol operations are exchanged at the LDAP message layer. When
|
|||
|
the transport connection is closed, any uncompleted operations at the
|
|||
|
LDAP message layer are abandoned (when possible) or are completed
|
|||
|
without transmission of the response (when abandoning them is not
|
|||
|
possible). Also, when the transport connection is closed, the client
|
|||
|
MUST NOT assume that any uncompleted update operations have succeeded
|
|||
|
or failed.
|
|||
|
|
|||
|
4. Elements of Protocol
|
|||
|
|
|||
|
The protocol is described using Abstract Syntax Notation One
|
|||
|
([ASN.1]) and is transferred using a subset of ASN.1 Basic Encoding
|
|||
|
Rules ([BER]). Section 5 specifies how the protocol elements are
|
|||
|
encoded and transferred.
|
|||
|
|
|||
|
In order to support future extensions to this protocol, extensibility
|
|||
|
is implied where it is allowed per ASN.1 (i.e., sequence, set,
|
|||
|
choice, and enumerated types are extensible). In addition, ellipses
|
|||
|
(...) have been supplied in ASN.1 types that are explicitly
|
|||
|
extensible as discussed in [RFC4520]. Because of the implied
|
|||
|
extensibility, clients and servers MUST (unless otherwise specified)
|
|||
|
ignore trailing SEQUENCE components whose tags they do not recognize.
|
|||
|
|
|||
|
Changes to the 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 BindRequest,
|
|||
|
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 attempt to determine the protocol versions a server
|
|||
|
supports by reading the 'supportedLDAPVersion' attribute from the
|
|||
|
root DSE (DSA-Specific Entry) [RFC4512].
|
|||
|
|
|||
|
4.1. Common Elements
|
|||
|
|
|||
|
This section describes the LDAPMessage envelope Protocol Data Unit
|
|||
|
(PDU) format, as well as data type definitions, which are used in the
|
|||
|
protocol operations.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 5]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
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,
|
|||
|
modDNResponse ModifyDNResponse,
|
|||
|
compareRequest CompareRequest,
|
|||
|
compareResponse CompareResponse,
|
|||
|
abandonRequest AbandonRequest,
|
|||
|
extendedReq ExtendedRequest,
|
|||
|
extendedResp ExtendedResponse,
|
|||
|
...,
|
|||
|
intermediateResponse IntermediateResponse },
|
|||
|
controls [0] Controls OPTIONAL }
|
|||
|
|
|||
|
MessageID ::= INTEGER (0 .. maxInt)
|
|||
|
|
|||
|
maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) --
|
|||
|
|
|||
|
The ASN.1 type Controls is defined in Section 4.1.11.
|
|||
|
|
|||
|
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 messageID and the controls.
|
|||
|
|
|||
|
If the server receives an LDAPMessage 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 SHOULD return the Notice of Disconnection
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 6]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
described in Section 4.4.1, with the resultCode set to protocolError,
|
|||
|
and MUST immediately terminate the LDAP session as described in
|
|||
|
Section 5.3.
|
|||
|
|
|||
|
In other cases where the client or server cannot parse an LDAP PDU,
|
|||
|
it SHOULD abruptly terminate the LDAP session (Section 5.3) 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.
|
|||
|
|
|||
|
4.1.1.1. MessageID
|
|||
|
|
|||
|
All LDAPMessage envelopes encapsulating responses contain the
|
|||
|
messageID value of the corresponding request LDAPMessage.
|
|||
|
|
|||
|
The messageID of a request MUST have a non-zero value different from
|
|||
|
the messageID of any other request in progress in the same LDAP
|
|||
|
session. 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 messageID as an
|
|||
|
earlier request in the same LDAP session unless it can be determined
|
|||
|
that the server is no longer servicing the earlier request (e.g.,
|
|||
|
after the final response is received, or a subsequent Bind
|
|||
|
completes). Otherwise, the behavior is undefined. For this purpose,
|
|||
|
note that Abandon and successfully abandoned operations do not send
|
|||
|
responses.
|
|||
|
|
|||
|
4.1.2. String Types
|
|||
|
|
|||
|
The LDAPString is a notational convenience to indicate that, although
|
|||
|
strings of LDAPString type encode as ASN.1 OCTET STRING types, the
|
|||
|
[ISO10646] character set (a superset of [Unicode]) is used, encoded
|
|||
|
following the UTF-8 [RFC3629] algorithm. Note that Unicode
|
|||
|
characters U+0000 through U+007F are the same as ASCII 0 through 127,
|
|||
|
respectively, and have the same single octet UTF-8 encoding. Other
|
|||
|
Unicode characters have a multiple octet UTF-8 encoding.
|
|||
|
|
|||
|
LDAPString ::= OCTET STRING -- UTF-8 encoded,
|
|||
|
-- [ISO10646] 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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 7]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
encoded as an OCTET STRING, values are limited to the definition of
|
|||
|
<numericoid> given in Section 1.4 of [RFC4512].
|
|||
|
|
|||
|
LDAPOID ::= OCTET STRING -- Constrained to <numericoid>
|
|||
|
-- [RFC4512]
|
|||
|
|
|||
|
For example,
|
|||
|
|
|||
|
1.3.6.1.4.1.1466.1.2.3
|
|||
|
|
|||
|
4.1.3. Distinguished Name and Relative Distinguished Name
|
|||
|
|
|||
|
An LDAPDN is defined to be the representation of a Distinguished Name
|
|||
|
(DN) after encoding according to the specification in [RFC4514].
|
|||
|
|
|||
|
LDAPDN ::= LDAPString
|
|||
|
-- Constrained to <distinguishedName> [RFC4514]
|
|||
|
|
|||
|
A RelativeLDAPDN is defined to be the representation of a Relative
|
|||
|
Distinguished Name (RDN) after encoding according to the
|
|||
|
specification in [RFC4514].
|
|||
|
|
|||
|
RelativeLDAPDN ::= LDAPString
|
|||
|
-- Constrained to <name-component> [RFC4514]
|
|||
|
|
|||
|
4.1.4. Attribute Descriptions
|
|||
|
|
|||
|
The definition and encoding rules for attribute descriptions are
|
|||
|
defined in Section 2.5 of [RFC4512]. Briefly, an attribute
|
|||
|
description is an attribute type and zero or more options.
|
|||
|
|
|||
|
AttributeDescription ::= LDAPString
|
|||
|
-- Constrained to <attributedescription>
|
|||
|
-- [RFC4512]
|
|||
|
|
|||
|
4.1.5. Attribute Value
|
|||
|
|
|||
|
A field of type AttributeValue is an OCTET STRING containing an
|
|||
|
encoded attribute value. The attribute value is encoded according to
|
|||
|
the LDAP-specific encoding definition of its corresponding syntax.
|
|||
|
The LDAP-specific encoding definitions for different syntaxes and
|
|||
|
attribute types may be found in other documents and in particular
|
|||
|
[RFC4517].
|
|||
|
|
|||
|
AttributeValue ::= OCTET STRING
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 8]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Note that there is no defined limit on the size of this encoding;
|
|||
|
thus, protocol values may include multi-megabyte attribute values
|
|||
|
(e.g., photographs).
|
|||
|
|
|||
|
Attribute values may be defined that have arbitrary and non-printable
|
|||
|
syntax. Implementations MUST NOT display or attempt to decode an
|
|||
|
attribute value if its syntax is not known. The implementation may
|
|||
|
attempt to discover the subschema of the source entry and to retrieve
|
|||
|
the descriptions of 'attributeTypes' from it [RFC4512].
|
|||
|
|
|||
|
Clients MUST only send attribute values in a request that are valid
|
|||
|
according to the syntax defined for the attributes.
|
|||
|
|
|||
|
4.1.6. Attribute Value Assertion
|
|||
|
|
|||
|
The AttributeValueAssertion (AVA) type definition is similar to the
|
|||
|
one in the X.500 Directory standards. It contains an attribute
|
|||
|
description and a matching rule ([RFC4512], Section 4.1.3) assertion
|
|||
|
value suitable for that type. Elements of this type are typically
|
|||
|
used to assert that the value in assertionValue matches a value of an
|
|||
|
attribute.
|
|||
|
|
|||
|
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
|
|||
|
[RFC4517] for an example.
|
|||
|
|
|||
|
4.1.7. Attribute and PartialAttribute
|
|||
|
|
|||
|
Attributes and partial attributes consist of an attribute description
|
|||
|
and attribute values. A PartialAttribute allows zero values, while
|
|||
|
Attribute requires at least one value.
|
|||
|
|
|||
|
PartialAttribute ::= SEQUENCE {
|
|||
|
type AttributeDescription,
|
|||
|
vals SET OF value AttributeValue }
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 9]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Attribute ::= PartialAttribute(WITH COMPONENTS {
|
|||
|
...,
|
|||
|
vals (SIZE(1..MAX))})
|
|||
|
|
|||
|
No two of the attribute values may be equivalent as described by
|
|||
|
Section 2.2 of [RFC4512]. The set of attribute values is unordered.
|
|||
|
Implementations MUST NOT rely upon the ordering being repeatable.
|
|||
|
|
|||
|
4.1.8. Matching Rule Identifier
|
|||
|
|
|||
|
Matching rules are defined in Section 4.1.3 of [RFC4512]. A matching
|
|||
|
rule is identified in the protocol by the printable representation of
|
|||
|
either its <numericoid> or one of its short name descriptors
|
|||
|
[RFC4512], e.g., 'caseIgnoreMatch' or '2.5.13.2'.
|
|||
|
|
|||
|
MatchingRuleId ::= LDAPString
|
|||
|
|
|||
|
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 containing the elements found
|
|||
|
in LDAPResult to indicate the final status of the protocol operation
|
|||
|
request.
|
|||
|
|
|||
|
LDAPResult ::= SEQUENCE {
|
|||
|
resultCode ENUMERATED {
|
|||
|
success (0),
|
|||
|
operationsError (1),
|
|||
|
protocolError (2),
|
|||
|
timeLimitExceeded (3),
|
|||
|
sizeLimitExceeded (4),
|
|||
|
compareFalse (5),
|
|||
|
compareTrue (6),
|
|||
|
authMethodNotSupported (7),
|
|||
|
strongerAuthRequired (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),
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 10]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
-- 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),
|
|||
|
... },
|
|||
|
matchedDN LDAPDN,
|
|||
|
diagnosticMessage LDAPString,
|
|||
|
referral [3] Referral OPTIONAL }
|
|||
|
|
|||
|
The resultCode enumeration is extensible as defined in Section 3.8 of
|
|||
|
[RFC4520]. The meanings of the listed result codes are given in
|
|||
|
Appendix A. If a server detects multiple errors for an operation,
|
|||
|
only one result code is returned. The server should return the
|
|||
|
result code that best indicates the nature of the error encountered.
|
|||
|
Servers may return substituted result codes to prevent unauthorized
|
|||
|
disclosures.
|
|||
|
|
|||
|
The diagnosticMessage field of this construct may, at the server's
|
|||
|
option, be used to return a string containing a textual, human-
|
|||
|
readable diagnostic message (terminal control and page formatting
|
|||
|
characters should be avoided). As this diagnostic message is not
|
|||
|
standardized, implementations MUST NOT rely on the values returned.
|
|||
|
Diagnostic messages typically supplement the resultCode with
|
|||
|
additional information. If the server chooses not to return a
|
|||
|
textual diagnostic, the diagnosticMessage field MUST be empty.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 11]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
For certain result codes (typically, but not restricted to
|
|||
|
noSuchObject, aliasProblem, invalidDNSyntax, and
|
|||
|
aliasDereferencingProblem), the matchedDN field is set (subject to
|
|||
|
access controls) to the name of the last entry (object or alias) used
|
|||
|
in finding the target (or base) object. This will be a truncated
|
|||
|
form of the provided name or, if an alias was dereferenced while
|
|||
|
attempting to locate the entry, of the resulting name. Otherwise,
|
|||
|
the matchedDN field is empty.
|
|||
|
|
|||
|
4.1.10. Referral
|
|||
|
|
|||
|
The referral result code indicates that the contacted server cannot
|
|||
|
or will not perform the operation and that one or more other servers
|
|||
|
may be able to. Reasons for this include:
|
|||
|
|
|||
|
- The target entry of the request is not held locally, but the server
|
|||
|
has knowledge of its possible existence elsewhere.
|
|||
|
|
|||
|
- The operation is restricted on this server -- perhaps due to a
|
|||
|
read-only copy of an entry to be modified.
|
|||
|
|
|||
|
The referral field is present in an LDAPResult if the resultCode is
|
|||
|
set to referral, and it is 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 URI 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 other servers would need to be contacted to complete the
|
|||
|
operation.
|
|||
|
|
|||
|
Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI
|
|||
|
|
|||
|
URI ::= LDAPString -- limited to characters permitted in
|
|||
|
-- URIs
|
|||
|
|
|||
|
If the client wishes to progress the operation, it contacts one of
|
|||
|
the supported services found in the referral. If multiple URIs are
|
|||
|
present, the client assumes that any supported URI may be used to
|
|||
|
progress the operation.
|
|||
|
|
|||
|
Clients that follow referrals MUST ensure that they do not loop
|
|||
|
between servers. They MUST NOT repeatedly contact the same server
|
|||
|
for the same request with the same parameters. Some clients use a
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 12]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
counter that is incremented each time referral handling occurs for an
|
|||
|
operation, and these kinds of clients MUST be able to handle at least
|
|||
|
ten nested referrals while progressing the operation.
|
|||
|
|
|||
|
A URI for a server implementing LDAP and accessible via TCP/IP (v4 or
|
|||
|
v6) [RFC793][RFC791] is written as an LDAP URL according to
|
|||
|
[RFC4516].
|
|||
|
|
|||
|
Referral values that are LDAP URLs follow these rules:
|
|||
|
|
|||
|
- If an alias was dereferenced, the <dn> part of the LDAP URL MUST be
|
|||
|
present, with the new target object name.
|
|||
|
|
|||
|
- It is RECOMMENDED that the <dn> part be present to avoid ambiguity.
|
|||
|
|
|||
|
- If the <dn> part is present, the client uses this name in its next
|
|||
|
request to progress the operation, and if it is not present the
|
|||
|
client uses the same name as in the original request.
|
|||
|
|
|||
|
- Some servers (e.g., participating in distributed indexing) may
|
|||
|
provide a different filter in a URL of a referral for a Search
|
|||
|
operation.
|
|||
|
|
|||
|
- If the <filter> part of the LDAP URL is present, the client uses
|
|||
|
this filter in its next request to progress this Search, and if it
|
|||
|
is not present the client uses the same filter as it used for that
|
|||
|
Search.
|
|||
|
|
|||
|
- For Search, it is RECOMMENDED that the <scope> part be present to
|
|||
|
avoid ambiguity.
|
|||
|
|
|||
|
- If the <scope> part is missing, the scope of the original Search is
|
|||
|
used by the client to progress the operation.
|
|||
|
|
|||
|
- Other aspects of the new request may be the same as or different
|
|||
|
from the request that generated the referral.
|
|||
|
|
|||
|
Other kinds of URIs may be returned. The syntax and semantics of
|
|||
|
such URIs is left to future specifications. Clients may ignore URIs
|
|||
|
that they do not support.
|
|||
|
|
|||
|
UTF-8 encoded characters appearing in the string representation of a
|
|||
|
DN, search filter, or other fields of the referral value may not be
|
|||
|
legal for URIs (e.g., spaces) and MUST be escaped using the % method
|
|||
|
in [RFC3986].
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 13]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
4.1.11. Controls
|
|||
|
|
|||
|
Controls provide a mechanism whereby the semantics and arguments of
|
|||
|
existing LDAP operations may be extended. One or more controls may
|
|||
|
be attached to a single LDAP message. A control only affects the
|
|||
|
semantics of the message it is attached to.
|
|||
|
|
|||
|
Controls sent by clients are termed 'request controls', and those
|
|||
|
sent by servers are termed 'response controls'.
|
|||
|
|
|||
|
Controls ::= SEQUENCE OF control Control
|
|||
|
|
|||
|
Control ::= SEQUENCE {
|
|||
|
controlType LDAPOID,
|
|||
|
criticality BOOLEAN DEFAULT FALSE,
|
|||
|
controlValue OCTET STRING OPTIONAL }
|
|||
|
|
|||
|
The controlType field is the dotted-decimal representation of an
|
|||
|
OBJECT IDENTIFIER that uniquely identifies the control. This
|
|||
|
provides unambiguous naming of controls. Often, response control(s)
|
|||
|
solicited by a request control share controlType values with the
|
|||
|
request control.
|
|||
|
|
|||
|
The criticality field only has meaning in controls attached to
|
|||
|
request messages (except UnbindRequest). For controls attached to
|
|||
|
response messages and the UnbindRequest, the criticality field SHOULD
|
|||
|
be FALSE, and MUST be ignored by the receiving protocol peer. A
|
|||
|
value of TRUE indicates that it is unacceptable to perform the
|
|||
|
operation without applying the semantics of the control.
|
|||
|
Specifically, the criticality field is applied as follows:
|
|||
|
|
|||
|
- If the server does not recognize the control type, determines that
|
|||
|
it is not appropriate for the operation, or is otherwise unwilling
|
|||
|
to perform the operation with the control, and if the criticality
|
|||
|
field is TRUE, the server MUST NOT perform the operation, and for
|
|||
|
operations that have a response message, it MUST return with the
|
|||
|
resultCode set to unavailableCriticalExtension.
|
|||
|
|
|||
|
- If the server does not recognize the control type, determines that
|
|||
|
it is not appropriate for the operation, or is otherwise unwilling
|
|||
|
to perform the operation with the control, and if the criticality
|
|||
|
field is FALSE, the server MUST ignore the control.
|
|||
|
|
|||
|
- Regardless of criticality, if a control is applied to an
|
|||
|
operation, it is applied consistently and impartially to the
|
|||
|
entire operation.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 14]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
The controlValue may contain information associated with the
|
|||
|
controlType. Its format is defined by the specification of 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 that is associated
|
|||
|
with a control of its type. When a controlValue is defined in terms
|
|||
|
of ASN.1, and BER-encoded according to Section 5.1, it also follows
|
|||
|
the extensibility rules in Section 4.
|
|||
|
|
|||
|
Servers list the controlType of request controls they recognize in
|
|||
|
the 'supportedControl' attribute in the root DSE (Section 5.1 of
|
|||
|
[RFC4512]).
|
|||
|
|
|||
|
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. When a combination of
|
|||
|
controls is encountered whose semantics are invalid, not specified
|
|||
|
(or not known), the message is considered not well-formed; thus, the
|
|||
|
operation fails with protocolError. Controls with a criticality of
|
|||
|
FALSE may be ignored in order to arrive at a valid combination.
|
|||
|
Additionally, unless order-dependent semantics are given in a
|
|||
|
specification, the order of a combination of controls in the SEQUENCE
|
|||
|
is ignored. Where the order is to be ignored but cannot be ignored
|
|||
|
by the server, the message is considered not well-formed, and the
|
|||
|
operation fails with protocolError. Again, controls with a
|
|||
|
criticality of FALSE may be ignored in order to arrive at a valid
|
|||
|
combination.
|
|||
|
|
|||
|
This document does not specify any controls. Controls may be
|
|||
|
specified in other documents. Documents detailing control extensions
|
|||
|
are to provide for each control:
|
|||
|
|
|||
|
- the OBJECT IDENTIFIER assigned to the control,
|
|||
|
|
|||
|
- direction as to what value the sender should provide for the
|
|||
|
criticality field (note: the semantics of the criticality field are
|
|||
|
defined above should not be altered by the control's
|
|||
|
specification),
|
|||
|
|
|||
|
- whether the controlValue field is present, and if so, the format of
|
|||
|
its contents,
|
|||
|
|
|||
|
- the semantics of the control, and
|
|||
|
|
|||
|
- optionally, semantics regarding the combination of the control with
|
|||
|
other controls.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 15]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
4.2. Bind Operation
|
|||
|
|
|||
|
The function of the Bind operation is to allow authentication
|
|||
|
information to be exchanged between the client and server. The Bind
|
|||
|
operation should be thought of as the "authenticate" operation.
|
|||
|
Operational, authentication, and security-related semantics of this
|
|||
|
operation are given in [RFC4513].
|
|||
|
|
|||
|
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 }
|
|||
|
|
|||
|
Fields of the BindRequest are:
|
|||
|
|
|||
|
- version: A version number indicating the version of the protocol to
|
|||
|
be used at the LDAP message layer. This document describes version
|
|||
|
3 of the protocol. There is no version negotiation. The client
|
|||
|
sets this field to the version it desires. If the server does not
|
|||
|
support the specified version, it MUST respond with a BindResponse
|
|||
|
where the resultCode is set to protocolError.
|
|||
|
|
|||
|
- name: If not empty, 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 ([RFC4513],
|
|||
|
Section 5.1) or when using SASL [RFC4422] authentication
|
|||
|
([RFC4513], Section 5.2). Where the server attempts to locate the
|
|||
|
named object, it SHALL NOT perform alias dereferencing.
|
|||
|
|
|||
|
- authentication: Information used in authentication. This type is
|
|||
|
extensible as defined in Section 3.7 of [RFC4520]. Servers that do
|
|||
|
not support a choice supplied by a client return a BindResponse
|
|||
|
with the resultCode set to authMethodNotSupported.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 16]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Textual passwords (consisting of a character sequence with a known
|
|||
|
character set and encoding) transferred to the server using the
|
|||
|
simple AuthenticationChoice SHALL be transferred as UTF-8 [RFC3629]
|
|||
|
encoded [Unicode]. Prior to transfer, clients SHOULD prepare text
|
|||
|
passwords as "query" strings by applying the SASLprep [RFC4013]
|
|||
|
profile of the stringprep [RFC3454] algorithm. Passwords
|
|||
|
consisting of other data (such as random octets) MUST NOT be
|
|||
|
altered. The determination of whether a password is textual is a
|
|||
|
local client matter.
|
|||
|
|
|||
|
4.2.1. Processing of the Bind Request
|
|||
|
|
|||
|
Before processing a BindRequest, all uncompleted operations MUST
|
|||
|
either complete or be abandoned. The server may either wait for the
|
|||
|
uncompleted operations to complete, or abandon them. 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.
|
|||
|
|
|||
|
After sending a BindRequest, clients MUST NOT send further LDAP PDUs
|
|||
|
until receiving the BindResponse. Similarly, servers SHOULD NOT
|
|||
|
process or respond to requests received while processing a
|
|||
|
BindRequest.
|
|||
|
|
|||
|
If the client did not bind before sending a request and receives an
|
|||
|
operationsError to that request, it may then send a BindRequest. If
|
|||
|
this also fails or the client chooses not to bind on the existing
|
|||
|
LDAP session, it may terminate the LDAP session, re-establish it, and
|
|||
|
begin again by first sending a BindRequest. This will aid in
|
|||
|
interoperating with servers implementing other versions of LDAP.
|
|||
|
|
|||
|
Clients may send multiple Bind requests to change the authentication
|
|||
|
and/or security associations or to complete a multi-stage Bind
|
|||
|
process. Authentication from earlier binds is subsequently ignored.
|
|||
|
|
|||
|
For some SASL authentication mechanisms, it may be necessary for the
|
|||
|
client to invoke the BindRequest multiple times ([RFC4513], Section
|
|||
|
5.2). 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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 17]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
If the client sends a BindRequest with the sasl mechanism field as an
|
|||
|
empty string, the server MUST return a BindResponse with the
|
|||
|
resultCode set to authMethodNotSupported. This will allow the client
|
|||
|
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. Otherwise, an appropriate result code is
|
|||
|
set in the BindResponse. For BindResponse, the protocolError result
|
|||
|
code may be used to indicate that the version number supplied by the
|
|||
|
client is unsupported.
|
|||
|
|
|||
|
If the client receives a BindResponse where the resultCode is set to
|
|||
|
protocolError, it is to assume that the server does not support this
|
|||
|
version of LDAP. While the client may be able proceed with another
|
|||
|
version of this protocol (which may or may not require closing and
|
|||
|
re-establishing the transport connection), how to proceed with
|
|||
|
another version of this protocol is beyond the scope of this
|
|||
|
document. Clients that are unable or unwilling to proceed SHOULD
|
|||
|
terminate the LDAP session.
|
|||
|
|
|||
|
The serverSaslCreds field is 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 SHALL NOT be included in the BindResponse.
|
|||
|
|
|||
|
4.3. Unbind Operation
|
|||
|
|
|||
|
The function of the Unbind operation is to terminate an LDAP session.
|
|||
|
The Unbind operation is not the antithesis of the Bind operation as
|
|||
|
the name implies. The naming of these operations are historical.
|
|||
|
The Unbind operation should be thought of as the "quit" operation.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 18]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
The Unbind operation is defined as follows:
|
|||
|
|
|||
|
UnbindRequest ::= [APPLICATION 2] NULL
|
|||
|
|
|||
|
The client, upon transmission of the UnbindRequest, and the server,
|
|||
|
upon receipt of the UnbindRequest, are to gracefully terminate the
|
|||
|
LDAP session as described in Section 5.3. Uncompleted operations are
|
|||
|
handled as specified in Section 3.1.
|
|||
|
|
|||
|
4.4. Unsolicited Notification
|
|||
|
|
|||
|
An unsolicited notification is an LDAPMessage sent from the server to
|
|||
|
the client that 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 LDAP session 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 zero and protocolOp is set to the extendedResp
|
|||
|
choice using the ExtendedResponse type (See Section 4.12). The
|
|||
|
responseName field of the ExtendedResponse always contains an LDAPOID
|
|||
|
that is unique for this notification.
|
|||
|
|
|||
|
One unsolicited notification (Notice of Disconnection) is defined in
|
|||
|
this document. The specification of an unsolicited notification
|
|||
|
consists of:
|
|||
|
|
|||
|
- the OBJECT IDENTIFIER assigned to the notification (to be specified
|
|||
|
in the responseName,
|
|||
|
|
|||
|
- the format of the contents of the responseValue (if any),
|
|||
|
|
|||
|
- the circumstances which will cause the notification to be sent, and
|
|||
|
|
|||
|
- the semantics of the message.
|
|||
|
|
|||
|
4.4.1. Notice of Disconnection
|
|||
|
|
|||
|
This notification may be used by the server to advise the client that
|
|||
|
the server is about to terminate the LDAP session on its own
|
|||
|
initiative. This notification is intended to assist clients in
|
|||
|
distinguishing between an exceptional server condition and a
|
|||
|
transient network failure. Note that this notification is not a
|
|||
|
response to an Unbind requested by the client. Uncompleted
|
|||
|
operations are handled as specified in Section 3.1.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 19]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
The responseName is 1.3.6.1.4.1.1466.20036, the responseValue field
|
|||
|
is absent, and the resultCode is used to indicate the reason for the
|
|||
|
disconnection. When the strongerAuthRequired resultCode is returned
|
|||
|
with this message, it indicates that the server has detected that an
|
|||
|
established security association between the client and server has
|
|||
|
unexpectedly failed or been compromised.
|
|||
|
|
|||
|
Upon transmission of the Notice of Disconnection, the server
|
|||
|
gracefully terminates the LDAP session as described in Section 5.3.
|
|||
|
|
|||
|
4.5. Search Operation
|
|||
|
|
|||
|
The Search operation is used to request a server to return, subject
|
|||
|
to access controls and other restrictions, a set of entries matching
|
|||
|
a complex search criterion. This can be used to read attributes from
|
|||
|
a single entry, from entries immediately subordinate to a particular
|
|||
|
entry, or from 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 AttributeSelection }
|
|||
|
|
|||
|
AttributeSelection ::= SEQUENCE OF selector LDAPString
|
|||
|
-- The LDAPString is constrained to
|
|||
|
-- <attributeSelector> in Section 4.5.1.8
|
|||
|
|
|||
|
Filter ::= CHOICE {
|
|||
|
and [0] SET SIZE (1..MAX) OF filter Filter,
|
|||
|
or [1] SET SIZE (1..MAX) OF filter Filter,
|
|||
|
not [2] Filter,
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 20]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
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,
|
|||
|
substrings SEQUENCE SIZE (1..MAX) OF substring CHOICE {
|
|||
|
initial [0] AssertionValue, -- can occur at most once
|
|||
|
any [1] AssertionValue,
|
|||
|
final [2] AssertionValue } -- can occur at most once
|
|||
|
}
|
|||
|
|
|||
|
MatchingRuleAssertion ::= SEQUENCE {
|
|||
|
matchingRule [1] MatchingRuleId OPTIONAL,
|
|||
|
type [2] AttributeDescription OPTIONAL,
|
|||
|
matchValue [3] AssertionValue,
|
|||
|
dnAttributes [4] BOOLEAN DEFAULT FALSE }
|
|||
|
|
|||
|
Note that an X.500 "list"-like operation can be emulated by the
|
|||
|
client requesting a singleLevel 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 baseObject Search
|
|||
|
operation with the same filter. A server that 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.1.1. SearchRequest.baseObject
|
|||
|
|
|||
|
The name of the base object entry (or possibly the root) relative to
|
|||
|
which the Search is to be performed.
|
|||
|
|
|||
|
4.5.1.2. SearchRequest.scope
|
|||
|
|
|||
|
Specifies the scope of the Search to be performed. The semantics (as
|
|||
|
described in [X.511]) of the defined values of this field are:
|
|||
|
|
|||
|
baseObject: The scope is constrained to the entry named by
|
|||
|
baseObject.
|
|||
|
|
|||
|
singleLevel: The scope is constrained to the immediate
|
|||
|
subordinates of the entry named by baseObject.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 21]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
wholeSubtree: The scope is constrained to the entry named by
|
|||
|
baseObject and to all its subordinates.
|
|||
|
|
|||
|
4.5.1.3. SearchRequest.derefAliases
|
|||
|
|
|||
|
An indicator as to whether or not alias entries (as defined in
|
|||
|
[RFC4512]) are to be dereferenced during stages of the Search
|
|||
|
operation.
|
|||
|
|
|||
|
The act of dereferencing an alias includes recursively dereferencing
|
|||
|
aliases that refer to aliases.
|
|||
|
|
|||
|
Servers MUST detect looping while dereferencing aliases in order to
|
|||
|
prevent denial-of-service attacks of this nature.
|
|||
|
|
|||
|
The semantics of the defined values of this field are:
|
|||
|
|
|||
|
neverDerefAliases: Do not dereference aliases in searching or in
|
|||
|
locating the base object of the Search.
|
|||
|
|
|||
|
derefInSearching: While searching subordinates of the base object,
|
|||
|
dereference any alias within the search scope. Dereferenced
|
|||
|
objects become the vertices of further search scopes where the
|
|||
|
Search operation is also applied. If the search scope is
|
|||
|
wholeSubtree, the Search continues in the subtree(s) of any
|
|||
|
dereferenced object. If the search scope is singleLevel, the
|
|||
|
search is applied to any dereferenced objects and is not applied
|
|||
|
to their subordinates. Servers SHOULD eliminate duplicate entries
|
|||
|
that arise due to alias dereferencing while searching.
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
4.5.1.4. SearchRequest.sizeLimit
|
|||
|
|
|||
|
A size limit that restricts the maximum number of entries to be
|
|||
|
returned as a result of the Search. A value of zero in this field
|
|||
|
indicates that no client-requested size limit restrictions are in
|
|||
|
effect for the Search. Servers may also enforce a maximum number of
|
|||
|
entries to return.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 22]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
4.5.1.5. SearchRequest.timeLimit
|
|||
|
|
|||
|
A time limit that restricts the maximum time (in seconds) allowed for
|
|||
|
a Search. A value of zero in this field indicates that no client-
|
|||
|
requested time limit restrictions are in effect for the Search.
|
|||
|
Servers may also enforce a maximum time limit for the Search.
|
|||
|
|
|||
|
4.5.1.6. SearchRequest.typesOnly
|
|||
|
|
|||
|
An indicator as to whether Search results are to contain both
|
|||
|
attribute descriptions and values, or just attribute descriptions.
|
|||
|
Setting this field to TRUE causes only attribute descriptions (and
|
|||
|
not values) to be returned. Setting this field to FALSE causes both
|
|||
|
attribute descriptions and values to be returned.
|
|||
|
|
|||
|
4.5.1.7. SearchRequest.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 were explicit.)
|
|||
|
|
|||
|
A server MUST evaluate filters according to the three-valued logic of
|
|||
|
[X.511] (1993), Clause 7.8.1. In summary, a filter is evaluated to
|
|||
|
"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
|
|||
|
Undefined otherwise. A filter of the "or" choice is FALSE if all 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.
|
|||
|
|
|||
|
A filter item evaluates to Undefined when the server would not be
|
|||
|
able to determine whether the assertion value matches an entry.
|
|||
|
Examples include:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 23]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
- An attribute description in an equalityMatch, substrings,
|
|||
|
greaterOrEqual, lessOrEqual, approxMatch, or extensibleMatch filter
|
|||
|
is not recognized by the server.
|
|||
|
|
|||
|
- The attribute type does not define the appropriate matching rule.
|
|||
|
|
|||
|
- A MatchingRuleId in the extensibleMatch is not recognized by the
|
|||
|
server or is not valid for the attribute type.
|
|||
|
|
|||
|
- The type of filtering requested is not implemented.
|
|||
|
|
|||
|
- The assertion value is invalid.
|
|||
|
|
|||
|
For example, if a server did not recognize the attribute type
|
|||
|
shoeSize, the filters (shoeSize=*), (shoeSize=12), (shoeSize>=12),
|
|||
|
and (shoeSize<=12) would each evaluate to Undefined.
|
|||
|
|
|||
|
Servers MUST NOT return errors if attribute descriptions or matching
|
|||
|
rule ids are not recognized, assertion values are invalid, or the
|
|||
|
assertion syntax is not supported. More details of filter processing
|
|||
|
are given in Clause 7.8 of [X.511].
|
|||
|
|
|||
|
4.5.1.7.1. SearchRequest.filter.equalityMatch
|
|||
|
|
|||
|
The matching rule for an equalityMatch filter is defined by the
|
|||
|
EQUALITY matching rule for the attribute type or subtype. The filter
|
|||
|
is TRUE when the EQUALITY rule returns TRUE as applied to the
|
|||
|
attribute or subtype and the asserted value.
|
|||
|
|
|||
|
4.5.1.7.2. SearchRequest.filter.substrings
|
|||
|
|
|||
|
There SHALL be at most one 'initial' and at most one 'final' in the
|
|||
|
'substrings' of a SubstringFilter. If 'initial' is present, it SHALL
|
|||
|
be the first element of 'substrings'. If 'final' is present, it
|
|||
|
SHALL be the last element of 'substrings'.
|
|||
|
|
|||
|
The matching rule for an AssertionValue in a substrings filter item
|
|||
|
is defined by the SUBSTR matching rule for the attribute type or
|
|||
|
subtype. The filter is TRUE when the SUBSTR rule returns TRUE as
|
|||
|
applied to the attribute or subtype and the asserted value.
|
|||
|
|
|||
|
Note that the AssertionValue in a substrings filter item conforms to
|
|||
|
the assertion syntax of the EQUALITY matching rule for the attribute
|
|||
|
type rather than to the assertion syntax of the SUBSTR matching rule
|
|||
|
for the attribute type. Conceptually, the entire SubstringFilter is
|
|||
|
converted into an assertion value of the substrings matching rule
|
|||
|
prior to applying the rule.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 24]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
4.5.1.7.3. SearchRequest.filter.greaterOrEqual
|
|||
|
|
|||
|
The matching rule for a greaterOrEqual filter is defined by the
|
|||
|
ORDERING matching rule for the attribute type or subtype. The filter
|
|||
|
is TRUE when the ORDERING rule returns FALSE as applied to the
|
|||
|
attribute or subtype and the asserted value.
|
|||
|
|
|||
|
4.5.1.7.4. SearchRequest.filter.lessOrEqual
|
|||
|
|
|||
|
The matching rules for a lessOrEqual filter are defined by the
|
|||
|
ORDERING and EQUALITY matching rules for the attribute type or
|
|||
|
subtype. The filter is TRUE when either the ORDERING or EQUALITY
|
|||
|
rule returns TRUE as applied to the attribute or subtype and the
|
|||
|
asserted value.
|
|||
|
|
|||
|
4.5.1.7.5. SearchRequest.filter.present
|
|||
|
|
|||
|
A present filter is TRUE when there is an attribute or subtype of the
|
|||
|
specified attribute description present in an entry, FALSE when no
|
|||
|
attribute or subtype of the specified attribute description is
|
|||
|
present in an entry, and Undefined otherwise.
|
|||
|
|
|||
|
4.5.1.7.6. SearchRequest.filter.approxMatch
|
|||
|
|
|||
|
An approxMatch filter is TRUE when there is a value of the attribute
|
|||
|
type or subtype for which some locally-defined approximate matching
|
|||
|
algorithm (e.g., spelling variations, phonetic match, etc.) returns
|
|||
|
TRUE. If a value matches for equality, it also satisfies an
|
|||
|
approximate match. If approximate matching is not supported for the
|
|||
|
attribute, this filter item should be treated as an equalityMatch.
|
|||
|
|
|||
|
4.5.1.7.7. SearchRequest.filter.extensibleMatch
|
|||
|
|
|||
|
The fields of the extensibleMatch filter item are evaluated as
|
|||
|
follows:
|
|||
|
|
|||
|
- If the matchingRule field is absent, the type field MUST be
|
|||
|
present, and an equality match is performed for that type.
|
|||
|
|
|||
|
- If the type field is absent and the matchingRule is present, the
|
|||
|
matchValue is compared against all attributes in an entry that
|
|||
|
support that matchingRule.
|
|||
|
|
|||
|
- If the type field is present and the matchingRule is present, the
|
|||
|
matchValue is compared against the specified attribute type and its
|
|||
|
subtypes.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 25]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
- If the dnAttributes field is set to TRUE, the match is additionally
|
|||
|
applied against all the AttributeValueAssertions in an entry's
|
|||
|
distinguished name, and it evaluates to TRUE if there is at least
|
|||
|
one attribute or subtype in the distinguished name for which the
|
|||
|
filter item evaluates to TRUE. The dnAttributes field is present
|
|||
|
to alleviate the need for multiple versions of generic matching
|
|||
|
rules (such as word matching), where one applies to entries and
|
|||
|
another applies to entries and DN attributes as well.
|
|||
|
|
|||
|
The matchingRule used for evaluation determines the syntax for the
|
|||
|
assertion value. Once the matchingRule and attribute(s) have been
|
|||
|
determined, the filter item evaluates to TRUE if it matches at least
|
|||
|
one attribute type or subtype in the entry, FALSE if it does not
|
|||
|
match any attribute type or subtype in the entry, and Undefined if
|
|||
|
the matchingRule is not recognized, the matchingRule is unsuitable
|
|||
|
for use with the specified type, or the assertionValue is invalid.
|
|||
|
|
|||
|
4.5.1.8. SearchRequest.attributes
|
|||
|
|
|||
|
A selection list of the attributes to be returned from each entry
|
|||
|
that matches the search filter. Attributes that are subtypes of
|
|||
|
listed attributes are implicitly included. LDAPString values of this
|
|||
|
field are constrained to the following Augmented Backus-Naur Form
|
|||
|
(ABNF) [RFC4234]:
|
|||
|
|
|||
|
attributeSelector = attributedescription / selectorspecial
|
|||
|
|
|||
|
selectorspecial = noattrs / alluserattrs
|
|||
|
|
|||
|
noattrs = %x31.2E.31 ; "1.1"
|
|||
|
|
|||
|
alluserattrs = %x2A ; asterisk ("*")
|
|||
|
|
|||
|
The <attributedescription> production is defined in Section 2.5 of
|
|||
|
[RFC4512].
|
|||
|
|
|||
|
There are three special cases that may appear in the attributes
|
|||
|
selection list:
|
|||
|
|
|||
|
1. An empty list with no attributes requests the return of all
|
|||
|
user attributes.
|
|||
|
|
|||
|
2. A list containing "*" (with zero or more attribute
|
|||
|
descriptions) requests the return of all user attributes in
|
|||
|
addition to other listed (operational) attributes.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 26]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
3. A list containing only the OID "1.1" indicates that no
|
|||
|
attributes are to be returned. If "1.1" is provided with other
|
|||
|
attributeSelector values, the "1.1" attributeSelector is
|
|||
|
ignored. This OID was chosen because it does not (and can not)
|
|||
|
correspond to any attribute in use.
|
|||
|
|
|||
|
Client implementors should note that even if all user attributes are
|
|||
|
requested, some attributes and/or attribute values 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. Operational attributes are described in [RFC4512].
|
|||
|
|
|||
|
Attributes are returned at most once in an entry. If an attribute
|
|||
|
description is named more than once in the list, the subsequent names
|
|||
|
are ignored. If an attribute description in the list is not
|
|||
|
recognized, it is ignored by the server.
|
|||
|
|
|||
|
4.5.2. Search Result
|
|||
|
|
|||
|
The results of the Search operation are returned as zero or more
|
|||
|
SearchResultEntry and/or SearchResultReference messages, followed by
|
|||
|
a single SearchResultDone message.
|
|||
|
|
|||
|
SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
|
|||
|
objectName LDAPDN,
|
|||
|
attributes PartialAttributeList }
|
|||
|
|
|||
|
PartialAttributeList ::= SEQUENCE OF
|
|||
|
partialAttribute PartialAttribute
|
|||
|
|
|||
|
SearchResultReference ::= [APPLICATION 19] SEQUENCE
|
|||
|
SIZE (1..MAX) OF uri URI
|
|||
|
|
|||
|
SearchResultDone ::= [APPLICATION 5] LDAPResult
|
|||
|
|
|||
|
Each SearchResultEntry represents an entry found during the Search.
|
|||
|
Each SearchResultReference represents an area not yet explored during
|
|||
|
the Search. The SearchResultEntry and SearchResultReference messages
|
|||
|
may come in any order. Following all the SearchResultReference and
|
|||
|
SearchResultEntry responses, the server returns a SearchResultDone
|
|||
|
response, which contains an indication of success or details 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, subject to access control and other administrative
|
|||
|
policy. Note that the PartialAttributeList may hold zero elements.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 27]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
This may happen when none of the attributes of an entry were
|
|||
|
requested or could be returned. Note also that the partialAttribute
|
|||
|
vals set may hold zero elements. This may happen when typesOnly is
|
|||
|
requested, access controls prevent the return of values, or other
|
|||
|
reasons.
|
|||
|
|
|||
|
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 this is permitted by access
|
|||
|
control.
|
|||
|
|
|||
|
If the server's schema defines short names [RFC4512] for an attribute
|
|||
|
type, then the server SHOULD use one of those names in attribute
|
|||
|
descriptions for that attribute type (in preference to using the
|
|||
|
<numericoid> [RFC4512] format of the attribute type's object
|
|||
|
identifier). The server SHOULD NOT use the short name if that name
|
|||
|
is known by the server to be ambiguous, or if it is otherwise likely
|
|||
|
to cause interoperability problems.
|
|||
|
|
|||
|
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 or unwilling to search one or more non-
|
|||
|
local entries, the server may return one or more
|
|||
|
SearchResultReference messages, each containing a reference to
|
|||
|
another set of servers for continuing the operation. A server MUST
|
|||
|
NOT return any SearchResultReference messages if it has not located
|
|||
|
the baseObject and thus has not searched any entries. In this case,
|
|||
|
it would return a SearchResultDone containing either a referral or
|
|||
|
noSuchObject result code (depending on the server's knowledge of the
|
|||
|
entry named in the baseObject).
|
|||
|
|
|||
|
If a server holds a copy or partial copy of the subordinate naming
|
|||
|
context (Section 5 of [RFC4512]), 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.
|
|||
|
|
|||
|
If the client wishes to progress the Search, it issues a new Search
|
|||
|
operation for each SearchResultReference that is returned. If
|
|||
|
multiple URIs are present, the client assumes that any supported URI
|
|||
|
may be used to progress the operation.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 28]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Clients that follow 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 parameters. Some
|
|||
|
clients use a counter that is incremented each time search result
|
|||
|
reference handling occurs for an operation, and these kinds of
|
|||
|
clients MUST be able to handle at least ten nested referrals while
|
|||
|
progressing the operation.
|
|||
|
|
|||
|
Note that the Abandon operation described in Section 4.11 applies
|
|||
|
only to a particular operation sent at the LDAP message layer between
|
|||
|
a client and server. The client must individually abandon subsequent
|
|||
|
Search operations it wishes to.
|
|||
|
|
|||
|
A URI for a server implementing LDAP and accessible via TCP/IP (v4 or
|
|||
|
v6) [RFC793][RFC791] is written as an LDAP URL according to
|
|||
|
[RFC4516].
|
|||
|
|
|||
|
SearchResultReference values that are LDAP URLs follow these rules:
|
|||
|
|
|||
|
- The <dn> part of the LDAP URL MUST be present, with the new target
|
|||
|
object name. The client uses this name when following the
|
|||
|
reference.
|
|||
|
|
|||
|
- Some servers (e.g., participating in distributed indexing) may
|
|||
|
provide a different filter in the LDAP URL.
|
|||
|
|
|||
|
- If the <filter> part of the LDAP URL is present, the client uses
|
|||
|
this filter in its next request to progress this Search, and if it
|
|||
|
is not present the client uses the same filter as it used for that
|
|||
|
Search.
|
|||
|
|
|||
|
- If the originating search scope was singleLevel, the <scope> part
|
|||
|
of the LDAP URL will be "base".
|
|||
|
|
|||
|
- It is RECOMMENDED that the <scope> part be present to avoid
|
|||
|
ambiguity. In the absence of a <scope> part, the scope of the
|
|||
|
original Search request is assumed.
|
|||
|
|
|||
|
- Other aspects of the new Search request may be the same as or
|
|||
|
different from the Search request that generated the
|
|||
|
SearchResultReference.
|
|||
|
|
|||
|
- The name of an unexplored subtree in a SearchResultReference need
|
|||
|
not be subordinate to the base object.
|
|||
|
|
|||
|
Other kinds of URIs may be returned. The syntax and semantics of
|
|||
|
such URIs is left to future specifications. Clients may ignore URIs
|
|||
|
that they do not support.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 29]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
UTF-8-encoded characters appearing in the string representation of a
|
|||
|
DN, search filter, or other fields of the referral value may not be
|
|||
|
legal for URIs (e.g., spaces) and MUST be escaped using the % method
|
|||
|
in [RFC3986].
|
|||
|
|
|||
|
4.5.3.1. Examples
|
|||
|
|
|||
|
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 both LDAP servers (hostb) and (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 wholeSubtree 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??sub
|
|||
|
ldap://hostc/OU=People,DC=Example,DC=NET??sub }
|
|||
|
SearchResultReference {
|
|||
|
ldap://hostd/OU=Roles,DC=Example,DC=NET??sub }
|
|||
|
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 request 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??sub }
|
|||
|
SearchResultReference {
|
|||
|
ldap://hostf/OU=Consultants,OU=People,DC=Example,DC=NET??sub }
|
|||
|
SearchResultDone (success)
|
|||
|
|
|||
|
Similarly, if a singleLevel Search of <DC=Example,DC=NET> is
|
|||
|
requested to the contacted server, it may return the following:
|
|||
|
|
|||
|
SearchResultEntry for CN=Manager,DC=Example,DC=NET
|
|||
|
SearchResultReference {
|
|||
|
ldap://hostb/OU=People,DC=Example,DC=NET??base
|
|||
|
ldap://hostc/OU=People,DC=Example,DC=NET??base }
|
|||
|
SearchResultReference {
|
|||
|
ldap://hostd/OU=Roles,DC=Example,DC=NET??base }
|
|||
|
SearchResultDone (success)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 30]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
If the contacted server does not hold the base object for the Search,
|
|||
|
but has knowledge of its possible location, then it may return a
|
|||
|
referral to the client. In this case, if the client requests a
|
|||
|
subtree Search of <DC=Example,DC=ORG> to hosta, the server returns 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,
|
|||
|
changes SEQUENCE OF change SEQUENCE {
|
|||
|
operation ENUMERATED {
|
|||
|
add (0),
|
|||
|
delete (1),
|
|||
|
replace (2),
|
|||
|
... },
|
|||
|
modification PartialAttribute } }
|
|||
|
|
|||
|
Fields of the Modify Request are:
|
|||
|
|
|||
|
- object: The value of this field contains the name of the entry to
|
|||
|
be modified. The server SHALL NOT perform any alias dereferencing
|
|||
|
in determining the object to be modified.
|
|||
|
|
|||
|
- changes: A list of modifications to be performed on the entry. The
|
|||
|
entire list of modifications MUST be performed in the order they
|
|||
|
are listed as a single atomic operation. While individual
|
|||
|
modifications may violate certain aspects of the directory schema
|
|||
|
(such as the object class definition and Directory Information Tree
|
|||
|
(DIT) content rule), the resulting entry after the entire list of
|
|||
|
modifications is performed MUST conform to the requirements of the
|
|||
|
directory model and controlling schema [RFC4512].
|
|||
|
|
|||
|
- operation: Used to specify the type of modification being
|
|||
|
performed. Each operation type acts on the following
|
|||
|
modification. The values of this field have the following
|
|||
|
semantics, respectively:
|
|||
|
|
|||
|
add: add values listed to the modification attribute,
|
|||
|
creating the attribute if necessary.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 31]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
delete: delete values listed from the modification attribute.
|
|||
|
If no values are listed, or if all current values of the
|
|||
|
attribute are listed, the entire attribute is removed.
|
|||
|
|
|||
|
replace: replace all existing values of the modification
|
|||
|
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 it is ignored
|
|||
|
if the attribute does not exist.
|
|||
|
|
|||
|
- modification: A PartialAttribute (which may have an empty SET
|
|||
|
of vals) used to hold the attribute type or attribute type and
|
|||
|
values being modified.
|
|||
|
|
|||
|
Upon receipt of a Modify Request, the server attempts to perform the
|
|||
|
necessary modifications to the DIT and returns the result in a Modify
|
|||
|
Response, defined as follows:
|
|||
|
|
|||
|
ModifyResponse ::= [APPLICATION 7] LDAPResult
|
|||
|
|
|||
|
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. 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. Whether or not the modification was applied cannot be
|
|||
|
determined by the client if the Modify Response was not received
|
|||
|
(e.g., the LDAP session was terminated or the Modify operation was
|
|||
|
abandoned).
|
|||
|
|
|||
|
Servers MUST ensure that entries conform to user and system schema
|
|||
|
rules or other data model constraints. The Modify operation cannot
|
|||
|
be used to remove from an entry any of its distinguished values,
|
|||
|
i.e., those values which form the entry's relative distinguished
|
|||
|
name. An attempt to do so will result in the server returning the
|
|||
|
notAllowedOnRDN result code. The Modify DN operation described in
|
|||
|
Section 4.9 is used to rename an entry.
|
|||
|
|
|||
|
For attribute types that specify no equality matching, the rules in
|
|||
|
Section 2.5.1 of [RFC4512] are followed.
|
|||
|
|
|||
|
Note that due to the simplifications made in LDAP, there is not a
|
|||
|
direct mapping of the changes in an LDAP ModifyRequest onto the
|
|||
|
changes of a DAP ModifyEntry operation, and different implementations
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 32]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
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 attribute Attribute
|
|||
|
|
|||
|
Fields of the Add Request are:
|
|||
|
|
|||
|
- entry: the name of the entry to be added. The server SHALL NOT
|
|||
|
dereference any aliases in locating the entry to be added.
|
|||
|
|
|||
|
- attributes: the list of attributes that, along with those from the
|
|||
|
RDN, make up the content of the entry being added. Clients MAY or
|
|||
|
MAY NOT include the RDN attribute(s) in this list. Clients MUST
|
|||
|
NOT supply NO-USER-MODIFICATION attributes such as the
|
|||
|
createTimestamp or creatorsName attributes, since the server
|
|||
|
maintains these automatically.
|
|||
|
|
|||
|
Servers MUST ensure that entries conform to user and system schema
|
|||
|
rules or other data model constraints. For attribute types that
|
|||
|
specify no equality matching, the rules in Section 2.5.1 of [RFC4512]
|
|||
|
are followed (this applies to the naming attribute in addition to any
|
|||
|
multi-valued attributes being added).
|
|||
|
|
|||
|
The entry named in the entry field of the AddRequest MUST NOT exist
|
|||
|
for the AddRequest to succeed. The immediate superior (parent) of an
|
|||
|
object or alias entry 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 noSuchObject result code with
|
|||
|
the matchedDN field containing <DC=NET>.
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 33]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
A response of success indicates that the new entry has been added to
|
|||
|
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 name of the entry to be deleted.
|
|||
|
The server SHALL NOT dereference aliases while resolving the name of
|
|||
|
the target entry to be removed.
|
|||
|
|
|||
|
Only leaf entries (those with no subordinate entries) can be deleted
|
|||
|
with this operation.
|
|||
|
|
|||
|
Upon receipt of a Delete Request, a server will attempt to perform
|
|||
|
the entry removal requested and return the result in the Delete
|
|||
|
Response defined as follows:
|
|||
|
|
|||
|
DelResponse ::= [APPLICATION 11] LDAPResult
|
|||
|
|
|||
|
4.9. Modify DN Operation
|
|||
|
|
|||
|
The Modify DN operation allows a client to change the Relative
|
|||
|
Distinguished Name (RDN) 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 }
|
|||
|
|
|||
|
Fields of the Modify DN Request are:
|
|||
|
|
|||
|
- entry: the name of the entry to be changed. This entry may or may
|
|||
|
not have subordinate entries.
|
|||
|
|
|||
|
- newrdn: the new RDN of the entry. The value of the old RDN is
|
|||
|
supplied when moving the entry to a new superior without changing
|
|||
|
its RDN. Attribute values of the new RDN not matching any
|
|||
|
attribute value of the entry are added to the entry, and an
|
|||
|
appropriate error is returned if this fails.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 34]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
- deleteoldrdn: a boolean field 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 name of an existing object
|
|||
|
entry that becomes the immediate superior (parent) of the
|
|||
|
existing entry.
|
|||
|
|
|||
|
The server SHALL NOT dereference any aliases in locating the objects
|
|||
|
named in entry or newSuperior.
|
|||
|
|
|||
|
Upon receipt of a ModifyDNRequest, a server will attempt to perform
|
|||
|
the name change and return the result in the Modify DN Response,
|
|||
|
defined as follows:
|
|||
|
|
|||
|
ModifyDNResponse ::= [APPLICATION 13] LDAPResult
|
|||
|
|
|||
|
For example, if the entry named in the entry field was <cn=John
|
|||
|
Smith,c=US>, the newrdn field was <cn=John Cougar Smith>, and the
|
|||
|
newSuperior field was absent, then this operation would attempt to
|
|||
|
rename the entry as <cn=John Cougar Smith,c=US>. If there was
|
|||
|
already an entry with that name, the operation would fail with the
|
|||
|
entryAlreadyExists result code.
|
|||
|
|
|||
|
Servers MUST ensure that entries conform to user and system schema
|
|||
|
rules or other data model constraints. For attribute types that
|
|||
|
specify no equality matching, the rules in Section 2.5.1 of [RFC4512]
|
|||
|
are followed (this pertains to newrdn and deleteoldrdn).
|
|||
|
|
|||
|
The object named in newSuperior 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 noSuchObject result code with
|
|||
|
the matchedDN field containing <DC=NET>.
|
|||
|
|
|||
|
If the deleteoldrdn field is TRUE, the attribute values forming the
|
|||
|
old RDN (but not the new RDN) are deleted from the entry. If the
|
|||
|
deleteoldrdn field is FALSE, the attribute values forming the old RDN
|
|||
|
will be retained as non-distinguished attribute values of the entry.
|
|||
|
|
|||
|
Note that X.500 restricts the ModifyDN operation to affect only
|
|||
|
entries that are contained within a single server. If the LDAP
|
|||
|
server is mapped onto DAP, then this restriction will apply, and the
|
|||
|
affectsMultipleDSAs result code 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 or
|
|||
|
between naming contexts.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 35]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
4.10. Compare Operation
|
|||
|
|
|||
|
The Compare operation allows a client to compare an assertion value
|
|||
|
with the values of a particular attribute in a particular entry in
|
|||
|
the Directory. The Compare Request is defined as follows:
|
|||
|
|
|||
|
CompareRequest ::= [APPLICATION 14] SEQUENCE {
|
|||
|
entry LDAPDN,
|
|||
|
ava AttributeValueAssertion }
|
|||
|
|
|||
|
Fields of the Compare Request are:
|
|||
|
|
|||
|
- entry: the name of the entry to be compared. The server SHALL NOT
|
|||
|
dereference any aliases in locating the entry to be compared.
|
|||
|
|
|||
|
- ava: holds the attribute value assertion to be compared.
|
|||
|
|
|||
|
Upon receipt of a Compare Request, a server will attempt to perform
|
|||
|
the requested comparison and return the result in the Compare
|
|||
|
Response, defined as follows:
|
|||
|
|
|||
|
CompareResponse ::= [APPLICATION 15] LDAPResult
|
|||
|
|
|||
|
The resultCode is set to compareTrue, compareFalse, or an appropriate
|
|||
|
error. compareTrue indicates that the assertion value in the ava
|
|||
|
field matches a value of the attribute or subtype according to the
|
|||
|
attribute's EQUALITY matching rule. compareFalse indicates that the
|
|||
|
assertion value in the ava field and the values of the attribute or
|
|||
|
subtype did not match. Other result codes indicate either that the
|
|||
|
result of the comparison was Undefined (Section 4.5.1.7), or that
|
|||
|
some error occurred.
|
|||
|
|
|||
|
Note that some directory systems may establish access controls that
|
|||
|
permit the values of certain attributes (such as userPassword) to be
|
|||
|
compared but not interrogated by other means.
|
|||
|
|
|||
|
4.11. Abandon Operation
|
|||
|
|
|||
|
The function of the Abandon operation is to allow a client to request
|
|||
|
that the server abandon an uncompleted operation. The Abandon
|
|||
|
Request is defined as follows:
|
|||
|
|
|||
|
AbandonRequest ::= [APPLICATION 16] MessageID
|
|||
|
|
|||
|
The MessageID is that of an operation that was requested earlier at
|
|||
|
this LDAP message layer. The Abandon request itself has its own
|
|||
|
MessageID. This is distinct from the MessageID of the earlier
|
|||
|
operation being abandoned.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 36]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
There is no response defined in the Abandon operation. Upon receipt
|
|||
|
of an AbandonRequest, the server MAY abandon the operation identified
|
|||
|
by the MessageID. Since the client cannot tell the difference
|
|||
|
between a successfully abandoned operation and an uncompleted
|
|||
|
operation, the application of the Abandon operation is limited to
|
|||
|
uses where the client does not require an indication of its outcome.
|
|||
|
|
|||
|
Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned.
|
|||
|
|
|||
|
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 it MUST NOT send the SearchResultDone. Of
|
|||
|
course, the server MUST ensure that only properly encoded LDAPMessage
|
|||
|
PDUs are transmitted.
|
|||
|
|
|||
|
The ability to abandon other (particularly update) operations is at
|
|||
|
the discretion of the server.
|
|||
|
|
|||
|
Clients should not send Abandon requests for the same operation
|
|||
|
multiple times, and they MUST also be prepared to receive results
|
|||
|
from operations they have abandoned (since these might have been in
|
|||
|
transit when the Abandon was requested or might not be able to be
|
|||
|
abandoned).
|
|||
|
|
|||
|
Servers MUST discard Abandon requests for messageIDs they do not
|
|||
|
recognize, for operations that cannot be abandoned, and for
|
|||
|
operations that have already been abandoned.
|
|||
|
|
|||
|
4.12. Extended Operation
|
|||
|
|
|||
|
The Extended operation allows additional operations to be defined for
|
|||
|
services not already available in the protocol; for example, to Add
|
|||
|
operations to install transport layer security (see Section 4.14).
|
|||
|
|
|||
|
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 Extended operation consists of an Extended request and an
|
|||
|
Extended response.
|
|||
|
|
|||
|
ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
|
|||
|
requestName [0] LDAPOID,
|
|||
|
requestValue [1] OCTET STRING OPTIONAL }
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 37]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
The requestName is a dotted-decimal representation of the unique
|
|||
|
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 an
|
|||
|
ExtendedResponse.
|
|||
|
|
|||
|
ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
|
|||
|
COMPONENTS OF LDAPResult,
|
|||
|
responseName [10] LDAPOID OPTIONAL,
|
|||
|
responseValue [11] OCTET STRING OPTIONAL }
|
|||
|
|
|||
|
The responseName field, when present, contains an LDAPOID that is
|
|||
|
unique for this extended operation or response. This field is
|
|||
|
optional (even when the extension specification defines an LDAPOID
|
|||
|
for use in this field). The field will be absent whenever the server
|
|||
|
is unable or unwilling to determine the appropriate LDAPOID to
|
|||
|
return, for instance, when the requestName cannot be parsed or its
|
|||
|
value is not recognized.
|
|||
|
|
|||
|
Where the requestName is not recognized, the server returns
|
|||
|
protocolError. (The server may return protocolError in other cases.)
|
|||
|
|
|||
|
The requestValue and responseValue fields contain information
|
|||
|
associated with the operation. The format of these fields is defined
|
|||
|
by the specification of the Extended operation. Implementations MUST
|
|||
|
be prepared to handle arbitrary contents of these fields, including
|
|||
|
zero bytes. Values that are defined in terms of ASN.1 and BER-
|
|||
|
encoded according to Section 5.1 also follow the extensibility rules
|
|||
|
in Section 4.
|
|||
|
|
|||
|
Servers list the requestName of Extended Requests they recognize in
|
|||
|
the 'supportedExtension' attribute in the root DSE (Section 5.1 of
|
|||
|
[RFC4512]).
|
|||
|
|
|||
|
Extended operations may be specified in other documents. The
|
|||
|
specification of an Extended operation consists of:
|
|||
|
|
|||
|
- the OBJECT IDENTIFIER assigned to the requestName,
|
|||
|
|
|||
|
- the OBJECT IDENTIFIER (if any) assigned to the responseName (note
|
|||
|
that the same OBJECT IDENTIFIER may be used for both the
|
|||
|
requestName and responseName),
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 38]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
- the format of the contents of the requestValue and responseValue
|
|||
|
(if any), and
|
|||
|
|
|||
|
- the semantics of the operation.
|
|||
|
|
|||
|
4.13. IntermediateResponse Message
|
|||
|
|
|||
|
While the Search operation provides a mechanism to return multiple
|
|||
|
response messages for a single Search request, other operations, by
|
|||
|
nature, do not provide for multiple response messages.
|
|||
|
|
|||
|
The IntermediateResponse message provides a general mechanism for
|
|||
|
defining single-request/multiple-response operations in LDAP. This
|
|||
|
message is intended to be used in conjunction with the Extended
|
|||
|
operation to define new single-request/multiple-response operations
|
|||
|
or in conjunction with a control when extending existing LDAP
|
|||
|
operations in a way that requires them to return Intermediate
|
|||
|
response information.
|
|||
|
|
|||
|
It is intended that the definitions and descriptions of Extended
|
|||
|
operations and controls that make use of the IntermediateResponse
|
|||
|
message will define the circumstances when an IntermediateResponse
|
|||
|
message can be sent by a server and the associated meaning of an
|
|||
|
IntermediateResponse message sent in a particular circumstance.
|
|||
|
|
|||
|
IntermediateResponse ::= [APPLICATION 25] SEQUENCE {
|
|||
|
responseName [0] LDAPOID OPTIONAL,
|
|||
|
responseValue [1] OCTET STRING OPTIONAL }
|
|||
|
|
|||
|
IntermediateResponse messages SHALL NOT be returned to the client
|
|||
|
unless the client issues a request that specifically solicits their
|
|||
|
return. This document defines two forms of solicitation: Extended
|
|||
|
operation and request control. IntermediateResponse messages are
|
|||
|
specified in documents describing the manner in which they are
|
|||
|
solicited (i.e., in the Extended operation or request control
|
|||
|
specification that uses them). These specifications include:
|
|||
|
|
|||
|
- the OBJECT IDENTIFIER (if any) assigned to the responseName,
|
|||
|
|
|||
|
- the format of the contents of the responseValue (if any), and
|
|||
|
|
|||
|
- the semantics associated with the IntermediateResponse message.
|
|||
|
|
|||
|
Extensions that allow the return of multiple types of
|
|||
|
IntermediateResponse messages SHALL identify those types using unique
|
|||
|
responseName values (note that one of these may specify no value).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 39]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Sections 4.13.1 and 4.13.2 describe additional requirements on the
|
|||
|
inclusion of responseName and responseValue in IntermediateResponse
|
|||
|
messages.
|
|||
|
|
|||
|
4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse
|
|||
|
|
|||
|
A single-request/multiple-response operation may be defined using a
|
|||
|
single ExtendedRequest message to solicit zero or more
|
|||
|
IntermediateResponse messages of one or more kinds, followed by an
|
|||
|
ExtendedResponse message.
|
|||
|
|
|||
|
4.13.2. Usage with LDAP Request Controls
|
|||
|
|
|||
|
A control's semantics may include the return of zero or more
|
|||
|
IntermediateResponse messages prior to returning the final result
|
|||
|
code for the operation. One or more kinds of IntermediateResponse
|
|||
|
messages may be sent in response to a request control.
|
|||
|
|
|||
|
All IntermediateResponse messages associated with request controls
|
|||
|
SHALL include a responseName. This requirement ensures that the
|
|||
|
client can correctly identify the source of IntermediateResponse
|
|||
|
messages when:
|
|||
|
|
|||
|
- two or more controls using IntermediateResponse messages are
|
|||
|
included in a request for any LDAP operation or
|
|||
|
|
|||
|
- one or more controls using IntermediateResponse messages are
|
|||
|
included in a request with an LDAP Extended operation that uses
|
|||
|
IntermediateResponse messages.
|
|||
|
|
|||
|
4.14. StartTLS Operation
|
|||
|
|
|||
|
The Start Transport Layer Security (StartTLS) operation's purpose is
|
|||
|
to initiate installation of a TLS layer. The StartTLS operation is
|
|||
|
defined using the Extended operation mechanism described in Section
|
|||
|
4.12.
|
|||
|
|
|||
|
4.14.1. StartTLS Request
|
|||
|
|
|||
|
A client requests TLS establishment by transmitting a StartTLS
|
|||
|
request message to the server. The StartTLS request is defined in
|
|||
|
terms of an ExtendedRequest. The requestName is
|
|||
|
"1.3.6.1.4.1.1466.20037", and the requestValue field is always
|
|||
|
absent.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 40]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
The client MUST NOT send any LDAP PDUs at this LDAP message layer
|
|||
|
following this request until it receives a StartTLS Extended response
|
|||
|
and, in the case of a successful response, completes TLS
|
|||
|
negotiations.
|
|||
|
|
|||
|
Detected sequencing problems (particularly those detailed in Section
|
|||
|
3.1.1 of [RFC4513]) result in the resultCode being set to
|
|||
|
operationsError.
|
|||
|
|
|||
|
If the server does not support TLS (whether by design or by current
|
|||
|
configuration), it returns with the resultCode set to protocolError
|
|||
|
as described in Section 4.12.
|
|||
|
|
|||
|
4.14.2. StartTLS Response
|
|||
|
|
|||
|
When a StartTLS request is received, servers supporting the operation
|
|||
|
MUST return a StartTLS response message to the requestor. The
|
|||
|
responseName is "1.3.6.1.4.1.1466.20037" when provided (see Section
|
|||
|
4.12). The responseValue is always absent.
|
|||
|
|
|||
|
If the server is willing and able to negotiate TLS, it returns the
|
|||
|
StartTLS response with the resultCode set to success. Upon client
|
|||
|
receipt of a successful StartTLS response, protocol peers may
|
|||
|
commence with TLS negotiation as discussed in Section 3 of [RFC4513].
|
|||
|
|
|||
|
If the server is otherwise unwilling or unable to perform this
|
|||
|
operation, the server is to return an appropriate result code
|
|||
|
indicating the nature of the problem. For example, if the TLS
|
|||
|
subsystem is not presently available, the server may indicate this by
|
|||
|
returning with the resultCode set to unavailable. In cases where a
|
|||
|
non-success result code is returned, the LDAP session is left without
|
|||
|
a TLS layer.
|
|||
|
|
|||
|
4.14.3. Removal of the TLS Layer
|
|||
|
|
|||
|
Either the client or server MAY remove the TLS layer and leave the
|
|||
|
LDAP message layer intact by sending and receiving a TLS closure
|
|||
|
alert.
|
|||
|
|
|||
|
The initiating protocol peer sends the TLS closure alert and MUST
|
|||
|
wait until it receives a TLS closure alert from the other peer before
|
|||
|
sending further LDAP PDUs.
|
|||
|
|
|||
|
When a protocol peer receives the initial TLS closure alert, it may
|
|||
|
choose to allow the LDAP message layer to remain intact. In this
|
|||
|
case, it MUST immediately transmit a TLS closure alert. Following
|
|||
|
this, it MAY send and receive LDAP PDUs.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 41]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Protocol peers MAY terminate the LDAP session after sending or
|
|||
|
receiving a TLS closure alert.
|
|||
|
|
|||
|
5. Protocol Encoding, Connection, and Transfer
|
|||
|
|
|||
|
This protocol is designed to run over connection-oriented, reliable
|
|||
|
transports, where the data stream is divided into octets (8-bit
|
|||
|
units), with each octet and each bit being significant.
|
|||
|
|
|||
|
One underlying service, LDAP over TCP, is defined in Section 5.2.
|
|||
|
This service is generally applicable to applications providing or
|
|||
|
consuming X.500-based directory services on the Internet. This
|
|||
|
specification was generally written with the TCP mapping in mind.
|
|||
|
Specifications detailing other mappings may encounter various
|
|||
|
obstacles.
|
|||
|
|
|||
|
Implementations of LDAP over TCP MUST implement the mapping as
|
|||
|
described in Section 5.2.
|
|||
|
|
|||
|
This table illustrates the relationship among the different layers
|
|||
|
involved in an exchange between two protocol peers:
|
|||
|
|
|||
|
+----------------------+
|
|||
|
| LDAP message layer |
|
|||
|
+----------------------+ > LDAP PDUs
|
|||
|
+----------------------+ < data
|
|||
|
| SASL layer |
|
|||
|
+----------------------+ > SASL-protected data
|
|||
|
+----------------------+ < data
|
|||
|
| TLS layer |
|
|||
|
Application +----------------------+ > TLS-protected data
|
|||
|
------------+----------------------+ < data
|
|||
|
Transport | transport connection |
|
|||
|
+----------------------+
|
|||
|
|
|||
|
5.1. Protocol Encoding
|
|||
|
|
|||
|
The protocol elements of LDAP SHALL be encoded for exchange using the
|
|||
|
Basic Encoding Rules [BER] of [ASN.1] with the following
|
|||
|
restrictions:
|
|||
|
|
|||
|
- Only the definite form of length encoding is used.
|
|||
|
|
|||
|
- OCTET STRING values are encoded in the primitive form only.
|
|||
|
|
|||
|
- If the value of a BOOLEAN type is true, the encoding of the value
|
|||
|
octet is set to hex "FF".
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 42]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
- If a value of a type is its default value, it is absent. Only some
|
|||
|
BOOLEAN and INTEGER types have default values in this protocol
|
|||
|
definition.
|
|||
|
|
|||
|
These restrictions are meant to ease the overhead of encoding and
|
|||
|
decoding certain elements in BER.
|
|||
|
|
|||
|
These restrictions do not apply to ASN.1 types encapsulated inside of
|
|||
|
OCTET STRING values, such as attribute values, unless otherwise
|
|||
|
stated.
|
|||
|
|
|||
|
5.2. Transmission Control Protocol (TCP)
|
|||
|
|
|||
|
The encoded LDAPMessage PDUs are mapped directly onto the TCP
|
|||
|
[RFC793] 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 Internet Assigned Numbers
|
|||
|
Authority (IANA)-assigned LDAP port, 389 [PortReg]. Servers may
|
|||
|
instead provide a listener on a different port number. Clients MUST
|
|||
|
support contacting servers on any valid TCP port.
|
|||
|
|
|||
|
5.3. Termination of the LDAP session
|
|||
|
|
|||
|
Termination of the LDAP session is typically initiated by the client
|
|||
|
sending an UnbindRequest (Section 4.3), or by the server sending a
|
|||
|
Notice of Disconnection (Section 4.4.1). In these cases, each
|
|||
|
protocol peer gracefully terminates the LDAP session by ceasing
|
|||
|
exchanges at the LDAP message layer, tearing down any SASL layer,
|
|||
|
tearing down any TLS layer, and closing the transport connection.
|
|||
|
|
|||
|
A protocol peer may determine that the continuation of any
|
|||
|
communication would be pernicious, and in this case, it may abruptly
|
|||
|
terminate the session by ceasing communication and closing the
|
|||
|
transport connection.
|
|||
|
|
|||
|
In either case, when the LDAP session is terminated, uncompleted
|
|||
|
operations are handled as specified in Section 3.1.
|
|||
|
|
|||
|
6. Security Considerations
|
|||
|
|
|||
|
This version of the protocol provides facilities for simple
|
|||
|
authentication using a cleartext password, as well as any SASL
|
|||
|
[RFC4422] mechanism. Installing SASL and/or TLS layers can provide
|
|||
|
integrity and other data security services.
|
|||
|
|
|||
|
It is also permitted that the server can return its credentials to
|
|||
|
the client, if it chooses to do so.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 43]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
Servers are encouraged to prevent directory modifications by clients
|
|||
|
that have authenticated anonymously [RFC4513].
|
|||
|
|
|||
|
Security considerations for authentication methods, SASL mechanisms,
|
|||
|
and TLS are described in [RFC4513].
|
|||
|
|
|||
|
Note that SASL authentication exchanges do not provide data
|
|||
|
confidentiality or integrity protection for the version or name
|
|||
|
fields of the BindRequest or the resultCode, diagnosticMessage, or
|
|||
|
referral fields of the BindResponse, nor for any information
|
|||
|
contained in controls attached to Bind requests or responses. Thus,
|
|||
|
information contained in these fields SHOULD NOT be relied on unless
|
|||
|
it is otherwise protected (such as by establishing protections at the
|
|||
|
transport layer).
|
|||
|
|
|||
|
Implementors should note that various security factors (including
|
|||
|
authentication and authorization information and data security
|
|||
|
services) may change during the course of the LDAP session or even
|
|||
|
during the performance of a particular operation. For instance,
|
|||
|
credentials could expire, authorization identities or access controls
|
|||
|
could change, or the underlying security layer(s) could be replaced
|
|||
|
or terminated. Implementations should be robust in the handling of
|
|||
|
changing security factors.
|
|||
|
|
|||
|
In some cases, it may be appropriate to continue the operation even
|
|||
|
in light of security factor changes. For instance, it may be
|
|||
|
appropriate to continue an Abandon operation regardless of the
|
|||
|
change, or to continue an operation when the change upgraded (or
|
|||
|
maintained) the security factor. In other cases, it may be
|
|||
|
appropriate to fail or alter the processing of the operation. For
|
|||
|
instance, if confidential protections were removed, it would be
|
|||
|
appropriate either to fail a request to return sensitive data or,
|
|||
|
minimally, to exclude the return of sensitive data.
|
|||
|
|
|||
|
Implementations that 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 that 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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 44]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Servers may return referrals or Search result references that
|
|||
|
redirect 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. Clients are advised
|
|||
|
to be aware of this and possibly reject referrals when
|
|||
|
confidentiality measures are not in place. Clients are advised to
|
|||
|
reject referrals from the StartTLS operation.
|
|||
|
|
|||
|
The matchedDN and diagnosticMessage fields, as well as some
|
|||
|
resultCode values (e.g., attributeOrValueExists and
|
|||
|
entryAlreadyExists), could disclose the presence or absence of
|
|||
|
specific data in the directory that is subject to access and other
|
|||
|
administrative controls. Server implementations should restrict
|
|||
|
access to protected information equally under both normal and error
|
|||
|
conditions.
|
|||
|
|
|||
|
Protocol peers MUST be prepared to handle invalid and arbitrary-
|
|||
|
length protocol encodings. Invalid protocol encodings include: BER
|
|||
|
encoding exceptions, format string and UTF-8 encoding exceptions,
|
|||
|
overflow exceptions, integer value exceptions, and binary mode on/off
|
|||
|
flag exceptions. The LDAPv3 PROTOS [PROTOS-LDAP] test suite provides
|
|||
|
excellent examples of these exceptions and test cases used to
|
|||
|
discover flaws.
|
|||
|
|
|||
|
In the event that a protocol peer senses an attack that in its nature
|
|||
|
could cause damage due to further communication at any layer in the
|
|||
|
LDAP session, the protocol peer should abruptly terminate the LDAP
|
|||
|
session as described in Section 5.3.
|
|||
|
|
|||
|
7. Acknowledgements
|
|||
|
|
|||
|
This document is based on RFC 2251 by Mark Wahl, Tim Howes, and Steve
|
|||
|
Kille. RFC 2251 was a product of the IETF ASID Working Group.
|
|||
|
|
|||
|
It is also based on RFC 2830 by Jeff Hodges, RL "Bob" Morgan, and
|
|||
|
Mark Wahl. RFC 2830 was a product of the IETF LDAPEXT Working Group.
|
|||
|
|
|||
|
It is also based on RFC 3771 by Roger Harrison and Kurt Zeilenga.
|
|||
|
RFC 3771 was an individual submission to the IETF.
|
|||
|
|
|||
|
This document is a product of the IETF LDAPBIS Working Group.
|
|||
|
Significant contributors of technical review and content include Kurt
|
|||
|
Zeilenga, Steven Legg, and Hallvard Furuseth.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 45]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
8. Normative References
|
|||
|
|
|||
|
[ASN.1] ITU-T Recommendation X.680 (07/2002) | ISO/IEC 8824-
|
|||
|
1:2002 "Information Technology - Abstract Syntax
|
|||
|
Notation One (ASN.1): Specification of basic notation".
|
|||
|
|
|||
|
[BER] ITU-T Rec. X.690 (07/2002) | ISO/IEC 8825-1:2002,
|
|||
|
"Information technology - ASN.1 encoding rules:
|
|||
|
Specification of Basic Encoding Rules (BER), Canonical
|
|||
|
Encoding Rules (CER) and Distinguished Encoding Rules
|
|||
|
(DER)", 2002.
|
|||
|
|
|||
|
[ISO10646] Universal Multiple-Octet Coded Character Set (UCS) -
|
|||
|
Architecture and Basic Multilingual Plane, ISO/IEC
|
|||
|
10646-1 : 1993.
|
|||
|
|
|||
|
[RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791,
|
|||
|
September 1981.
|
|||
|
|
|||
|
[RFC793] Postel, J., "Transmission Control Protocol", STD 7, RFC
|
|||
|
793, September 1981.
|
|||
|
|
|||
|
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
|||
|
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
|||
|
|
|||
|
[RFC3454] Hoffman P. and M. Blanchet, "Preparation of
|
|||
|
Internationalized Strings ('stringprep')", RFC 3454,
|
|||
|
December 2002.
|
|||
|
|
|||
|
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
|
|||
|
10646", STD 63, RFC 3629, November 2003.
|
|||
|
|
|||
|
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter,
|
|||
|
"Uniform Resource Identifier (URI): Generic Syntax",
|
|||
|
STD 66, RFC 3986, January 2005.
|
|||
|
|
|||
|
[RFC4013] Zeilenga, K., "SASLprep: Stringprep Profile for User
|
|||
|
Names and Passwords", RFC 4013, February 2005.
|
|||
|
|
|||
|
[RFC4234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
|
|||
|
Specifications: ABNF", RFC 4234, October 2005.
|
|||
|
|
|||
|
[RFC4346] Dierks, T. and E. Rescorla, "The TLS Protocol Version
|
|||
|
1.1", RFC 4346, March 2006.
|
|||
|
|
|||
|
[RFC4422] Melnikov, A., Ed. and K. Zeilenga, Ed., "Simple
|
|||
|
Authentication and Security Layer (SASL)", RFC 4422,
|
|||
|
June 2006.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 46]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
[RFC4510] Zeilenga, K., Ed., "Lightweight Directory Access
|
|||
|
Protocol (LDAP): Technical Specification Road Map", RFC
|
|||
|
4510, June 2006.
|
|||
|
|
|||
|
[RFC4512] Zeilenga, K., Lightweight Directory Access Protocol
|
|||
|
(LDAP): Directory Information Models", RFC 4512, June
|
|||
|
2006.
|
|||
|
|
|||
|
[RFC4513] Harrison, R., Ed., "Lightweight Directory Access
|
|||
|
Protocol (LDAP): Authentication Methods and Security
|
|||
|
Mechanisms", RFC 4513, June 2006.
|
|||
|
|
|||
|
[RFC4514] Zeilenga, K., Ed., "Lightweight Directory Access
|
|||
|
Protocol (LDAP): String Representation of Distinguished
|
|||
|
Names", RFC 4514, June 2006.
|
|||
|
|
|||
|
[RFC4516] Smith, M., Ed. and T. Howes, "Lightweight Directory
|
|||
|
Access Protocol (LDAP): Uniform Resource Locator", RFC
|
|||
|
4516, June 2006.
|
|||
|
|
|||
|
[RFC4517] Legg, S., Ed., "Lightweight Directory Access Protocol
|
|||
|
(LDAP): Syntaxes and Matching Rules", RFC 4517, June
|
|||
|
2006.
|
|||
|
|
|||
|
[RFC4520] Zeilenga, K., "Internet Assigned Numbers Authority
|
|||
|
(IANA) Considerations for the Lightweight Directory
|
|||
|
Access Protocol (LDAP)", BCP 64, RFC 4520, June 2006.
|
|||
|
|
|||
|
[Unicode] The Unicode Consortium, "The Unicode Standard, Version
|
|||
|
3.2.0" is defined by "The Unicode Standard, Version
|
|||
|
3.0" (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-
|
|||
|
61633-5), as amended by the "Unicode Standard Annex
|
|||
|
#27: Unicode 3.1"
|
|||
|
(http://www.unicode.org/reports/tr27/) and by the
|
|||
|
"Unicode Standard Annex #28: Unicode 3.2"
|
|||
|
(http://www.unicode.org/reports/tr28/).
|
|||
|
|
|||
|
[X.500] ITU-T Rec. X.500, "The Directory: Overview of Concepts,
|
|||
|
Models and Service", 1993.
|
|||
|
|
|||
|
[X.511] ITU-T Rec. X.511, "The Directory: Abstract Service
|
|||
|
Definition", 1993.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 47]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
9. Informative References
|
|||
|
|
|||
|
[CharModel] Whistler, K. and M. Davis, "Unicode Technical Report
|
|||
|
#17, Character Encoding Model", UTR17,
|
|||
|
<http://www.unicode.org/unicode/reports/tr17/>, August
|
|||
|
2000.
|
|||
|
|
|||
|
[Glossary] The Unicode Consortium, "Unicode Glossary",
|
|||
|
<http://www.unicode.org/glossary/>.
|
|||
|
|
|||
|
[PortReg] IANA, "Port Numbers",
|
|||
|
<http://www.iana.org/assignments/port-numbers>.
|
|||
|
|
|||
|
[PROTOS-LDAP] University of Oulu, "PROTOS Test-Suite: c06-ldapv3"
|
|||
|
<http://www.ee.oulu.fi/research/ouspg/protos/testing/
|
|||
|
c06/ldapv3/>.
|
|||
|
|
|||
|
10. IANA Considerations
|
|||
|
|
|||
|
The Internet Assigned Numbers Authority (IANA) has updated the LDAP
|
|||
|
result code registry to indicate that this document provides the
|
|||
|
definitive technical specification for result codes 0-36, 48-54, 64-
|
|||
|
70, 80-90. It is also noted that one resultCode value
|
|||
|
(strongAuthRequired) has been renamed (to strongerAuthRequired).
|
|||
|
|
|||
|
The IANA has also updated the LDAP Protocol Mechanism registry to
|
|||
|
indicate that this document and [RFC4513] provides the definitive
|
|||
|
technical specification for the StartTLS (1.3.6.1.4.1.1466.20037)
|
|||
|
Extended operation.
|
|||
|
|
|||
|
IANA has assigned LDAP Object Identifier 18 [RFC4520] to identify the
|
|||
|
ASN.1 module defined in this document.
|
|||
|
|
|||
|
Subject: Request for LDAP Object Identifier Registration
|
|||
|
Person & email address to contact for further information:
|
|||
|
Jim Sermersheim <jimse@novell.com>
|
|||
|
Specification: RFC 4511
|
|||
|
Author/Change Controller: IESG
|
|||
|
Comments:
|
|||
|
Identifies the LDAP ASN.1 module
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 48]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
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.9.
|
|||
|
|
|||
|
Additional result codes MAY be defined for use with extensions
|
|||
|
[RFC4520]. Client implementations SHALL treat any result code that
|
|||
|
they do not recognize as an unknown error condition.
|
|||
|
|
|||
|
The descriptions provided here do not fully account for result code
|
|||
|
substitutions used to prevent unauthorized disclosures (such as
|
|||
|
substitution of noSuchObject for insufficientAccessRights, or
|
|||
|
invalidCredentials for insufficientAccessRights).
|
|||
|
|
|||
|
A.1. Non-Error Result Codes
|
|||
|
|
|||
|
These result codes (called "non-error" result codes) do not indicate
|
|||
|
an error condition:
|
|||
|
|
|||
|
success (0),
|
|||
|
compareFalse (5),
|
|||
|
compareTrue (6),
|
|||
|
referral (10), and
|
|||
|
saslBindInProgress (14).
|
|||
|
|
|||
|
The success, compareTrue, and compareFalse result codes indicate
|
|||
|
successful completion (and, hence, are referred to as "successful"
|
|||
|
result codes).
|
|||
|
|
|||
|
The referral and saslBindInProgress result codes indicate the client
|
|||
|
needs to take additional action to complete the operation.
|
|||
|
|
|||
|
A.2. Result Codes
|
|||
|
|
|||
|
Existing LDAP result codes are described as follows:
|
|||
|
|
|||
|
success (0)
|
|||
|
Indicates the successful completion of an operation. Note:
|
|||
|
this code is not used with the Compare operation. See
|
|||
|
compareFalse (5) and compareTrue (6).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 49]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
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
|
|||
|
StartTLS [RFC4346] while there are other uncompleted operations
|
|||
|
or if a TLS layer was already installed.
|
|||
|
|
|||
|
protocolError (2)
|
|||
|
Indicates the server received data that is not well-formed.
|
|||
|
|
|||
|
For Bind operation only, this code is also used to indicate
|
|||
|
that the server does not support the requested protocol
|
|||
|
version.
|
|||
|
|
|||
|
For Extended operations only, this code is also used to
|
|||
|
indicate that the server does not support (by design or
|
|||
|
configuration) the Extended operation associated with the
|
|||
|
requestName.
|
|||
|
|
|||
|
For request operations specifying multiple controls, this may
|
|||
|
be used to indicate that the server cannot ignore the order
|
|||
|
of the controls as specified, or that the combination of the
|
|||
|
specified controls is invalid or unspecified.
|
|||
|
|
|||
|
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 Compare operation has successfully
|
|||
|
completed and the assertion has evaluated to FALSE or
|
|||
|
Undefined.
|
|||
|
|
|||
|
compareTrue (6)
|
|||
|
Indicates that the Compare operation has successfully
|
|||
|
completed and the assertion has evaluated to TRUE.
|
|||
|
|
|||
|
authMethodNotSupported (7)
|
|||
|
Indicates that the authentication method or mechanism is not
|
|||
|
supported.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 50]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
strongerAuthRequired (8)
|
|||
|
Indicates the server requires strong(er) authentication in
|
|||
|
order to complete the operation.
|
|||
|
|
|||
|
When used with the Notice of Disconnection operation, this
|
|||
|
code indicates that the server has detected that an
|
|||
|
established security association between the client and
|
|||
|
server has unexpectedly failed or been compromised.
|
|||
|
|
|||
|
referral (10)
|
|||
|
Indicates that a referral needs to be chased to complete the
|
|||
|
operation (see Section 4.1.10).
|
|||
|
|
|||
|
adminLimitExceeded (11)
|
|||
|
Indicates that an administrative limit has been exceeded.
|
|||
|
|
|||
|
unavailableCriticalExtension (12)
|
|||
|
Indicates a critical control is unrecognized (see Section
|
|||
|
4.1.11).
|
|||
|
|
|||
|
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)
|
|||
|
Indicates that a request field contains an unrecognized
|
|||
|
attribute description.
|
|||
|
|
|||
|
inappropriateMatching (18)
|
|||
|
Indicates that an attempt was made (e.g., in an assertion) to
|
|||
|
use a matching rule not defined for the attribute type
|
|||
|
concerned.
|
|||
|
|
|||
|
constraintViolation (19)
|
|||
|
Indicates that the client supplied an attribute value that
|
|||
|
does not conform to the constraints placed upon it by the
|
|||
|
data model.
|
|||
|
|
|||
|
For example, this code is returned when multiple values are
|
|||
|
supplied to an attribute that has a SINGLE-VALUE constraint.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 51]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
attributeOrValueExists (20)
|
|||
|
Indicates that the client supplied an attribute or value to
|
|||
|
be added to an entry, but the attribute or value 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. For example,
|
|||
|
the code may used to indicate an alias has been dereferenced
|
|||
|
that names no object.
|
|||
|
|
|||
|
invalidDNSyntax (34)
|
|||
|
Indicates that an 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 that do not conform to the syntax of the attribute's
|
|||
|
type.
|
|||
|
|
|||
|
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 that had attempted
|
|||
|
to bind anonymously or without supplying credentials to
|
|||
|
provide some form of credentials.
|
|||
|
|
|||
|
invalidCredentials (49)
|
|||
|
Indicates that the provided credentials (e.g., the user's name
|
|||
|
and password) 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 too busy to service the
|
|||
|
operation.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 52]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
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 (e.g.,
|
|||
|
while dereferencing aliases or chaining an operation).
|
|||
|
|
|||
|
namingViolation (64)
|
|||
|
Indicates that the entry's name violates naming restrictions.
|
|||
|
|
|||
|
objectClassViolation (65)
|
|||
|
Indicates that the entry violates object class restrictions.
|
|||
|
|
|||
|
notAllowedOnNonLeaf (66)
|
|||
|
Indicates that the operation is inappropriately acting upon a
|
|||
|
non-leaf entry.
|
|||
|
|
|||
|
notAllowedOnRDN (67)
|
|||
|
Indicates that the operation is inappropriately attempting to
|
|||
|
remove a value that forms the entry's relative distinguished
|
|||
|
name.
|
|||
|
|
|||
|
entryAlreadyExists (68)
|
|||
|
Indicates that the request cannot be fulfilled (added, moved,
|
|||
|
or renamed) as the target entry already exists.
|
|||
|
|
|||
|
objectClassModsProhibited (69)
|
|||
|
Indicates that an attempt to modify the object class(es) of
|
|||
|
an entry's 'objectClass' attribute is prohibited.
|
|||
|
|
|||
|
For example, this code is returned when a client attempts to
|
|||
|
modify the structural object class of an entry.
|
|||
|
|
|||
|
affectsMultipleDSAs (71)
|
|||
|
Indicates that the operation cannot be performed as it would
|
|||
|
affect multiple servers (DSAs).
|
|||
|
|
|||
|
other (80)
|
|||
|
Indicates the server has encountered an internal error.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 53]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Appendix B. Complete ASN.1 Definition
|
|||
|
|
|||
|
This appendix is normative.
|
|||
|
|
|||
|
Lightweight-Directory-Access-Protocol-V3 {1 3 6 1 1 18}
|
|||
|
-- Copyright (C) The Internet Society (2006). This version of
|
|||
|
-- this ASN.1 module is part of RFC 4511; see the RFC itself
|
|||
|
-- for full legal notices.
|
|||
|
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,
|
|||
|
...,
|
|||
|
intermediateResponse IntermediateResponse },
|
|||
|
controls [0] Controls OPTIONAL }
|
|||
|
|
|||
|
MessageID ::= INTEGER (0 .. maxInt)
|
|||
|
|
|||
|
maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) --
|
|||
|
|
|||
|
LDAPString ::= OCTET STRING -- UTF-8 encoded,
|
|||
|
-- [ISO10646] characters
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 54]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
LDAPOID ::= OCTET STRING -- Constrained to <numericoid>
|
|||
|
-- [RFC4512]
|
|||
|
|
|||
|
LDAPDN ::= LDAPString -- Constrained to <distinguishedName>
|
|||
|
-- [RFC4514]
|
|||
|
|
|||
|
RelativeLDAPDN ::= LDAPString -- Constrained to <name-component>
|
|||
|
-- [RFC4514]
|
|||
|
|
|||
|
AttributeDescription ::= LDAPString
|
|||
|
-- Constrained to <attributedescription>
|
|||
|
-- [RFC4512]
|
|||
|
|
|||
|
AttributeValue ::= OCTET STRING
|
|||
|
|
|||
|
AttributeValueAssertion ::= SEQUENCE {
|
|||
|
attributeDesc AttributeDescription,
|
|||
|
assertionValue AssertionValue }
|
|||
|
|
|||
|
AssertionValue ::= OCTET STRING
|
|||
|
|
|||
|
PartialAttribute ::= SEQUENCE {
|
|||
|
type AttributeDescription,
|
|||
|
vals SET OF value AttributeValue }
|
|||
|
|
|||
|
Attribute ::= PartialAttribute(WITH COMPONENTS {
|
|||
|
...,
|
|||
|
vals (SIZE(1..MAX))})
|
|||
|
|
|||
|
MatchingRuleId ::= LDAPString
|
|||
|
|
|||
|
LDAPResult ::= SEQUENCE {
|
|||
|
resultCode ENUMERATED {
|
|||
|
success (0),
|
|||
|
operationsError (1),
|
|||
|
protocolError (2),
|
|||
|
timeLimitExceeded (3),
|
|||
|
sizeLimitExceeded (4),
|
|||
|
compareFalse (5),
|
|||
|
compareTrue (6),
|
|||
|
authMethodNotSupported (7),
|
|||
|
strongerAuthRequired (8),
|
|||
|
-- 9 reserved --
|
|||
|
referral (10),
|
|||
|
adminLimitExceeded (11),
|
|||
|
unavailableCriticalExtension (12),
|
|||
|
confidentialityRequired (13),
|
|||
|
saslBindInProgress (14),
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 55]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
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),
|
|||
|
... },
|
|||
|
matchedDN LDAPDN,
|
|||
|
diagnosticMessage LDAPString,
|
|||
|
referral [3] Referral OPTIONAL }
|
|||
|
|
|||
|
Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI
|
|||
|
|
|||
|
URI ::= LDAPString -- limited to characters permitted in
|
|||
|
-- URIs
|
|||
|
|
|||
|
Controls ::= SEQUENCE OF control Control
|
|||
|
|
|||
|
Control ::= SEQUENCE {
|
|||
|
controlType LDAPOID,
|
|||
|
criticality BOOLEAN DEFAULT FALSE,
|
|||
|
controlValue OCTET STRING OPTIONAL }
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 56]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
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),
|
|||
|
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 AttributeSelection }
|
|||
|
|
|||
|
AttributeSelection ::= SEQUENCE OF selector LDAPString
|
|||
|
-- The LDAPString is constrained to
|
|||
|
-- <attributeSelector> in Section 4.5.1.8
|
|||
|
|
|||
|
Filter ::= CHOICE {
|
|||
|
and [0] SET SIZE (1..MAX) OF filter Filter,
|
|||
|
or [1] SET SIZE (1..MAX) OF filter Filter,
|
|||
|
not [2] Filter,
|
|||
|
equalityMatch [3] AttributeValueAssertion,
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 57]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
substrings [4] SubstringFilter,
|
|||
|
greaterOrEqual [5] AttributeValueAssertion,
|
|||
|
lessOrEqual [6] AttributeValueAssertion,
|
|||
|
present [7] AttributeDescription,
|
|||
|
approxMatch [8] AttributeValueAssertion,
|
|||
|
extensibleMatch [9] MatchingRuleAssertion,
|
|||
|
... }
|
|||
|
|
|||
|
SubstringFilter ::= SEQUENCE {
|
|||
|
type AttributeDescription,
|
|||
|
substrings SEQUENCE SIZE (1..MAX) OF substring CHOICE {
|
|||
|
initial [0] AssertionValue, -- can occur at most once
|
|||
|
any [1] AssertionValue,
|
|||
|
final [2] AssertionValue } -- can occur at most once
|
|||
|
}
|
|||
|
|
|||
|
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
|
|||
|
partialAttribute PartialAttribute
|
|||
|
|
|||
|
SearchResultReference ::= [APPLICATION 19] SEQUENCE
|
|||
|
SIZE (1..MAX) OF uri URI
|
|||
|
|
|||
|
SearchResultDone ::= [APPLICATION 5] LDAPResult
|
|||
|
|
|||
|
ModifyRequest ::= [APPLICATION 6] SEQUENCE {
|
|||
|
object LDAPDN,
|
|||
|
changes SEQUENCE OF change SEQUENCE {
|
|||
|
operation ENUMERATED {
|
|||
|
add (0),
|
|||
|
delete (1),
|
|||
|
replace (2),
|
|||
|
... },
|
|||
|
modification PartialAttribute } }
|
|||
|
|
|||
|
ModifyResponse ::= [APPLICATION 7] LDAPResult
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 58]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
AddRequest ::= [APPLICATION 8] SEQUENCE {
|
|||
|
entry LDAPDN,
|
|||
|
attributes AttributeList }
|
|||
|
|
|||
|
AttributeList ::= SEQUENCE OF attribute Attribute
|
|||
|
|
|||
|
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,
|
|||
|
responseValue [11] OCTET STRING OPTIONAL }
|
|||
|
|
|||
|
IntermediateResponse ::= [APPLICATION 25] SEQUENCE {
|
|||
|
responseName [0] LDAPOID OPTIONAL,
|
|||
|
responseValue [1] OCTET STRING OPTIONAL }
|
|||
|
|
|||
|
END
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 59]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Appendix C. Changes
|
|||
|
|
|||
|
This appendix is non-normative.
|
|||
|
|
|||
|
This appendix summarizes substantive changes made to RFC 2251, RFC
|
|||
|
2830, and RFC 3771.
|
|||
|
|
|||
|
C.1. Changes Made to RFC 2251
|
|||
|
|
|||
|
This section summarizes the substantive changes made to Sections 1,
|
|||
|
2, 3.1, and 4, and the remainder of RFC 2251. Readers should
|
|||
|
consult [RFC4512] and [RFC4513] for summaries of changes to other
|
|||
|
sections.
|
|||
|
|
|||
|
C.1.1. Section 1 (Status of this Memo)
|
|||
|
|
|||
|
- Removed IESG note. Post publication of RFC 2251, mandatory LDAP
|
|||
|
authentication mechanisms have been standardized which are
|
|||
|
sufficient to remove this note. See [RFC4513] for authentication
|
|||
|
mechanisms.
|
|||
|
|
|||
|
C.1.2. Section 3.1 (Protocol Model) and others
|
|||
|
|
|||
|
- Removed notes giving history between LDAP v1, v2, and v3. Instead,
|
|||
|
added sufficient language so that this document can stand on its
|
|||
|
own.
|
|||
|
|
|||
|
C.1.3. Section 4 (Elements of Protocol)
|
|||
|
|
|||
|
- Clarified where the extensibility features of ASN.1 apply to the
|
|||
|
protocol. This change affected various ASN.1 types by the
|
|||
|
inclusion of ellipses (...) to certain elements.
|
|||
|
- Removed the requirement that servers that implement version 3 or
|
|||
|
later MUST provide the 'supportedLDAPVersion' attribute. This
|
|||
|
statement provided no interoperability advantages.
|
|||
|
|
|||
|
C.1.4. Section 4.1.1 (Message Envelope)
|
|||
|
|
|||
|
- There was a mandatory requirement for the server to return a
|
|||
|
Notice of Disconnection and drop the transport connection when a
|
|||
|
PDU is malformed in a certain way. This has been updated such that
|
|||
|
the server SHOULD return the Notice of Disconnection, and it MUST
|
|||
|
terminate the LDAP Session.
|
|||
|
|
|||
|
C.1.5. Section 4.1.1.1 (Message ID)
|
|||
|
|
|||
|
- Required that the messageID of requests MUST be non-zero as the
|
|||
|
zero is reserved for Notice of Disconnection.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 60]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
- Specified when it is and isn't appropriate to return an already
|
|||
|
used messageID. RFC 2251 accidentally imposed synchronous server
|
|||
|
behavior in its wording of this.
|
|||
|
|
|||
|
C.1.6. Section 4.1.2 (String Types)
|
|||
|
|
|||
|
- Stated that LDAPOID is constrained to <numericoid> from [RFC4512].
|
|||
|
|
|||
|
C.1.7. Section 4.1.5.1 (Binary Option) and others
|
|||
|
|
|||
|
- Removed the Binary Option from the specification. There are
|
|||
|
numerous interoperability problems associated with this method of
|
|||
|
alternate attribute type encoding. Work to specify a suitable
|
|||
|
replacement is ongoing.
|
|||
|
|
|||
|
C.1.8. Section 4.1.8 (Attribute)
|
|||
|
|
|||
|
- Combined the definitions of PartialAttribute and Attribute here,
|
|||
|
and defined Attribute in terms of PartialAttribute.
|
|||
|
|
|||
|
C.1.9. Section 4.1.10 (Result Message)
|
|||
|
|
|||
|
- Renamed "errorMessage" to "diagnosticMessage" as it is allowed to
|
|||
|
be sent for non-error results.
|
|||
|
- Moved some language into Appendix A, and referred the reader there.
|
|||
|
- Allowed matchedDN to be present for other result codes than those
|
|||
|
listed in RFC 2251.
|
|||
|
- Renamed the code "strongAuthRequired" to "strongerAuthRequired" to
|
|||
|
clarify that this code may often be returned to indicate that a
|
|||
|
stronger authentication is needed to perform a given operation.
|
|||
|
|
|||
|
C.1.10. Section 4.1.11 (Referral)
|
|||
|
|
|||
|
- Defined referrals in terms of URIs rather than URLs.
|
|||
|
- Removed the requirement that all referral URIs MUST be equally
|
|||
|
capable of progressing the operation. The statement was ambiguous
|
|||
|
and provided no instructions on how to carry it out.
|
|||
|
- Added the requirement that clients MUST NOT loop between servers.
|
|||
|
- Clarified the instructions for using LDAPURLs in referrals, and in
|
|||
|
doing so added a recommendation that the scope part be present.
|
|||
|
- Removed imperatives which required clients to use URLs in specific
|
|||
|
ways to progress an operation. These did nothing for
|
|||
|
interoperability.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 61]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
C.1.11. Section 4.1.12 (Controls)
|
|||
|
|
|||
|
- Specified how control values defined in terms of ASN.1 are to be
|
|||
|
encoded.
|
|||
|
- Noted that the criticality field is only applied to request
|
|||
|
messages (except UnbindRequest), and must be ignored when present
|
|||
|
on response messages and UnbindRequest.
|
|||
|
- Specified that non-critical controls may be ignored at the
|
|||
|
server's discretion. There was confusion in the original wording
|
|||
|
which led some to believe that recognized controls may not be
|
|||
|
ignored as long as they were associated with a proper request.
|
|||
|
- Added language regarding combinations of controls and the ordering
|
|||
|
of controls on a message.
|
|||
|
- Specified that when the semantics of the combination of controls
|
|||
|
is undefined or unknown, it results in a protocolError.
|
|||
|
- Changed "The server MUST be prepared" to "Implementations MUST be
|
|||
|
prepared" in paragraph 8 to reflect that both client and server
|
|||
|
implementations must be able to handle this (as both parse
|
|||
|
controls).
|
|||
|
|
|||
|
C.1.12. Section 4.2 (Bind Operation)
|
|||
|
|
|||
|
- Mandated that servers return protocolError when the version is not
|
|||
|
supported.
|
|||
|
- Disambiguated behavior when the simple authentication is used, the
|
|||
|
name is empty, and the password is non-empty.
|
|||
|
- Required servers to not dereference aliases for Bind. This was
|
|||
|
added for consistency with other operations and to help ensure
|
|||
|
data consistency.
|
|||
|
- Required that textual passwords be transferred as UTF-8 encoded
|
|||
|
Unicode, and added recommendations on string preparation. This was
|
|||
|
to help ensure interoperability of passwords being sent from
|
|||
|
different clients.
|
|||
|
|
|||
|
C.1.13. Section 4.2.1 (Sequencing of the Bind Request)
|
|||
|
|
|||
|
- This section was largely reorganized for readability, and language
|
|||
|
was added to clarify the authentication state of failed and
|
|||
|
abandoned Bind operations.
|
|||
|
- Removed: "If a SASL transfer encryption or integrity mechanism has
|
|||
|
been negotiated, that mechanism does not support the changing of
|
|||
|
credentials from one identity to another, then the client MUST
|
|||
|
instead establish a new connection."
|
|||
|
If there are dependencies between multiple negotiations of a
|
|||
|
particular SASL mechanism, the technical specification for that
|
|||
|
SASL mechanism details how applications are to deal with them.
|
|||
|
LDAP should not require any special handling.
|
|||
|
- Dropped MUST imperative in paragraph 3 to align with [RFC2119].
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 62]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
- Mandated that clients not send non-Bind operations while a Bind is
|
|||
|
in progress, and suggested that servers not process them if they
|
|||
|
are received. This is needed to ensure proper sequencing of the
|
|||
|
Bind in relationship to other operations.
|
|||
|
|
|||
|
C.1.14. Section 4.2.3 (Bind Response)
|
|||
|
|
|||
|
- Moved most error-related text to Appendix A, and added text
|
|||
|
regarding certain errors used in conjunction with the Bind
|
|||
|
operation.
|
|||
|
- Prohibited the server from specifying serverSaslCreds when not
|
|||
|
appropriate.
|
|||
|
|
|||
|
C.1.15. Section 4.3 (Unbind Operation)
|
|||
|
|
|||
|
- Specified that both peers are to cease transmission and terminate
|
|||
|
the LDAP session for the Unbind operation.
|
|||
|
|
|||
|
C.1.16. Section 4.4 (Unsolicited Notification)
|
|||
|
|
|||
|
- Added instructions for future specifications of Unsolicited
|
|||
|
Notifications.
|
|||
|
|
|||
|
C.1.17. Section 4.5.1 (Search Request)
|
|||
|
|
|||
|
- SearchRequest attributes is now defined as an AttributeSelection
|
|||
|
type rather than AttributeDescriptionList, and an ABNF is
|
|||
|
provided.
|
|||
|
- SearchRequest attributes may contain duplicate attribute
|
|||
|
descriptions. This was previously prohibited. Now servers are
|
|||
|
instructed to ignore subsequent names when they are duplicated.
|
|||
|
This was relaxed in order to allow different short names and also
|
|||
|
OIDs to be requested for an attribute.
|
|||
|
- The present search filter now evaluates to Undefined when the
|
|||
|
specified attribute is not known to the server. It used to
|
|||
|
evaluate to FALSE, which caused behavior inconsistent with what
|
|||
|
most would expect, especially when the 'not' operator was used.
|
|||
|
- The Filter choice SubstringFilter substrings type is now defined
|
|||
|
with a lower bound of 1.
|
|||
|
- The SubstringFilter substrings 'initial, 'any', and 'final' types
|
|||
|
are now AssertionValue rather than LDAPString. Also, added
|
|||
|
imperatives stating that 'initial' (if present) must be listed
|
|||
|
first, and 'final' (if present) must be listed last.
|
|||
|
- Disambiguated the semantics of the derefAliases choices. There was
|
|||
|
question as to whether derefInSearching applied to the base object
|
|||
|
in a wholeSubtree Search.
|
|||
|
- Added instructions for equalityMatch, substrings, greaterOrEqual,
|
|||
|
lessOrEqual, and approxMatch.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 63]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
|
|||
|
C.1.18. Section 4.5.2 (Search Result)
|
|||
|
|
|||
|
- Recommended that servers not use attribute short names when it
|
|||
|
knows they are ambiguous or may cause interoperability problems.
|
|||
|
- Removed all mention of ExtendedResponse due to lack of
|
|||
|
implementation.
|
|||
|
|
|||
|
C.1.19. Section 4.5.3 (Continuation References in the Search Result)
|
|||
|
|
|||
|
- Made changes similar to those made to Section 4.1.11.
|
|||
|
|
|||
|
C.1.20. Section 4.5.3.1 (Example)
|
|||
|
|
|||
|
- Fixed examples to adhere to changes made to Section 4.5.3.
|
|||
|
|
|||
|
C.1.21. Section 4.6 (Modify Operation)
|
|||
|
|
|||
|
- Replaced AttributeTypeAndValues with Attribute as they are
|
|||
|
equivalent.
|
|||
|
- Specified the types of modification changes that might
|
|||
|
temporarily violate schema. Some readers were under the impression
|
|||
|
that any temporary schema violation was allowed.
|
|||
|
|
|||
|
C.1.22. Section 4.7 (Add Operation)
|
|||
|
|
|||
|
- Aligned Add operation with X.511 in that the attributes of the RDN
|
|||
|
are used in conjunction with the listed attributes to create the
|
|||
|
entry. Previously, Add required that the distinguished values be
|
|||
|
present in the listed attributes.
|
|||
|
- Removed requirement that the objectClass attribute MUST be
|
|||
|
specified as some DSE types do not require this attribute.
|
|||
|
Instead, generic wording was added, requiring the added entry to
|
|||
|
adhere to the data model.
|
|||
|
- Removed recommendation regarding placement of objects. This is
|
|||
|
covered in the data model document.
|
|||
|
|
|||
|
C.1.23. Section 4.9 (Modify DN Operation)
|
|||
|
|
|||
|
- Required servers to not dereference aliases for Modify DN. This
|
|||
|
was added for consistency with other operations and to help ensure
|
|||
|
data consistency.
|
|||
|
- Allow Modify DN to fail when moving between naming contexts.
|
|||
|
- Specified what happens when the attributes of the newrdn are not
|
|||
|
present on the entry.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 64]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
C.1.24. Section 4.10 (Compare Operation)
|
|||
|
|
|||
|
- Specified that compareFalse means that the Compare took place and
|
|||
|
the result is false. There was confusion that led people to
|
|||
|
believe that an Undefined match resulted in compareFalse.
|
|||
|
- Required servers to not dereference aliases for Compare. This was
|
|||
|
added for consistency with other operations and to help ensure
|
|||
|
data consistency.
|
|||
|
|
|||
|
C.1.25. Section 4.11 (Abandon Operation)
|
|||
|
|
|||
|
- Explained that since Abandon returns no response, clients should
|
|||
|
not use it if they need to know the outcome.
|
|||
|
- Specified that Abandon and Unbind cannot be abandoned.
|
|||
|
|
|||
|
C.1.26. Section 4.12 (Extended Operation)
|
|||
|
|
|||
|
- Specified how values of Extended operations defined in terms of
|
|||
|
ASN.1 are to be encoded.
|
|||
|
- Added instructions on what Extended operation specifications
|
|||
|
consist of.
|
|||
|
- Added a recommendation that servers advertise supported Extended
|
|||
|
operations.
|
|||
|
|
|||
|
C.1.27. Section 5.2 (Transfer Protocols)
|
|||
|
|
|||
|
- Moved referral-specific instructions into referral-related
|
|||
|
sections.
|
|||
|
|
|||
|
C.1.28. Section 7 (Security Considerations)
|
|||
|
|
|||
|
- Reworded notes regarding SASL not protecting certain aspects of
|
|||
|
the LDAP Bind messages.
|
|||
|
- Noted that Servers are encouraged to prevent directory
|
|||
|
modifications by clients that have authenticated anonymously
|
|||
|
[RFC4513].
|
|||
|
- Added a note regarding the possibility of changes to security
|
|||
|
factors (authentication, authorization, and data confidentiality).
|
|||
|
- Warned against following referrals that may have been injected in
|
|||
|
the data stream.
|
|||
|
- Noted that servers should protect information equally, whether in
|
|||
|
an error condition or not, and mentioned matchedDN,
|
|||
|
diagnosticMessage, and resultCodes specifically.
|
|||
|
- Added a note regarding malformed and long encodings.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 65]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
C.1.29. Appendix A (Complete ASN.1 Definition)
|
|||
|
|
|||
|
- Added "EXTENSIBILITY IMPLIED" to ASN.1 definition.
|
|||
|
- Removed AttributeType. It is not used.
|
|||
|
|
|||
|
C.2. Changes Made to RFC 2830
|
|||
|
|
|||
|
This section summarizes the substantive changes made to Sections of
|
|||
|
RFC 2830. Readers should consult [RFC4513] for summaries of changes
|
|||
|
to other sections.
|
|||
|
|
|||
|
C.2.1. Section 2.3 (Response other than "success")
|
|||
|
|
|||
|
- Removed wording indicating that referrals can be returned from
|
|||
|
StartTLS.
|
|||
|
- Removed requirement that only a narrow set of result codes can be
|
|||
|
returned. Some result codes are required in certain scenarios, but
|
|||
|
any other may be returned if appropriate.
|
|||
|
- Removed requirement that the ExtendedResponse.responseName MUST be
|
|||
|
present. There are circumstances where this is impossible, and
|
|||
|
requiring this is at odds with language in Section 4.12.
|
|||
|
|
|||
|
C.2.1. Section 4 (Closing a TLS Connection)
|
|||
|
|
|||
|
- Reworded most of this section to align with definitions of the
|
|||
|
LDAP protocol layers.
|
|||
|
- Removed instructions on abrupt closure as this is covered in other
|
|||
|
areas of the document (specifically, Section 5.3)
|
|||
|
|
|||
|
C.3. Changes Made to RFC 3771
|
|||
|
|
|||
|
- Rewrote to fit into this document. In general, semantics were
|
|||
|
preserved. Supporting and background language seen as redundant
|
|||
|
due to its presence in this document was omitted.
|
|||
|
|
|||
|
- Specified that Intermediate responses to a request may be of
|
|||
|
different types, and one of the response types may be specified to
|
|||
|
have no response value.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 66]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Editor's Address
|
|||
|
|
|||
|
Jim Sermersheim
|
|||
|
Novell, Inc.
|
|||
|
1800 South Novell Place
|
|||
|
Provo, Utah 84606, USA
|
|||
|
|
|||
|
Phone: +1 801 861-3088
|
|||
|
EMail: jimse@novell.com
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 67]
|
|||
|
|
|||
|
RFC 4511 LDAPv3 June 2006
|
|||
|
|
|||
|
|
|||
|
Full Copyright Statement
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2006).
|
|||
|
|
|||
|
This document is subject to the rights, licenses and restrictions
|
|||
|
contained in BCP 78, and except as set forth therein, the authors
|
|||
|
retain all their rights.
|
|||
|
|
|||
|
This document and the information contained herein are provided on an
|
|||
|
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
|||
|
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
|
|||
|
ENGINEERING TASK FORCE DISCLAIM 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.
|
|||
|
|
|||
|
Intellectual Property
|
|||
|
|
|||
|
The IETF takes no position regarding the validity or scope of any
|
|||
|
Intellectual Property Rights or other rights that might be claimed to
|
|||
|
pertain to the implementation or use of the technology described in
|
|||
|
this document or the extent to which any license under such rights
|
|||
|
might or might not be available; nor does it represent that it has
|
|||
|
made any independent effort to identify any such rights. Information
|
|||
|
on the procedures with respect to rights in RFC documents can be
|
|||
|
found in BCP 78 and BCP 79.
|
|||
|
|
|||
|
Copies of IPR disclosures made to the IETF Secretariat and any
|
|||
|
assurances of licenses to be made available, or the result of an
|
|||
|
attempt made to obtain a general license or permission for the use of
|
|||
|
such proprietary rights by implementers or users of this
|
|||
|
specification can be obtained from the IETF on-line IPR repository at
|
|||
|
http://www.ietf.org/ipr.
|
|||
|
|
|||
|
The IETF invites any interested party to bring to its attention any
|
|||
|
copyrights, patents or patent applications, or other proprietary
|
|||
|
rights that may cover technology that may be required to implement
|
|||
|
this standard. Please address the information to the IETF at
|
|||
|
ietf-ipr@ietf.org.
|
|||
|
|
|||
|
Acknowledgement
|
|||
|
|
|||
|
Funding for the RFC Editor function is provided by the IETF
|
|||
|
Administrative Support Activity (IASA).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sermersheim Standards Track [Page 68]
|
|||
|
|