draft-ietf-ldapbis-protocol-22.txt | draft-ietf-ldapbis-protocol-23.txt | |||
---|---|---|---|---|
Internet-Draft Editor: J. Sermersheim | Internet-Draft Editor: J. Sermersheim | |||
Intended Category: Standard Track Novell, Inc | Intended Category: Standard Track Novell, Inc | |||
Document: draft-ietf-ldapbis-protocol-22.txt Feb 2004 | Document: draft-ietf-ldapbis-protocol-23.txt Apr 2004 | |||
Obsoletes: RFC 2251, 2830, [LIMR] | Obsoletes: RFC 2251, 2830, [LIMR] | |||
LDAP: The Protocol | LDAP: The Protocol | |||
Status of this Memo | Status of this Memo | |||
This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
all provisions of Section 10 of RFC2026. | all provisions of Section 10 of RFC2026. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
skipping to change at line 47 | skipping to change at line 47 | |||
(LDAP). LDAP provides access to distributed directory services that | (LDAP). LDAP provides access to distributed directory services that | |||
act in accordance with X.500 data and service models. These protocol | act in accordance with X.500 data and service models. These protocol | |||
elements are based on those described in the X.500 Directory Access | elements are based on those described in the X.500 Directory Access | |||
Protocol (DAP). | Protocol (DAP). | |||
Table of Contents | Table of Contents | |||
1. Introduction....................................................2 | 1. Introduction....................................................2 | |||
1.1. Relationship to Obsolete Specifications.......................3 | 1.1. Relationship to Obsolete Specifications.......................3 | |||
2. Conventions.....................................................3 | 2. Conventions.....................................................3 | |||
3. Protocol Model..................................................3 | 3. Protocol Model..................................................4 | |||
4. Elements of Protocol............................................4 | 4. Elements of Protocol............................................4 | |||
4.1. Common Elements...............................................4 | 4.1. Common Elements...............................................5 | |||
4.1.1. Message Envelope............................................5 | 4.1.1. Message Envelope............................................5 | |||
4.1.2. String Types................................................6 | 4.1.2. String Types................................................6 | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 1 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
4.1.3. Distinguished Name and Relative Distinguished Name..........6 | 4.1.3. Distinguished Name and Relative Distinguished Name..........7 | |||
4.1.4. Attribute Descriptions......................................7 | 4.1.4. Attribute Descriptions......................................7 | |||
4.1.5. Attribute Value.............................................7 | 4.1.5. Attribute Value.............................................7 | |||
4.1.6. Attribute Value Assertion...................................7 | 4.1.6. Attribute Value Assertion...................................8 | |||
4.1.7. Attribute and PartialAttribute..............................8 | 4.1.7. Attribute and PartialAttribute..............................8 | |||
4.1.8. Matching Rule Identifier....................................8 | 4.1.8. Matching Rule Identifier....................................8 | |||
4.1.9. Result Message..............................................8 | 4.1.9. Result Message..............................................9 | |||
4.1.10. Referral..................................................10 | 4.1.10. Referral..................................................10 | |||
4.1.11. Controls..................................................11 | 4.1.11. Controls..................................................12 | |||
4.2. Bind Operation...............................................13 | 4.2. Bind Operation...............................................13 | |||
4.3. Unbind Operation.............................................16 | 4.3. Unbind Operation.............................................16 | |||
4.4. Unsolicited Notification.....................................16 | 4.4. Unsolicited Notification.....................................16 | |||
4.5. Search Operation.............................................17 | 4.5. Search Operation.............................................17 | |||
4.6. Modify Operation.............................................26 | 4.6. Modify Operation.............................................26 | |||
4.7. Add Operation................................................27 | 4.7. Add Operation................................................28 | |||
4.8. Delete Operation.............................................28 | 4.8. Delete Operation.............................................29 | |||
4.9. Modify DN Operation..........................................29 | 4.9. Modify DN Operation..........................................29 | |||
4.10. Compare Operation...........................................30 | 4.10. Compare Operation...........................................30 | |||
4.11. Abandon Operation...........................................31 | 4.11. Abandon Operation...........................................31 | |||
4.12. Extended Operation..........................................31 | 4.12. Extended Operation..........................................32 | |||
4.13. IntermediateResponse Message................................33 | 4.13. IntermediateResponse Message................................33 | |||
4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse......33 | 4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse......34 | |||
4.13.2. Usage with LDAP Request Controls..........................34 | 4.13.2. Usage with LDAP Request Controls..........................34 | |||
4.14. StartTLS Operation..........................................34 | 4.14. StartTLS Operation..........................................34 | |||
5. Protocol Element Encodings and Transfer........................36 | 5. Protocol Encoding, Connection, and Transfer....................37 | |||
5.1. Protocol Encoding............................................37 | 5.1 Operation and Connection Relationship.........................37 | |||
5.2. Transfer Protocols...........................................37 | 5.2. Protocol Encoding............................................37 | |||
5.3. Transmission Control Protocol (TCP)..........................38 | ||||
6. Security Considerations........................................38 | 6. Security Considerations........................................38 | |||
7. Acknowledgements...............................................39 | 7. Acknowledgements...............................................39 | |||
8. Normative References...........................................39 | 8. Normative References...........................................40 | |||
9. Informative References.........................................41 | 9. Informative References.........................................41 | |||
10. IANA Considerations...........................................41 | 10. IANA Considerations...........................................41 | |||
11. Editor's Address..............................................41 | 11. Editor's Address..............................................42 | |||
Appendix A - LDAP Result Codes....................................42 | Appendix A - LDAP Result Codes....................................43 | |||
A.1 Non-Error Result Codes........................................42 | A.1 Non-Error Result Codes........................................43 | |||
A.2 Result Codes..................................................42 | A.2 Result Codes..................................................43 | |||
Appendix B - Complete ASN.1 Definition............................46 | Appendix B - Complete ASN.1 Definition............................48 | |||
Appendix C - Changes..............................................52 | Appendix C - Changes..............................................54 | |||
C.1 Changes made to made to RFC 2251:.............................52 | C.1 Changes made to RFC 2251:.....................................54 | |||
C.2 Changes made to made to RFC 2830:.............................57 | C.2 Changes made to RFC 2830:.....................................59 | |||
C.3 Changes made to made to [LIMR]:...............................58 | C.3 Changes made to [LIMR]:.......................................60 | |||
1. Introduction | 1. Introduction | |||
The Directory is "a collection of open systems cooperating to provide | The Directory is "a collection of open systems cooperating to provide | |||
directory services" [X.500]. A directory user, which may be a human | directory services" [X.500]. A directory user, which may be a human | |||
or other entity, accesses the Directory through a client (or | or other entity, accesses the Directory through a client (or | |||
Directory User Agent (DUA)). The client, on behalf of the directory | Directory User Agent (DUA)). The client, on behalf of the directory | |||
user, interacts with one or more servers (or Directory System Agents | user, interacts with one or more servers (or Directory System Agents | |||
(DSA)). Clients interact with servers using a directory access | (DSA)). Clients interact with servers using a directory access | |||
protocol. | protocol. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 2 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
This document details the protocol elements of the Lightweight | This document details the protocol elements of the Lightweight | |||
Directory Access Protocol (LDAP), along with their semantics. | Directory Access Protocol (LDAP), along with their semantics. | |||
Following the description of protocol elements, it describes the way | Following the description of protocol elements, it describes the way | |||
in which the protocol elements are encoded and transferred. | in which the protocol elements are encoded and transferred. | |||
1.1. Relationship to Obsolete Specifications | 1.1. Relationship to Obsolete Specifications | |||
This document is an integral part of the LDAP Technical Specification | This document is an integral part of the LDAP Technical Specification | |||
skipping to change at line 147 | skipping to change at line 145 | |||
<<Note to RFC Editor: [LIMR] is to be replaced with the RFC | <<Note to RFC Editor: [LIMR] is to be replaced with the RFC | |||
number assigned to draft-rharrison-ldap-intermediate-resp- | number assigned to draft-rharrison-ldap-intermediate-resp- | |||
xx.txt, an RFC-to-be.>> | xx.txt, an RFC-to-be.>> | |||
2. Conventions | 2. Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are | "SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are | |||
to be interpreted as described in [Keyword]. | to be interpreted as described in [Keyword]. | |||
The terms "connection" and "LDAP connection" both refer to the | The term "stream" refers to the underlying transport service used to | |||
underlying transport protocol connection between two protocol peers. | carry the protocol exchange. | |||
The term "TLS connection" refers to a [TLS]-protected LDAP | The term "connection" refers to application layer where LDAP PDUs are | |||
connection. | exchanged between protocol peers. | |||
The terms "association" and "LDAP association" both refer to the | The term "TLS layer" refers to a layer inserted between the stream | |||
association of the LDAP connection and its current authentication and | and the connection that utilizes [TLS] to protect the exchange of | |||
authorization state. | LDAP PDUs. | |||
The term "SASL layer" refers to a layer inserted between the stream | ||||
and the connection that utilizes [SASL] to protect the exchange of | ||||
LDAP PDUs. | ||||
See the table in Section 5 for an illustration of these four terms. | ||||
Lightweight Directory Access Protocol Version 3 | ||||
The term "TLS-protected connection" refers to a connection protected | ||||
by a TLS-layer. | ||||
The term "association" refers to the association of the connection | ||||
and its current authentication and authorization state. | ||||
3. Protocol Model | 3. Protocol Model | |||
The general model adopted by this protocol is one of clients | The general model adopted by this protocol is one of clients | |||
performing protocol operations against servers. In this model, a | performing protocol operations against servers. In this model, a | |||
client transmits a protocol request describing the operation to be | client transmits a protocol request describing the operation to be | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 3 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
performed to a server. The server is then responsible for performing | performed to a server. The server is then responsible for performing | |||
the necessary operation(s) in the Directory. Upon completion of an | the necessary operation(s) in the Directory. Upon completion of an | |||
operation, the server typically returns a response containing | operation, the server typically returns a response containing | |||
appropriate data to the requesting client. | appropriate data to the requesting client. | |||
Although servers are required to return responses whenever such | Although servers are required to return responses whenever such | |||
responses are defined in the protocol, there is no requirement for | responses are defined in the protocol, there is no requirement for | |||
synchronous behavior on the part of either clients or servers. | synchronous behavior on the part of either clients or servers. | |||
Requests and responses for multiple operations generally may be | Requests and responses for multiple operations generally may be | |||
exchanged between a client and server in any order, provided the | exchanged between a client and server in any order, provided the | |||
skipping to change at line 190 | skipping to change at line 198 | |||
to a subset of the X.500 (1993) Directory Abstract Service [X.511]. | 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 | However there is not a one-to-one mapping between LDAP operations and | |||
X.500 Directory Access Protocol (DAP) operations. Server | X.500 Directory Access Protocol (DAP) operations. Server | |||
implementations acting as a gateway to X.500 directories may need to | implementations acting as a gateway to X.500 directories may need to | |||
make multiple DAP requests to service a single LDAP request. | make multiple DAP requests to service a single LDAP request. | |||
4. Elements of Protocol | 4. Elements of Protocol | |||
The protocol is described using Abstract Syntax Notation One | The protocol is described using Abstract Syntax Notation One | |||
([ASN.1]), and is transferred using a subset of ASN.1 Basic Encoding | ([ASN.1]), and is transferred using a subset of ASN.1 Basic Encoding | |||
Rules ([BER]). Section 5.1 specifies how the protocol elements are | Rules ([BER]). Section 5 specifies how the protocol elements are | |||
encoded and transferred. | encoded and transferred. | |||
In order to support future extensions to this protocol, extensibility | In order to support future extensions to this protocol, extensibility | |||
is implied where it is allowed per ASN.1 (i.e. sequence, set, choice, | is implied where it is allowed per ASN.1 (i.e. sequence, set, choice, | |||
and enumerated types are extensible). In addition, ellipses (...) | and enumerated types are extensible). In addition, ellipses (...) | |||
have been supplied in ASN.1 types that are explicitly extensible as | have been supplied in ASN.1 types that are explicitly extensible as | |||
discussed in [LDAPIANA]. Because of the implied extensibility, | discussed in [LDAPIANA]. Because of the implied extensibility, | |||
clients and servers MUST (unless otherwise specified) ignore trailing | clients and servers MUST (unless otherwise specified) ignore trailing | |||
SEQUENCE components whose tags they do not recognize. | SEQUENCE components whose tags they do not recognize. | |||
Changes to the protocol other than through the extension mechanisms | Changes to the protocol other than through the extension mechanisms | |||
described here require a different version number. A client indicates | described here require a different version number. A client indicates | |||
the version it is using as part of the bind request, described in | the version it is using as part of the bind request, described in | |||
Section 4.2. If a client has not sent a bind, the server MUST assume | Section 4.2. If a client has not sent a bind, the server MUST assume | |||
the client is using version 3 or later. | the client is using version 3 or later. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Clients may determine the protocol versions a server supports by | Clients may determine the protocol versions a server supports by | |||
reading the 'supportedLDAPVersion' attribute from the root DSE (DSA- | reading the 'supportedLDAPVersion' attribute from the root DSE (DSA- | |||
Specific Entry) [Models]. | Specific Entry) [Models]. | |||
4.1. Common Elements | 4.1. Common Elements | |||
This section describes the LDAPMessage envelope Protocol Data Unit | This section describes the LDAPMessage envelope Protocol Data Unit | |||
(PDU) format, as well as data type definitions, which are used in the | (PDU) format, as well as data type definitions, which are used in the | |||
protocol operations. | protocol operations. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 4 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
4.1.1. Message Envelope | 4.1.1. Message Envelope | |||
For the purposes of protocol exchanges, all protocol operations are | For the purposes of protocol exchanges, all protocol operations are | |||
encapsulated in a common envelope, the LDAPMessage, which is defined | encapsulated in a common envelope, the LDAPMessage, which is defined | |||
as follows: | as follows: | |||
LDAPMessage ::= SEQUENCE { | LDAPMessage ::= SEQUENCE { | |||
messageID MessageID, | messageID MessageID, | |||
protocolOp CHOICE { | protocolOp CHOICE { | |||
bindRequest BindRequest, | bindRequest BindRequest, | |||
skipping to change at line 263 | skipping to change at line 270 | |||
MessageID ::= INTEGER (0 .. maxInt) | MessageID ::= INTEGER (0 .. maxInt) | |||
maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- | maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- | |||
The ASN.1 type Controls is defined in Section 4.1.11. | The ASN.1 type Controls is defined in Section 4.1.11. | |||
The function of the LDAPMessage is to provide an envelope containing | The function of the LDAPMessage is to provide an envelope containing | |||
common fields required in all protocol exchanges. At this time the | common fields required in all protocol exchanges. At this time the | |||
only common fields are the message ID and the controls. | only common fields are the message ID and the controls. | |||
Lightweight Directory Access Protocol Version 3 | ||||
If the server receives a PDU from the client in which the LDAPMessage | If the server receives a PDU from the client in which the LDAPMessage | |||
SEQUENCE tag cannot be recognized, the messageID cannot be parsed, | SEQUENCE tag cannot be recognized, the messageID cannot be parsed, | |||
the tag of the protocolOp is not recognized as a request, or the | the tag of the protocolOp is not recognized as a request, or the | |||
encoding structures or lengths of data fields are found to be | encoding structures or lengths of data fields are found to be | |||
incorrect, then the server SHOULD return the Notice of Disconnection | incorrect, then the server SHOULD return the Notice of Disconnection | |||
described in Section 4.4.1, with the resultCode set to protocolError, | described in Section 4.4.1, with the resultCode set to protocolError, | |||
and MUST immediately close the connection. | and MUST immediately close the stream. | |||
In other cases where the client or server cannot parse a PDU, it | In other cases where the client or server cannot parse a PDU, it | |||
SHOULD abruptly close the connection where further communication | SHOULD abruptly close the stream where further communication | |||
(including providing notice) would be pernicious. Otherwise, server | (including providing notice) would be pernicious. Otherwise, server | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 5 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
implementations MUST return an appropriate response to the request, | implementations MUST return an appropriate response to the request, | |||
with the resultCode set to protocolError. | with the resultCode set to protocolError. | |||
4.1.1.1. Message ID | 4.1.1.1. Message ID | |||
All LDAPMessage envelopes encapsulating responses contain the | All LDAPMessage envelopes encapsulating responses contain the | |||
messageID value of the corresponding request LDAPMessage. | messageID value of the corresponding request LDAPMessage. | |||
The message ID of a request MUST have a non-zero value different from | The message ID of a request MUST have a non-zero value different from | |||
the values of any other requests outstanding in the LDAP association | the values of any other requests outstanding in the LDAP association | |||
skipping to change at line 319 | skipping to change at line 324 | |||
LDAPString ::= OCTET STRING -- UTF-8 encoded, | LDAPString ::= OCTET STRING -- UTF-8 encoded, | |||
-- [ISO10646] characters | -- [ISO10646] characters | |||
The LDAPOID is a notational convenience to indicate that the | The LDAPOID is a notational convenience to indicate that the | |||
permitted value of this string is a (UTF-8 encoded) dotted-decimal | permitted value of this string is a (UTF-8 encoded) dotted-decimal | |||
representation of an OBJECT IDENTIFIER. Although an LDAPOID is | representation of an OBJECT IDENTIFIER. Although an LDAPOID is | |||
encoded as an OCTET STRING, values are limited to the definition of | encoded as an OCTET STRING, values are limited to the definition of | |||
<numericoid> given in Section 1.4 of [Models]. | <numericoid> given in Section 1.4 of [Models]. | |||
Lightweight Directory Access Protocol Version 3 | ||||
LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] | LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] | |||
For example, | For example, | |||
1.3.6.1.4.1.1466.1.2.3 | 1.3.6.1.4.1.1466.1.2.3 | |||
4.1.3. Distinguished Name and Relative Distinguished Name | 4.1.3. Distinguished Name and Relative Distinguished Name | |||
An LDAPDN is defined to be the representation of a Distinguished Name | An LDAPDN is defined to be the representation of a Distinguished Name | |||
(DN) after encoding according to the specification in [LDAPDN]. | (DN) after encoding according to the specification in [LDAPDN]. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 6 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
LDAPDN ::= LDAPString | LDAPDN ::= LDAPString | |||
-- Constrained to <distinguishedName> [LDAPDN] | -- Constrained to <distinguishedName> [LDAPDN] | |||
A RelativeLDAPDN is defined to be the representation of a Relative | A RelativeLDAPDN is defined to be the representation of a Relative | |||
Distinguished Name (RDN) after encoding according to the | Distinguished Name (RDN) after encoding according to the | |||
specification in [LDAPDN]. | specification in [LDAPDN]. | |||
RelativeLDAPDN ::= LDAPString | RelativeLDAPDN ::= LDAPString | |||
-- Constrained to <name-component> [LDAPDN] | -- Constrained to <name-component> [LDAPDN] | |||
skipping to change at line 372 | skipping to change at line 376 | |||
AttributeValue ::= OCTET STRING | AttributeValue ::= OCTET STRING | |||
Note that there is no defined limit on the size of this encoding; | Note that there is no defined limit on the size of this encoding; | |||
thus protocol values may include multi-megabyte attribute values | thus protocol values may include multi-megabyte attribute values | |||
(e.g. photographs). | (e.g. photographs). | |||
Attribute values may be defined which have arbitrary and non- | Attribute values may be defined which have arbitrary and non- | |||
printable syntax. Implementations MUST NOT display nor attempt to | printable syntax. Implementations MUST NOT display nor attempt to | |||
decode an attribute value if its syntax is not known. The | decode an attribute value if its syntax is not known. The | |||
implementation may attempt to discover the subschema of the source | implementation may attempt to discover the subschema of the source | |||
Lightweight Directory Access Protocol Version 3 | ||||
entry, and retrieve the descriptions of 'attributeTypes' from it | entry, and retrieve the descriptions of 'attributeTypes' from it | |||
[Models]. | [Models]. | |||
Clients MUST only send attribute values in a request that are valid | Clients MUST only send attribute values in a request that are valid | |||
according to the syntax defined for the attributes. | according to the syntax defined for the attributes. | |||
4.1.6. Attribute Value Assertion | 4.1.6. Attribute Value Assertion | |||
The AttributeValueAssertion (AVA) type definition is similar to the | The AttributeValueAssertion (AVA) type definition is similar to the | |||
one in the X.500 Directory standards. It contains an attribute | one in the X.500 Directory standards. It contains an attribute | |||
description and a matching rule ([Models Section 4.1.3) assertion | description and a matching rule ([Models Section 4.1.3) assertion | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 7 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
value suitable for that type. Elements of this type are typically | value suitable for that type. Elements of this type are typically | |||
used to assert that the value in assertionValue matches a value of an | used to assert that the value in assertionValue matches a value of an | |||
attribute. | attribute. | |||
AttributeValueAssertion ::= SEQUENCE { | AttributeValueAssertion ::= SEQUENCE { | |||
attributeDesc AttributeDescription, | attributeDesc AttributeDescription, | |||
assertionValue AssertionValue } | assertionValue AssertionValue } | |||
AssertionValue ::= OCTET STRING | AssertionValue ::= OCTET STRING | |||
skipping to change at line 419 | skipping to change at line 421 | |||
Attribute requires at least one value. | Attribute requires at least one value. | |||
PartialAttribute ::= SEQUENCE { | PartialAttribute ::= SEQUENCE { | |||
type AttributeDescription, | type AttributeDescription, | |||
vals SET OF value AttributeValue } | vals SET OF value AttributeValue } | |||
Attribute ::= PartialAttribute(WITH COMPONENTS { | Attribute ::= PartialAttribute(WITH COMPONENTS { | |||
..., | ..., | |||
vals (SIZE(1..MAX))}) | vals (SIZE(1..MAX))}) | |||
No two attribute values are equivalent as described by Section 2.3 of | No two attribute values may be equivalent as described by Section 2.3 | |||
[Models]. The set of attribute values is unordered. Implementations | of [Models]. The set of attribute values is unordered. | |||
MUST NOT rely upon the ordering being repeatable. | Implementations MUST NOT rely upon the ordering being repeatable. | |||
4.1.8. Matching Rule Identifier | 4.1.8. Matching Rule Identifier | |||
Matching rules are defined in Section 4.1.3 of [Models]. A matching | Matching rules are defined in Section 4.1.3 of [Models]. A matching | |||
rule is identified in the protocol by the printable representation of | rule is identified in the protocol by the printable representation of | |||
Lightweight Directory Access Protocol Version 3 | ||||
either its <numericoid>, or one of its short name descriptors | either its <numericoid>, or one of its short name descriptors | |||
[Models], e.g. 'caseIgnoreMatch' or '2.5.13.2'. | [Models], e.g. 'caseIgnoreMatch' or '2.5.13.2'. | |||
MatchingRuleId ::= LDAPString | MatchingRuleId ::= LDAPString | |||
4.1.9. Result Message | 4.1.9. Result Message | |||
The LDAPResult is the construct used in this protocol to return | The LDAPResult is the construct used in this protocol to return | |||
success or failure indications from servers to clients. To various | success or failure indications from servers to clients. To various | |||
requests, servers will return responses of LDAPResult or responses | requests, servers will return responses of LDAPResult or responses | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 8 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
containing the components of LDAPResult to indicate the final status | containing the components of LDAPResult to indicate the final status | |||
of a protocol operation request. | of a protocol operation request. | |||
LDAPResult ::= SEQUENCE { | LDAPResult ::= SEQUENCE { | |||
resultCode ENUMERATED { | resultCode ENUMERATED { | |||
success (0), | success (0), | |||
operationsError (1), | operationsError (1), | |||
protocolError (2), | protocolError (2), | |||
timeLimitExceeded (3), | timeLimitExceeded (3), | |||
sizeLimitExceeded (4), | sizeLimitExceeded (4), | |||
skipping to change at line 484 | skipping to change at line 484 | |||
inappropriateAuthentication (48), | inappropriateAuthentication (48), | |||
invalidCredentials (49), | invalidCredentials (49), | |||
insufficientAccessRights (50), | insufficientAccessRights (50), | |||
busy (51), | busy (51), | |||
unavailable (52), | unavailable (52), | |||
unwillingToPerform (53), | unwillingToPerform (53), | |||
loopDetect (54), | loopDetect (54), | |||
-- 55-63 unused -- | -- 55-63 unused -- | |||
namingViolation (64), | namingViolation (64), | |||
objectClassViolation (65), | objectClassViolation (65), | |||
Lightweight Directory Access Protocol Version 3 | ||||
notAllowedOnNonLeaf (66), | notAllowedOnNonLeaf (66), | |||
notAllowedOnRDN (67), | notAllowedOnRDN (67), | |||
entryAlreadyExists (68), | entryAlreadyExists (68), | |||
objectClassModsProhibited (69), | objectClassModsProhibited (69), | |||
-- 70 reserved for CLDAP -- | -- 70 reserved for CLDAP -- | |||
affectsMultipleDSAs (71), | affectsMultipleDSAs (71), | |||
-- 72-79 unused -- | -- 72-79 unused -- | |||
other (80), | other (80), | |||
... }, | ... }, | |||
matchedDN LDAPDN, | matchedDN LDAPDN, | |||
diagnosticMessage LDAPString, | diagnosticMessage LDAPString, | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 9 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
referral [3] Referral OPTIONAL } | referral [3] Referral OPTIONAL } | |||
The resultCode enumeration is extensible as defined in Section 3.6 of | The resultCode enumeration is extensible as defined in Section 3.6 of | |||
[LDAPIANA]. The meanings of the listed result codes are given in | [LDAPIANA]. The meanings of the listed result codes are given in | |||
Appendix A. If a server detects multiple errors for an operation, | Appendix A. If a server detects multiple errors for an operation, | |||
only one result code is returned. The server should return the result | only one result code is returned. The server should return the result | |||
code that best indicates the nature of the error encountered. | code that best indicates the nature of the error encountered. | |||
The diagnosticMessage field of this construct may, at the server's | The diagnosticMessage field of this construct may, at the server's | |||
option, be used to return a string containing a textual, human- | option, be used to return a string containing a textual, human- | |||
skipping to change at line 526 | skipping to change at line 524 | |||
noSuchObject, aliasProblem, invalidDNSyntax and | noSuchObject, aliasProblem, invalidDNSyntax and | |||
aliasDereferencingProblem), the matchedDN field is set to the name of | aliasDereferencingProblem), the matchedDN field is set to the name of | |||
the lowest entry (object or alias) in the Directory that was matched. | the lowest entry (object or alias) in the Directory that was matched. | |||
If no aliases were dereferenced while attempting to locate the entry, | If no aliases were dereferenced while attempting to locate the entry, | |||
this will be a truncated form of the name provided, or if aliases | this will be a truncated form of the name provided, or if aliases | |||
were dereferenced, of the resulting name, as defined in Section 12.5 | were dereferenced, of the resulting name, as defined in Section 12.5 | |||
of [X.511]. Otherwise the matchedDN field is empty. | of [X.511]. Otherwise the matchedDN field is empty. | |||
4.1.10. Referral | 4.1.10. Referral | |||
The referral result code indicates that the contacted server does not | The referral result code indicates that the contacted server cannot | |||
hold the target entry of the request. The referral field is present | or will not perform the operation and that one or more other servers | |||
in an LDAPResult if the resultCode field value is referral, and | may be able to. Reasons for this include: | |||
absent with all other result codes. It contains one or more | ||||
references to one or more servers or services that may be accessed | - The target entry of the request is not held locally, but the | |||
via LDAP or other protocols. Referrals can be returned in response to | server has knowledge of its possible existence elsewhere. | |||
any operation request (except unbind and abandon which do not have | ||||
responses). At least one URI MUST be present in the Referral. | - 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 | ||||
field value is referral, and absent with all other result codes. It | ||||
contains one or more references to one or more servers or services | ||||
that may be accessed via LDAP or other protocols. Referrals can be | ||||
returned in response to any operation request (except unbind and | ||||
Lightweight Directory Access Protocol Version 3 | ||||
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 | During a search operation, after the baseObject is located, and | |||
entries are being evaluated, the referral is not returned. Instead, | entries are being evaluated, the referral is not returned. Instead, | |||
continuation references, described in Section 4.5.3, are returned | continuation references, described in Section 4.5.3, are returned | |||
when other servers would need to be contacted to complete the | when other servers would need to be contacted to complete the | |||
operation. | operation. | |||
Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI | Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI | |||
URI ::= LDAPString -- limited to characters permitted in | URI ::= LDAPString -- limited to characters permitted in | |||
-- URIs | -- URIs | |||
If the client wishes to progress the operation, it MUST follow the | If the client wishes to progress the operation, it MUST follow the | |||
referral by contacting one of the supported services. If multiple | referral by contacting one of the supported services. If multiple | |||
URIs are present, the client assumes that any supported URI may be | URIs are present, the client assumes that any supported URI may be | |||
used to progress the operation. | used to progress the operation. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 10 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
Protocol peers that follow referrals MUST ensure that they do not | Protocol peers that follow referrals MUST ensure that they do not | |||
loop between servers. They MUST NOT repeatedly contact the same | loop between servers. They MUST NOT repeatedly contact the same | |||
server for the same request with the same target entry name, scope | server for the same request with the same target entry name, scope | |||
and filter. Some implementations use a counter that is incremented | and filter. Some implementations use a counter that is incremented | |||
each time referral handling occurs for an operation, and these kinds | each time referral handling occurs for an operation, and these kinds | |||
of implementations MUST be able to handle at least ten nested | of implementations MUST be able to handle at least ten nested | |||
referrals between the root and a leaf entry. | referrals between the root and a leaf entry. | |||
A URI for a server implementing LDAP and accessible via [TCP]/[IP] | A URI for a server implementing LDAP and accessible via [TCP]/[IP] | |||
(v4 or v6) is written as an LDAP URL according to [LDAPURL]. | (v4 or v6) is written as an LDAP URL according to [LDAPURL]. | |||
skipping to change at line 572 | skipping to change at line 578 | |||
A URI for a server implementing LDAP and accessible via [TCP]/[IP] | A URI for a server implementing LDAP and accessible via [TCP]/[IP] | |||
(v4 or v6) is written as an LDAP URL according to [LDAPURL]. | (v4 or v6) is written as an LDAP URL according to [LDAPURL]. | |||
When an LDAP URL is used, the following instructions are followed: | When an LDAP URL is used, the following instructions are followed: | |||
- If an alias was dereferenced, the <dn> part of the URL MUST be | - If an alias was dereferenced, the <dn> part of the URL MUST be | |||
present, with the new target object name. UTF-8 encoded characters | present, with the new target object name. UTF-8 encoded characters | |||
appearing in the string representation of a DN or search filter | appearing in the string representation of a DN or search filter | |||
may not be legal for URLs (e.g. spaces) and MUST be escaped using | may not be legal for URLs (e.g. spaces) and MUST be escaped using | |||
the % method in [URI]. | the % method in [URI]. | |||
- It is RECOMMENDED that the <dn> part be present to avoid | - It is RECOMMENDED that the <dn> part be present to avoid | |||
ambiguity. | ambiguity. | |||
- If the <dn> part is present, the client MUST use this name in its | - If the <dn> part is present, the client MUST use this name in its | |||
next request to progress the operation, and if it is not present | next request to progress the operation, and if it is not present | |||
the client will use the same name as in the original request. | the client will use the same name as in the original request. | |||
- Some servers (e.g. participating in distributed indexing) may | - Some servers (e.g. participating in distributed indexing) may | |||
provide a different filter in a URL of a referral for a search | provide a different filter in a URL of a referral for a search | |||
operation. | operation. | |||
- If the <filter> part of the LDAP URL is present, the client MUST | - If the <filter> part of the LDAP URL is present, the client MUST | |||
use this filter in its next request to progress this search, and | use this filter in its next request to progress this search, and | |||
if it is not present the client MUST use the same filter as it | if it is not present the client MUST use the same filter as it | |||
used for that search. | used for that search. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- For search, it is RECOMMENDED that the <scope> part be present to | - For search, it is RECOMMENDED that the <scope> part be present to | |||
avoid ambiguity. | avoid ambiguity. | |||
- If the <scope> part is missing, the scope of the original search | - If the <scope> part is missing, the scope of the original search | |||
is used by the client to progress the operation. | is used by the client to progress the operation. | |||
- Other aspects of the new request may be the same as or different | - Other aspects of the new request may be the same as or different | |||
from the request which generated the referral. | from the request which generated the referral. | |||
Other kinds of URIs may be returned. The syntax and semantics of such | Other kinds of URIs may be returned. The syntax and semantics of such | |||
URIs is left to future specifications. Clients may ignore URIs that | URIs is left to future specifications. Clients may ignore URIs that | |||
they do not support. | they do not support. | |||
4.1.11. Controls | 4.1.11. Controls | |||
Controls provide a mechanism whereby the semantics and arguments of | Controls provide a mechanism whereby the semantics and arguments of | |||
skipping to change at line 604 | skipping to change at line 619 | |||
4.1.11. Controls | 4.1.11. Controls | |||
Controls provide a mechanism whereby the semantics and arguments of | Controls provide a mechanism whereby the semantics and arguments of | |||
existing LDAP operations may be extended. One or more controls may be | existing LDAP operations may be extended. One or more controls may be | |||
attached to a single LDAP message. A control only affects the | attached to a single LDAP message. A control only affects the | |||
semantics of the message it is attached to. | semantics of the message it is attached to. | |||
Controls sent by clients are termed 'request controls' and those sent | Controls sent by clients are termed 'request controls' and those sent | |||
by servers are termed 'response controls'. | by servers are termed 'response controls'. | |||
When an extension calls for a particular response control to be sent | ||||
in response to a request control, the response and request controls | ||||
are termed to be "paired". | ||||
Sermersheim Internet-Draft - Expires Aug 2004 Page 11 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
Controls ::= SEQUENCE OF control Control | Controls ::= SEQUENCE OF control Control | |||
Control ::= SEQUENCE { | Control ::= SEQUENCE { | |||
controlType LDAPOID, | controlType LDAPOID, | |||
criticality BOOLEAN DEFAULT FALSE, | criticality BOOLEAN DEFAULT FALSE, | |||
controlValue OCTET STRING OPTIONAL } | controlValue OCTET STRING OPTIONAL } | |||
The controlType field is the dotted-decimal representation of an | The controlType field is the dotted-decimal representation of an | |||
OBJECT IDENTIFIER which uniquely identifies the control, or the | OBJECT IDENTIFIER which uniquely identifies the control. This | |||
request control and its paired response control. This provides | provides unambiguous naming of controls. Often, response control(s) | |||
unambiguous naming of controls. | solicited by a request control share controlType values with the | |||
request control. | ||||
The criticality field only has meaning in controls attached to | The criticality field only has meaning in controls attached to | |||
request messages (except unbindRequest). For controls attached to | request messages (except unbindRequest). For controls attached to | |||
response messages and the unbindRequest, the criticality field SHOULD | response messages and the unbindRequest, the criticality field SHOULD | |||
be FALSE, and MUST be ignored by the receiving protocol peer. A value | be FALSE, and MUST be ignored by the receiving protocol peer. A value | |||
of TRUE indicates that it is unacceptable to perform the operation | of TRUE indicates that it is unacceptable to perform the operation | |||
without applying the semantics of the control and FALSE otherwise. | without applying the semantics of the control and FALSE otherwise. | |||
Specifically, the criticality field is applied as follows: | Specifically, the criticality field is applied as follows: | |||
- Regardless of the value of the criticality field, if the server | - Regardless of the value of the criticality field, if the server | |||
recognizes the control type and it is appropriate for the | recognizes the control type and it is appropriate for the | |||
operation, the server is to make use of the control when | operation, the server is to make use of the control when | |||
performing the operation. | performing the operation. | |||
- If the server does not recognize the control type or it is not | - If the server does not recognize the control type or it is not | |||
appropriate for the operation, and the criticality field is TRUE, | appropriate for the operation, and the criticality field is TRUE, | |||
the server MUST NOT perform the operation, and for operations that | the server MUST NOT perform the operation, and for operations that | |||
Lightweight Directory Access Protocol Version 3 | ||||
have a response message, MUST return unavailableCriticalExtension | have a response message, MUST return unavailableCriticalExtension | |||
in the resultCode. | in the resultCode. | |||
- If the server does not recognize the control type or it is not | - If the server does not recognize the control type or it is not | |||
appropriate for the operation, and the criticality field is FALSE, | appropriate for the operation, and the criticality field is FALSE, | |||
the server MUST ignore the control. | the server MUST ignore the control. | |||
The controlValue may contain information associated with the | The controlValue may contain information associated with the | |||
controlType. Its format is defined by the specification of the | controlType. Its format is defined by the specification of the | |||
control. Implementations MUST be prepared to handle arbitrary | control. Implementations MUST be prepared to handle arbitrary | |||
contents of the controlValue octet string, including zero bytes. It | contents of the controlValue octet string, including zero bytes. It | |||
is absent only if there is no value information which is associated | is absent only if there is no value information which is associated | |||
with a control of its type. When a controlValue is defined in terms | 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 | of ASN.1, and BER encoded according to Section 5.2, it also follows | |||
the extensibility rules in Section 4. | the extensibility rules in Section 4. | |||
Servers list the controlType of all request controls they recognize | Servers list the controlType of all request controls they recognize | |||
in the supportedControl attribute in the root DSE (Section 5.1 of | in the supportedControl attribute in the root DSE (Section 5.1 of | |||
[Models]). | [Models]). | |||
Controls SHOULD NOT be combined unless the semantics of the | Controls SHOULD NOT be combined unless the semantics of the | |||
combination has been specified. The semantics of control | combination has been specified. The semantics of control | |||
combinations, if specified, are generally found in the control | combinations, if specified, are generally found in the control | |||
specification most recently published. In the absence of combination | specification most recently published. In the absence of combination | |||
semantics, the behavior of the operation is undefined. | semantics, the behavior of the operation is undefined. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 12 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
Additionally, unless order-dependent semantics are given in a | Additionally, unless order-dependent semantics are given in a | |||
specification, the order of a combination of controls in the SEQUENCE | specification, the order of a combination of controls in the SEQUENCE | |||
is ignored. | is ignored. Where the order is to be ignored but cannot be ignored by | |||
the server, the operation fails with protocolError. | ||||
This document does not specify any controls. Controls may be | This document does not specify any controls. Controls may be | |||
specified in other documents. Documents detailing control extensions | specified in other documents. Documents detailing control extensions | |||
are to provide for each control: | are to provide for each control: | |||
- the OBJECT IDENTIFIER assigned to the control, | - the OBJECT IDENTIFIER assigned to the control, | |||
- direction as to what value the sender should provide for the | - direction as to what value the sender should provide for the | |||
criticality field (note: the semantics of the criticality field | criticality field (note: the semantics of the criticality field | |||
are defined above should not be altered by the control's | are defined above should not be altered by the control's | |||
skipping to change at line 695 | skipping to change at line 704 | |||
- the semantics of the control, and | - the semantics of the control, and | |||
- optionally, semantics regarding the combination of the control | - optionally, semantics regarding the combination of the control | |||
with other controls. | with other controls. | |||
4.2. Bind Operation | 4.2. Bind Operation | |||
The function of the Bind Operation is to allow authentication | The function of the Bind Operation is to allow authentication | |||
information to be exchanged between the client and server. The Bind | information to be exchanged between the client and server. The Bind | |||
Lightweight Directory Access Protocol Version 3 | ||||
operation should be thought of as the "authenticate" operation. | operation should be thought of as the "authenticate" operation. | |||
Authentication and security-related semantics of this operation are | Operational, authentication, and security-related semantics of this | |||
given in [AuthMeth]. | operation are given in [AuthMeth]. | |||
The Bind Request is defined as follows: | The Bind Request is defined as follows: | |||
BindRequest ::= [APPLICATION 0] SEQUENCE { | BindRequest ::= [APPLICATION 0] SEQUENCE { | |||
version INTEGER (1 .. 127), | version INTEGER (1 .. 127), | |||
name LDAPDN, | name LDAPDN, | |||
authentication AuthenticationChoice } | authentication AuthenticationChoice } | |||
AuthenticationChoice ::= CHOICE { | AuthenticationChoice ::= CHOICE { | |||
simple [0] OCTET STRING, | simple [0] OCTET STRING, | |||
skipping to change at line 721 | skipping to change at line 732 | |||
SaslCredentials ::= SEQUENCE { | SaslCredentials ::= SEQUENCE { | |||
mechanism LDAPString, | mechanism LDAPString, | |||
credentials OCTET STRING OPTIONAL } | credentials OCTET STRING OPTIONAL } | |||
Fields of the Bind Request are: | Fields of the Bind Request are: | |||
- version: A version number indicating the version of the protocol | - version: A version number indicating the version of the protocol | |||
to be used in this LDAP association. This document describes | to be used in this LDAP association. This document describes | |||
version 3 of the protocol. There is no version negotiation. The | version 3 of the protocol. There is no version negotiation. The | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 13 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
client sets this field to the version it desires. If the server | client sets this field to the version it desires. If the server | |||
does not support the specified version, it MUST respond with | does not support the specified version, it MUST respond with | |||
protocolError in the resultCode field of the BindResponse. | protocolError in the resultCode field of the BindResponse. | |||
- name: The name of the Directory object that the client wishes to | - name: The name of the Directory object that the client wishes to | |||
bind as. This field may take on a null value (a zero length | bind as. This field may take on a null value (a zero length | |||
string) for the purposes of anonymous binds ([AuthMeth] Section | string) for the purposes of anonymous binds ([AuthMeth] Section | |||
5.1) or when using Simple Authentication and Security Layer [SASL] | 5.1) or when using Simple Authentication and Security Layer [SASL] | |||
authentication ([AuthMeth] Section 3.3.2). Server behavior is | authentication ([AuthMeth] Section 3.3.2). Where the server | |||
undefined when the name is a null value, simple authentication is | ||||
used, and a non-null password is specified. Where the server | ||||
attempts to locate the named object, it SHALL NOT perform alias | attempts to locate the named object, it SHALL NOT perform alias | |||
dereferencing. | dereferencing. | |||
- authentication: information used in authentication. This type is | - authentication: information used in authentication. This type is | |||
extensible as defined in Section 3.7 of [LDAPIANA]. Servers that | extensible as defined in Section 3.7 of [LDAPIANA]. Servers that | |||
do not support a choice supplied by a client return | do not support a choice supplied by a client return | |||
authMethodNotSupported in the resultCode field of the | authMethodNotSupported in the resultCode field of the | |||
BindResponse. | BindResponse. | |||
Textual passwords (consisting of a character sequence with a known | Textual passwords (consisting of a character sequence with a known | |||
character set and encoding) transferred to the server using the | character set and encoding) transferred to the server using the | |||
simple AuthenticationChoice SHALL be transferred as [UTF-8] | simple AuthenticationChoice SHALL be transferred as [UTF-8] | |||
encoded [Unicode]. Prior to transfer, clients SHOULD prepare text | encoded [Unicode]. Prior to transfer, clients SHOULD prepare text | |||
passwords by applying the [SASLprep] profile of the [Stringprep] | passwords by applying the [SASLprep] profile of the [Stringprep] | |||
algorithm. Passwords consisting of other data (such as random | algorithm. Passwords consisting of other data (such as random | |||
octets) MUST NOT be altered. The determination of whether a | octets) MUST NOT be altered. The determination of whether a | |||
password is textual is a local client matter. | password is textual is a local client matter. | |||
Authorization is the use of this authentication information when | Lightweight Directory Access Protocol Version 3 | |||
performing operations. Authorization MAY be affected by factors | ||||
outside of the LDAP Bind Request, such as those provided by lower | Authorization is the process of enforcing policy while performing | |||
layer security services. | operations. Among other things, the process of authorization takes as | |||
input authentication information obtained during the bind operation | ||||
and/or other acts of authentication (such as lower layer security | ||||
services). | ||||
4.2.1. Processing of the Bind Request | 4.2.1. Processing of the Bind Request | |||
Before processing a BindRequest, all outstanding operations MUST | Before processing a BindRequest, all outstanding operations MUST | |||
either complete or be abandoned. The server may either wait for the | either complete or be abandoned. The server may either wait for the | |||
outstanding operations to complete, or abandon them. The server then | outstanding operations to complete, or abandon them. The server then | |||
proceeds to authenticate the client in either a single-step, or | proceeds to authenticate the client in either a single-step, or | |||
multi-step bind process. Each step requires the server to return a | multi-step bind process. Each step requires the server to return a | |||
BindResponse to indicate the status of authentication. | BindResponse to indicate the status of authentication. | |||
If the client did not bind before sending a request and receives an | If the client did not bind before sending a request and receives an | |||
operationsError to that request, it may then send a Bind Request. If | operationsError to that request, it may then send a Bind Request. If | |||
this also fails or the client chooses not to bind on the existing | this also fails or the client chooses not to bind on the existing | |||
connection, it may close the connection, reopen it and begin again by | connection, it may close the stream, reopen it and begin again by | |||
first sending a PDU with a Bind Request. This will aid in | first sending a PDU with a Bind Request. This will aid in | |||
interoperating with servers implementing other versions of LDAP. | interoperating with servers implementing other versions of LDAP. | |||
Clients may send multiple Bind Requests on a connection to change the | Clients may send multiple Bind Requests on a connection to change the | |||
authentication and/or security associations or to complete a multi- | authentication and/or security associations or to complete a multi- | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 14 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
stage bind process. Authentication from earlier binds is subsequently | stage bind process. Authentication from earlier binds is subsequently | |||
ignored. | ignored. | |||
For some SASL authentication mechanisms, it may be necessary for the | For some SASL authentication mechanisms, it may be necessary for the | |||
client to invoke the BindRequest multiple times. This is indicated by | client to invoke the BindRequest multiple times ([AuthMeth] Section | |||
the server sending a BindResponse with the resultCode set to | 8.2). Clients MUST NOT invoke operations between two Bind Requests | |||
saslBindInProgress. This indicates that the server requires the | made as part of a multi-stage bind. | |||
client to send a new bind request, with the same sasl mechanism, to | ||||
continue the authentication process. 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 | A client may abort a SASL bind negotiation by sending a BindRequest | |||
with a different value in the mechanism field of SaslCredentials, or | with a different value in the mechanism field of SaslCredentials, or | |||
an AuthenticationChoice other than sasl. | an AuthenticationChoice other than sasl. | |||
If the client sends a BindRequest with the sasl mechanism field as an | If the client sends a BindRequest with the sasl mechanism field as an | |||
empty string, the server MUST return a BindResponse with | empty string, the server MUST return a BindResponse with | |||
authMethodNotSupported as the resultCode. This will allow clients to | authMethodNotSupported as the resultCode. This will allow clients to | |||
abort a negotiation if it wishes to try again with the same SASL | abort a negotiation if it wishes to try again with the same SASL | |||
mechanism. | mechanism. | |||
A failed Bind Operation has the effect of placing the connection in | ||||
an anonymous state. | ||||
4.2.2. Bind Response | 4.2.2. Bind Response | |||
The Bind Response is defined as follows. | The Bind Response is defined as follows. | |||
BindResponse ::= [APPLICATION 1] SEQUENCE { | BindResponse ::= [APPLICATION 1] SEQUENCE { | |||
COMPONENTS OF LDAPResult, | COMPONENTS OF LDAPResult, | |||
serverSaslCreds [7] OCTET STRING OPTIONAL } | serverSaslCreds [7] OCTET STRING OPTIONAL } | |||
BindResponse consists simply of an indication from the server of the | BindResponse consists simply of an indication from the server of the | |||
status of the client's request for authentication. | status of the client's request for authentication. | |||
Lightweight Directory Access Protocol Version 3 | ||||
A successful bind operation is indicated by a BindResponse with a | A successful bind operation is indicated by a BindResponse with a | |||
resultCode set to success. Otherwise, an appropriate result code is | resultCode set to success. Otherwise, an appropriate result code is | |||
set in the BindResponse. For bind, the protocolError result code may | set in the BindResponse. For bind, the protocolError result code may | |||
be used to indicate that the version number supplied by the client is | be used to indicate that the version number supplied by the client is | |||
unsupported. | unsupported. | |||
If the client receives a BindResponse where the resultCode field is | If the client receives a BindResponse where the resultCode field is | |||
protocolError, it is to assume that the server does not support this | 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 LDAP. While the client may be able proceed with another | |||
version of this protocol (this may or may not require establishing a | version of this protocol (this may or may not require closing and re- | |||
new connection), how to proceed with another version of this protocol | establishing the stream), how to proceed with another version of this | |||
is beyond the scope of this document. Clients which are unable or | protocol is beyond the scope of this document. Clients which are | |||
unwilling to proceed SHOULD drop the underlying connection. | unable or unwilling to proceed SHOULD close the underlying stream. | |||
The serverSaslCreds field is used as part of a SASL-defined bind | The serverSaslCreds field is used as part of a SASL-defined bind | |||
mechanism to allow the client to authenticate the server to which it | mechanism to allow the client to authenticate the server to which it | |||
is communicating, or to perform "challenge-response" authentication. | is communicating, or to perform "challenge-response" authentication. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 15 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
If the client bound with the simple choice, or the SASL mechanism | If the client bound with the simple choice, or the SASL mechanism | |||
does not require the server to return information to the client, then | does not require the server to return information to the client, then | |||
this field SHALL NOT be included in the BindResponse. | this field SHALL NOT be included in the BindResponse. | |||
4.3. Unbind Operation | 4.3. Unbind Operation | |||
The function of the Unbind Operation is to terminate an LDAP | The function of the Unbind Operation is to terminate an LDAP | |||
association and connection. The Unbind operation is not the | association and close the stream. The Unbind operation is not the | |||
antithesis of the Bind operation as the name implies. The naming of | antithesis of the Bind operation as the name implies. The naming of | |||
these operations is historical. The Unbind operation should be | these operations is historical. The Unbind operation should be | |||
thought of as the "quit" operation. | thought of as the "quit" operation. | |||
The Unbind Operation is defined as follows: | The Unbind Operation is defined as follows: | |||
UnbindRequest ::= [APPLICATION 2] NULL | UnbindRequest ::= [APPLICATION 2] NULL | |||
The Unbind Operation has no response defined. Upon transmission of | The Unbind Operation has no response defined. Upon transmission of | |||
the UnbindRequest, each protocol peer is to consider the LDAP | the UnbindRequest, each protocol peer is to consider the LDAP | |||
association terminated, MUST cease transmission of messages to the | association terminated, MUST cease transmission of messages to the | |||
other peer, and MUST close the connection. Outstanding operations are | other peer, and MUST close the stream. Outstanding operations are | |||
handled as specified in Section 5.2. | handled as specified in Section 5.1. | |||
4.4. Unsolicited Notification | 4.4. Unsolicited Notification | |||
An unsolicited notification is an LDAPMessage sent from the server to | An unsolicited notification is an LDAPMessage sent from the server to | |||
the client which is not in response to any LDAPMessage received by | the client which is not in response to any LDAPMessage received by | |||
the server. It is used to signal an extraordinary condition in the | the server. It is used to signal an extraordinary condition in the | |||
server or in the connection between the client and the server. The | server or in the connection between the client and the server. The | |||
notification is of an advisory nature, and the server will not expect | notification is of an advisory nature, and the server will not expect | |||
any response to be returned from the client. | any response to be returned from the client. | |||
The unsolicited notification is structured as an LDAPMessage in which | The unsolicited notification is structured as an LDAPMessage in which | |||
the messageID is zero and protocolOp is of the extendedResp form (See | the messageID is zero and protocolOp is of the extendedResp form (See | |||
Lightweight Directory Access Protocol Version 3 | ||||
Section 4.12). The responseName field of the ExtendedResponse always | Section 4.12). The responseName field of the ExtendedResponse always | |||
contains an LDAPOID which is unique for this notification. | contains an LDAPOID which is unique for this notification. | |||
One unsolicited notification (Notice of Disconnection) is defined in | One unsolicited notification (Notice of Disconnection) is defined in | |||
this document. The specification of an unsolicited notification | this document. The specification of an unsolicited notification | |||
consists of: | consists of: | |||
- the OBJECT IDENTIFIER assigned to the notification (to be | - the OBJECT IDENTIFIER assigned to the notification (to be | |||
specified in the responseName, | specified in the responseName, | |||
- the format of the contents (if any) of the responseValue, | - the format of the contents (if any) of the responseValue, | |||
- the circumstances which will cause the notification to be | - the circumstances which will cause the notification to be | |||
returned, and | returned, and | |||
- the semantics of the operation. | - the semantics of the operation. | |||
4.4.1. Notice of Disconnection | 4.4.1. Notice of Disconnection | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 16 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
This notification may be used by the server to advise the client that | This notification may be used by the server to advise the client that | |||
the server is about to close the connection due to an error | the server is about to close the stream due to an error condition. | |||
condition. This notification is intended to assist clients in | This notification is intended to assist clients in distinguishing | |||
distinguishing between an error condition and a transient network | between an error condition and a transient network failure. Note that | |||
failure. Note that this notification is not a response to an unbind | this notification is not a response to an unbind requested by the | |||
requested by the client. Outstanding operations are handled as | client. Outstanding operations are handled as specified in Section | |||
specified in Section 5.2. | 5.1. | |||
The responseName is 1.3.6.1.4.1.1466.20036, the response field is | The responseName is 1.3.6.1.4.1.1466.20036, the response field is | |||
absent, and the resultCode is used to indicate the reason for the | absent, and the resultCode is used to indicate the reason for the | |||
disconnection. | disconnection. | |||
The following result codes have these meanings when used in this | The following result codes have these meanings when used in this | |||
notification: | notification: | |||
- protocolError: The server has received data from the client in | - protocolError: The server has received data from the client in | |||
which the LDAPMessage structure could not be parsed. | which the LDAPMessage structure could not be parsed. | |||
skipping to change at line 923 | skipping to change at line 917 | |||
unexpectedly failed or been compromised, or that the server now | unexpectedly failed or been compromised, or that the server now | |||
requires the client to authenticate using a strong(er) mechanism. | requires the client to authenticate using a strong(er) mechanism. | |||
- unavailable: This server will stop accepting new connections and | - unavailable: This server will stop accepting new connections and | |||
operations on all existing connections, and be unavailable for an | operations on all existing connections, and be unavailable for an | |||
extended period of time. The client may make use of an alternative | extended period of time. The client may make use of an alternative | |||
server. | server. | |||
Upon transmission of the Notice of Disconnection, the server is to | Upon transmission of the Notice of Disconnection, the server is to | |||
consider the LDAP association terminated, MUST cease transmission of | consider the LDAP association terminated, MUST cease transmission of | |||
messages to the client, and MUST close the connection. | messages to the client, and MUST close the stream. | |||
4.5. Search Operation | 4.5. Search Operation | |||
Lightweight Directory Access Protocol Version 3 | ||||
The Search Operation is used to request a server to return, subject | The Search Operation is used to request a server to return, subject | |||
to access controls and other restrictions, a set of entries matching | to access controls and other restrictions, a set of entries matching | |||
a complex search criterion. This can be used to read attributes from | a complex search criterion. This can be used to read attributes from | |||
a single entry, from entries immediately subordinate to a particular | a single entry, from entries immediately subordinate to a particular | |||
entry, or a whole subtree of entries. | entry, or a whole subtree of entries. | |||
4.5.1. Search Request | 4.5.1. Search Request | |||
The Search Request is defined as follows: | The Search Request is defined as follows: | |||
SearchRequest ::= [APPLICATION 3] SEQUENCE { | SearchRequest ::= [APPLICATION 3] SEQUENCE { | |||
baseObject LDAPDN, | baseObject LDAPDN, | |||
scope ENUMERATED { | scope ENUMERATED { | |||
baseObject (0), | baseObject (0), | |||
singleLevel (1), | singleLevel (1), | |||
wholeSubtree (2) }, | wholeSubtree (2) }, | |||
derefAliases ENUMERATED { | derefAliases ENUMERATED { | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 17 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
neverDerefAliases (0), | neverDerefAliases (0), | |||
derefInSearching (1), | derefInSearching (1), | |||
derefFindingBaseObj (2), | derefFindingBaseObj (2), | |||
derefAlways (3) }, | derefAlways (3) }, | |||
sizeLimit INTEGER (0 .. maxInt), | sizeLimit INTEGER (0 .. maxInt), | |||
timeLimit INTEGER (0 .. maxInt), | timeLimit INTEGER (0 .. maxInt), | |||
typesOnly BOOLEAN, | typesOnly BOOLEAN, | |||
filter Filter, | filter Filter, | |||
attributes AttributeSelection } | attributes AttributeSelection } | |||
AttributeSelection ::= SEQUENCE OF selection LDAPString | AttributeSelection ::= SEQUENCE OF selector LDAPString | |||
-- constrained to <attributeSelection> below | -- The LDAPString is constrained to | |||
-- <attributeSelector> below | ||||
Filter ::= CHOICE { | Filter ::= CHOICE { | |||
and [0] SET SIZE (1..MAX) OF filter Filter, | and [0] SET SIZE (1..MAX) OF filter Filter, | |||
or [1] SET SIZE (1..MAX) OF filter Filter, | or [1] SET SIZE (1..MAX) OF filter Filter, | |||
not [2] Filter, | not [2] Filter, | |||
equalityMatch [3] AttributeValueAssertion, | equalityMatch [3] AttributeValueAssertion, | |||
substrings [4] SubstringFilter, | substrings [4] SubstringFilter, | |||
greaterOrEqual [5] AttributeValueAssertion, | greaterOrEqual [5] AttributeValueAssertion, | |||
lessOrEqual [6] AttributeValueAssertion, | lessOrEqual [6] AttributeValueAssertion, | |||
present [7] AttributeDescription, | present [7] AttributeDescription, | |||
skipping to change at line 982 | skipping to change at line 974 | |||
SubstringFilter ::= SEQUENCE { | SubstringFilter ::= SEQUENCE { | |||
type AttributeDescription, | type AttributeDescription, | |||
-- initial and final can occur at most once | -- initial and final can occur at most once | |||
substrings SEQUENCE SIZE (1..MAX) OF substring CHOICE { | substrings SEQUENCE SIZE (1..MAX) OF substring CHOICE { | |||
initial [0] AssertionValue, | initial [0] AssertionValue, | |||
any [1] AssertionValue, | any [1] AssertionValue, | |||
final [2] AssertionValue } } | final [2] AssertionValue } } | |||
MatchingRuleAssertion ::= SEQUENCE { | MatchingRuleAssertion ::= SEQUENCE { | |||
Lightweight Directory Access Protocol Version 3 | ||||
matchingRule [1] MatchingRuleId OPTIONAL, | matchingRule [1] MatchingRuleId OPTIONAL, | |||
type [2] AttributeDescription OPTIONAL, | type [2] AttributeDescription OPTIONAL, | |||
matchValue [3] AssertionValue, | matchValue [3] AssertionValue, | |||
dnAttributes [4] BOOLEAN DEFAULT FALSE } | dnAttributes [4] BOOLEAN DEFAULT FALSE } | |||
Fields of the Search Request are: | Fields of the Search Request are: | |||
- baseObject: The name of the base object entry relative to which | - baseObject: The name of the base object entry relative to which | |||
the search is to be performed. | the search is to be performed. | |||
- scope: Specifies the scope of the search to be performed. The | - scope: Specifies the scope of the search to be performed. The | |||
semantics (as described in [X.511]) of the possible values of this | semantics (as described in [X.511]) of the possible values of this | |||
field are: | field are: | |||
baseObject: The scope is constrained to the entry named by | baseObject: The scope is constrained to the entry named by | |||
baseObject. | baseObject. | |||
singleLevel: The scope is constrained to the immediate | singleLevel: The scope is constrained to the immediate | |||
subordinates of the entry named by baseObject. | subordinates of the entry named by baseObject. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 18 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
wholeSubtree: the scope is constrained to the entry named by | wholeSubtree: the scope is constrained to the entry named by | |||
the baseObject, and all its subordinates. | the baseObject, and all its subordinates. | |||
- derefAliases: An indicator as to how alias entries (as defined in | - derefAliases: An indicator as to how alias entries (as defined in | |||
[Models]) are to be handled in searching. The semantics of the | [Models]) are to be handled in searching. The semantics of the | |||
possible values of this field are: | possible values of this field are: | |||
neverDerefAliases: Do not dereference aliases in searching or | neverDerefAliases: Do not dereference aliases in searching or | |||
in locating the base object of the search. | in locating the base object of the search. | |||
skipping to change at line 1038 | skipping to change at line 1029 | |||
locating the base object of the search. | locating the base object of the search. | |||
Servers MUST detect looping while dereferencing aliases in order | Servers MUST detect looping while dereferencing aliases in order | |||
to prevent denial of service attacks of this nature. | to prevent denial of service attacks of this nature. | |||
- sizeLimit: A size limit that restricts the maximum number of | - sizeLimit: A size limit that restricts the maximum number of | |||
entries to be returned as a result of the search. A value of zero | entries to be returned as a result of the search. A value of zero | |||
in this field indicates that no client-requested size limit | in this field indicates that no client-requested size limit | |||
restrictions are in effect for the search. Servers may also | restrictions are in effect for the search. Servers may also | |||
enforce a maximum number of entries to return. | enforce a maximum number of entries to return. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- timeLimit: A time limit that restricts the maximum time (in | - timeLimit: A time limit that restricts the maximum time (in | |||
seconds) allowed for a search. A value of zero in this field | seconds) allowed for a search. A value of zero in this field | |||
indicates that no client-requested time limit restrictions are in | indicates that no client-requested time limit restrictions are in | |||
effect for the search. Servers may also enforce a maximum time | effect for the search. Servers may also enforce a maximum time | |||
limit for the search. | limit for the search. | |||
- typesOnly: An indicator as to whether search results are to | - typesOnly: An indicator as to whether search results are to | |||
contain both attribute descriptions and values, or just attribute | contain both attribute descriptions and values, or just attribute | |||
descriptions. Setting this field to TRUE causes only attribute | descriptions. Setting this field to TRUE causes only attribute | |||
descriptions (no values) to be returned. Setting this field to | descriptions (no values) to be returned. Setting this field to | |||
FALSE causes both attribute descriptions and values to be | FALSE causes both attribute descriptions and values to be | |||
returned. | returned. | |||
- filter: A filter that defines the conditions that must be | - filter: A filter that defines the conditions that must be | |||
fulfilled in order for the search to match a given entry. | fulfilled in order for the search to match a given entry. | |||
The 'and', 'or' and 'not' choices can be used to form combinations | The 'and', 'or' and 'not' choices can be used to form combinations | |||
of filters. At least one filter element MUST be present in an | of filters. At least one filter element MUST be present in an | |||
'and' or 'or' choice. The others match against individual | 'and' or 'or' choice. The others match against individual | |||
attribute values of entries in the scope of the search. | attribute values of entries in the scope of the search. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 19 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
(Implementor's note: the 'not' filter is an example of a tagged | (Implementor's note: the 'not' filter is an example of a tagged | |||
choice in an implicitly-tagged module. In BER this is treated as | choice in an implicitly-tagged module. In BER this is treated as | |||
if the tag was explicit.) | if the tag was explicit.) | |||
A server MUST evaluate filters according to the three-valued logic | A server MUST evaluate filters according to the three-valued logic | |||
of X.511 (1993) Section 7.8.1. In summary, a filter is evaluated | of X.511 (1993) Section 7.8.1. In summary, a filter is evaluated | |||
to either "TRUE", "FALSE" or "Undefined". If the filter evaluates | to either "TRUE", "FALSE" or "Undefined". If the filter evaluates | |||
to TRUE for a particular entry, then the attributes of that entry | to TRUE for a particular entry, then the attributes of that entry | |||
are returned as part of the search result (subject to any | are returned as part of the search result (subject to any | |||
applicable access control restrictions). If the filter evaluates | applicable access control restrictions). If the filter evaluates | |||
skipping to change at line 1096 | skipping to change at line 1085 | |||
The matching rule for equalityMatch filter items is defined by the | The matching rule for equalityMatch filter items is defined by the | |||
EQUALITY matching rule for the attribute type. | EQUALITY matching rule for the attribute type. | |||
There SHALL be at most one 'initial', and at most one 'final' in | There SHALL be at most one 'initial', and at most one 'final' in | |||
the 'substrings' of a SubstringFilter. If 'initial' is present, it | the 'substrings' of a SubstringFilter. If 'initial' is present, it | |||
SHALL be the first element of 'substrings'. If 'final' is present, | SHALL be the first element of 'substrings'. If 'final' is present, | |||
it SHALL be the last element of 'substrings'. | it SHALL be the last element of 'substrings'. | |||
The matching rule for AssertionValues in a substrings filter item | The matching rule for AssertionValues in a substrings filter item | |||
is defined by the SUBSTR matching rule for the attribute type. | is defined by the SUBSTR matching rule for the attribute type. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Note that the AssertionValue in a substrings filter item conforms | Note that the AssertionValue in a substrings filter item conforms | |||
to the assertion syntax of the EQUALITY matching rule for the | to the assertion syntax of the EQUALITY matching rule for the | |||
attribute type rather than the assertion syntax of the SUBSTR | attribute type rather than the assertion syntax of the SUBSTR | |||
matching rule for the attribute type. Conceptually, the entire | matching rule for the attribute type. Conceptually, the entire | |||
SubstringFilter is converted into an assertion value of the | SubstringFilter is converted into an assertion value of the | |||
substrings matching rule prior to applying the rule. | substrings matching rule prior to applying the rule. | |||
The matching rule for the greaterOrEqual filter item is defined by | The matching rule for the greaterOrEqual filter item is defined by | |||
the ORDERING and EQUALITY matching rules for the attribute type. | the ORDERING and EQUALITY matching rules for the attribute type. | |||
skipping to change at line 1117 | skipping to change at line 1109 | |||
the ORDERING matching rule for the attribute type. | the ORDERING matching rule for the attribute type. | |||
An approxMatch filter item evaluates to TRUE when there is a value | An approxMatch filter item evaluates to TRUE when there is a value | |||
of the attribute or subtype for which some locally-defined | of the attribute or subtype for which some locally-defined | |||
approximate matching algorithm (e.g. spelling variations, phonetic | approximate matching algorithm (e.g. spelling variations, phonetic | |||
match, etc.) returns TRUE. If an item matches for equality, it | match, etc.) returns TRUE. If an item matches for equality, it | |||
also satisfies an approximate match. If approximate matching is | also satisfies an approximate match. If approximate matching is | |||
not supported, this filter item should be treated as an | not supported, this filter item should be treated as an | |||
equalityMatch. | equalityMatch. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 20 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
An extensibleMatch filter item is evaluated as follows: | An extensibleMatch filter item is evaluated as follows: | |||
If the matchingRule field is absent, the type field MUST be | If the matchingRule field is absent, the type field MUST be | |||
present, and an equality match is performed for that type. | present, and an equality match is performed for that type. | |||
If the type field is absent and the matchingRule is present, the | If the type field is absent and the matchingRule is present, the | |||
matchValue is compared against all attributes in an entry which | matchValue is compared against all attributes in an entry which | |||
support that matchingRule. The matchingRule determines the | support that matchingRule. The matchingRule determines the | |||
syntax for the assertion value. The filter item evaluates to | syntax for the assertion value. The filter item evaluates to | |||
TRUE if it matches with at least one attribute in the entry, | TRUE if it matches with at least one attribute in the entry, | |||
skipping to change at line 1153 | skipping to change at line 1142 | |||
at least one attribute in the distinguished name for which the | at least one attribute in the distinguished name for which the | |||
filter item evaluates to TRUE. The dnAttributes field is present | filter item evaluates to TRUE. The dnAttributes field is present | |||
to alleviate the need for multiple versions of generic matching | to alleviate the need for multiple versions of generic matching | |||
rules (such as word matching), where one applies to entries and | rules (such as word matching), where one applies to entries and | |||
another applies to entries and dn attributes as well. | another applies to entries and dn attributes as well. | |||
A filter item evaluates to Undefined when the server would not be | A filter item evaluates to Undefined when the server would not be | |||
able to determine whether the assertion value matches an entry. If | able to determine whether the assertion value matches an entry. If | |||
an attribute description in an equalityMatch, substrings, | an attribute description in an equalityMatch, substrings, | |||
greaterOrEqual, lessOrEqual, approxMatch or extensibleMatch filter | greaterOrEqual, lessOrEqual, approxMatch or extensibleMatch filter | |||
Lightweight Directory Access Protocol Version 3 | ||||
is not recognized by the server, a matching rule id in the | is not recognized by the server, a matching rule id in the | |||
extensibleMatch is not recognized by the server, the assertion | extensibleMatch is not recognized by the server, the assertion | |||
value is invalid, or the type of filtering requested is not | value is invalid, or the type of filtering requested is not | |||
implemented, then the filter is Undefined. Thus for example if a | implemented, then the filter is Undefined. Thus for example if a | |||
server did not recognize the attribute type shoeSize, a filter of | server did not recognize the attribute type shoeSize, a filter of | |||
(shoeSize=*) would evaluate to FALSE, and the filters | (shoeSize=*) would evaluate to FALSE, and the filters | |||
(shoeSize=12), (shoeSize>=12) and (shoeSize<=12) would evaluate to | (shoeSize=12), (shoeSize>=12) and (shoeSize<=12) would evaluate to | |||
Undefined. | Undefined. | |||
Servers MUST NOT return errors if attribute descriptions or | Servers MUST NOT return errors if attribute descriptions or | |||
matching rule ids are not recognized, assertion values are | matching rule ids are not recognized, assertion values are | |||
invalid, or the assertion syntax is not supported. More details of | invalid, or the assertion syntax is not supported. More details of | |||
filter processing are given in Section 7.8 of [X.511]. | filter processing are given in Section 7.8 of [X.511]. | |||
- attributes: A list of the attributes to be returned from each | - attributes: A selection list of the attributes to be returned from | |||
entry which matches the search filter. LDAPString values of this | each entry which matches the search filter. LDAPString values of | |||
field are constrained to the following Augmented Backus-Naur Form | this field are constrained to the following Augmented Backus-Naur | |||
([ABNF]): | Form ([ABNF]): | |||
attributeSelection = attributedescription / selectionspecial | ||||
Sermersheim Internet-Draft - Expires Aug 2004 Page 21 | attributeSelector = attributedescription / selectorpecial | |||
Lightweight Directory Access Protocol Version 3 | ||||
selectionspecial = noattrs / alluserattrs | selectorspecial = noattrs / alluserattrs | |||
noattrs = %x31.2E.31 ; "1.1" | noattrs = %x31.2E.31 ; "1.1" | |||
alluserattrs = %x2A ; asterisk ("*") | alluserattrs = %x2A ; asterisk ("*") | |||
The <attributedescription> production is defined in Section 2.5 of | The <attributedescription> production is defined in Section 2.5 of | |||
[Models]. | [Models]. | |||
There are three special cases which may exist in the attribute | There are three special cases which may exist in the attribute | |||
selection: | selection: | |||
skipping to change at line 1207 | skipping to change at line 1198 | |||
A list containing only the OID "1.1" indicates that no values are | A list containing only the OID "1.1" indicates that no values are | |||
to be returned. If "1.1" is provided with other values, the "1.1" | to be returned. If "1.1" is provided with other values, the "1.1" | |||
value is ignored. This OID was chosen because it does not (and can | value is ignored. This OID was chosen because it does not (and can | |||
not) correspond to any attribute in use. | not) correspond to any attribute in use. | |||
Client implementors should note that even if all user attributes | Client implementors should note that even if all user attributes | |||
are requested, some attributes and/or attribute values of the | are requested, some attributes and/or attribute values of the | |||
entry may not be included in search results due to access controls | entry may not be included in search results due to access controls | |||
or other restrictions. Furthermore, servers will not return | or other restrictions. Furthermore, servers will not return | |||
Lightweight Directory Access Protocol Version 3 | ||||
operational attributes, such as objectClasses or attributeTypes, | operational attributes, such as objectClasses or attributeTypes, | |||
unless they are listed by name. Operational attributes are | unless they are listed by name. Operational attributes are | |||
described in [Models]. | described in [Models]. | |||
Attributes are returned at most once in an entry. If an attribute | Attributes are returned at most once in an entry. If an attribute | |||
description is named more than once in the list, the subsequent | description is named more than once in the list, the subsequent | |||
names are ignored. If an attribute description in the list is not | names are ignored. If an attribute description in the list is not | |||
recognized, it is ignored by the server. | recognized, it is ignored by the server. | |||
Note that an X.500 "list"-like operation can be emulated by the | Note that an X.500 "list"-like operation can be emulated by the | |||
client requesting a one-level LDAP search operation with a filter | client requesting a one-level LDAP search operation with a filter | |||
checking for the presence of the 'objectClass' attribute, and that an | checking for the presence of the 'objectClass' attribute, and that an | |||
X.500 "read"-like operation can be emulated by a base object LDAP | X.500 "read"-like operation can be emulated by a base object LDAP | |||
search operation with the same filter. A server which provides a | search operation with the same filter. A server which provides a | |||
gateway to X.500 is not required to use the Read or List operations, | 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 | although it may choose to do so, and if it does, it must provide the | |||
same semantics as the X.500 search operation. | same semantics as the X.500 search operation. | |||
4.5.2. Search Result | 4.5.2. Search Result | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 22 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
The results of the search operation are returned as zero or more | The results of the search operation are returned as zero or more | |||
searchResultEntry messages, zero or more SearchResultReference | searchResultEntry messages, zero or more SearchResultReference | |||
messages, followed by a single searchResultDone message. | messages, followed by a single searchResultDone message. | |||
SearchResultEntry ::= [APPLICATION 4] SEQUENCE { | SearchResultEntry ::= [APPLICATION 4] SEQUENCE { | |||
objectName LDAPDN, | objectName LDAPDN, | |||
attributes PartialAttributeList } | attributes PartialAttributeList } | |||
PartialAttributeList ::= SEQUENCE OF | PartialAttributeList ::= SEQUENCE OF | |||
partialAttribute PartialAttribute | partialAttribute PartialAttribute | |||
skipping to change at line 1262 | skipping to change at line 1252 | |||
Each SearchResultEntry represents an entry found during the search. | Each SearchResultEntry represents an entry found during the search. | |||
Each SearchResultReference represents an area not yet explored during | Each SearchResultReference represents an area not yet explored during | |||
the search. The SearchResultEntry and SearchResultReference PDUs may | the search. The SearchResultEntry and SearchResultReference PDUs may | |||
come in any order. Following all the SearchResultReference and | come in any order. Following all the SearchResultReference and | |||
SearchResultEntry responses, the server returns a SearchResultDone | SearchResultEntry responses, the server returns a SearchResultDone | |||
response, which contains an indication of success, or detailing any | response, which contains an indication of success, or detailing any | |||
errors that have occurred. | errors that have occurred. | |||
Each entry returned in a SearchResultEntry will contain all | Each entry returned in a SearchResultEntry will contain all | |||
appropriate attributes as specified in the attributes field of the | appropriate attributes as specified in the attributes field of the | |||
Lightweight Directory Access Protocol Version 3 | ||||
Search Request. Return of attributes is subject to access control and | Search Request. Return of attributes is subject to access control and | |||
other administrative policy. | other administrative policy. | |||
Some attributes may be constructed by the server and appear in a | Some attributes may be constructed by the server and appear in a | |||
SearchResultEntry attribute list, although they are not stored | SearchResultEntry attribute list, although they are not stored | |||
attributes of an entry. Clients SHOULD NOT assume that all attributes | attributes of an entry. Clients SHOULD NOT assume that all attributes | |||
can be modified, even if permitted by access control. | can be modified, even if permitted by access control. | |||
If the server's schema defines short names [Models] for an attribute | If the server's schema defines short names [Models] for an attribute | |||
type then the server SHOULD use one of those names in attribute | type then the server SHOULD use one of those names in attribute | |||
skipping to change at line 1283 | skipping to change at line 1275 | |||
<numericoid> [Models] format of the attribute type's object | <numericoid> [Models] format of the attribute type's object | |||
identifier). The server SHOULD NOT use the short name if that name is | identifier). The server SHOULD NOT use the short name if that name is | |||
known by the server to be ambiguous, or otherwise likely to cause | known by the server to be ambiguous, or otherwise likely to cause | |||
interoperability problems. | interoperability problems. | |||
4.5.3. Continuation References in the Search Result | 4.5.3. Continuation References in the Search Result | |||
If the server was able to locate the entry referred to by the | If the server was able to locate the entry referred to by the | |||
baseObject but was unable to search one or more non-local entries, | baseObject but was unable to search one or more non-local entries, | |||
the server may return one or more SearchResultReference entries, each | the server may return one or more SearchResultReference entries, each | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 23 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
containing a reference to another set of servers for continuing the | containing a reference to another set of servers for continuing the | |||
operation. A server MUST NOT return any SearchResultReference if it | operation. A server MUST NOT return any SearchResultReference if it | |||
has not located the baseObject and thus has not searched any entries; | has not located the baseObject and thus has not searched any entries; | |||
in this case it would return a SearchResultDone containing a referral | in this case it would return a SearchResultDone containing either a | |||
result code. | 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 | If a server holds a copy or partial copy of the subordinate naming | |||
context [Section 5 of Models], it may use the search filter to | context [Section 5 of Models], it may use the search filter to | |||
determine whether or not to return a SearchResultReference response. | determine whether or not to return a SearchResultReference response. | |||
Otherwise SearchResultReference responses are always returned when in | Otherwise SearchResultReference responses are always returned when in | |||
scope. | scope. | |||
The SearchResultReference is of the same data type as the Referral. | The SearchResultReference is of the same data type as the Referral. | |||
A URI for a server implementing LDAP and accessible via [TCP]/[IP] | A URI for a server implementing LDAP and accessible via [TCP]/[IP] | |||
skipping to change at line 1319 | skipping to change at line 1308 | |||
wishes to individually. | wishes to individually. | |||
Clients that follow search continuation references MUST ensure that | Clients that follow search continuation references MUST ensure that | |||
they do not loop between servers. They MUST NOT repeatedly contact | they do not loop between servers. They MUST NOT repeatedly contact | |||
the same server for the same request with the same target entry name, | the same server for the same request with the same target entry name, | |||
scope and filter. Some clients use a counter that is incremented each | scope and filter. Some clients use a counter that is incremented each | |||
time search result reference handling occurs for an operation, and | time search result reference handling occurs for an operation, and | |||
these kinds of clients MUST be able to handle at least ten nested | these kinds of clients MUST be able to handle at least ten nested | |||
search result references between the root and a leaf entry. | search result references between the root and a leaf entry. | |||
Lightweight Directory Access Protocol Version 3 | ||||
When an LDAP URL is used, the following instructions are followed: | When an LDAP URL is used, the following instructions are followed: | |||
- The <dn> part of the URL MUST be present, with the new target | - The <dn> part of the URL MUST be present, with the new target | |||
object name. The client MUST use this name when following the | object name. The client MUST use this name when following the | |||
reference. UTF-8 encoded characters appearing in the string | reference. UTF-8 encoded characters appearing in the string | |||
representation of a DN or search filter may not be legal for URLs | representation of a DN or search filter may not be legal for URLs | |||
(e.g. spaces) and MUST be escaped using the % method in [URI]. | (e.g. spaces) and MUST be escaped using the % method in [URI]. | |||
- Some servers (e.g. participating in distributed indexing) may | - Some servers (e.g. participating in distributed indexing) may | |||
provide a different filter in a URL of a SearchResultReference. | provide a different filter in a URL of a SearchResultReference. | |||
- If the <filter> part of the URL is present, the client MUST use | - If the <filter> part of the URL is present, the client MUST use | |||
this filter in its next request to progress this search, and if it | this filter in its next request to progress this search, and if it | |||
is not present the client MUST use the same filter as it used for | is not present the client MUST use the same filter as it used for | |||
that search. | that search. | |||
- If the originating search scope was singleLevel, the <scope> part | - If the originating search scope was singleLevel, the <scope> part | |||
of the URL will be "base". | of the URL will be "base". | |||
- it is RECOMMENDED that the <scope> part be present to avoid | - it is RECOMMENDED that the <scope> part be present to avoid | |||
ambiguity. | ambiguity. | |||
- Other aspects of the new search request may be the same as or | - Other aspects of the new search request may be the same as or | |||
different from the search request which generated the | different from the search request which generated the | |||
SearchResultReference. | SearchResultReference. | |||
- The name of an unexplored subtree in a SearchResultReference need | - The name of an unexplored subtree in a SearchResultReference need | |||
not be subordinate to the base object. | not be subordinate to the base object. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 24 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
Other kinds of URIs may be returned. The syntax and semantics of such | Other kinds of URIs may be returned. The syntax and semantics of such | |||
URIs is left to future specifications. Clients may ignore URIs that | URIs is left to future specifications. Clients may ignore URIs that | |||
they do not support. | they do not support. | |||
4.5.3.1. Examples | 4.5.3.1. Examples | |||
For example, suppose the contacted server (hosta) holds the entry | For example, suppose the contacted server (hosta) holds the entry | |||
<DC=Example,DC=NET> and the entry <CN=Manager,DC=Example,DC=NET>. It | <DC=Example,DC=NET> and the entry <CN=Manager,DC=Example,DC=NET>. It | |||
knows that either LDAP-capable servers (hostb) or (hostc) hold | knows that either LDAP-capable servers (hostb) or (hostc) hold | |||
<OU=People,DC=Example,DC=NET> (one is the master and the other server | <OU=People,DC=Example,DC=NET> (one is the master and the other server | |||
skipping to change at line 1368 | skipping to change at line 1362 | |||
return the following: | return the following: | |||
SearchResultEntry for DC=Example,DC=NET | SearchResultEntry for DC=Example,DC=NET | |||
SearchResultEntry for CN=Manager,DC=Example,DC=NET | SearchResultEntry for CN=Manager,DC=Example,DC=NET | |||
SearchResultReference { | SearchResultReference { | |||
ldap://hostb/OU=People,DC=Example,DC=NET??sub | ldap://hostb/OU=People,DC=Example,DC=NET??sub | |||
ldap://hostc/OU=People,DC=Example,DC=NET??sub } | ldap://hostc/OU=People,DC=Example,DC=NET??sub } | |||
SearchResultReference { | SearchResultReference { | |||
ldap://hostd/OU=Roles,DC=Example,DC=NET??sub } | ldap://hostd/OU=Roles,DC=Example,DC=NET??sub } | |||
SearchResultDone (success) | SearchResultDone (success) | |||
Lightweight Directory Access Protocol Version 3 | ||||
Client implementors should note that when following a | Client implementors should note that when following a | |||
SearchResultReference, additional SearchResultReference may be | SearchResultReference, additional SearchResultReference may be | |||
generated. Continuing the example, if the client contacted the server | generated. Continuing the example, if the client contacted the server | |||
(hostb) and issued the search for the subtree | (hostb) and issued the search for the subtree | |||
<OU=People,DC=Example,DC=NET>, the server might respond as follows: | <OU=People,DC=Example,DC=NET>, the server might respond as follows: | |||
SearchResultEntry for OU=People,DC=Example,DC=NET | SearchResultEntry for OU=People,DC=Example,DC=NET | |||
SearchResultReference { | SearchResultReference { | |||
ldap://hoste/OU=Managers,OU=People,DC=Example,DC=NET??sub } | ldap://hoste/OU=Managers,OU=People,DC=Example,DC=NET??sub } | |||
skipping to change at line 1394 | skipping to change at line 1389 | |||
SearchResultEntry for CN=Manager,DC=Example,DC=NET | SearchResultEntry for CN=Manager,DC=Example,DC=NET | |||
SearchResultReference { | SearchResultReference { | |||
ldap://hostb/OU=People,DC=Example,DC=NET??base | ldap://hostb/OU=People,DC=Example,DC=NET??base | |||
ldap://hostc/OU=People,DC=Example,DC=NET??base } | ldap://hostc/OU=People,DC=Example,DC=NET??base } | |||
SearchResultReference { | SearchResultReference { | |||
ldap://hostd/OU=Roles,DC=Example,DC=NET??base } | ldap://hostd/OU=Roles,DC=Example,DC=NET??base } | |||
SearchResultDone (success) | SearchResultDone (success) | |||
If the contacted server does not hold the base object for the search, | If the contacted server does not hold the base object for the search, | |||
then it will return a referral to the client. For example, if the | but has knowledge of its possible location, then it may return a | |||
client requests a subtree search of <DC=Example,DC=ORG> to hosta, the | referral to the client. In this case, if the client requests a | |||
server may return only a SearchResultDone containing a referral. | subtree search of <DC=Example,DC=ORG> to hosta, the server returns a | |||
SearchResultDone containing a referral. | ||||
Sermersheim Internet-Draft - Expires Aug 2004 Page 25 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
SearchResultDone (referral) { | SearchResultDone (referral) { | |||
ldap://hostg/DC=Example,DC=ORG??sub } | ldap://hostg/DC=Example,DC=ORG??sub } | |||
4.6. Modify Operation | 4.6. Modify Operation | |||
The Modify Operation allows a client to request that a modification | The Modify Operation allows a client to request that a modification | |||
of an entry be performed on its behalf by a server. The Modify | of an entry be performed on its behalf by a server. The Modify | |||
Request is defined as follows: | Request is defined as follows: | |||
skipping to change at line 1423 | skipping to change at line 1416 | |||
operation ENUMERATED { | operation ENUMERATED { | |||
add (0), | add (0), | |||
delete (1), | delete (1), | |||
replace (2) }, | replace (2) }, | |||
modification PartialAttribute } } | modification PartialAttribute } } | |||
Fields of the Modify Request are: | Fields of the Modify Request are: | |||
- object: The name of the object to be modified. The value of this | - object: The name of the object to be modified. The value of this | |||
field contains the DN of the entry to be modified. The server | field contains the DN of the entry to be modified. The server | |||
Lightweight Directory Access Protocol Version 3 | ||||
SHALL NOT perform any alias dereferencing in determining the | SHALL NOT perform any alias dereferencing in determining the | |||
object to be modified. | object to be modified. | |||
- changes: A list of modifications to be performed on the entry. The | - changes: A list of modifications to be performed on the entry. The | |||
entire list of modifications MUST be performed in the order they | entire list of modifications MUST be performed in the order they | |||
are listed as a single atomic operation. While individual | are listed as a single atomic operation. While individual | |||
modifications may violate certain aspects of the directory schema | modifications may violate certain aspects of the directory schema | |||
(such as the object class definition and DIT content rule), the | (such as the object class definition and DIT content rule), the | |||
resulting entry after the entire list of modifications is | resulting entry after the entire list of modifications is | |||
performed MUST conform to the requirements of the directory schema | performed MUST conform to the requirements of the directory model | |||
[Models]. | and controlling schema [Models]. | |||
- operation: Used to specify the type of modification being | - operation: Used to specify the type of modification being | |||
performed. Each operation type acts on the following | performed. Each operation type acts on the following | |||
modification. The values of this field have the following | modification. The values of this field have the following | |||
semantics respectively: | semantics respectively: | |||
add: add values listed to the modification attribute, | add: add values listed to the modification attribute, | |||
creating the attribute if necessary; | creating the attribute if necessary; | |||
delete: delete values listed from the modification attribute, | delete: delete values listed from the modification attribute, | |||
removing the entire attribute if no values are listed, or if | removing the entire attribute if no values are listed, or if | |||
all current values of the attribute are listed for deletion; | all current values of the attribute are listed for deletion; | |||
replace: replace all existing values of the modification | replace: replace all existing values of the modification | |||
attribute with the new values listed, creating the attribute | attribute with the new values listed, creating the attribute | |||
if it did not already exist. A replace with no value will | if it did not already exist. A replace with no value will | |||
delete the entire attribute if it exists, and is ignored if | delete the entire attribute if it exists, and is ignored if | |||
the attribute does not exist. | the attribute does not exist. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 26 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
- modification: A PartialAttribute (which may have an empty SET | - modification: A PartialAttribute (which may have an empty SET | |||
of vals) used to hold the attribute type or attribute type and | of vals) used to hold the attribute type or attribute type and | |||
values being modified. | values being modified. | |||
Upon receipt of a Modify Request, the server attempts to perform the | Upon receipt of a Modify Request, the server attempts to perform the | |||
necessary modifications to the DIT and returns the result in a Modify | necessary modifications to the DIT and returns the result in a Modify | |||
Response, defined as follows: | Response, defined as follows: | |||
ModifyResponse ::= [APPLICATION 7] LDAPResult | ModifyResponse ::= [APPLICATION 7] LDAPResult | |||
The server will return to the client a single Modify Response | The server will return to the client a single Modify Response | |||
indicating either the successful completion of the DIT modification, | indicating either the successful completion of the DIT modification, | |||
or the reason that the modification failed. Due to the requirement | or the reason that the modification failed. Due to the requirement | |||
for atomicity in applying the list of modifications in the Modify | for atomicity in applying the list of modifications in the Modify | |||
Request, the client may expect that no modifications of the DIT have | Request, the client may expect that no modifications of the DIT have | |||
been performed if the Modify Response received indicates any sort of | been performed if the Modify Response received indicates any sort of | |||
error, and that all requested modifications have been performed if | error, and that all requested modifications have been performed if | |||
the Modify Response indicates successful completion of the Modify | the Modify Response indicates successful completion of the Modify | |||
Operation. If the association changes or the connection fails, | Operation. If the association changes or the stream fails, whether | |||
whether the modification occurred or not is indeterminate. | the modification occurred or not is indeterminate. | |||
The Modify Operation cannot be used to remove from an entry any of | 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 | its distinguished values, i.e. those values which form the entry's | |||
relative distinguished name. An attempt to do so will result in the | relative distinguished name. An attempt to do so will result in the | |||
Lightweight Directory Access Protocol Version 3 | ||||
server returning the notAllowedOnRDN result code. The Modify DN | server returning the notAllowedOnRDN result code. The Modify DN | |||
Operation described in Section 4.9 is used to rename an entry. | Operation described in Section 4.9 is used to rename an entry. | |||
Note that due to the simplifications made in LDAP, there is not a | Note that due to the simplifications made in LDAP, there is not a | |||
direct mapping of the changes in an LDAP ModifyRequest onto the | direct mapping of the changes in an LDAP ModifyRequest onto the | |||
changes of a DAP ModifyEntry operation, and different implementations | changes of a DAP ModifyEntry operation, and different implementations | |||
of LDAP-DAP gateways may use different means of representing the | of LDAP-DAP gateways may use different means of representing the | |||
change. If successful, the final effect of the operations on the | change. If successful, the final effect of the operations on the | |||
entry MUST be identical. | entry MUST be identical. | |||
skipping to change at line 1507 | skipping to change at line 1501 | |||
attributes AttributeList } | attributes AttributeList } | |||
AttributeList ::= SEQUENCE OF attribute Attribute | AttributeList ::= SEQUENCE OF attribute Attribute | |||
Fields of the Add Request are: | Fields of the Add Request are: | |||
- entry: the name of the entry to be added. The server SHALL NOT | - entry: the name of the entry to be added. The server SHALL NOT | |||
dereference any aliases in locating the entry to be added. | dereference any aliases in locating the entry to be added. | |||
- attributes: the list of attributes that, along with those from the | - attributes: the list of attributes that, along with those from the | |||
RDN, make up the content of the entry being added. Clients MUST | RDN, make up the content of the entry being added. Clients MAY or | |||
MAY NOT include the RDN attribute in this list. Clients MUST | ||||
include the 'objectClass' attribute, and values of any mandatory | include the 'objectClass' attribute, and values of any mandatory | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 27 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
attributes of the listed object classes. Clients MUST NOT supply | attributes of the listed object classes. Clients MUST NOT supply | |||
NO-USER-MODIFICATION attributes such as the createTimestamp or | NO-USER-MODIFICATION attributes such as the createTimestamp or | |||
creatorsName attributes, since the server maintains these | creatorsName attributes, since the server maintains these | |||
automatically. | automatically. | |||
The entry named in the entry field of the AddRequest MUST NOT exist | The entry named in the entry field of the AddRequest MUST NOT exist | |||
for the AddRequest to succeed. The immediate superior (parent) of an | for the AddRequest to succeed. The immediate superior (parent) of an | |||
object or alias entry to be added MUST exist. For example, if the | object or alias entry to be added MUST exist. For example, if the | |||
client attempted to add <CN=JS,DC=Example,DC=NET>, 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 | <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 | exist, then the server would return the noSuchObject result code with | |||
the matchedDN field containing <DC=NET>. | the matchedDN field containing <DC=NET>. | |||
If the entry to be added would not fall within a naming context | ||||
[Section 5 of Models] held by the server, and the server has | ||||
knowledge of where that entry is to be located, a referral to the | ||||
server(s) holding the parent entry should be returned. | ||||
Server implementations SHOULD NOT restrict where entries can be | Server implementations SHOULD NOT restrict where entries can be | |||
located in the Directory unless DIT structure rules are in place. | located in the Directory unless DIT structure rules are in place. | |||
Some servers allow the administrator to restrict the classes of | Some servers allow the administrator to restrict the classes of | |||
entries which can be added to the Directory. | entries which can be added to the Directory. | |||
Upon receipt of an Add Request, a server will attempt to add the | 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 | requested entry. The result of the add attempt will be returned to | |||
the client in the Add Response, defined as follows: | the client in the Add Response, defined as follows: | |||
AddResponse ::= [APPLICATION 9] LDAPResult | AddResponse ::= [APPLICATION 9] LDAPResult | |||
Lightweight Directory Access Protocol Version 3 | ||||
A response of success indicates that the new entry has been added to | A response of success indicates that the new entry has been added to | |||
the Directory. | the Directory. | |||
4.8. Delete Operation | 4.8. Delete Operation | |||
The Delete Operation allows a client to request the removal of an | The Delete Operation allows a client to request the removal of an | |||
entry from the Directory. The Delete Request is defined as follows: | entry from the Directory. The Delete Request is defined as follows: | |||
DelRequest ::= [APPLICATION 10] LDAPDN | DelRequest ::= [APPLICATION 10] LDAPDN | |||
skipping to change at line 1565 | skipping to change at line 1552 | |||
Only leaf entries (those with no subordinate entries) can be deleted | Only leaf entries (those with no subordinate entries) can be deleted | |||
with this operation. | with this operation. | |||
Upon receipt of a Delete Request, a server will attempt to perform | Upon receipt of a Delete Request, a server will attempt to perform | |||
the entry removal requested and return the result in the Delete | the entry removal requested and return the result in the Delete | |||
Response defined as follows: | Response defined as follows: | |||
DelResponse ::= [APPLICATION 11] LDAPResult | DelResponse ::= [APPLICATION 11] LDAPResult | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 28 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
4.9. Modify DN Operation | 4.9. Modify DN Operation | |||
The Modify DN Operation allows a client to change the Relative | The Modify DN Operation allows a client to change the Relative | |||
Distinguished Name (RDN) of an entry in the Directory, and/or to move | 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 | a subtree of entries to a new location in the Directory. The Modify | |||
DN Request is defined as follows: | DN Request is defined as follows: | |||
ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { | ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { | |||
entry LDAPDN, | entry LDAPDN, | |||
newrdn RelativeLDAPDN, | newrdn RelativeLDAPDN, | |||
deleteoldrdn BOOLEAN, | deleteoldrdn BOOLEAN, | |||
newSuperior [0] LDAPDN OPTIONAL } | newSuperior [0] LDAPDN OPTIONAL } | |||
Fields of the Modify DN Request are: | Fields of the Modify DN Request are: | |||
- entry: the name of the entry to be changed. This entry may or may | - entry: the name of the entry to be changed. This entry may or may | |||
not have subordinate entries. | not have subordinate entries. | |||
- newrdn: the new RDN of the entry. If an attribute value in the | - newrdn: the new RDN of the entry. If the operation moves the entry | |||
newrdn does not already exist in the entry (either as part of the | to a new superior without changing its RDN, the value of the old | |||
old RDN or as a non-distinguished value), it is added. If it | RDN is supplied for this parameter. | |||
cannot be added, an appropriate error is returned. | 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. | ||||
- deleteoldrdn: a boolean field that controls whether the old RDN | - deleteoldrdn: a boolean field that controls whether the old RDN | |||
attribute values are to be retained as attributes of the entry, or | attribute values are to be retained as attributes of the entry, or | |||
deleted from the entry. | deleted from the entry. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- newSuperior: if present, this is the name of an existing object | - newSuperior: if present, this is the name of an existing object | |||
entry which becomes the immediate superior (parent) of the | entry which becomes the immediate superior (parent) of the | |||
existing entry. | existing entry. | |||
The server SHALL NOT dereference any aliases in locating the objects | The server SHALL NOT dereference any aliases in locating the objects | |||
named in entry or newSuperior. | named in entry or newSuperior. | |||
Upon receipt of a ModifyDNRequest, a server will attempt to perform | Upon receipt of a ModifyDNRequest, a server will attempt to perform | |||
the name change and return the result in the Modify DN Response, | the name change and return the result in the Modify DN Response, | |||
defined as follows: | defined as follows: | |||
skipping to change at line 1621 | skipping to change at line 1609 | |||
rename the entry to be <cn=John Cougar Smith,c=US>. If there was | rename the entry to be <cn=John Cougar Smith,c=US>. If there was | |||
already an entry with that name, the operation would fail with the | already an entry with that name, the operation would fail with the | |||
entryAlreadyExists result code. | entryAlreadyExists result code. | |||
The object named in newSuperior MUST exist. For example, if the | The object named in newSuperior MUST exist. For example, if the | |||
client attempted to add <CN=JS,DC=Example,DC=NET>, 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 | <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 | exist, then the server would return the noSuchObject result code with | |||
the matchedDN field containing <DC=NET>. | the matchedDN field containing <DC=NET>. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 29 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
If the deleteoldrdn field is TRUE, the attribute values forming the | 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 | 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 | deleteoldrdn field is FALSE, the attribute values forming the old RDN | |||
will be retained as non-distinguished attribute values of the entry. | will be retained as non-distinguished attribute values of the entry. | |||
The server MUST fail the operation and return an error in the result | The server MUST fail the operation and return an error in the result | |||
code if the setting of the deleteoldrdn field would cause a schema | code if the setting of the deleteoldrdn field would cause a schema | |||
inconsistency in the entry. | inconsistency in the entry. | |||
Note that X.500 restricts the ModifyDN operation to only affect | Note that X.500 restricts the ModifyDN operation to only affect | |||
entries that are contained within a single server. If the LDAP server | entries that are contained within a single server. If the LDAP server | |||
skipping to change at line 1649 | skipping to change at line 1634 | |||
4.10. Compare Operation | 4.10. Compare Operation | |||
The Compare Operation allows a client to compare an assertion value | The Compare Operation allows a client to compare an assertion value | |||
with the values of a particular attribute in a particular entry in | with the values of a particular attribute in a particular entry in | |||
the Directory. The Compare Request is defined as follows: | the Directory. The Compare Request is defined as follows: | |||
CompareRequest ::= [APPLICATION 14] SEQUENCE { | CompareRequest ::= [APPLICATION 14] SEQUENCE { | |||
entry LDAPDN, | entry LDAPDN, | |||
ava AttributeValueAssertion } | ava AttributeValueAssertion } | |||
Lightweight Directory Access Protocol Version 3 | ||||
Fields of the Compare Request are: | Fields of the Compare Request are: | |||
- entry: the name of the entry to be compared. The server SHALL NOT | - entry: the name of the entry to be compared. The server SHALL NOT | |||
dereference any aliases in locating the entry to be compared. | dereference any aliases in locating the entry to be compared. | |||
- ava: holds the attribute description and assertion value with | - ava: holds the attribute description and assertion value with | |||
which an attribute in the entry is to be compared. | which an attribute in the entry is to be compared. | |||
Upon receipt of a Compare Request, a server will attempt to perform | Upon receipt of a Compare Request, a server will attempt to perform | |||
the requested comparison and return the result in the Compare | the requested comparison and return the result in the Compare | |||
Response, defined as follows: | Response, defined as follows: | |||
CompareResponse ::= [APPLICATION 15] LDAPResult | CompareResponse ::= [APPLICATION 15] LDAPResult | |||
The resultCode field is set to compareTrue, compareFalse, or an | The resultCode field is set to compareTrue, compareFalse, or an | |||
appropriate error. compareTrue indicates that the assertion value in | appropriate error. compareTrue indicates that the assertion value in | |||
the ava field is equivalent to a value of the attribute or subtype | the ava field matches a value of the attribute or subtype according | |||
(according to the attribute's EQUALITY matching rule). compareFalse | to the attribute's EQUALITY matching rule. compareFalse indicates | |||
indicates that the comparison of the assertion value in the ava field | that the assertion value in the ava field and the values of the | |||
and the values of the attribute or subtype resulted in an Undefined | attribute or subtype did not match or was Undefined (Section 4.5.1). | |||
(Section 4.5.1) or non-equivalent match. | ||||
In the event that the attribute or subtype is not present in the | In the event that the attribute or subtype is not present in the | |||
entry, the resultCode field is set to noSuchAttribute. If the | entry, the resultCode field is set to noSuchAttribute. If the | |||
attribute is unknown, the resultCode is set to | attribute is unknown, the resultCode is set to | |||
undefinedAttributeType. If the attribute or subtype has no equality | undefinedAttributeType. If the attribute or subtype has no equality | |||
matching rule, innapropriateMatching is returned in the resultCode. | matching rule, innapropriateMatching is returned in the resultCode. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 30 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
Note that some directory systems may establish access controls which | Note that some directory systems may establish access controls which | |||
permit the values of certain attributes (such as userPassword) to be | permit the values of certain attributes (such as userPassword) to be | |||
compared but not interrogated by other means. | compared but not interrogated by other means. | |||
4.11. Abandon Operation | 4.11. Abandon Operation | |||
The function of the Abandon Operation is to allow a client to request | The function of the Abandon Operation is to allow a client to request | |||
that the server abandon an outstanding operation. The Abandon Request | that the server abandon an outstanding operation. The Abandon Request | |||
is defined as follows: | is defined as follows: | |||
AbandonRequest ::= [APPLICATION 16] MessageID | AbandonRequest ::= [APPLICATION 16] MessageID | |||
The MessageID is that of an operation which was requested earlier in | The MessageID is that of an operation which was requested earlier in | |||
this LDAP association. The abandon request itself has its own message | this LDAP association. The abandon request itself has its own message | |||
id. This is distinct from the id of the earlier operation being | id. This is distinct from the id of the earlier operation being | |||
abandoned. | abandoned. | |||
There is no response defined in the Abandon operation. Upon receipt | There is no response defined in the Abandon operation. Upon receipt | |||
of an AbandonRequest, the server MAY abandon the operation identified | of an AbandonRequest, the server MAY abandon the operation identified | |||
by the MessageID. Operation responses are not sent for successfully | by the MessageID. Since the client cannot tell the difference between | |||
abandoned operations, thus the application of the Abandon operation | a successfully abandoned operation and an outstanding operation, the | |||
is limited to uses where the client does not require an indication of | application of the Abandon operation is limited to uses where the | |||
its outcome. | client does not require an indication of its outcome. | |||
Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned. | Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned. | |||
The ability to abandon other (particularly update) operations is at | ||||
the discretion of the server. | Lightweight Directory Access Protocol Version 3 | |||
In the event that a server receives an Abandon Request on a Search | In the event that a server receives an Abandon Request on a Search | |||
Operation in the midst of transmitting responses to the search, that | Operation in the midst of transmitting responses to the search, that | |||
server MUST cease transmitting entry responses to the abandoned | server MUST cease transmitting entry responses to the abandoned | |||
request immediately, and MUST NOT send the SearchResponseDone. Of | request immediately, and MUST NOT send the SearchResponseDone. Of | |||
course, the server MUST ensure that only properly encoded LDAPMessage | course, the server MUST ensure that only properly encoded LDAPMessage | |||
PDUs are transmitted. | 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 | Clients should not send abandon requests for the same operation | |||
multiple times, and MUST also be prepared to receive results from | multiple times, and MUST also be prepared to receive results from | |||
operations it has abandoned (since these may have been in transit | operations it has abandoned (since these may have been in transit | |||
when the abandon was requested, or are not able to be abandoned). | when the abandon was requested, or are not able to be abandoned). | |||
Servers MUST discard abandon requests for message IDs they do not | Servers MUST discard abandon requests for message IDs they do not | |||
recognize, for operations which cannot be abandoned, and for | recognize, for operations which cannot be abandoned, and for | |||
operations which have already been abandoned. | operations which have already been abandoned. | |||
4.12. Extended Operation | 4.12. Extended Operation | |||
The extended operation allows additional operations to be defined for | The extended operation allows additional operations to be defined for | |||
services not already available in the protocol. For example, to add | services not already available in the protocol. For example, to add | |||
operations to install transport layer security (see Section 4.14). | operations to install transport layer security (see Section 4.14). | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 31 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
The extended operation allows clients to make requests and receive | The extended operation allows clients to make requests and receive | |||
responses with predefined syntaxes and semantics. These may be | responses with predefined syntaxes and semantics. These may be | |||
defined in RFCs or be private to particular implementations. | defined in RFCs or be private to particular implementations. | |||
Each extended operation consists of an extended request and an | Each extended operation consists of an extended request and an | |||
extended response. | extended response. | |||
ExtendedRequest ::= [APPLICATION 23] SEQUENCE { | ExtendedRequest ::= [APPLICATION 23] SEQUENCE { | |||
requestName [0] LDAPOID, | requestName [0] LDAPOID, | |||
requestValue [1] OCTET STRING OPTIONAL } | requestValue [1] OCTET STRING OPTIONAL } | |||
skipping to change at line 1763 | skipping to change at line 1745 | |||
ExtendedResponse ::= [APPLICATION 24] SEQUENCE { | ExtendedResponse ::= [APPLICATION 24] SEQUENCE { | |||
COMPONENTS OF LDAPResult, | COMPONENTS OF LDAPResult, | |||
responseName [10] LDAPOID OPTIONAL, | responseName [10] LDAPOID OPTIONAL, | |||
responseValue [11] OCTET STRING OPTIONAL } | responseValue [11] OCTET STRING OPTIONAL } | |||
The responseName is typically not required to be present as the | The responseName is typically not required to be present as the | |||
syntax and semantics of the response (including the format of the | syntax and semantics of the response (including the format of the | |||
responseValue) is implicitly known and associated with the request by | responseValue) is implicitly known and associated with the request by | |||
the messageID. | the messageID. | |||
Lightweight Directory Access Protocol Version 3 | ||||
If the requestName is not recognized by the server, the server MUST | If the requestName is not recognized by the server, the server MUST | |||
NOT provide a responseName nor a responseValue and MUST return a | NOT provide a responseName nor a responseValue and MUST return a | |||
resultCode of protocolError. | resultCode of protocolError. | |||
The requestValue and responseValue fields contain any information | The requestValue and responseValue fields contain any information | |||
associated with the operation. The format of these fields is defined | associated with the operation. The format of these fields is defined | |||
by the specification of the extended operation. Implementations MUST | by the specification of the extended operation. Implementations MUST | |||
be prepared to handle arbitrary contents of these fields, including | be prepared to handle arbitrary contents of these fields, including | |||
zero bytes. Values that are defined in terms of ASN.1 and BER encoded | 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 | according to Section 5.2, also follow the extensibility rules in | |||
Section 4. | Section 4. | |||
It is RECOMMENDED that servers list the requestName of extended | It is RECOMMENDED that servers list the requestName of extended | |||
operations they support in the 'supportedExtension' attribute of the | operations they support in the 'supportedExtension' attribute of the | |||
root DSE [Models]. | root DSE [Models]. | |||
Extended operations may be specified in other documents. The | Extended operations may be specified in other documents. The | |||
specification of an extended operation consists of: | specification of an extended operation consists of: | |||
- the OBJECT IDENTIFIER assigned to the requestName (and possibly | - the OBJECT IDENTIFIER assigned to the requestName, | |||
responseName), | ||||
- the OBJECT IDENTIFIER (if any) assigned to the responseName (note | ||||
that the same OBJECT IDENTIFIER my be used for both the | ||||
requestName and responseName), | ||||
- the format of the contents of the requestValue and responseValue | - the format of the contents of the requestValue and responseValue | |||
(if any), and | (if any), and | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 32 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
- the semantics of the operation. | - the semantics of the operation. | |||
4.13. IntermediateResponse Message | 4.13. IntermediateResponse Message | |||
While the Search operation provides a mechanism to return multiple | While the Search operation provides a mechanism to return multiple | |||
response messages for a single search request, other operations, by | response messages for a single search request, other operations, by | |||
nature, do not provide for multiple response messages. | nature, do not provide for multiple response messages. | |||
The IntermediateResponse message provides a general mechanism for | The IntermediateResponse message provides a general mechanism for | |||
defining single-request/multiple-response operations in LDAP. This | defining single-request/multiple-response operations in LDAP. This | |||
skipping to change at line 1812 | skipping to change at line 1796 | |||
operation to define new single-request/multiple-response operations | operation to define new single-request/multiple-response operations | |||
or in conjunction with a control when extending existing LDAP | or in conjunction with a control when extending existing LDAP | |||
operations in a way that requires them to return intermediate | operations in a way that requires them to return intermediate | |||
response information. | response information. | |||
It is intended that the definitions and descriptions of extended | It is intended that the definitions and descriptions of extended | |||
operations and controls that make use of the IntermediateResponse | operations and controls that make use of the IntermediateResponse | |||
message will define the circumstances when an IntermediateResponse | message will define the circumstances when an IntermediateResponse | |||
message can be sent by a server and the associated meaning of an | message can be sent by a server and the associated meaning of an | |||
IntermediateResponse message sent in a particular circumstance. | IntermediateResponse message sent in a particular circumstance. | |||
Similarly, it is intended that clients will explicitly solicit | ||||
IntermediateResponse messages by issuing operations that specifically | ||||
call for their return. | ||||
IntermediateResponse ::= [APPLICATION 25] SEQUENCE { | IntermediateResponse ::= [APPLICATION 25] SEQUENCE { | |||
responseName [0] LDAPOID OPTIONAL, | responseName [0] LDAPOID OPTIONAL, | |||
Lightweight Directory Access Protocol Version 3 | ||||
responseValue [1] OCTET STRING OPTIONAL } | responseValue [1] OCTET STRING OPTIONAL } | |||
IntermediateResponse messages SHALL NOT be returned to the client | IntermediateResponse messages SHALL NOT be returned to the client | |||
unless the client issues a request that specifically solicits their | unless the client issues a request that specifically solicits their | |||
return. This document defines two forms of solicitation: extended | return. This document defines two forms of solicitation: extended | |||
operation and request control. | 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, 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). | ||||
Although the responseName and responseValue are optional in some | ||||
circumstances, generally speaking IntermediateResponse messages have | ||||
a predefined responseName and a responseValue. The value of the | ||||
responseName (if present), the syntax of the responseValue (if | ||||
present) and the semantics associated with a particular | ||||
IntermediateResponse message MUST be specified in documents | ||||
describing the extended operation or request control that uses them. | ||||
Sections 4.13.1 and 4.13.2 describe additional requirements on the | Sections 4.13.1 and 4.13.2 describe additional requirements on the | |||
inclusion of responseName and responseValue in IntermediateResponse | inclusion of responseName and responseValue in IntermediateResponse | |||
messages. | messages. | |||
4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse | 4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse | |||
A single-request/multiple-response operation may be defined using a | A single-request/multiple-response operation may be defined using a | |||
single ExtendedRequest message to solicit zero or more | single ExtendedRequest message to solicit zero or more | |||
IntermediateResponse messages of one or more kinds followed by an | IntermediateResponse messages of one or more kinds followed by an | |||
ExtendedResponse message. | ExtendedResponse message. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 33 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
An extended operation that defines the return of multiple kinds of | ||||
IntermediateResponse messages MUST provide and document a mechanism | ||||
for the client to distinguish the kind of IntermediateResponse | ||||
message being sent. This SHALL be accomplished by using different | ||||
responseName values for each type of IntermediateResponse message | ||||
associated with the extended operation or by including identifying | ||||
information in the responseValue of each type of IntermediateResponse | ||||
message associated with the extended operation. | ||||
4.13.2. Usage with LDAP Request Controls | 4.13.2. Usage with LDAP Request Controls | |||
Any LDAP operation may be extended by the addition of one or more | A control's semantics may include the return of zero or more | |||
controls ([RFC2251] Section 4.1.12). A control's semantics may | IntermediateResponse messages prior to returning the final result | |||
include the return of zero or more IntermediateResponse messages | code for the operation. One or more kinds of IntermediateResponse | |||
prior to returning the final result code for the operation. One or | messages may be sent in response to a request control. | |||
more kinds of IntermediateResponse messages may be sent in response | ||||
to a request control. | ||||
All IntermediateResponse messages associated with request controls | All IntermediateResponse messages associated with request controls | |||
SHALL include a responseName. This requirement ensures that the | SHALL include a responseName. This requirement ensures that the | |||
client can correctly identify the source of IntermediateResponse | client can correctly identify the source of IntermediateResponse | |||
messages when: | messages when: | |||
- two or more controls using IntermediateResponse messages are | - two or more controls using IntermediateResponse messages are | |||
included in a request for any LDAP operation or | included in a request for any LDAP operation or | |||
- one or more controls using IntermediateResponse messages are | - one or more controls using IntermediateResponse messages are | |||
included in a request with an LDAP extended operation that uses | included in a request with an LDAP extended operation that uses | |||
IntermediateResponse messages. | IntermediateResponse messages. | |||
A request control that defines the return of multiple kinds of | ||||
IntermediateResponse messages MUST provide and document a mechanism | ||||
for the client to distinguish the kind of IntermediateResponse | ||||
message being sent. This SHALL be accomplished by using different | ||||
responseName values for each type of IntermediateResponse message | ||||
associated with the request control or by including identifying | ||||
information in the responseValue of each type of IntermediateResponse | ||||
message associated with the request control. | ||||
4.14. StartTLS Operation | 4.14. StartTLS Operation | |||
Lightweight Directory Access Protocol Version 3 | ||||
The Start Transport Layer Security (StartTLS) operation provides the | The Start Transport Layer Security (StartTLS) operation provides the | |||
ability to establish Transport Layer Security ([TLS]) on an LDAP | ability to establish a TLS-protected connection. The StartTLS | |||
connection. The StartTLS operation is defined using the extended | operation is defined using the extended operation mechanism described | |||
operation mechanism described in Section 4.12. | in Section 4.12. | |||
4.14.1. StartTLS Request | 4.14.1. StartTLS Request | |||
A client requests TLS establishment by transmitting a StartTLS | A client requests TLS establishment by transmitting a StartTLS | |||
request PDU to the server. The StartTLS request is defined in terms | request PDU to the server. The StartTLS request is defined in terms | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 34 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
of an ExtendedRequest. The requestName is "1.3.6.1.4.1.1466.20037", | of an ExtendedRequest. The requestName is "1.3.6.1.4.1.1466.20037", | |||
and the requestValue field is always absent. | and the requestValue field is always absent. | |||
The client MUST NOT send any PDUs on this connection following this | The client MUST NOT send any PDUs on this connection following this | |||
request until it receives a StartTLS extended response and completes | request until it receives a StartTLS extended response and, in the | |||
TLS negotiations. | case of a successful response, completes TLS negotiations. | |||
4.14.2. StartTLS Response | 4.14.2. StartTLS Response | |||
When a StartTLS request is made, servers supporting the operation | When a StartTLS request is made, servers supporting the operation | |||
MUST return a StartTLS response PDU to the requestor. The | MUST return a StartTLS response PDU to the requestor. The | |||
responseName is also "1.3.6.1.4.1.1466.20037", and the responseValue | responseName is also "1.3.6.1.4.1.1466.20037", and the responseValue | |||
field is absent. | field is absent. | |||
The server provides a resultCode field to either success or one of | The server provides a resultCode field to either success or one of | |||
the other values outlined in Section 4.14.2.2. | the other values outlined in Section 4.14.2.2. | |||
skipping to change at line 1938 | skipping to change at line 1901 | |||
operation: | operation: | |||
- operationsError: operations sequencing incorrect; e.g. TLS is | - operationsError: operations sequencing incorrect; e.g. TLS is | |||
already established. | already established. | |||
- protocolError: TLS is not supported or incorrect PDU structure. | - protocolError: TLS is not supported or incorrect PDU structure. | |||
- unavailable: Some major problem with TLS, or the server is | - unavailable: Some major problem with TLS, or the server is | |||
shutting down. | shutting down. | |||
Lightweight Directory Access Protocol Version 3 | ||||
The server MUST return operationsError if the client violates any of | The server MUST return operationsError if the client violates any of | |||
the StartTLS extended operation sequencing requirements described in | the StartTLS extended operation sequencing requirements described in | |||
Section 4 of [AuthMeth]. | Section 4 of [AuthMeth]. | |||
If the server does not support TLS (whether by design or by current | If the server does not support TLS (whether by design or by current | |||
configuration), it MUST return the protocolError resultCode. The | configuration), it MUST return the protocolError resultCode. In this | |||
client's current association is unaffected if the server does not | event, the client may proceed with any LDAP operation, or it may | |||
support TLS. The client may proceed with any LDAP operation, or it | close the stream. | |||
may close the connection. | ||||
The server MUST return unavailable if it supports TLS but cannot | The server MUST return unavailable if it supports TLS but cannot | |||
establish a TLS connection for some reason, e.g. the certificate | install the TLS layer for some reason, e.g. the certificate server | |||
not responding, it cannot contact its TLS implementation, or if the | ||||
Sermersheim Internet-Draft - Expires Aug 2004 Page 35 | server is in process of shutting down. The client may retry the | |||
Lightweight Directory Access Protocol Version 3 | StartTLS operation, or it may proceed with any other LDAP operation, | |||
or it may close the stream. | ||||
server not responding, it cannot contact its TLS implementation, or | 4.14.3. Removal of the TLS Layer | |||
if the server is in process of shutting down. The client may retry | ||||
the StartTLS operation, or it may proceed with any other LDAP | ||||
operation, or it may close the LDAP connection. | ||||
4.14.3. Closing a TLS Connection | Two forms of TLS layer -- graceful and abrupt -- are supported. These | |||
do not involve LDAP PDUs, but are preformed at the underlying layers. | ||||
Two forms of TLS connection closure -- graceful and abrupt -- are | If the stream is closed, outstanding operations are handled as | |||
supported. These do not involve LDAP PDUs, but are preformed at the | specified in Section 5.1. | |||
underlying layers. | ||||
4.14.3.1. Graceful Closure | 4.14.3.1. Graceful Removal | |||
Either the client or server MAY terminate the TLS connection and | Either the client or server MAY remove the TLS layer and leave the | |||
leave the LDAP connection intact by sending and receiving a TLS | connection intact by sending and receiving a TLS closure alert. | |||
closure alert. | ||||
The initiating protocol peer sends the TLS closure alert. If it | The initiating protocol peer sends the TLS closure alert. If it | |||
wishes to leave the LDAP connection intact, it then MUST cease to | wishes to leave the connection intact, it then MUST cease to send | |||
send further PDUs and MUST ignore any received PDUs until it receives | further PDUs and MUST ignore any received PDUs until it receives a | |||
a TLS closure alert from the other peer. | TLS closure alert from the other peer. | |||
Once the initiating protocol peer receives a TLS closure alert from | Once the initiating protocol peer receives a TLS closure alert from | |||
the other peer it MAY send and receive LDAP PDUs. | the other peer it MAY send and receive LDAP PDUs. | |||
When a protocol peer receives the initial TLS closure alert, it may | When a protocol peer receives the initial TLS closure alert, it may | |||
choose to allow the underlying LDAP connection to remain intact. In | choose to allow the connection to remain intact. In this case, it | |||
this case, it MUST immediately transmit a TLS closure alert. | MUST immediately transmit a TLS closure alert. Following this, it MAY | |||
Following this, it MAY send and receive LDAP PDUs. | send and receive LDAP PDUs. | |||
Protocol peers MAY drop the underlying LDAP connection after sending | Protocol peers MAY close the stream after sending or receiving a TLS | |||
or receiving a TLS closure alert. | closure alert. | |||
After the TLS connection has been closed, the server MUST NOT send | After the TLS layer has been removed, the server MUST NOT send | |||
responses to any request message received before the TLS closure. | responses to any request message received before the TLS closure | |||
Thus, clients wishing to receive responses to messages sent while the | alert. Thus, clients wishing to receive responses to messages sent | |||
TLS connection is intact MUST wait for those message responses before | while the TLS layer is intact MUST wait for those message responses | |||
sending the TLS closure alert. | before sending the TLS closure alert. | |||
4.14.3.2. Abrupt Closure | Lightweight Directory Access Protocol Version 3 | |||
Either the client or server MAY abruptly close the TLS connection by | 4.14.3.2. Abrupt Removal | |||
dropping the underlying transfer protocol connection. In this | ||||
circumstance, a server MAY send the client a Notice of Disconnection | ||||
before dropping the underlying LDAP connection. Outstanding | ||||
operations are handled as specified in Section 5.2. | ||||
5. Protocol Element Encodings and Transfer | Either the client or server MAY abruptly remove the TLS layer by | |||
closing the stream. In this circumstance, a server MAY send the | ||||
client a Notice of Disconnection before closing the stream. | ||||
Sermersheim Internet-Draft - Expires Aug 2004 Page 36 | 5. Protocol Encoding, Connection, and Transfer | |||
Lightweight Directory Access Protocol Version 3 | ||||
One underlying service, LDAP over TCP, is defined here. This service | This protocol is designed to run over connection-oriented, reliable | |||
is generally applicable to applications providing or consuming X.500- | transports, where the data stream is divided into octets (8-bit | |||
based directory services on the Internet. | units), with each octet being significant. | |||
One underlying service, LDAP over TCP, is defined in Section | ||||
5.3. 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 | Implementations of LDAP over TCP MUST implement the mapping as | |||
described in Section 5.2.1 | described in Section 5.3 | |||
5.1. Protocol Encoding | This table illustrates the relationship between the different layers | |||
involved in an exchange between two protocol peers: | ||||
+------------+ | | ||||
| connection | | | ||||
+------------+ > LDAP PDU | | ||||
+------------+ < data | | ||||
| SASL layer | | | ||||
+------------+ > SASL-protected data | | ||||
+------------+ < data | | ||||
| TLS layer | | | ||||
+------------+ > TLS-protected data | Application | ||||
+------------+ < data +------------ | ||||
| stream | | Transport | ||||
+------------+ | ||||
5.1 Operation and Connection Relationship | ||||
Protocol operations are tied to a connection. If the stream is | ||||
closed, any outstanding operations tied to the connection are, when | ||||
possible, abandoned, and when not possible, completed without | ||||
transmission of the response. Also, if the stream is closed, the | ||||
client MUST NOT assume that any outstanding update operations tied to | ||||
the connection have succeeded or failed. | ||||
5.2. Protocol Encoding | ||||
Lightweight Directory Access Protocol Version 3 | ||||
The protocol elements of LDAP SHALL be encoded for exchange using the | The protocol elements of LDAP SHALL be encoded for exchange using the | |||
Basic Encoding Rules [BER] of [ASN.1] with the following | Basic Encoding Rules [BER] of [ASN.1] with the following | |||
restrictions: | restrictions: | |||
- Only the definite form of length encoding is used. | - Only the definite form of length encoding is used. | |||
- OCTET STRING values are encoded in the primitive form only. | - OCTET STRING values are encoded in the primitive form only. | |||
- If the value of a BOOLEAN type is true, the encoding of the value | - If the value of a BOOLEAN type is true, the encoding of the value | |||
skipping to change at line 2037 | skipping to change at line 2027 | |||
BOOLEAN and INTEGER types have default values in this protocol | BOOLEAN and INTEGER types have default values in this protocol | |||
definition. | definition. | |||
These restrictions are meant to ease the overhead of encoding and | These restrictions are meant to ease the overhead of encoding and | |||
decoding certain elements in BER. | decoding certain elements in BER. | |||
These restrictions do not apply to ASN.1 types encapsulated inside of | These restrictions do not apply to ASN.1 types encapsulated inside of | |||
OCTET STRING values, such as attribute values, unless otherwise | OCTET STRING values, such as attribute values, unless otherwise | |||
stated. | stated. | |||
5.2. Transfer Protocols | 5.3. Transmission Control Protocol (TCP) | |||
This protocol is designed to run over connection-oriented, reliable | ||||
transports, with all 8 bits in an octet being significant in the data | ||||
stream. Protocol operations are tied to a connection, thus if the | ||||
connection is closed or dropped, the operation is aborted. When this | ||||
happens, any outstanding operations on the server are, when possible, | ||||
abandoned, and when not possible, completed without transmission of | ||||
the response. Also, if the connection is closed or dropped, the | ||||
client MUST NOT assume that any outstanding requests which modified | ||||
the Directory have succeeded or failed. | ||||
5.2.1. Transmission Control Protocol (TCP) | ||||
The encoded LDAPMessage PDUs are mapped directly onto the [TCP] | The encoded LDAPMessage PDUs are mapped directly onto the [TCP] | |||
bytestream using the BER-based encoding described in Section 5.1. It | bytestream using the BER-based encoding described in Section 5.2. It | |||
is recommended that server implementations running over the TCP | is recommended that server implementations running over the TCP | |||
provide a protocol listener on the Internet Assigned Numbers | provide a protocol listener on the Internet Assigned Numbers | |||
Authority (IANA)-assigned LDAP port, 389 [PortReg]. Servers may | Authority (IANA)-assigned LDAP port, 389 [PortReg]. Servers may | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 37 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
instead provide a listener on a different port number. Clients MUST | instead provide a listener on a different port number. Clients MUST | |||
support contacting servers on any valid TCP port. | support contacting servers on any valid TCP port. | |||
6. Security Considerations | 6. Security Considerations | |||
This version of the protocol provides facilities for simple | This version of the protocol provides facilities for simple | |||
authentication using a cleartext password, as well as any [SASL] | authentication using a cleartext password, as well as any [SASL] | |||
mechanism. SASL allows for integrity and privacy services to be | mechanism. Installing SASL layers can provide integrity and privacy | |||
negotiated. | services. | |||
It is also permitted that the server can return its credentials to | It is also permitted that the server can return its credentials to | |||
the client, if it chooses to do so. | the client, if it chooses to do so. | |||
Use of cleartext password is strongly discouraged where the | Use of cleartext password is strongly discouraged where the | |||
underlying transport service cannot guarantee confidentiality and may | underlying transport service cannot guarantee confidentiality and may | |||
result in disclosure of the password to unauthorized parties. | result in disclosure of the password to unauthorized parties. | |||
Servers are encouraged to prevent directory modifications by clients | Servers are encouraged to prevent directory modifications by clients | |||
that have authenticated anonymously [AuthMeth]. | that have authenticated anonymously [AuthMeth]. | |||
Requirements of authentication methods, SASL mechanisms, and TLS are | Security considerations for authentication methods, SASL mechanisms, | |||
described in [AuthMeth]. | and TLS are described in [AuthMeth]. | |||
Lightweight Directory Access Protocol Version 3 | ||||
It should be noted that SASL authentication exchanges do not provide | It should be noted that SASL authentication exchanges do not provide | |||
data confidentiality nor integrity protection for the version or name | data confidentiality nor integrity protection for the version or name | |||
fields of the bind request nor the resultCode, diagnosticMessage, or | fields of the bind request nor the resultCode, diagnosticMessage, or | |||
referral fields of the bind response nor of any information contained | referral fields of the bind response nor of any information contained | |||
in controls attached to bind request or responses. Thus information | in controls attached to bind request or responses. Thus information | |||
contained in these fields SHOULD NOT be relied on unless otherwise | contained in these fields SHOULD NOT be relied on unless otherwise | |||
protected (such as by establishing protections at the transport | protected (such as by establishing protections at the transport | |||
layer). | layer). | |||
Server implementors should plan for the possibility of an identity | Server implementors should plan for the possibility of an identity in | |||
associated with an LDAP connection being deleted, renamed, or | and association being deleted, renamed, or modified, and take | |||
modified, and take appropriate actions to prevent insecure side | appropriate actions to prevent insecure side effects. Likewise, | |||
effects. Likewise, server implementors should plan for the | server implementors should plan for the possibility of an associated | |||
possibility of an associated identity's credentials becoming invalid, | identity's credentials becoming invalid, or an identity's privileges | |||
or an identity's privileges being changed. The ways in which these | being changed. The ways in which these issues are addressed are | |||
issues are addressed are application and/or implementation specific. | application and/or implementation specific. | |||
Implementations which cache attributes and entries obtained via LDAP | Implementations which cache attributes and entries obtained via LDAP | |||
MUST ensure that access controls are maintained if that information | MUST ensure that access controls are maintained if that information | |||
is to be provided to multiple clients, since servers may have access | is to be provided to multiple clients, since servers may have access | |||
control policies which prevent the return of entries or attributes in | control policies which prevent the return of entries or attributes in | |||
search results except to particular authenticated clients. For | search results except to particular authenticated clients. For | |||
example, caches could serve result information only to the client | example, caches could serve result information only to the client | |||
whose request caused it to be in the cache. | whose request caused it to be in the cache. | |||
Servers may return referrals or search result references which | Servers may return referrals or search result references which | |||
redirect clients to peer servers. It is possible for a rogue | redirect clients to peer servers. It is possible for a rogue | |||
application to inject such referrals into the data stream in an | application to inject such referrals into the data stream in an | |||
attempt to redirect a client to a rogue server. Clients are advised | attempt to redirect a client to a rogue server. Clients are advised | |||
to be aware of this, and possibly reject referrals when | to be aware of this, and possibly reject referrals when | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 38 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
confidentiality measures are not in place. Clients are advised to | confidentiality measures are not in place. Clients are advised to | |||
reject referrals from the StartTLS operation. | reject referrals from the StartTLS operation. | |||
The matchedDN and diagnosticMessage fields, as well as some | The matchedDN and diagnosticMessage fields, as well as some | |||
resultCode values (e.g., attributeOrValueExists and | resultCode values (e.g., attributeOrValueExists and | |||
entryAlreadyExists), could disclose the presence the specific data in | entryAlreadyExists), could disclose the presence the specific data in | |||
the directory which is subject to access and other administrative | the directory which is subject to access and other administrative | |||
controls. Server implementations should restrict access to protected | controls. Server implementations should restrict access to protected | |||
information equally under both normal and error conditions. | information equally under both normal and error conditions. | |||
skipping to change at line 2141 | skipping to change at line 2113 | |||
7. Acknowledgements | 7. Acknowledgements | |||
This document is based on RFC 2251 by Mark Wahl, Tim Howes, and Steve | This document is based on RFC 2251 by Mark Wahl, Tim Howes, and Steve | |||
Kille. It is also based on RFC 2830 by Jeff Hodges, RL "Bob" Morgan, | Kille. It is also based on RFC 2830 by Jeff Hodges, RL "Bob" Morgan, | |||
and Mark Wahl. It is also based on [LIMR] by Roger Harrison, and Kurt | and Mark Wahl. It is also based on [LIMR] by Roger Harrison, and Kurt | |||
Zeilenga. Notable amounts of technical reviews and content were | Zeilenga. Notable amounts of technical reviews and content were | |||
provided by Kurt Zeilenga, Steven Legg, and Hallvard Furuseth. Their | provided by Kurt Zeilenga, Steven Legg, and Hallvard Furuseth. Their | |||
work along with the input of individuals of the IETF ASID, LDAPEXT, | work along with the input of individuals of the IETF ASID, LDAPEXT, | |||
LDUP, LDAPBIS, and other Working Groups is gratefully acknowledged. | LDUP, LDAPBIS, and other Working Groups is gratefully acknowledged. | |||
Lightweight Directory Access Protocol Version 3 | ||||
8. Normative References | 8. Normative References | |||
[ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", RFC 2234, November 1997. | Specifications: ABNF", RFC 2234, November 1997. | |||
[ASN.1] ITU-T Recommendation X.680 (07/2002) | ISO/IEC 8824-1:2002 | [ASN.1] ITU-T Recommendation X.680 (07/2002) | ISO/IEC 8824-1:2002 | |||
"Information Technology - Abstract Syntax Notation One | "Information Technology - Abstract Syntax Notation One | |||
(ASN.1): Specification of basic notation" | (ASN.1): Specification of basic notation" | |||
[AuthMeth] Harrison, R., "LDAP: Authentication Methods and Connection | [AuthMeth] Harrison, R., "LDAP: Authentication Methods and Connection | |||
skipping to change at line 2170 | skipping to change at line 2144 | |||
[IP] Postel, J., "Internet Protocol", STD5 and RFC 791, | [IP] Postel, J., "Internet Protocol", STD5 and RFC 791, | |||
September 1981 | September 1981 | |||
[ISO10646] Universal Multiple-Octet Coded Character Set (UCS) - | [ISO10646] Universal Multiple-Octet Coded Character Set (UCS) - | |||
Architecture and Basic Multilingual Plane, ISO/IEC 10646-1 | Architecture and Basic Multilingual Plane, ISO/IEC 10646-1 | |||
: 1993. | : 1993. | |||
[Keyword] Bradner, S., "Key words for use in RFCs to Indicate | [Keyword] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", RFC 2119, March 1997. | Requirement Levels", RFC 2119, March 1997. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 39 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
[LDAPDN] Zeilenga, K., "LDAP: String Representation of | [LDAPDN] Zeilenga, K., "LDAP: String Representation of | |||
Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, (a | Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, (a | |||
work in progress). | work in progress). | |||
[LDAPIANA] Zeilenga, K., "IANA Considerations for LDAP", draft-ietf- | [LDAPIANA] Zeilenga, K., "IANA Considerations for LDAP", draft-ietf- | |||
ldapbis-bcp64-xx.txt, (a work in progress). | ldapbis-bcp64-xx.txt, (a work in progress). | |||
[LDAPURL] Smith, M., "LDAP: Uniform Resource Locator", draft-ietf- | [LDAPURL] Smith, M., "LDAP: Uniform Resource Locator", draft-ietf- | |||
ldapbis-url-xx.txt, (a work in progress). | ldapbis-url-xx.txt, (a work in progress). | |||
skipping to change at line 2197 | skipping to change at line 2168 | |||
[Models] Zeilenga, K., "LDAP: Directory Information Models", draft- | [Models] Zeilenga, K., "LDAP: Directory Information Models", draft- | |||
ietf-ldapbis-models-xx.txt (a work in progress). | ietf-ldapbis-models-xx.txt (a work in progress). | |||
[Roadmap] Zeilenga, K., "LDAP: Technical Specification Road Map", | [Roadmap] Zeilenga, K., "LDAP: Technical Specification Road Map", | |||
draft-ietf-ldapbis-roadmap-xx.txt (a work in progress). | draft-ietf-ldapbis-roadmap-xx.txt (a work in progress). | |||
[SASL] Melnikov, A., "Simple Authentication and Security Layer", | [SASL] Melnikov, A., "Simple Authentication and Security Layer", | |||
draft-ietf-sasl-rfc2222bis-xx.txt (a work in progress). | draft-ietf-sasl-rfc2222bis-xx.txt (a work in progress). | |||
Lightweight Directory Access Protocol Version 3 | ||||
[SASLPrep] Zeilenga, K., "Stringprep profile for user names and | [SASLPrep] Zeilenga, K., "Stringprep profile for user names and | |||
passwords", draft-ietf-sasl-saslprep-xx.txt, (a work in | passwords", draft-ietf-sasl-saslprep-xx.txt, (a work in | |||
progress). | progress). | |||
[StringPrep] Hoffman P. and M. Blanchet, "Preparation of | [StringPrep] Hoffman P. and M. Blanchet, "Preparation of | |||
Internationalized Strings ('stringprep')", draft-hoffman- | Internationalized Strings ('stringprep')", draft-hoffman- | |||
rfc3454bis-xx.txt, a work in progress. | rfc3454bis-xx.txt, a work in progress. | |||
[Syntaxes] Legg, S., and K. Dally, "LDAP: Syntaxes and Matching | [Syntaxes] Legg, S., and K. Dally, "LDAP: Syntaxes and Matching | |||
Rules", draft-ietf-ldapbis-syntaxes-xx.txt, (a work in | Rules", draft-ietf-ldapbis-syntaxes-xx.txt, (a work in | |||
skipping to change at line 2227 | skipping to change at line 2200 | |||
(Reading, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5), | (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5), | |||
as amended by the "Unicode Standard Annex #27: Unicode | as amended by the "Unicode Standard Annex #27: Unicode | |||
3.1" (http://www.unicode.org/reports/tr27/) and by the | 3.1" (http://www.unicode.org/reports/tr27/) and by the | |||
"Unicode Standard Annex #28: Unicode 3.2" | "Unicode Standard Annex #28: Unicode 3.2" | |||
(http://www.unicode.org/reports/tr28/). | (http://www.unicode.org/reports/tr28/). | |||
[URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifiers (URI): Generic Syntax", RFC 2396, | Resource Identifiers (URI): Generic Syntax", RFC 2396, | |||
August 1998. | August 1998. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 40 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
[UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO | [UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO | |||
10646", STD63 and RFC3629, November 2003. | 10646", STD63 and RFC3629, November 2003. | |||
[X.500] ITU-T Rec. X.500, "The Directory: Overview of Concepts, | [X.500] ITU-T Rec. X.500, "The Directory: Overview of Concepts, | |||
Models and Service", 1993. | Models and Service", 1993. | |||
[X.501] ITU-T Rec. X.501, "The Directory: Models", 1993. | [X.501] ITU-T Rec. X.501, "The Directory: Models", 1993. | |||
[X.511] ITU-T Rec. X.511, "The Directory: Abstract Service | [X.511] ITU-T Rec. X.511, "The Directory: Abstract Service | |||
Definition", 1993. | Definition", 1993. | |||
9. Informative References | 9. Informative References | |||
[CERT] The CERT(R) Center, http://www.cert.org | [CERT] The CERT(R) Center, http://www.cert.org | |||
[PortReg] IANA, "Port Numbers", | [PortReg] IANA, "Port Numbers", | |||
http://www.iana.org/assignments/port-numbers | http://www.iana.org/assignments/port-numbers | |||
10. IANA Considerations | 10. IANA Considerations | |||
Lightweight Directory Access Protocol Version 3 | ||||
It is requested that the Internet Assigned Numbers Authority (IANA) | It is requested that the Internet Assigned Numbers Authority (IANA) | |||
update the LDAP result code registry to indicate that this document | update the LDAP result code registry to indicate that this document | |||
provides the definitive technical specification for result codes 0- | provides the definitive technical specification for result codes 0- | |||
36, 48-54, 64-70, 80-90. | 36, 48-54, 64-70, 80-90. | |||
It is requested that the IANA update the LDAP Protocol Mechanism | It is requested that the IANA update the LDAP Protocol Mechanism | |||
registry to indicate that this document and [AuthMeth] provides the | registry to indicate that this document and [AuthMeth] provides the | |||
definitive technical specification for the Start TLS | definitive technical specification for the Start TLS | |||
(1.3.6.1.4.1.1466.20037) extended operation. | (1.3.6.1.4.1.1466.20037) extended operation. | |||
skipping to change at line 2271 | skipping to change at line 2242 | |||
Appendix B with this RFC number at publication. | Appendix B with this RFC number at publication. | |||
11. Editor's Address | 11. Editor's Address | |||
Jim Sermersheim | Jim Sermersheim | |||
Novell, Inc. | Novell, Inc. | |||
1800 South Novell Place | 1800 South Novell Place | |||
Provo, Utah 84606, USA | Provo, Utah 84606, USA | |||
jimse@novell.com | jimse@novell.com | |||
+1 801 861-3088 | +1 801 861-3088 | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 41 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
Appendix A - LDAP Result Codes | Appendix A - LDAP Result Codes | |||
This normative appendix details additional considerations regarding | This normative appendix details additional considerations regarding | |||
LDAP result codes and provides a brief, general description of each | LDAP result codes and provides a brief, general description of each | |||
LDAP result code enumerated in Section 4.1.9. | LDAP result code enumerated in Section 4.1.9. | |||
Additional result codes MAY be defined for use with extensions | Additional result codes MAY be defined for use with extensions | |||
[LDAPIANA]. Client implementations SHALL treat any result code which | [LDAPIANA]. Client implementations SHALL treat any result code which | |||
they do not recognize as an unknown error condition. | they do not recognize as an unknown error condition. | |||
A.1 Non-Error Result Codes | A.1 Non-Error Result Codes | |||
These result codes (called "non-error" result codes) do not indicate | These result codes (called "non-error" result codes) do not indicate | |||
an error condition: | an error condition: | |||
success (0), | success (0), | |||
compareFalse (5), | ||||
compareTrue (6), | compareTrue (6), | |||
compareFalse (7), | ||||
referral (10), and | referral (10), and | |||
saslBindInProgress (14). | saslBindInProgress (14). | |||
The success, compareTrue, and compareFalse result codes indicate | The success, compareTrue, and compareFalse result codes indicate | |||
successful completion (and, hence, are referred to as "successful" | successful completion (and, hence, are referred to as "successful" | |||
result codes). | result codes). | |||
The referral and saslBindInProgress result codes indicate the client | The referral and saslBindInProgress result codes indicate the client | |||
is required to take additional action to complete the operation. | is required to take additional action to complete the operation. | |||
A.2 Result Codes | A.2 Result Codes | |||
Existing LDAP result codes are described as follows: | Existing LDAP result codes are described as follows: | |||
success (0) | success (0) | |||
Indicates the successful completion of an operation. Note: | Indicates the successful completion of an operation. Note: | |||
this code is not used with the compare operation. See | this code is not used with the compare operation. See | |||
compareTrue (5) and compareFalse (6). | compareFalse (5) and compareTrue (6). | |||
operationsError (1) | operationsError (1) | |||
Indicates that the operation is not properly sequenced with | Indicates that the operation is not properly sequenced with | |||
relation to other operations (of same or different type). | relation to other operations (of same or different type). | |||
For example, this code is returned if the client attempts to | For example, this code is returned if the client attempts to | |||
StartTLS [TLS] while there are other operations outstanding | StartTLS [TLS] while there are other operations outstanding | |||
or if TLS was already established. | or if a TLS layer was already installed. | |||
protocolError (2) | protocolError (2) | |||
Indicates the server received data which has incorrect | Indicates the server received data which has incorrect | |||
structure. | structure. | |||
For bind operation only, this code is also used to indicate | For bind operation only, this code is also used to indicate | |||
that the server does not support the requested protocol | that the server does not support the requested protocol | |||
version. | version. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 42 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
For the extended operation only, this code indicates that the | ||||
server does not recognize the requestName. | ||||
For the Start TLS operation, this code may also indicate that | ||||
the server does not currently support Start TLS (even though | ||||
it may recognize 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. | ||||
timeLimitExceeded (3) | timeLimitExceeded (3) | |||
Indicates that the time limit specified by the client was | Indicates that the time limit specified by the client was | |||
exceeded before the operation could be completed. | exceeded before the operation could be completed. | |||
sizeLimitExceeded (4) | sizeLimitExceeded (4) | |||
Indicates that the size limit specified by the client was | Indicates that the size limit specified by the client was | |||
exceeded before the operation could be completed. | exceeded before the operation could be completed. | |||
compareFalse (5) | compareFalse (5) | |||
Indicates that the compare operation has successfully | Indicates that the compare operation has successfully | |||
completed and the assertion has evaluated to FALSE. | completed and the assertion has evaluated to FALSE or | |||
Undefined. | ||||
compareTrue (6) | compareTrue (6) | |||
Indicates that the compare operation has successfully | Indicates that the compare operation has successfully | |||
completed and the assertion has evaluated to TRUE. | completed and the assertion has evaluated to TRUE. | |||
authMethodNotSupported (7) | authMethodNotSupported (7) | |||
Indicates that the authentication method or mechanism is not | Indicates that the authentication method or mechanism is not | |||
supported. | supported. | |||
strongAuthRequired (8) | strongAuthRequired (8) | |||
skipping to change at line 2372 | skipping to change at line 2352 | |||
Indicates that an administrative limit has been exceeded. | Indicates that an administrative limit has been exceeded. | |||
unavailableCriticalExtension (12) | unavailableCriticalExtension (12) | |||
Indicates that the server is unable or unwilling to perform a | Indicates that the server is unable or unwilling to perform a | |||
critical control (see Section 4.1.11). | critical control (see Section 4.1.11). | |||
confidentialityRequired (13) | confidentialityRequired (13) | |||
Indicates that data confidentiality protections are required. | Indicates that data confidentiality protections are required. | |||
saslBindInProgress (14) | saslBindInProgress (14) | |||
Lightweight Directory Access Protocol Version 3 | ||||
Indicates the server requires the client to send a new bind | Indicates the server requires the client to send a new bind | |||
request, with the same SASL mechanism, to continue the | request, with the same SASL mechanism, to continue the | |||
authentication process (see Section 4.2). | authentication process (see Section 4.2). | |||
noSuchAttribute (16) | noSuchAttribute (16) | |||
Indicates that the named entry does not contain the specified | Indicates that the named entry does not contain the specified | |||
attribute or attribute value. | attribute or attribute value. | |||
undefinedAttributeType (17) | undefinedAttributeType (17) | |||
Indicates that a request field contains an unrecognized | Indicates that a request field contains an unrecognized | |||
attribute description. | attribute description. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 43 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
inappropriateMatching (18) | inappropriateMatching (18) | |||
Indicates that an attempt was made, e.g. in an assertion, to | Indicates that an attempt was made, e.g. in an assertion, to | |||
use a matching rule not defined for the attribute type | use a matching rule not defined for the attribute type | |||
concerned. | concerned. | |||
constraintViolation (19) | constraintViolation (19) | |||
Indicates that the client supplied an attribute value which | Indicates that the client supplied an attribute value which | |||
does not conform to the constraints placed upon it by the | does not conform to the constraints placed upon it by the | |||
data model. | data model. | |||
skipping to change at line 2429 | skipping to change at line 2408 | |||
base, target entry, ModifyDN newrdn, etc.) of a request does | base, target entry, ModifyDN newrdn, etc.) of a request does | |||
not conform to the required syntax or contains attribute | not conform to the required syntax or contains attribute | |||
values which do not conform to the syntax of the attribute's | values which do not conform to the syntax of the attribute's | |||
type. | type. | |||
aliasDereferencingProblem (36) | aliasDereferencingProblem (36) | |||
Indicates that a problem occurred while dereferencing an | Indicates that a problem occurred while dereferencing an | |||
alias. Typically an alias was encountered in a situation | alias. Typically an alias was encountered in a situation | |||
where it was not allowed or where access was denied. | where it was not allowed or where access was denied. | |||
Lightweight Directory Access Protocol Version 3 | ||||
inappropriateAuthentication (48) | inappropriateAuthentication (48) | |||
Indicates the server requires the client which had attempted | Indicates the server requires the client which had attempted | |||
to bind anonymously or without supplying credentials to | to bind anonymously or without supplying credentials to | |||
provide some form of credentials. | provide some form of credentials. | |||
invalidCredentials (49) | invalidCredentials (49) | |||
Indicates that the provided credentials (e.g. the user's name | Indicates that the provided credentials (e.g. the user's name | |||
and password) are invalid. | and password) are invalid. | |||
insufficientAccessRights (50) | insufficientAccessRights (50) | |||
Indicates that the client does not have sufficient access | Indicates that the client does not have sufficient access | |||
rights to perform the operation. | rights to perform the operation. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 44 | ||||
Lightweight Directory Access Protocol Version 3 | ||||
busy (51) | busy (51) | |||
Indicates that the server is too busy to service the | Indicates that the server is too busy to service the | |||
operation. | operation. | |||
unavailable (52) | unavailable (52) | |||
Indicates that the server is shutting down or a subsystem | Indicates that the server is shutting down or a subsystem | |||
necessary to complete the operation is offline. | necessary to complete the operation is offline. | |||
unwillingToPerform (53) | unwillingToPerform (53) | |||
Indicates that the server is unwilling to perform the | Indicates that the server is unwilling to perform the | |||
skipping to change at line 2487 | skipping to change at line 2465 | |||
Indicates that the request cannot be fulfilled (added, moved, | Indicates that the request cannot be fulfilled (added, moved, | |||
or renamed) as the target entry already exists. | or renamed) as the target entry already exists. | |||
objectClassModsProhibited (69) | objectClassModsProhibited (69) | |||
Indicates that an attempt to modify the object class(es) of | Indicates that an attempt to modify the object class(es) of | |||
an entry's 'objectClass' attribute is prohibited. | an entry's 'objectClass' attribute is prohibited. | |||
For example, this code is returned when a client attempts to | For example, this code is returned when a client attempts to | |||
modify the structural object class of an entry. | modify the structural object class of an entry. | |||
Lightweight Directory Access Protocol Version 3 | ||||
affectsMultipleDSAs (71) | affectsMultipleDSAs (71) | |||
Indicates that the operation cannot be completed as it | Indicates that the operation cannot be performed as it would | |||
affects multiple servers (DSAs). | affect multiple servers (DSAs). | |||
other (80) | other (80) | |||
Indicates the server has encountered an internal error. | Indicates the server has encountered an internal error. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 45 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
Appendix B - Complete ASN.1 Definition | Appendix B - Complete ASN.1 Definition | |||
This appendix is normative. | This appendix is normative. | |||
Lightweight-Directory-Access-Protocol-V3 | Lightweight-Directory-Access-Protocol-V3 | |||
-- Copyright (C) The Internet Society (2003). This version of | -- Copyright (C) The Internet Society (2003). This version of | |||
-- this ASN.1 module is part of RFC XXXX; see the RFC itself | -- this ASN.1 module is part of RFC XXXX; see the RFC itself | |||
-- for full legal notices. | -- for full legal notices. | |||
skipping to change at line 2551 | skipping to change at line 2530 | |||
LDAPString ::= OCTET STRING -- UTF-8 encoded, | LDAPString ::= OCTET STRING -- UTF-8 encoded, | |||
-- [ISO10646] characters | -- [ISO10646] characters | |||
LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] | LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] | |||
LDAPDN ::= LDAPString -- Constrained to <distinguishedName> | LDAPDN ::= LDAPString -- Constrained to <distinguishedName> | |||
-- [LDAPDN] | -- [LDAPDN] | |||
RelativeLDAPDN ::= LDAPString -- Constrained to <name-component> | RelativeLDAPDN ::= LDAPString -- Constrained to <name-component> | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 46 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
-- [LDAPDN] | -- [LDAPDN] | |||
AttributeDescription ::= LDAPString | AttributeDescription ::= LDAPString | |||
-- Constrained to <attributedescription> | -- Constrained to <attributedescription> | |||
-- [Models] | -- [Models] | |||
AttributeValue ::= OCTET STRING | AttributeValue ::= OCTET STRING | |||
skipping to change at line 2609 | skipping to change at line 2586 | |||
constraintViolation (19), | constraintViolation (19), | |||
attributeOrValueExists (20), | attributeOrValueExists (20), | |||
invalidAttributeSyntax (21), | invalidAttributeSyntax (21), | |||
-- 22-31 unused -- | -- 22-31 unused -- | |||
noSuchObject (32), | noSuchObject (32), | |||
aliasProblem (33), | aliasProblem (33), | |||
invalidDNSyntax (34), | invalidDNSyntax (34), | |||
-- 35 reserved for undefined isLeaf -- | -- 35 reserved for undefined isLeaf -- | |||
aliasDereferencingProblem (36), | aliasDereferencingProblem (36), | |||
-- 37-47 unused -- | -- 37-47 unused -- | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 47 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
inappropriateAuthentication (48), | inappropriateAuthentication (48), | |||
invalidCredentials (49), | invalidCredentials (49), | |||
insufficientAccessRights (50), | insufficientAccessRights (50), | |||
busy (51), | busy (51), | |||
unavailable (52), | unavailable (52), | |||
unwillingToPerform (53), | unwillingToPerform (53), | |||
loopDetect (54), | loopDetect (54), | |||
-- 55-63 unused -- | -- 55-63 unused -- | |||
skipping to change at line 2666 | skipping to change at line 2641 | |||
sasl [3] SaslCredentials, | sasl [3] SaslCredentials, | |||
... } | ... } | |||
SaslCredentials ::= SEQUENCE { | SaslCredentials ::= SEQUENCE { | |||
mechanism LDAPString, | mechanism LDAPString, | |||
credentials OCTET STRING OPTIONAL } | credentials OCTET STRING OPTIONAL } | |||
BindResponse ::= [APPLICATION 1] SEQUENCE { | BindResponse ::= [APPLICATION 1] SEQUENCE { | |||
COMPONENTS OF LDAPResult, | COMPONENTS OF LDAPResult, | |||
serverSaslCreds [7] OCTET STRING OPTIONAL } | serverSaslCreds [7] OCTET STRING OPTIONAL } | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 48 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
UnbindRequest ::= [APPLICATION 2] NULL | UnbindRequest ::= [APPLICATION 2] NULL | |||
SearchRequest ::= [APPLICATION 3] SEQUENCE { | SearchRequest ::= [APPLICATION 3] SEQUENCE { | |||
baseObject LDAPDN, | baseObject LDAPDN, | |||
scope ENUMERATED { | scope ENUMERATED { | |||
baseObject (0), | baseObject (0), | |||
singleLevel (1), | singleLevel (1), | |||
wholeSubtree (2) }, | wholeSubtree (2) }, | |||
skipping to change at line 2689 | skipping to change at line 2662 | |||
neverDerefAliases (0), | neverDerefAliases (0), | |||
derefInSearching (1), | derefInSearching (1), | |||
derefFindingBaseObj (2), | derefFindingBaseObj (2), | |||
derefAlways (3) }, | derefAlways (3) }, | |||
sizeLimit INTEGER (0 .. maxInt), | sizeLimit INTEGER (0 .. maxInt), | |||
timeLimit INTEGER (0 .. maxInt), | timeLimit INTEGER (0 .. maxInt), | |||
typesOnly BOOLEAN, | typesOnly BOOLEAN, | |||
filter Filter, | filter Filter, | |||
attributes AttributeSelection } | attributes AttributeSelection } | |||
AttributeSelection ::= SEQUENCE OF selection LDAPString | AttributeSelection ::= SEQUENCE OF selector LDAPString | |||
-- constrained to <attributeSelection> | -- The LDAPString is constrained to | |||
-- in section 4.5.1. | -- <attributeSelection> in Section 4.5.1 | |||
Filter ::= CHOICE { | Filter ::= CHOICE { | |||
and [0] SET SIZE (1..MAX) OF filter Filter, | and [0] SET SIZE (1..MAX) OF filter Filter, | |||
or [1] SET SIZE (1..MAX) OF filter Filter, | or [1] SET SIZE (1..MAX) OF filter Filter, | |||
not [2] Filter, | not [2] Filter, | |||
equalityMatch [3] AttributeValueAssertion, | equalityMatch [3] AttributeValueAssertion, | |||
substrings [4] SubstringFilter, | substrings [4] SubstringFilter, | |||
greaterOrEqual [5] AttributeValueAssertion, | greaterOrEqual [5] AttributeValueAssertion, | |||
lessOrEqual [6] AttributeValueAssertion, | lessOrEqual [6] AttributeValueAssertion, | |||
present [7] AttributeDescription, | present [7] AttributeDescription, | |||
skipping to change at line 2723 | skipping to change at line 2696 | |||
MatchingRuleAssertion ::= SEQUENCE { | MatchingRuleAssertion ::= SEQUENCE { | |||
matchingRule [1] MatchingRuleId OPTIONAL, | matchingRule [1] MatchingRuleId OPTIONAL, | |||
type [2] AttributeDescription OPTIONAL, | type [2] AttributeDescription OPTIONAL, | |||
matchValue [3] AssertionValue, | matchValue [3] AssertionValue, | |||
dnAttributes [4] BOOLEAN DEFAULT FALSE } | dnAttributes [4] BOOLEAN DEFAULT FALSE } | |||
SearchResultEntry ::= [APPLICATION 4] SEQUENCE { | SearchResultEntry ::= [APPLICATION 4] SEQUENCE { | |||
objectName LDAPDN, | objectName LDAPDN, | |||
attributes PartialAttributeList } | attributes PartialAttributeList } | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 49 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
PartialAttributeList ::= SEQUENCE OF | PartialAttributeList ::= SEQUENCE OF | |||
partialAttribute PartialAttribute | partialAttribute PartialAttribute | |||
SearchResultReference ::= [APPLICATION 19] SEQUENCE | SearchResultReference ::= [APPLICATION 19] SEQUENCE | |||
SIZE (1..MAX) OF uri URI | SIZE (1..MAX) OF uri URI | |||
SearchResultDone ::= [APPLICATION 5] LDAPResult | SearchResultDone ::= [APPLICATION 5] LDAPResult | |||
skipping to change at line 2781 | skipping to change at line 2752 | |||
AbandonRequest ::= [APPLICATION 16] MessageID | AbandonRequest ::= [APPLICATION 16] MessageID | |||
ExtendedRequest ::= [APPLICATION 23] SEQUENCE { | ExtendedRequest ::= [APPLICATION 23] SEQUENCE { | |||
requestName [0] LDAPOID, | requestName [0] LDAPOID, | |||
requestValue [1] OCTET STRING OPTIONAL } | requestValue [1] OCTET STRING OPTIONAL } | |||
ExtendedResponse ::= [APPLICATION 24] SEQUENCE { | ExtendedResponse ::= [APPLICATION 24] SEQUENCE { | |||
COMPONENTS OF LDAPResult, | COMPONENTS OF LDAPResult, | |||
responseName [10] LDAPOID OPTIONAL, | responseName [10] LDAPOID OPTIONAL, | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 50 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
responseValue [11] OCTET STRING OPTIONAL } | responseValue [11] OCTET STRING OPTIONAL } | |||
END | IntermediateResponse ::= [APPLICATION 25] SEQUENCE { | |||
responseName [0] LDAPOID OPTIONAL, | ||||
responseValue [1] OCTET STRING OPTIONAL } | ||||
Sermersheim Internet-Draft - Expires Aug 2004 Page 51 | END | |||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
Appendix C - Changes | Appendix C - Changes | |||
This appendix is non-normative. | This appendix is non-normative. | |||
This appendix summarizes substantive changes made to RFC 2251 and RFC | This appendix summarizes substantive changes made to RFC 2251 and RFC | |||
2830. | 2830. | |||
C.1 Changes made to made to RFC 2251: | C.1 Changes made to RFC 2251: | |||
This section summarizes the substantive changes made to Sections 1, | This section summarizes the substantive changes made to Sections 1, | |||
2, 3.1, and 4 through the remainder of RFC 2251. Readers should | 2, 3.1, and 4 through the remainder of RFC 2251. Readers should | |||
consult [Models] and [AuthMeth] for summaries of changes to other | consult [Models] and [AuthMeth] for summaries of changes to other | |||
sections. | sections. | |||
C.1.1 Section 1 | C.1.1 Section 1 | |||
- Removed IESG note. Post publication of RFC 2251, mandatory LDAP | - Removed IESG note. Post publication of RFC 2251, mandatory LDAP | |||
authentication mechanisms have been standardized which are | authentication mechanisms have been standardized which are | |||
skipping to change at line 2839 | skipping to change at line 2810 | |||
- There was a mandatory requirement for the server to return a | - There was a mandatory requirement for the server to return a | |||
Notice of Disconnection and drop the connection when a PDU is | Notice of Disconnection and drop the connection when a PDU is | |||
malformed in a certain way. This has been clarified such that the | malformed in a certain way. This has been clarified such that the | |||
server SHOULD return the Notice of Disconnection, and MUST drop | server SHOULD return the Notice of Disconnection, and MUST drop | |||
the connection. | the connection. | |||
C.1.5 Section 4.1.1.1 | C.1.5 Section 4.1.1.1 | |||
- Clarified that the messageID of requests MUST be non-zero. | - Clarified that the messageID of requests MUST be non-zero. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 52 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
- Clarified when it is and isn't appropriate to return an already | - Clarified when it is and isn't appropriate to return an already | |||
used message id. RFC 2251 accidentally imposed synchronous server | used message id. RFC 2251 accidentally imposed synchronous server | |||
behavior in its wording of this. | behavior in its wording of this. | |||
C.1.6 Section 4.1.2 | C.1.6 Section 4.1.2 | |||
- Stated that LDAPOID is constrained to <numericoid> from [Models]. | - Stated that LDAPOID is constrained to <numericoid> from [Models]. | |||
skipping to change at line 2890 | skipping to change at line 2860 | |||
C.1.12 Section 4.1.11 | C.1.12 Section 4.1.11 | |||
- Defined referrals in terms of URIs rather than URLs. | - Defined referrals in terms of URIs rather than URLs. | |||
- Removed the requirement that all referral URIs MUST be equally | - Removed the requirement that all referral URIs MUST be equally | |||
capable of progressing the operation. The statement was ambiguous | capable of progressing the operation. The statement was ambiguous | |||
and provided no instructions on how to carry it out. | and provided no instructions on how to carry it out. | |||
- Added the requirement that clients MUST NOT loop between servers. | - Added the requirement that clients MUST NOT loop between servers. | |||
- Clarified the instructions for using LDAPURLs in referrals, and in | - Clarified the instructions for using LDAPURLs in referrals, and in | |||
doing so added a recommendation that the scope part be present. | doing so added a recommendation that the scope part be present. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 53 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
C.1.13 Section 4.1.12 | C.1.13 Section 4.1.12 | |||
- Specified how control values defined in terms of ASN.1 are to be | - Specified how control values defined in terms of ASN.1 are to be | |||
encoded. | encoded. | |||
- Noted that the criticality field is only applied to request | - Noted that the criticality field is only applied to request | |||
messages (except unbindRequest), and must be ignored when present | messages (except unbindRequest), and must be ignored when present | |||
on response messages and unbindRequest. | on response messages and unbindRequest. | |||
- Added language regarding combinations of controls on a message. | - Added language regarding combinations of controls and the ordering | |||
of controls on a message. | ||||
- Changed "The server MUST be prepared" to "Implementations MUST be | - Changed "The server MUST be prepared" to "Implementations MUST be | |||
prepared" in the eighth paragraph to reflect that both client and | prepared" in the eighth paragraph to reflect that both client and | |||
server implementations must be able to handle this (as both parse | server implementations must be able to handle this (as both parse | |||
controls). | controls). | |||
C.1.14 Section 4.2 | C.1.14 Section 4.2 | |||
- Mandated that servers return protocolError when the version is not | - Mandated that servers return protocolError when the version is not | |||
supported. | supported. | |||
- Clarified behavior when the simple authentication is used, the | - Clarified behavior when the simple authentication is used, the | |||
skipping to change at line 2939 | skipping to change at line 2909 | |||
Each SASL negotiation is, generally, independent of other SASL | Each SASL negotiation is, generally, independent of other SASL | |||
negotiations. If there were dependencies between multiple | negotiations. If there were dependencies between multiple | |||
negotiations of a particular mechanism, the mechanism technical | negotiations of a particular mechanism, the mechanism technical | |||
specification should detail how applications are to deal with | specification should detail how applications are to deal with | |||
them. LDAP should not require any special handling. And if an LDAP | them. LDAP should not require any special handling. And if an LDAP | |||
client had used such a mechanism, it would have the option of | client had used such a mechanism, it would have the option of | |||
using another mechanism. | using another mechanism. | |||
- Dropped MUST imperative in paragraph 3 to align with [Keywords]. | - Dropped MUST imperative in paragraph 3 to align with [Keywords]. | |||
C.1.16 Section 4.2.3 | C.1.16 Section 4.2.3 | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 54 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
- Moved most error-related text to Appendix A, and added text | - Moved most error-related text to Appendix A, and added text | |||
regarding certain errors used in conjunction with the bind | regarding certain errors used in conjunction with the bind | |||
operation. | operation. | |||
- Prohibited the server from specifying serverSaslCreds when not | - Prohibited the server from specifying serverSaslCreds when not | |||
appropriate. | appropriate. | |||
C.1.17 Section 4.3 | C.1.17 Section 4.3 | |||
skipping to change at line 2991 | skipping to change at line 2959 | |||
- Recommended that servers not use attribute short names when it | - Recommended that servers not use attribute short names when it | |||
knows they are ambiguous or may cause interoperability problems. | knows they are ambiguous or may cause interoperability problems. | |||
- Removed all mention of ExtendedResponse due to lack of | - Removed all mention of ExtendedResponse due to lack of | |||
implementation. | implementation. | |||
C.1.21 Section 4.5.3 | C.1.21 Section 4.5.3 | |||
- Made changes similar to those made to Section 4.1.11. | - Made changes similar to those made to Section 4.1.11. | |||
C.1.22 Section 4.5.3.1 | C.1.22 Section 4.5.3.1 | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 55 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
- Fixed examples to adhere to changes made to Section 4.5.3. | - Fixed examples to adhere to changes made to Section 4.5.3. | |||
C.1.23 Section 4.6 | C.1.23 Section 4.6 | |||
- Removed restriction that required an EQUALITY matching rule in | - Removed restriction that required an EQUALITY matching rule in | |||
order to perform value delete modifications. It is sufficiently | order to perform value delete modifications. It is sufficiently | |||
documented that in absence of an equality matching rule, octet | documented that in absence of an equality matching rule, octet | |||
equality is used. | equality is used. | |||
skipping to change at line 3041 | skipping to change at line 3007 | |||
added for consistency with other operations and to help ensure | added for consistency with other operations and to help ensure | |||
data consistency. | data consistency. | |||
C.1.27 Section 4.11 | C.1.27 Section 4.11 | |||
- Explained that since abandon returns no response, clients should | - Explained that since abandon returns no response, clients should | |||
not use it if they need to know the outcome. | not use it if they need to know the outcome. | |||
- Specified that Abandon and Unbind cannot be abandoned. | - Specified that Abandon and Unbind cannot be abandoned. | |||
C.1.28 Section 4.12 | C.1.28 Section 4.12 | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 56 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
- Specified how values of extended operations defined in terms of | - Specified how values of extended operations defined in terms of | |||
ASN.1 are to be encoded. | ASN.1 are to be encoded. | |||
- Added instructions on what extended operation specifications | - Added instructions on what extended operation specifications | |||
consist of. | consist of. | |||
- Added a recommendation that servers advertise supported extended | - Added a recommendation that servers advertise supported extended | |||
operations. | operations. | |||
C.1.29 Section 5.2 | C.1.29 Section 5.2 | |||
skipping to change at line 3078 | skipping to change at line 3042 | |||
- Noted that servers should protect information equally, whether in | - Noted that servers should protect information equally, whether in | |||
an error condition or not, and mentioned specifically; matchedDN, | an error condition or not, and mentioned specifically; matchedDN, | |||
diagnosticMessage, and resultCodes. | diagnosticMessage, and resultCodes. | |||
- Added a note regarding malformed and long encodings. | - Added a note regarding malformed and long encodings. | |||
C.1.31 Appendix A | C.1.31 Appendix A | |||
- Added "EXTESIBILITY IMPLIED" to ASN.1 definition. | - Added "EXTESIBILITY IMPLIED" to ASN.1 definition. | |||
- Removed AttributeType. It is not used. | - Removed AttributeType. It is not used. | |||
C.2 Changes made to made to RFC 2830: | C.2 Changes made to RFC 2830: | |||
This section summarizes the substantive changes made to Sections of | This section summarizes the substantive changes made to Sections of | |||
RFC 2830. Readers should consult [AuthMeth] for summaries of changes | RFC 2830. Readers should consult [AuthMeth] for summaries of changes | |||
to other sections. | to other sections. | |||
C.2.1 Section 2.3 | C.2.1 Section 2.3 | |||
- Removed wording indicating that referrals can be returned from | - Removed wording indicating that referrals can be returned from | |||
StartTLS | StartTLS | |||
- Removed requirement that only a narrow set of result codes can be | - Removed requirement that only a narrow set of result codes can be | |||
returned. Some result codes are required in certain scenarios, but | returned. Some result codes are required in certain scenarios, but | |||
any other may be returned if appropriate. | any other may be returned if appropriate. | |||
C.2.1 Section 4.13.3.1 | C.2.1 Section 4.13.3.1 | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 57 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
- Reworded most of this section and added the requirement that after | - Reworded most of this section and added the requirement that after | |||
the TLS connection has been closed, the server MUST NOT send | the TLS connection has been closed, the server MUST NOT send | |||
responses to any request message received before the TLS closure. | responses to any request message received before the TLS closure. | |||
C.3 Changes made to made to [LIMR]: | C.3 Changes made to [LIMR]: | |||
- In general, all technical language was transferred in whole. | - In general, all technical language was transferred in whole. | |||
Supporting and background language seen as redundant due to its | Supporting and background language seen as redundant due to its | |||
presence in this document was omitted. | presence in this document was omitted. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 58 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
Intellectual Property Rights | Intellectual Property Rights | |||
The IETF takes no position regarding the validity or scope of any | The IETF takes no position regarding the validity or scope of any | |||
intellectual property or other rights that might be claimed to | intellectual property or other rights that might be claimed to | |||
pertain to the implementation or use of the technology described in | pertain to the implementation or use of the technology described in | |||
this document or the extent to which any license under such rights | this document or the extent to which any license under such rights | |||
might or might not be available; neither does it represent that it | might or might not be available; neither does it represent that it | |||
has made any effort to identify any such rights. Information on the | has made any effort to identify any such rights. Information on the | |||
skipping to change at line 3159 | skipping to change at line 3120 | |||
The limited permissions granted above are perpetual and will not be | The limited permissions granted above are perpetual and will not be | |||
revoked by the Internet Society or its successors or assigns. | revoked by the Internet Society or its successors or assigns. | |||
This document and the information contained herein is provided on an | This document and the information contained herein is provided on an | |||
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING | "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING | |||
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING | TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING | |||
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION | BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION | |||
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF | HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF | |||
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |||
Sermersheim Internet-Draft - Expires Aug 2004 Page 59 | ||||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |