draft-ietf-ldapbis-protocol-23.txt | draft-ietf-ldapbis-protocol-24.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-23.txt Apr 2004 | Document: draft-ietf-ldapbis-protocol-24.txt May 2004 | |||
Obsoletes: RFC 2251, 2830, [LIMR] | Obsoletes: RFCs 2251, 2830, 3771 | |||
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 | |||
Task Force (IETF), its areas, and its working groups. Note that other | Task Force (IETF), its areas, and its working groups. Note that other | |||
skipping to change at line 66 | skipping to change at line 66 | |||
4.1.5. Attribute Value.............................................7 | 4.1.5. Attribute Value.............................................7 | |||
4.1.6. Attribute Value Assertion...................................8 | 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..............................................9 | 4.1.9. Result Message..............................................9 | |||
4.1.10. Referral..................................................10 | 4.1.10. Referral..................................................10 | |||
4.1.11. Controls..................................................12 | 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.............................................18 | |||
4.6. Modify Operation.............................................26 | 4.6. Modify Operation.............................................26 | |||
4.7. Add Operation................................................28 | 4.7. Add Operation................................................28 | |||
4.8. Delete Operation.............................................29 | 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..........................................32 | 4.12. Extended Operation..........................................32 | |||
4.13. IntermediateResponse Message................................33 | 4.13. IntermediateResponse Message................................33 | |||
4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse......34 | 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..........................................35 | |||
5. Protocol Encoding, Connection, and Transfer....................37 | 5. Protocol Encoding, Connection, and Transfer....................37 | |||
5.1 Operation and Connection Relationship.........................37 | 5.1 Operation and LDAP exchange Relationship......................37 | |||
5.2. Protocol Encoding............................................37 | 5.2. Protocol Encoding............................................38 | |||
5.3. Transmission Control Protocol (TCP)..........................38 | 5.3. Transmission Control Protocol (TCP)..........................38 | |||
6. Security Considerations........................................38 | 6. Security Considerations........................................38 | |||
7. Acknowledgements...............................................39 | 7. Acknowledgements...............................................39 | |||
8. Normative References...........................................40 | 8. Normative References...........................................40 | |||
9. Informative References.........................................41 | 9. Informative References.........................................41 | |||
10. IANA Considerations...........................................41 | 10. IANA Considerations...........................................41 | |||
11. Editor's Address..............................................42 | 11. Editor's Address..............................................42 | |||
Appendix A - LDAP Result Codes....................................43 | Appendix A - LDAP Result Codes....................................43 | |||
A.1 Non-Error Result Codes........................................43 | A.1 Non-Error Result Codes........................................43 | |||
A.2 Result Codes..................................................43 | A.2 Result Codes..................................................43 | |||
Appendix B - Complete ASN.1 Definition............................48 | Appendix B - Complete ASN.1 Definition............................48 | |||
Appendix C - Changes..............................................54 | Appendix C - Changes..............................................54 | |||
C.1 Changes made to RFC 2251:.....................................54 | C.1 Changes made to RFC 2251:.....................................54 | |||
C.2 Changes made to RFC 2830:.....................................59 | C.2 Changes made to RFC 2830:.....................................59 | |||
C.3 Changes made to [LIMR]:.......................................60 | C.3 Changes made to RFC 3771:.....................................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. | |||
skipping to change at line 134 | skipping to change at line 134 | |||
Section 3.3 is obsoleted by [Roadmap]. | Section 3.3 is obsoleted by [Roadmap]. | |||
Sections 4.2.1 (portions), and 4.2.2 are obsoleted by [AuthMeth]. | Sections 4.2.1 (portions), and 4.2.2 are obsoleted by [AuthMeth]. | |||
Appendix C.1 summarizes substantive changes to the remaining | Appendix C.1 summarizes substantive changes to the remaining | |||
sections. | sections. | |||
This document obsoletes RFC 2830, Sections 2 and 4 in entirety. The | This document obsoletes RFC 2830, Sections 2 and 4 in entirety. The | |||
remainder of RFC 2830 is obsoleted by [AuthMeth]. Appendix C.2 | remainder of RFC 2830 is obsoleted by [AuthMeth]. Appendix C.2 | |||
summarizes substantive changes to the remaining sections. | summarizes substantive changes to the remaining sections. | |||
This document also obsoletes [LIMR] in entirety. | This document also obsoletes RFC 3771 in entirety. | |||
<<Note to RFC Editor: [LIMR] is to be replaced with the RFC | ||||
number assigned to draft-rharrison-ldap-intermediate-resp- | ||||
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 term "stream" refers to the underlying transport service used to | The term "connection" refers to the underlying transport service used | |||
carry the protocol exchange. | to carry the protocol exchange. | |||
The term "connection" refers to application layer where LDAP PDUs are | The term "LDAP exchange" refers to application layer where LDAP PDUs | |||
exchanged between protocol peers. | are exchanged between protocol peers. | |||
The term "TLS layer" refers to a layer inserted between the stream | The term "TLS layer" refers to a layer inserted between the | |||
and the connection that utilizes [TLS] to protect the exchange of | connection and the LDAP exchange that utilizes [TLS] to protect the | |||
LDAP PDUs. | exchange of LDAP PDUs. | |||
The term "SASL layer" refers to a layer inserted between the stream | The term "SASL layer" refers to a layer inserted between the | |||
and the connection that utilizes [SASL] to protect the exchange of | connection and the LDAP exchange that utilizes [SASL] to protect the | |||
LDAP PDUs. | exchange of LDAP PDUs. | |||
See the table in Section 5 for an illustration of these four terms. | See the table in Section 5 for an illustration of these four terms. | |||
Lightweight Directory Access Protocol Version 3 | The term "TLS-protected LDAP exchange" refers to an LDAP exchange | |||
protected by a TLS-layer. | ||||
The term "TLS-protected connection" refers to a connection protected | Lightweight Directory Access Protocol Version 3 | |||
by a TLS-layer. | ||||
The term "association" refers to the association of the connection | The term "association" refers to the association of the LDAP exchange | |||
and its current authentication and authorization state. | 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 | |||
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 | |||
skipping to change at line 215 | skipping to change at line 212 | |||
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]. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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. | |||
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 | |||
skipping to change at line 270 | skipping to change at line 267 | |||
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, | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 stream. | and MUST immediately close the connection. | |||
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 stream where further communication | SHOULD abruptly close the connection where further communication | |||
(including providing notice) would be pernicious. Otherwise, server | (including providing notice) would be pernicious. Otherwise, server | |||
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 | |||
skipping to change at line 324 | skipping to change at line 321 | |||
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] | |||
Lightweight Directory Access Protocol Version 3 | ||||
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]. | |||
skipping to change at line 376 | skipping to change at line 372 | |||
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]. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
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 | |||
skipping to change at line 429 | skipping to change at line 425 | |||
vals (SIZE(1..MAX))}) | vals (SIZE(1..MAX))}) | |||
No two attribute values may be equivalent as described by Section 2.3 | No two attribute values may be equivalent as described by Section 2.3 | |||
of [Models]. The set of attribute values is unordered. | of [Models]. The set of attribute values is unordered. | |||
Implementations 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'. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
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. | |||
skipping to change at line 484 | skipping to change at line 480 | |||
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), | |||
Lightweight Directory Access Protocol Version 3 | ||||
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, | |||
referral [3] Referral OPTIONAL } | referral [3] Referral OPTIONAL } | |||
skipping to change at line 539 | skipping to change at line 535 | |||
server has knowledge of its possible existence elsewhere. | server has knowledge of its possible existence elsewhere. | |||
- The operation is restricted on this server -- perhaps due to a | - The operation is restricted on this server -- perhaps due to a | |||
read-only copy of an entry to be modified. | read-only copy of an entry to be modified. | |||
The referral field is present in an LDAPResult if the resultCode | The referral field is present in an LDAPResult if the resultCode | |||
field value is referral, and absent with all other result codes. It | field value is referral, and absent with all other result codes. It | |||
contains one or more references to one or more servers or services | contains one or more references to one or more servers or services | |||
that may be accessed via LDAP or other protocols. Referrals can be | that may be accessed via LDAP or other protocols. Referrals can be | |||
returned in response to any operation request (except unbind and | 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 | abandon which do not have responses). At least one URI MUST be | |||
present in the Referral. | present in the Referral. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
skipping to change at line 595 | skipping to change at line 591 | |||
- 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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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. | |||
skipping to change at line 649 | skipping to change at line 645 | |||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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.2, 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. When a combination of controls | |||
semantics, the behavior of the operation is undefined. | is encountered whose semantics are not defined (or not known), the | |||
Additionally, unless order-dependent semantics are given in a | operation fails with protocolError. Additionally, unless order- | |||
specification, the order of a combination of controls in the SEQUENCE | dependent semantics are given in a specification, the order of a | |||
is ignored. Where the order is to be ignored but cannot be ignored by | combination of controls in the SEQUENCE is ignored. Where the order | |||
the server, the operation fails with protocolError. | 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 704 | skipping to change at line 701 | |||
- 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 | |||
operation should be thought of as the "authenticate" operation. | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
operation should be thought of as the "authenticate" operation. | ||||
Operational, authentication, and security-related semantics of this | Operational, authentication, and security-related semantics of this | |||
operation are 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 } | |||
skipping to change at line 759 | skipping to change at line 757 | |||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Authorization is the process of enforcing policy while performing | Authorization is the process of enforcing policy while performing | |||
operations. Among other things, the process of authorization takes as | operations. Among other things, the process of authorization takes as | |||
Lightweight Directory Access Protocol Version 3 | ||||
input authentication information obtained during the bind operation | input authentication information obtained during the bind operation | |||
and/or other acts of authentication (such as lower layer security | and/or other acts of authentication (such as lower layer security | |||
services). | 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. | |||
After sending a BindRequest, clients MUST NOT send further LDAP PDUs | ||||
until receiving the BindResponse. Similarly, servers SHOULD NOT | ||||
process or respond to requests received while processing a | ||||
BindRequest. | ||||
If the client did not bind before sending a request and receives an | 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 stream, reopen it and begin again by | LDAP exchange, it may close the connection, reopen it and begin again | |||
first sending a PDU with a Bind Request. This will aid in | by 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 an LDAP exchange to change | |||
authentication and/or security associations or to complete a multi- | the authentication and/or security associations or to complete a | |||
stage bind process. Authentication from earlier binds is subsequently | multi-stage bind process. Authentication from earlier binds is | |||
ignored. | subsequently 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 ([AuthMeth] Section | client to invoke the BindRequest multiple times ([AuthMeth] Section | |||
8.2). Clients MUST NOT invoke operations between two Bind Requests | 8.2). Clients MUST NOT invoke operations between two Bind Requests | |||
made as part of a multi-stage bind. | 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. | |||
skipping to change at line 810 | skipping to change at line 813 | |||
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. | |||
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 } | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 closing and re- | version of this protocol (this may or may not require closing and re- | |||
establishing the stream), how to proceed with another version of this | establishing the connection), how to proceed with another version of | |||
protocol is beyond the scope of this document. Clients which are | this protocol is beyond the scope of this document. Clients which are | |||
unable or unwilling to proceed SHOULD close the underlying stream. | unable or unwilling to proceed SHOULD close the connection. | |||
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. | |||
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 close the stream. The Unbind operation is not the | association and close the connection. 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 stream. Outstanding operations are | other peer, and MUST close the connection. Outstanding operations are | |||
handled as specified in Section 5.1. | 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 LDAP exchange or connection between the client and | |||
notification is of an advisory nature, and the server will not expect | the server. The notification is of an advisory nature, and the server | |||
any response to be returned from the client. | will not expect any response to be returned from the client. | |||
The unsolicited notification is structured as an LDAPMessage in which | ||||
the messageID is zero and protocolOp is of the extendedResp form (See | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
The unsolicited notification is structured as an LDAPMessage in which | ||||
the messageID is zero and protocolOp is of the extendedResp form (See | ||||
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 | |||
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 stream due to an error condition. | the server is about to close the connection due to an error | |||
This notification is intended to assist clients in distinguishing | condition. This notification is intended to assist clients in | |||
between an error condition and a transient network failure. Note that | distinguishing between an error condition and a transient network | |||
this notification is not a response to an unbind requested by the | failure. Note that this notification is not a response to an unbind | |||
client. Outstanding operations are handled as specified in Section | requested by the client. Outstanding operations are handled as | |||
5.1. | specified in Section 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. | |||
- strongAuthRequired: The server has detected that an established | - strongAuthRequired: The server has detected that an established | |||
security association between the client and server has | security association between the client and server has | |||
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 LDAP exchanges, and be unavailable for | |||
extended period of time. The client may make use of an alternative | an extended period of time. The client may make use of an | |||
server. | alternative 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 stream. | messages to the client, and MUST close the connection. | |||
4.5. Search Operation | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
4.5. Search Operation | ||||
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: | |||
skipping to change at line 972 | skipping to change at line 975 | |||
approxMatch [8] AttributeValueAssertion, | approxMatch [8] AttributeValueAssertion, | |||
extensibleMatch [9] MatchingRuleAssertion } | extensibleMatch [9] MatchingRuleAssertion } | |||
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 { | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
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 } | |||
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. | |||
skipping to change at line 1026 | skipping to change at line 1028 | |||
the base object. | the base object. | |||
derefAlways: Dereference aliases both in searching and in | derefAlways: Dereference aliases both in searching and in | |||
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 | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
skipping to change at line 1081 | skipping to change at line 1083 | |||
The present match evaluates to TRUE where there is an attribute or | The present match evaluates to TRUE where there is an attribute or | |||
subtype of the specified attribute description present in an | subtype of the specified attribute description present in an | |||
entry, and FALSE otherwise (including a presence test with an | entry, and FALSE otherwise (including a presence test with an | |||
unrecognized attribute description.) | unrecognized attribute description.) | |||
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 | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 1138 | skipping to change at line 1139 | |||
If the dnAttributes field is set to TRUE, the match is | If the dnAttributes field is set to TRUE, the match is | |||
additionally applied against all the AttributeValueAssertions in | additionally applied against all the AttributeValueAssertions in | |||
an entry's distinguished name, and evaluates to TRUE if there is | an entry's distinguished name, and evaluates to TRUE if there is | |||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
skipping to change at line 1194 | skipping to change at line 1195 | |||
An empty list requests the return of all user attributes. | An empty list requests the return of all user attributes. | |||
A list containing "*" requests all user attributes in addition to | A list containing "*" requests all user attributes in addition to | |||
other listed (operational) attributes. | other listed (operational) attributes. | |||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
skipping to change at line 1250 | skipping to change at line 1251 | |||
SearchResultDone ::= [APPLICATION 5] LDAPResult | SearchResultDone ::= [APPLICATION 5] LDAPResult | |||
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 | ||||
appropriate attributes as specified in the attributes field of the | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
Each entry returned in a SearchResultEntry will contain all | ||||
appropriate attributes as specified in the attributes field of the | ||||
Search Request. Return of attributes is subject to access control and | 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 1304 | skipping to change at line 1305 | |||
operation for each SearchResultReference that is returned. Note that | operation for each SearchResultReference that is returned. Note that | |||
the abandon operation described in Section 4.11 applies only to a | the abandon operation described in Section 4.11 applies only to a | |||
particular operation sent on an association between a client and | particular operation sent on an association between a client and | |||
server. The client must abandon subsequent search operations it | server. The client must abandon subsequent search operations it | |||
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 | |||
Lightweight Directory Access Protocol Version 3 | ||||
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. | |||
skipping to change at line 1359 | skipping to change at line 1360 | |||
a shadow), and that LDAP-capable server (hostd) holds the subtree | a shadow), and that LDAP-capable server (hostd) holds the subtree | |||
<OU=Roles,DC=Example,DC=NET>. If a wholeSubtree search of | <OU=Roles,DC=Example,DC=NET>. If a wholeSubtree search of | |||
<DC=Example,DC=NET> is requested to the contacted server, it may | <DC=Example,DC=NET> is requested to the contacted server, it may | |||
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 } | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 1414 | skipping to change at line 1416 | |||
object LDAPDN, | object LDAPDN, | |||
changes SEQUENCE OF change SEQUENCE { | changes SEQUENCE OF change SEQUENCE { | |||
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 | ||||
field contains the DN of the entry to be modified. The server | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
- 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 | ||||
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 model | performed MUST conform to the requirements of the directory model | |||
skipping to change at line 1466 | skipping to change at line 1468 | |||
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 stream fails, whether | Operation. If the association changes or the connection fails, | |||
the modification occurred or not is indeterminate. | whether the modification occurred or not is indeterminate. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 1522 | skipping to change at line 1524 | |||
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>. | |||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 1573 | skipping to change at line 1576 | |||
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 the operation moves the entry | - newrdn: the new RDN of the entry. If the operation moves the entry | |||
to a new superior without changing its RDN, the value of the old | to a new superior without changing its RDN, the value of the old | |||
RDN is supplied for this parameter. | RDN is supplied for this parameter. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Attribute values of the new RDN not matching any attribute value | Attribute values of the new RDN not matching any attribute value | |||
of the entry are added to the entry and an appropriate error is | of the entry are added to the entry and an appropriate error is | |||
returned if this fails. | 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 1626 | skipping to change at line 1630 | |||
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 | |||
is mapped onto DAP, then this restriction will apply, and the | is mapped onto DAP, then this restriction will apply, and the | |||
affectsMultipleDSAs result code will be returned if this error | affectsMultipleDSAs result code will be returned if this error | |||
occurred. In general, clients MUST NOT expect to be able to perform | occurred. In general, clients MUST NOT expect to be able to perform | |||
arbitrary movements of entries and subtrees between servers or | arbitrary movements of entries and subtrees between servers or | |||
between naming contexts. | between naming contexts. | |||
4.10. Compare Operation | 4.10. Compare Operation | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 value assertion 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 matches a value of the attribute or subtype according | the ava field matches a value of the attribute or subtype according | |||
to the attribute's EQUALITY matching rule. compareFalse indicates | to the attribute's EQUALITY matching rule. compareFalse indicates | |||
that the assertion value in the ava field and the values of the | that the assertion value in the ava field and the values of the | |||
attribute or subtype did not match or was Undefined (Section 4.5.1). | attribute or subtype did not match. Other result codes indicate | |||
either that the result of the comparison was Undefined (Section | ||||
In the event that the attribute or subtype is not present in the | 4.5.1), or that some error occurred. | |||
entry, the resultCode field is set to noSuchAttribute. If the | ||||
attribute is unknown, the resultCode is set to | ||||
undefinedAttributeType. If the attribute or subtype has no equality | ||||
matching rule, innapropriateMatching is returned in the resultCode. | ||||
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: | |||
skipping to change at line 1687 | skipping to change at line 1686 | |||
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. Since the client cannot tell the difference between | by the MessageID. Since the client cannot tell the difference between | |||
a successfully abandoned operation and an outstanding operation, the | a successfully abandoned operation and an outstanding operation, the | |||
application of the Abandon operation is limited to uses where the | application of the Abandon operation is limited to uses where the | |||
client does not require an indication of its outcome. | client does not require an indication of its outcome. | |||
Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned. | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned. | ||||
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 ability to abandon other (particularly update) operations is at | |||
the discretion of the server. | the discretion of the server. | |||
skipping to change at line 1739 | skipping to change at line 1738 | |||
information in a form defined by that request, encapsulated inside an | information in a form defined by that request, encapsulated inside an | |||
OCTET STRING. | OCTET STRING. | |||
The server will respond to this with an LDAPMessage containing an | The server will respond to this with an LDAPMessage containing an | |||
ExtendedResponse. | ExtendedResponse. | |||
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 } | |||
Lightweight Directory Access Protocol Version 3 | ||||
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.2, also follow the extensibility rules in | according to Section 5.2, also follow the extensibility rules in | |||
skipping to change at line 1794 | skipping to change at line 1792 | |||
defining single-request/multiple-response operations in LDAP. This | defining single-request/multiple-response operations in LDAP. This | |||
message is intended to be used in conjunction with the extended | message is intended to be used in conjunction with the extended | |||
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 | |||
Lightweight Directory Access Protocol Version 3 | ||||
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. | |||
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. IntermediateResponse messages are | operation and request control. IntermediateResponse messages are | |||
specified in documents describing the manner in which they are | specified in documents describing the manner in which they are | |||
solicited (i.e. in the extended operation or request control | solicited (i.e. in the extended operation or request control | |||
specification that uses them). These specifications include: | specification that uses them). These specifications include: | |||
skipping to change at line 1846 | skipping to change at line 1844 | |||
code for the operation. One or more kinds of IntermediateResponse | code for the operation. One or more kinds of IntermediateResponse | |||
messages may be sent in response to a request control. | 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 | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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. | |||
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 a TLS-protected connection. The StartTLS | ability to establish a TLS-protected LDAP exchange. The StartTLS | |||
operation is defined using the extended operation mechanism described | operation is defined using the extended 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 | |||
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 LDAP exchange following | |||
request until it receives a StartTLS extended response and, in the | this request until it receives a StartTLS extended response and, in | |||
case of a successful response, completes TLS negotiations. | the 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 1896 | skipping to change at line 1894 | |||
4.14.2.2. Response other than "success" | 4.14.2.2. Response other than "success" | |||
If the ExtendedResponse contains a result code other than success, | If the ExtendedResponse contains a result code other than success, | |||
this indicates that the server is unwilling or unable to negotiate | this indicates that the server is unwilling or unable to negotiate | |||
TLS. The following result codes have these meanings for this | TLS. The following result codes have these meanings for this | |||
operation: | operation: | |||
- operationsError: operations sequencing incorrect; e.g. TLS is | - operationsError: operations sequencing incorrect; e.g. TLS is | |||
already established. | already established. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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. In this | configuration), it MUST return the protocolError resultCode. In this | |||
event, the client may proceed with any LDAP operation, or it may | event, the client may proceed with any LDAP operation, or it may | |||
close the stream. | 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 | |||
install the TLS layer for some reason, e.g. the certificate server | install the TLS layer for some reason, e.g. the certificate server | |||
not responding, it cannot contact its TLS implementation, or if the | not responding, it cannot contact its TLS implementation, or if the | |||
server is in process of shutting down. The client may retry the | server is in process of shutting down. The client may retry the | |||
StartTLS operation, or it may proceed with any other LDAP operation, | StartTLS operation, or it may proceed with any other LDAP operation, | |||
or it may close the stream. | or it may close the connection. | |||
4.14.3. Removal of the TLS Layer | 4.14.3. Removal of the TLS Layer | |||
Two forms of TLS layer -- graceful and abrupt -- are supported. These | Two forms of TLS layer -- graceful and abrupt -- are supported. These | |||
do not involve LDAP PDUs, but are preformed at the underlying layers. | do not involve LDAP PDUs, but are preformed at the underlying layers. | |||
If the stream is closed, outstanding operations are handled as | If the connection is closed, outstanding operations are handled as | |||
specified in Section 5.1. | specified in Section 5.1. | |||
4.14.3.1. Graceful Removal | 4.14.3.1. Graceful Removal | |||
Either the client or server MAY remove the TLS layer and leave the | Either the client or server MAY remove the TLS layer and leave the | |||
connection intact by sending and receiving a TLS closure alert. | LDAP exchange intact by sending and receiving a TLS 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 connection intact, it then MUST cease to send | wishes to leave the LDAP exchange intact, it then MUST cease to send | |||
further PDUs and MUST ignore any received PDUs until it receives a | further PDUs and MUST ignore any received LDAP PDUs until it receives | |||
TLS closure alert from the other peer. | a 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 connection to remain intact. In this case, it | choose to allow the LDAP exchange to remain intact. In this case, it | |||
MUST immediately transmit a TLS closure alert. Following this, it MAY | MUST immediately transmit a TLS closure alert. Following this, it MAY | |||
send and receive LDAP PDUs. | send and receive LDAP PDUs. | |||
Protocol peers MAY close the stream after sending or receiving a TLS | Protocol peers MAY close the connection after sending or receiving a | |||
closure alert. | TLS closure alert. | |||
Lightweight Directory Access Protocol Version 3 | ||||
After the TLS layer has been removed, 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 | |||
alert. Thus, clients wishing to receive responses to messages sent | alert. Thus, clients wishing to receive responses to messages sent | |||
while the TLS layer is intact MUST wait for those message responses | while the TLS layer is intact MUST wait for those message responses | |||
before sending the TLS closure alert. | before sending the TLS closure alert. | |||
Lightweight Directory Access Protocol Version 3 | ||||
4.14.3.2. Abrupt Removal | 4.14.3.2. Abrupt Removal | |||
Either the client or server MAY abruptly remove the TLS layer by | Either the client or server MAY abruptly remove the TLS layer by | |||
closing the stream. In this circumstance, a server MAY send the | closing the connection. In this circumstance, a server MAY send the | |||
client a Notice of Disconnection before closing the stream. | client a Notice of Disconnection before closing the connection. | |||
5. Protocol Encoding, Connection, and Transfer | 5. Protocol Encoding, Connection, and Transfer | |||
This protocol is designed to run over connection-oriented, reliable | This protocol is designed to run over connection-oriented, reliable | |||
transports, where the data stream is divided into octets (8-bit | transports, where the data stream is divided into octets (8-bit | |||
units), with each octet being significant. | units), with each octet being significant. | |||
One underlying service, LDAP over TCP, is defined in Section | One underlying service, LDAP over TCP, is defined in Section | |||
5.3. This service is generally applicable to applications providing | 5.3. This service is generally applicable to applications providing | |||
or consuming X.500-based directory services on the Internet. This | or consuming X.500-based directory services on the Internet. This | |||
specification was generally written with the TCP mapping in mind. | specification was generally written with the TCP mapping in mind. | |||
Specifications detailing other mappings may encounter various | Specifications detailing other mappings may encounter various | |||
obstacles. | 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.3 | described in Section 5.3 | |||
This table illustrates the relationship between the different layers | This table illustrates the relationship between the different layers | |||
involved in an exchange between two protocol peers: | involved in an exchange between two protocol peers: | |||
+------------+ | | +---------------+ | | |||
| connection | | | | LDAP exchange | | | |||
+------------+ > LDAP PDU | | +---------------+ > LDAP PDU | | |||
+------------+ < data | | +---------------+ < data | | |||
| SASL layer | | | | SASL layer | | | |||
+------------+ > SASL-protected data | | +---------------+ > SASL-protected data | | |||
+------------+ < data | | +---------------+ < data | | |||
| TLS layer | | | | TLS layer | | | |||
+------------+ > TLS-protected data | Application | +---------------+ > TLS-protected data | Application | |||
+------------+ < data +------------ | +---------------+ < data +------------ | |||
| stream | | Transport | | connection | | Transport | |||
+------------+ | +---------------+ | |||
5.1 Operation and Connection Relationship | 5.1 Operation and LDAP exchange Relationship | |||
Protocol operations are tied to a connection. If the stream is | Protocol operations are tied to an LDAP exchange. If the connection | |||
closed, any outstanding operations tied to the connection are, when | is closed, any outstanding operations tied to the LDAP exchange are, | |||
possible, abandoned, and when not possible, completed without | when possible, abandoned, and when not possible, completed without | |||
transmission of the response. Also, if the stream is closed, the | transmission of the response. Also, if the connection is closed, the | |||
client MUST NOT assume that any outstanding update operations tied to | client MUST NOT assume that any outstanding update operations tied to | |||
the connection have succeeded or failed. | the LDAP exchange have succeeded or failed. | |||
5.2. Protocol Encoding | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
5.2. Protocol Encoding | ||||
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 | |||
octet is set to hex "FF". | octet is set to hex "FF". | |||
skipping to change at line 2054 | skipping to change at line 2053 | |||
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]. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Security considerations for authentication methods, SASL mechanisms, | Security considerations for authentication methods, SASL mechanisms, | |||
and TLS are 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 in | Server implementors should plan for the possibility of an identity in | |||
skipping to change at line 2107 | skipping to change at line 2106 | |||
information equally under both normal and error conditions. | information equally under both normal and error conditions. | |||
Protocol peers MUST be prepared to handle invalid and arbitrary | Protocol peers MUST be prepared to handle invalid and arbitrary | |||
length protocol encodings. A number of LDAP security advisories are | length protocol encodings. A number of LDAP security advisories are | |||
available through [CERT]. | available through [CERT]. | |||
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 RFC 3771 by Roger Harrison, and | |||
Zeilenga. Notable amounts of technical reviews and content were | Lightweight Directory Access Protocol Version 3 | |||
Kurt 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 2154 | skipping to change at line 2153 | |||
[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). | |||
[LIMR] Harrison, R., and K. Zeilenga, "The Lightweight Directory | ||||
Access Protocol (LDAP) Intermediate Response Message", | ||||
draft-rharrison-ldap-intermediate-resp-xx.txt (a work in | ||||
progress). | ||||
[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 | Lightweight Directory Access Protocol Version 3 | |||
skipping to change at line 2219 | skipping to change at line 2213 | |||
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 | |||
Lightweight Directory Access Protocol Version 3 | ||||
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. | |||
It is requested that the IANA update the occurrence of "RFC XXXX" in | It is requested that the IANA update the occurrence of "RFC XXXX" in | |||
Appendix B with this RFC number at publication. | Appendix B with this RFC number at publication. | |||
skipping to change at line 2307 | skipping to change at line 2302 | |||
For the extended operation only, this code indicates that the | For the extended operation only, this code indicates that the | |||
server does not recognize the requestName. | server does not recognize the requestName. | |||
For the Start TLS operation, this code may also indicate that | For the Start TLS operation, this code may also indicate that | |||
the server does not currently support Start TLS (even though | the server does not currently support Start TLS (even though | |||
it may recognize the requestName). | it may recognize the requestName). | |||
For request operations specifying multiple controls, this may | For request operations specifying multiple controls, this may | |||
be used to indicate that the server cannot ignore the order | be used to indicate that the server cannot ignore the order | |||
of the controls as specified. | of the controls as specified, or that the combination of the | |||
specified controls is not supported. | ||||
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) | |||
skipping to change at line 2351 | skipping to change at line 2347 | |||
adminLimitExceeded (11) | adminLimitExceeded (11) | |||
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) | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
saslBindInProgress (14) | ||||
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. | |||
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. | |||
For example, this code is returned when multiple values are | For example, this code is returned when multiple values are | |||
supplied to an attribute which has a SINGLE-VALUE constraint. | supplied to an attribute which has a SINGLE-VALUE constraint. | |||
skipping to change at line 2462 | skipping to change at line 2458 | |||
name. | name. | |||
entryAlreadyExists (68) | entryAlreadyExists (68) | |||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 performed as it would | Indicates that the operation cannot be performed as it would | |||
affect 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. | |||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
Appendix B - Complete ASN.1 Definition | Appendix B - Complete ASN.1 Definition | |||
skipping to change at line 2871 | skipping to change at line 2867 | |||
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 and the ordering | - Added language regarding combinations of controls and the ordering | |||
of controls on a message. | of controls on a message. | |||
- Specified that when the semantics of the combination of controls | ||||
is undefined or unknown, it results in a protocolError. | ||||
- Changed "The server MUST be prepared" to "Implementations MUST be | - 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 2907 | skipping to change at line 2905 | |||
credentials from one identity to another, then the client MUST | credentials from one identity to another, then the client MUST | |||
instead establish a new connection." | instead establish a new connection." | |||
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]. | |||
- Mandated that clients not send non-bind operations while a bind is | ||||
in progress, and suggested that servers not process them if they | ||||
Lightweight Directory Access Protocol Version 3 | ||||
are received. This is needed to ensure proper sequencing of the | ||||
bind in relationship to other operations. | ||||
C.1.16 Section 4.2.3 | C.1.16 Section 4.2.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 | |||
- Required both peers to cease transmission and close the connection | - Required both peers to cease transmission and close the LDAP | |||
for the unbind operation. | exchange for the unbind operation. | |||
C.1.18 Section 4.4 | C.1.18 Section 4.4 | |||
- Added instructions for future specifications of Unsolicited | - Added instructions for future specifications of Unsolicited | |||
Notifications. | Notifications. | |||
C.1.19 Section 4.5.1 | C.1.19 Section 4.5.1 | |||
- SearchRequest attributes is now defined as an AttributeSelection | - SearchRequest attributes is now defined as an AttributeSelection | |||
type rather than AttributeDescriptionList, and an ABNF is | type rather than AttributeDescriptionList, and an ABNF is | |||
skipping to change at line 2954 | skipping to change at line 2957 | |||
- Added instructions for equalityMatch, substrings, greaterOrEqual, | - Added instructions for equalityMatch, substrings, greaterOrEqual, | |||
lessOrEqual, and approxMatch. | lessOrEqual, and approxMatch. | |||
C.1.20 Section 4.5.2 | C.1.20 Section 4.5.2 | |||
- 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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
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. | |||
- Replaced AttributeTypeAndValues with Attribute as they are | - Replaced AttributeTypeAndValues with Attribute as they are | |||
skipping to change at line 2992 | skipping to change at line 2996 | |||
- Required servers to not dereference aliases for modify DN. This | - Required servers to not dereference aliases for modify DN. This | |||
was added for consistency with other operations and to help ensure | was added for consistency with other operations and to help ensure | |||
data consistency. | data consistency. | |||
- Allow modify DN to fail when moving between naming contexts. | - Allow modify DN to fail when moving between naming contexts. | |||
- Specified what happens when the attributes of the newrdn are no | - Specified what happens when the attributes of the newrdn are no | |||
present on the entry. | present on the entry. | |||
C.1.26 Section 4.10 | C.1.26 Section 4.10 | |||
- Clarified the semantics of Compare when the attribute is not | - Clarified that compareFalse means that the compare took place and | |||
present and when it is unknown. | the result is false. There was confusion which lead people to | |||
- Clarified that an Undefined compare results in a compareFalse | believe that an Undefined match resulted in compareFalse. | |||
resultCode. | ||||
- Required servers to not dereference aliases for compare. This was | - Required servers to not dereference aliases for compare. This was | |||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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 | |||
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 3052 | skipping to change at line 3057 | |||
C.2 Changes 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 | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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 | |||
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 [LIMR]: | C.3 Changes made to RFC 3771: | |||
- 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. | |||
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 | |||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |