draft-ietf-ldapbis-protocol-24.txt | draft-ietf-ldapbis-protocol-25.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-24.txt May 2004 | Document: draft-ietf-ldapbis-protocol-25.txt July 2004 | |||
Obsoletes: RFCs 2251, 2830, 3771 | 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 | |||
skipping to change at line 48 | skipping to change at line 47 | |||
act in accordance with X.500 data and service models. These protocol | act in accordance with X.500 data and service models. These protocol | |||
elements are based on those described in the X.500 Directory Access | elements are based on those described in the X.500 Directory Access | |||
Protocol (DAP). | Protocol (DAP). | |||
Table of Contents | Table of Contents | |||
1. Introduction....................................................2 | 1. Introduction....................................................2 | |||
1.1. Relationship to Obsolete Specifications.......................3 | 1.1. Relationship to Obsolete Specifications.......................3 | |||
2. Conventions.....................................................3 | 2. Conventions.....................................................3 | |||
3. Protocol Model..................................................4 | 3. Protocol Model..................................................4 | |||
3.1 Operation and LDAP Exchange Relationship.......................4 | ||||
4. Elements of Protocol............................................4 | 4. Elements of Protocol............................................4 | |||
4.1. Common Elements...............................................5 | 4.1. Common Elements...............................................5 | |||
4.1.1. Message Envelope............................................5 | 4.1.1. Message Envelope............................................5 | |||
4.1.2. String Types................................................6 | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
4.1.2. String Types................................................6 | ||||
4.1.3. Distinguished Name and Relative Distinguished Name..........7 | 4.1.3. Distinguished Name and Relative Distinguished Name..........7 | |||
4.1.4. Attribute Descriptions......................................7 | 4.1.4. Attribute Descriptions......................................7 | |||
4.1.5. Attribute Value.............................................7 | 4.1.5. Attribute Value.............................................7 | |||
4.1.6. Attribute Value Assertion...................................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....................................9 | |||
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...............................................14 | |||
4.3. Unbind Operation.............................................16 | 4.3. Unbind Operation.............................................16 | |||
4.4. Unsolicited Notification.....................................16 | 4.4. Unsolicited Notification.....................................17 | |||
4.5. Search Operation.............................................18 | 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...........................................31 | |||
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..........................................35 | 4.14. StartTLS Operation..........................................35 | |||
5. Protocol Encoding, Connection, and Transfer....................37 | 5. Protocol Encoding, Connection, and Transfer....................37 | |||
5.1 Operation and LDAP exchange Relationship......................37 | ||||
5.2. Protocol Encoding............................................38 | 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...............................................40 | |||
8. Normative References...........................................40 | 8. Normative References...........................................40 | |||
9. Informative References.........................................41 | 9. Informative References.........................................41 | |||
10. IANA Considerations...........................................41 | 10. IANA Considerations...........................................42 | |||
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 RFC 3771:.....................................60 | C.3 Changes made to RFC 3771:.....................................60 | |||
skipping to change at line 191 | skipping to change at line 191 | |||
client eventually receives a response for every request that requires | client eventually receives a response for every request that requires | |||
one. | one. | |||
The core protocol operations defined in this document can be mapped | The core protocol operations defined in this document can be mapped | |||
to a subset of the X.500 (1993) Directory Abstract Service [X.511]. | to a subset of the X.500 (1993) Directory Abstract Service [X.511]. | |||
However there is not a one-to-one mapping between LDAP operations and | However there is not a one-to-one mapping between LDAP operations and | |||
X.500 Directory Access Protocol (DAP) operations. Server | X.500 Directory Access Protocol (DAP) operations. Server | |||
implementations acting as a gateway to X.500 directories may need to | implementations acting as a gateway to X.500 directories may need to | |||
make multiple DAP requests to service a single LDAP request. | make multiple DAP requests to service a single LDAP request. | |||
3.1 Operation and LDAP Exchange Relationship | ||||
Protocol operations are tied to an LDAP exchange. If the connection | ||||
is closed, any uncompleted operations tied to the LDAP exchange are, | ||||
when possible, abandoned, and when not possible, completed without | ||||
transmission of the response. Also, if the connection is closed, the | ||||
client MUST NOT assume that any uncompleted update operations tied to | ||||
the LDAP exchange have succeeded or failed. | ||||
4. Elements of Protocol | 4. Elements of Protocol | |||
The protocol is described using Abstract Syntax Notation One | The protocol is described using Abstract Syntax Notation One | |||
([ASN.1]), and is transferred using a subset of ASN.1 Basic Encoding | ([ASN.1]), and is transferred using a subset of ASN.1 Basic Encoding | |||
Rules ([BER]). Section 5 specifies how the protocol elements are | Rules ([BER]). Section 5 specifies how the protocol elements are | |||
encoded and transferred. | encoded and transferred. | |||
In order to support future extensions to this protocol, extensibility | In order to support future extensions to this protocol, extensibility | |||
is implied where it is allowed per ASN.1 (i.e. sequence, set, choice, | is implied where it is allowed per ASN.1 (i.e. sequence, set, choice, | |||
and enumerated types are extensible). In addition, ellipses (...) | and enumerated types are extensible). In addition, ellipses (...) | |||
have been supplied in ASN.1 types that are explicitly extensible as | have been supplied in ASN.1 types that are explicitly extensible as | |||
discussed in [LDAPIANA]. Because of the implied extensibility, | discussed in [LDAPIANA]. Because of the implied extensibility, | |||
clients and servers MUST (unless otherwise specified) ignore trailing | clients and servers MUST (unless otherwise specified) ignore trailing | |||
SEQUENCE components whose tags they do not recognize. | SEQUENCE components whose tags they do not recognize. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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. | |||
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 253 | skipping to change at line 262 | |||
addResponse AddResponse, | addResponse AddResponse, | |||
delRequest DelRequest, | delRequest DelRequest, | |||
delResponse DelResponse, | delResponse DelResponse, | |||
modDNRequest ModifyDNRequest, | modDNRequest ModifyDNRequest, | |||
modDNResponse ModifyDNResponse, | modDNResponse ModifyDNResponse, | |||
compareRequest CompareRequest, | compareRequest CompareRequest, | |||
compareResponse CompareResponse, | compareResponse CompareResponse, | |||
abandonRequest AbandonRequest, | abandonRequest AbandonRequest, | |||
extendedReq ExtendedRequest, | extendedReq ExtendedRequest, | |||
extendedResp ExtendedResponse, | extendedResp ExtendedResponse, | |||
intermediateResponse IntermediateResponse | ..., | |||
... }, | intermediateResponse IntermediateResponse }, | |||
controls [0] Controls OPTIONAL } | controls [0] Controls OPTIONAL } | |||
MessageID ::= INTEGER (0 .. maxInt) | MessageID ::= INTEGER (0 .. maxInt) | |||
Lightweight Directory Access Protocol Version 3 | ||||
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. | |||
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 connection. | 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 connection 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 | |||
the values of any other requests outstanding in the LDAP association | the values of any other uncompleted requests in the LDAP association | |||
of which this message is a part. The zero value is reserved for the | of which this message is a part. The zero value is reserved for the | |||
unsolicited notification message. | unsolicited notification message. | |||
Typical clients increment a counter for each request. | Typical clients increment a counter for each request. | |||
A client MUST NOT send a request with the same message ID as an | A client MUST NOT send a request with the same message ID as an | |||
earlier request on the same LDAP association unless it can be | earlier request on the same LDAP association unless it can be | |||
determined that the server is no longer servicing the earlier request | determined that the server is no longer servicing the earlier request | |||
(e.g. after the final response is received, or a subsequent bind | (e.g. after the final response is received, or a subsequent bind | |||
completes). Otherwise the behavior is undefined. For this purpose, | completes). Otherwise the behavior is undefined. For this purpose, | |||
skipping to change at line 313 | skipping to change at line 322 | |||
The LDAPString is a notational convenience to indicate that, although | The LDAPString is a notational convenience to indicate that, although | |||
strings of LDAPString type encode as ASN.1 OCTET STRING types, the | strings of LDAPString type encode as ASN.1 OCTET STRING types, the | |||
[ISO10646] character set (a superset of [Unicode]) is used, encoded | [ISO10646] character set (a superset of [Unicode]) is used, encoded | |||
following the [UTF-8] algorithm. Note that Unicode characters U+0000 | following the [UTF-8] algorithm. Note that Unicode characters U+0000 | |||
through U+007F are the same as ASCII 0 through 127, respectively, and | through U+007F are the same as ASCII 0 through 127, respectively, and | |||
have the same single octet UTF-8 encoding. Other Unicode characters | have the same single octet UTF-8 encoding. Other Unicode characters | |||
have a multiple octet UTF-8 encoding. | have a multiple octet UTF-8 encoding. | |||
LDAPString ::= OCTET STRING -- UTF-8 encoded, | LDAPString ::= OCTET STRING -- UTF-8 encoded, | |||
Lightweight Directory Access Protocol Version 3 | ||||
-- [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]. | |||
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 364 | skipping to change at line 375 | |||
A field of type AttributeValue is an OCTET STRING containing an | A field of type AttributeValue is an OCTET STRING containing an | |||
encoded attribute value. The attribute value is encoded according to | encoded attribute value. The attribute value is encoded according to | |||
the LDAP-specific encoding definition of its corresponding syntax. | the LDAP-specific encoding definition of its corresponding syntax. | |||
The LDAP-specific encoding definitions for different syntaxes and | The LDAP-specific encoding definitions for different syntaxes and | |||
attribute types may be found in other documents and in particular | attribute types may be found in other documents and in particular | |||
[Syntaxes]. | [Syntaxes]. | |||
AttributeValue ::= OCTET STRING | AttributeValue ::= OCTET STRING | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
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 417 | skipping to change at line 428 | |||
Attribute requires at least one value. | Attribute requires at least one value. | |||
PartialAttribute ::= SEQUENCE { | PartialAttribute ::= SEQUENCE { | |||
type AttributeDescription, | type AttributeDescription, | |||
vals SET OF value AttributeValue } | vals SET OF value AttributeValue } | |||
Attribute ::= PartialAttribute(WITH COMPONENTS { | Attribute ::= PartialAttribute(WITH COMPONENTS { | |||
..., | ..., | |||
vals (SIZE(1..MAX))}) | vals (SIZE(1..MAX))}) | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
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 471 | skipping to change at line 482 | |||
attributeOrValueExists (20), | attributeOrValueExists (20), | |||
invalidAttributeSyntax (21), | invalidAttributeSyntax (21), | |||
-- 22-31 unused -- | -- 22-31 unused -- | |||
noSuchObject (32), | noSuchObject (32), | |||
aliasProblem (33), | aliasProblem (33), | |||
invalidDNSyntax (34), | invalidDNSyntax (34), | |||
-- 35 reserved for undefined isLeaf -- | -- 35 reserved for undefined isLeaf -- | |||
aliasDereferencingProblem (36), | aliasDereferencingProblem (36), | |||
-- 37-47 unused -- | -- 37-47 unused -- | |||
inappropriateAuthentication (48), | inappropriateAuthentication (48), | |||
Lightweight Directory Access Protocol Version 3 | ||||
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), | |||
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 527 | skipping to change at line 539 | |||
4.1.10. Referral | 4.1.10. Referral | |||
The referral result code indicates that the contacted server cannot | The referral result code indicates that the contacted server cannot | |||
or will not perform the operation and that one or more other servers | or will not perform the operation and that one or more other servers | |||
may be able to. Reasons for this include: | may be able to. Reasons for this include: | |||
- The target entry of the request is not held locally, but the | - The target entry of the request is not held locally, but the | |||
server has knowledge of its possible existence elsewhere. | server has knowledge of its possible existence elsewhere. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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 | |||
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 582 | skipping to change at line 594 | |||
may not be legal for URLs (e.g. spaces) and MUST be escaped using | may not be legal for URLs (e.g. spaces) and MUST be escaped using | |||
the % method in [URI]. | the % method in [URI]. | |||
- It is RECOMMENDED that the <dn> part be present to avoid | - It is RECOMMENDED that the <dn> part be present to avoid | |||
ambiguity. | ambiguity. | |||
- If the <dn> part is present, the client MUST use this name in its | - If the <dn> part is present, the client MUST use this name in its | |||
next request to progress the operation, and if it is not present | next request to progress the operation, and if it is not present | |||
the client will use the same name as in the original request. | the client will use the same name as in the original request. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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. | |||
- 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 637 | skipping to change at line 649 | |||
request control. | request control. | |||
The criticality field only has meaning in controls attached to | The criticality field only has meaning in controls attached to | |||
request messages (except unbindRequest). For controls attached to | request messages (except unbindRequest). For controls attached to | |||
response messages and the unbindRequest, the criticality field SHOULD | response messages and the unbindRequest, the criticality field SHOULD | |||
be FALSE, and MUST be ignored by the receiving protocol peer. A value | be FALSE, and MUST be ignored by the receiving protocol peer. A value | |||
of TRUE indicates that it is unacceptable to perform the operation | of TRUE indicates that it is unacceptable to perform the operation | |||
without applying the semantics of the control and FALSE otherwise. | without applying the semantics of the control and FALSE otherwise. | |||
Specifically, the criticality field is applied as follows: | Specifically, the criticality field is applied as follows: | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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 | |||
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 | |||
skipping to change at line 671 | skipping to change at line 683 | |||
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. When a combination of controls | specification most recently published. When a combination of controls | |||
is encountered whose semantics are not defined (or not known), the | is encountered whose semantics are invalid, not specified (or not | |||
known), the message is considered to be not well-formed, thus the | ||||
operation fails with protocolError. Additionally, unless order- | operation fails with protocolError. Additionally, unless order- | |||
dependent semantics are given in a specification, the order of a | dependent semantics are given in a specification, the order of a | |||
combination of controls in the SEQUENCE is ignored. Where the order | combination of controls in the SEQUENCE is ignored. Where the order | |||
is to be ignored but cannot be ignored by the server, the operation | is to be ignored but cannot be ignored by the server, the message is | |||
fails with protocolError. | considered not well-formed and 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 | |||
specification), | specification), | |||
- whether information is to be present in the controlValue field, | - whether information is to be present in the controlValue field, | |||
and if so, the format of the controlValue contents, | and if so, the format of the controlValue contents, | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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. | operation should be thought of as the "authenticate" operation. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 748 | skipping to change at line 761 | |||
authentication ([AuthMeth] Section 3.3.2). Where the server | authentication ([AuthMeth] Section 3.3.2). Where the server | |||
attempts to locate the named object, it SHALL NOT perform alias | attempts to locate the named object, it SHALL NOT perform alias | |||
dereferencing. | dereferencing. | |||
- authentication: information used in authentication. This type is | - authentication: information used in authentication. This type is | |||
extensible as defined in Section 3.7 of [LDAPIANA]. Servers that | extensible as defined in Section 3.7 of [LDAPIANA]. Servers that | |||
do not support a choice supplied by a client return | do not support a choice supplied by a client return | |||
authMethodNotSupported in the resultCode field of the | authMethodNotSupported in the resultCode field of the | |||
BindResponse. | BindResponse. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Textual passwords (consisting of a character sequence with a known | Textual passwords (consisting of a character sequence with a known | |||
character set and encoding) transferred to the server using the | character set and encoding) transferred to the server using the | |||
simple AuthenticationChoice SHALL be transferred as [UTF-8] | simple AuthenticationChoice SHALL be transferred as [UTF-8] | |||
encoded [Unicode]. Prior to transfer, clients SHOULD prepare text | encoded [Unicode]. Prior to transfer, clients SHOULD prepare text | |||
passwords by applying the [SASLprep] profile of the [Stringprep] | passwords by applying the [SASLprep] profile of the [Stringprep] | |||
algorithm. Passwords consisting of other data (such as random | algorithm. Passwords consisting of other data (such as random | |||
octets) MUST NOT be altered. The determination of whether a | octets) MUST NOT be altered. The determination of whether a | |||
password is textual is a local client matter. | password is textual is a local client matter. | |||
Authorization is the process of enforcing policy while performing | Authorization is the decision of which access an operation has to the | |||
operations. Among other things, the process of authorization takes as | directory. 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 uncompleted 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 | uncompleted 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 | After sending a BindRequest, clients MUST NOT send further LDAP PDUs | |||
until receiving the BindResponse. Similarly, servers SHOULD NOT | until receiving the BindResponse. Similarly, servers SHOULD NOT | |||
process or respond to requests received while processing a | process or respond to requests received while processing a | |||
BindRequest. | 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 | |||
skipping to change at line 802 | skipping to change at line 815 | |||
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. | |||
If the client sends a BindRequest with the sasl mechanism field as an | If the client sends a BindRequest with the sasl mechanism field as an | |||
empty string, the server MUST return a BindResponse with | empty string, the server MUST return a BindResponse with | |||
Lightweight Directory Access Protocol Version 3 | ||||
authMethodNotSupported as the resultCode. This will allow clients to | authMethodNotSupported as the resultCode. This will allow clients to | |||
abort a negotiation if it wishes to try again with the same SASL | abort a negotiation if it wishes to try again with the same SASL | |||
mechanism. | mechanism. | |||
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. | |||
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. | |||
skipping to change at line 854 | skipping to change at line 869 | |||
these operations is historical. The Unbind operation should be | these operations is historical. The Unbind operation should be | |||
thought of as the "quit" operation. | thought of as the "quit" operation. | |||
The Unbind Operation is defined as follows: | The Unbind Operation is defined as follows: | |||
UnbindRequest ::= [APPLICATION 2] NULL | UnbindRequest ::= [APPLICATION 2] NULL | |||
The Unbind Operation has no response defined. Upon transmission of | The Unbind Operation has no response defined. Upon transmission of | |||
the UnbindRequest, each protocol peer is to consider the LDAP | the UnbindRequest, each protocol peer is to consider the LDAP | |||
association terminated, MUST cease transmission of messages to the | association terminated, MUST cease transmission of messages to the | |||
other peer, and MUST close the connection. Outstanding operations are | ||||
Lightweight Directory Access Protocol Version 3 | ||||
other peer, and MUST close the connection. Uncompleted 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 LDAP exchange or connection between the client and | server or in the LDAP exchange or connection between the client and | |||
the server. The notification is of an advisory nature, and the server | the server. The notification is of an advisory nature, and the server | |||
will not expect any response to be returned from the client. | will not expect any response to be returned from the client. | |||
Lightweight Directory Access Protocol Version 3 | ||||
The unsolicited notification is structured as an LDAPMessage in which | The unsolicited notification is structured as an LDAPMessage in which | |||
the messageID is zero and protocolOp is of the extendedResp form (See | the messageID is zero and protocolOp is of the extendedResp form (See | |||
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 | |||
skipping to change at line 894 | skipping to change at line 910 | |||
- 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 connection due to an error | the server is about to close the connection due to an error | |||
condition. This notification is intended to assist clients in | condition. This notification is intended to assist clients in | |||
distinguishing between an error condition and a transient network | distinguishing between an error condition and a transient network | |||
failure. Note that this notification is not a response to an unbind | failure. Note that this notification is not a response to an unbind | |||
requested by the client. Outstanding operations are handled as | requested by the client. Uncompletetd operations are handled as | |||
specified in Section 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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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 LDAP exchanges, and be unavailable for | operations on all existing LDAP exchanges, and be unavailable for | |||
an extended period of time. The client may make use of an | an extended period of time. The client may make use of an | |||
alternative 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 connection. | messages to the client, and MUST close the connection. | |||
Lightweight Directory Access Protocol Version 3 | ||||
4.5. Search Operation | 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 | |||
skipping to change at line 961 | skipping to change at line 977 | |||
AttributeSelection ::= SEQUENCE OF selector LDAPString | AttributeSelection ::= SEQUENCE OF selector LDAPString | |||
-- The LDAPString is constrained to | -- The LDAPString is constrained to | |||
-- <attributeSelector> below | -- <attributeSelector> below | |||
Filter ::= CHOICE { | Filter ::= CHOICE { | |||
and [0] SET SIZE (1..MAX) OF filter Filter, | and [0] SET SIZE (1..MAX) OF filter Filter, | |||
or [1] SET SIZE (1..MAX) OF filter Filter, | or [1] SET SIZE (1..MAX) OF filter Filter, | |||
not [2] Filter, | not [2] Filter, | |||
equalityMatch [3] AttributeValueAssertion, | equalityMatch [3] AttributeValueAssertion, | |||
Lightweight Directory Access Protocol Version 3 | ||||
substrings [4] SubstringFilter, | substrings [4] SubstringFilter, | |||
greaterOrEqual [5] AttributeValueAssertion, | greaterOrEqual [5] AttributeValueAssertion, | |||
lessOrEqual [6] AttributeValueAssertion, | lessOrEqual [6] AttributeValueAssertion, | |||
present [7] AttributeDescription, | present [7] AttributeDescription, | |||
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 } } | |||
Lightweight Directory Access Protocol Version 3 | ||||
MatchingRuleAssertion ::= SEQUENCE { | MatchingRuleAssertion ::= SEQUENCE { | |||
matchingRule [1] MatchingRuleId OPTIONAL, | matchingRule [1] MatchingRuleId OPTIONAL, | |||
type [2] AttributeDescription OPTIONAL, | type [2] AttributeDescription OPTIONAL, | |||
matchValue [3] AssertionValue, | matchValue [3] AssertionValue, | |||
dnAttributes [4] BOOLEAN DEFAULT FALSE } | dnAttributes [4] BOOLEAN DEFAULT FALSE } | |||
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 | |||
skipping to change at line 1016 | skipping to change at line 1034 | |||
in locating the base object of the search. | in locating the base object of the search. | |||
derefInSearching: While searching, dereference any alias entry | derefInSearching: While searching, dereference any alias entry | |||
subordinate to the base object which is also in the search | subordinate to the base object which is also in the search | |||
scope. The filter is applied to the dereferenced object(s). If | scope. The filter is applied to the dereferenced object(s). If | |||
the search scope is wholeSubtree, the search continues in the | the search scope is wholeSubtree, the search continues in the | |||
subtree of any dereferenced object. Aliases in that subtree are | subtree of any dereferenced object. Aliases in that subtree are | |||
also dereferenced. Servers SHOULD eliminate duplicate entries | also dereferenced. Servers SHOULD eliminate duplicate entries | |||
that arise due to alias dereferencing while searching. | that arise due to alias dereferencing while searching. | |||
Lightweight Directory Access Protocol Version 3 | ||||
derefFindingBaseObj: Dereference aliases in locating the base | derefFindingBaseObj: Dereference aliases in locating the base | |||
object of the search, but not when searching subordinates of | object of the search, but not when searching subordinates of | |||
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. | |||
- 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 | |||
skipping to change at line 1071 | skipping to change at line 1089 | |||
are returned as part of the search result (subject to any | are returned as part of the search result (subject to any | |||
applicable access control restrictions). If the filter evaluates | applicable access control restrictions). If the filter evaluates | |||
to FALSE or Undefined, then the entry is ignored for the search. | to FALSE or Undefined, then the entry is ignored for the search. | |||
A filter of the "and" choice is TRUE if all the filters in the SET | A filter of the "and" choice is TRUE if all the filters in the SET | |||
OF evaluate to TRUE, FALSE if at least one filter is FALSE, and | OF evaluate to TRUE, FALSE if at least one filter is FALSE, and | |||
otherwise Undefined. A filter of the "or" choice is FALSE if all | otherwise Undefined. A filter of the "or" choice is FALSE if all | |||
of the filters in the SET OF evaluate to FALSE, TRUE if at least | of the filters in the SET OF evaluate to FALSE, TRUE if at least | |||
one filter is TRUE, and Undefined otherwise. A filter of the 'not' | one filter is TRUE, and Undefined otherwise. A filter of the 'not' | |||
choice is TRUE if the filter being negated is FALSE, FALSE if it | choice is TRUE if the filter being negated is FALSE, FALSE if it | |||
Lightweight Directory Access Protocol Version 3 | ||||
is TRUE, and Undefined if it is Undefined. | is TRUE, and Undefined if it is Undefined. | |||
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. | |||
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. | |||
skipping to change at line 1127 | skipping to change at line 1146 | |||
support that matchingRule. The matchingRule determines the | support that matchingRule. The matchingRule determines the | |||
syntax for the assertion value. The filter item evaluates to | syntax for the assertion value. The filter item evaluates to | |||
TRUE if it matches with at least one attribute in the entry, | TRUE if it matches with at least one attribute in the entry, | |||
FALSE if it does not match any attribute in the entry, and | FALSE if it does not match any attribute in the entry, and | |||
Undefined if the matchingRule is not recognized or the | Undefined if the matchingRule is not recognized or the | |||
assertionValue is invalid. | assertionValue is invalid. | |||
If the type field is present and the matchingRule is present, | If the type field is present and the matchingRule is present, | |||
the matchValue is compared against entry attributes of the | the matchValue is compared against entry attributes of the | |||
specified type. In this case, the matchingRule MUST be one | specified type. In this case, the matchingRule MUST be one | |||
Lightweight Directory Access Protocol Version 3 | ||||
suitable for use with the specified type (see [Syntaxes]), | suitable for use with the specified type (see [Syntaxes]), | |||
otherwise the filter item is Undefined. | otherwise the filter item is Undefined. | |||
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 | |||
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 | |||
skipping to change at line 1183 | skipping to change at line 1203 | |||
[Models]. | [Models]. | |||
There are three special cases which may exist in the attribute | There are three special cases which may exist in the attribute | |||
selection: | selection: | |||
- an empty list with no attributes, | - an empty list with no attributes, | |||
- a list containing "*" (with zero or more attribute | - a list containing "*" (with zero or more attribute | |||
descriptions), and | descriptions), and | |||
Lightweight Directory Access Protocol Version 3 | ||||
- a list containing only "1.1". | - a list containing only "1.1". | |||
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 | |||
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 | |||
skipping to change at line 1238 | skipping to change at line 1258 | |||
PartialAttributeList ::= SEQUENCE OF | PartialAttributeList ::= SEQUENCE OF | |||
partialAttribute PartialAttribute | partialAttribute PartialAttribute | |||
-- Note that the PartialAttributeList may hold zero elements. | -- Note that the PartialAttributeList may hold zero elements. | |||
-- This may happen when none of the attributes of an entry | -- This may happen when none of the attributes of an entry | |||
-- were requested, or could be returned. | -- were requested, or could be returned. | |||
-- Note also that the partialAttribute vals set may hold zero | -- Note also that the partialAttribute vals set may hold zero | |||
-- elements. This may happen when typesOnly is requested, access | -- elements. This may happen when typesOnly is requested, access | |||
-- controls prevent the return of values, or other reasons. | -- controls prevent the return of values, or other reasons. | |||
Lightweight Directory Access Protocol Version 3 | ||||
SearchResultReference ::= [APPLICATION 19] SEQUENCE | SearchResultReference ::= [APPLICATION 19] SEQUENCE | |||
SIZE (1..MAX) OF uri URI | SIZE (1..MAX) OF uri URI | |||
SearchResultDone ::= [APPLICATION 5] LDAPResult | SearchResultDone ::= [APPLICATION 5] LDAPResult | |||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Each entry returned in a SearchResultEntry will contain all | Each entry returned in a SearchResultEntry will contain all | |||
appropriate attributes as specified in the attributes field of the | appropriate attributes as specified in the attributes field of the | |||
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. | |||
skipping to change at line 1294 | skipping to change at line 1314 | |||
context [Section 5 of Models], it may use the search filter to | context [Section 5 of Models], it may use the search filter to | |||
determine whether or not to return a SearchResultReference response. | determine whether or not to return a SearchResultReference response. | |||
Otherwise SearchResultReference responses are always returned when in | Otherwise SearchResultReference responses are always returned when in | |||
scope. | scope. | |||
The SearchResultReference is of the same data type as the Referral. | The SearchResultReference is of the same data type as the Referral. | |||
A URI for a server implementing LDAP and accessible via [TCP]/[IP] | A URI for a server implementing LDAP and accessible via [TCP]/[IP] | |||
(v4 or v6) is written as an LDAP URL according to [LDAPURL]. | (v4 or v6) is written as an LDAP URL according to [LDAPURL]. | |||
Lightweight Directory Access Protocol Version 3 | ||||
In order to complete the search, the client issues a new search | In order to complete the search, the client issues a new search | |||
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. | |||
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 | |||
skipping to change at line 1348 | skipping to change at line 1368 | |||
not be subordinate to the base object. | not be subordinate to the base object. | |||
Other kinds of URIs may be returned. The syntax and semantics of such | Other kinds of URIs may be returned. The syntax and semantics of such | |||
URIs is left to future specifications. Clients may ignore URIs that | URIs is left to future specifications. Clients may ignore URIs that | |||
they do not support. | they do not support. | |||
4.5.3.1. Examples | 4.5.3.1. Examples | |||
For example, suppose the contacted server (hosta) holds the entry | For example, suppose the contacted server (hosta) holds the entry | |||
<DC=Example,DC=NET> and the entry <CN=Manager,DC=Example,DC=NET>. It | <DC=Example,DC=NET> and the entry <CN=Manager,DC=Example,DC=NET>. It | |||
Lightweight Directory Access Protocol Version 3 | ||||
knows that either LDAP-capable servers (hostb) or (hostc) hold | knows that either LDAP-capable servers (hostb) or (hostc) hold | |||
<OU=People,DC=Example,DC=NET> (one is the master and the other server | <OU=People,DC=Example,DC=NET> (one is the master and the other server | |||
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) | |||
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: | |||
skipping to change at line 1401 | skipping to change at line 1422 | |||
but has knowledge of its possible location, then it may return a | but has knowledge of its possible location, then it may return a | |||
referral to the client. In this case, if the client requests a | referral to the client. In this case, if the client requests a | |||
subtree search of <DC=Example,DC=ORG> to hosta, the server returns a | subtree search of <DC=Example,DC=ORG> to hosta, the server returns a | |||
SearchResultDone containing a referral. | SearchResultDone containing a referral. | |||
SearchResultDone (referral) { | SearchResultDone (referral) { | |||
ldap://hostg/DC=Example,DC=ORG??sub } | ldap://hostg/DC=Example,DC=ORG??sub } | |||
4.6. Modify Operation | 4.6. Modify Operation | |||
Lightweight Directory Access Protocol Version 3 | ||||
The Modify Operation allows a client to request that a modification | The Modify Operation allows a client to request that a modification | |||
of an entry be performed on its behalf by a server. The Modify | of an entry be performed on its behalf by a server. The Modify | |||
Request is defined as follows: | Request is defined as follows: | |||
ModifyRequest ::= [APPLICATION 6] SEQUENCE { | ModifyRequest ::= [APPLICATION 6] SEQUENCE { | |||
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: | |||
Lightweight Directory Access Protocol Version 3 | ||||
- object: The name of the object to be modified. The value of this | - object: The name of the object to be modified. The value of this | |||
field contains the DN of the entry to be modified. The server | field contains the DN of the entry to be modified. The server | |||
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 | |||
skipping to change at line 1458 | skipping to change at line 1479 | |||
the attribute does not exist. | the attribute does not exist. | |||
- modification: A PartialAttribute (which may have an empty SET | - modification: A PartialAttribute (which may have an empty SET | |||
of vals) used to hold the attribute type or attribute type and | of vals) used to hold the attribute type or attribute type and | |||
values being modified. | values being modified. | |||
Upon receipt of a Modify Request, the server attempts to perform the | Upon receipt of a Modify Request, the server attempts to perform the | |||
necessary modifications to the DIT and returns the result in a Modify | necessary modifications to the DIT and returns the result in a Modify | |||
Response, defined as follows: | Response, defined as follows: | |||
Lightweight Directory Access Protocol Version 3 | ||||
ModifyResponse ::= [APPLICATION 7] LDAPResult | ModifyResponse ::= [APPLICATION 7] LDAPResult | |||
The server will return to the client a single Modify Response | The server will return to the client a single Modify Response | |||
indicating either the successful completion of the DIT modification, | indicating either the successful completion of the DIT modification, | |||
or the reason that the modification failed. Due to the requirement | or the reason that the modification failed. Due to the requirement | |||
for atomicity in applying the list of modifications in the Modify | for atomicity in applying the list of modifications in the Modify | |||
Request, the client may expect that no modifications of the DIT have | Request, the client may expect that no modifications of the DIT have | |||
been performed if the Modify Response received indicates any sort of | been performed if the Modify Response received indicates any sort of | |||
error, and that all requested modifications have been performed if | error, and that all requested modifications have been performed if | |||
the Modify Response indicates successful completion of the Modify | the Modify Response indicates successful completion of the Modify | |||
Operation. If the association changes or the connection fails, | Operation. If the association changes or the connection fails, | |||
whether 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 | |||
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 | |||
skipping to change at line 1511 | skipping to change at line 1532 | |||
- attributes: the list of attributes that, along with those from the | - attributes: the list of attributes that, along with those from the | |||
RDN, make up the content of the entry being added. Clients MAY or | RDN, make up the content of the entry being added. Clients MAY or | |||
MAY NOT include the RDN attribute in this list. Clients MUST | MAY NOT include the RDN attribute in this list. Clients MUST | |||
include the 'objectClass' attribute, and values of any mandatory | include the 'objectClass' attribute, and values of any mandatory | |||
attributes of the listed object classes. Clients MUST NOT supply | attributes of the listed object classes. Clients MUST NOT supply | |||
NO-USER-MODIFICATION attributes such as the createTimestamp or | NO-USER-MODIFICATION attributes such as the createTimestamp or | |||
creatorsName attributes, since the server maintains these | creatorsName attributes, since the server maintains these | |||
automatically. | automatically. | |||
Lightweight Directory Access Protocol Version 3 | ||||
The entry named in the entry field of the AddRequest MUST NOT exist | The entry named in the entry field of the AddRequest MUST NOT exist | |||
for the AddRequest to succeed. The immediate superior (parent) of an | for the AddRequest to succeed. The immediate superior (parent) of an | |||
object or alias entry to be added MUST exist. For example, if the | object or alias entry to be added MUST exist. For example, if the | |||
client attempted to add <CN=JS,DC=Example,DC=NET>, the | client attempted to add <CN=JS,DC=Example,DC=NET>, the | |||
<DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did | <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did | |||
exist, then the server would return the noSuchObject result code with | exist, then the server would return the noSuchObject result code with | |||
the matchedDN field containing <DC=NET>. | the matchedDN field containing <DC=NET>. | |||
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 | |||
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 | |||
skipping to change at line 1565 | skipping to change at line 1586 | |||
4.9. Modify DN Operation | 4.9. Modify DN Operation | |||
The Modify DN Operation allows a client to change the Relative | The Modify DN Operation allows a client to change the Relative | |||
Distinguished Name (RDN) of an entry in the Directory, and/or to move | Distinguished Name (RDN) of an entry in the Directory, and/or to move | |||
a subtree of entries to a new location in the Directory. The Modify | a subtree of entries to a new location in the Directory. The Modify | |||
DN Request is defined as follows: | DN Request is defined as follows: | |||
ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { | ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { | |||
entry LDAPDN, | entry LDAPDN, | |||
newrdn RelativeLDAPDN, | newrdn RelativeLDAPDN, | |||
Lightweight Directory Access Protocol Version 3 | ||||
deleteoldrdn BOOLEAN, | deleteoldrdn BOOLEAN, | |||
newSuperior [0] LDAPDN OPTIONAL } | newSuperior [0] LDAPDN OPTIONAL } | |||
Fields of the Modify DN Request are: | Fields of the Modify DN Request are: | |||
- entry: the name of the entry to be changed. This entry may or may | - entry: the name of the entry to be changed. This entry may or may | |||
not have subordinate entries. | not have subordinate entries. | |||
- newrdn: the new RDN of the entry. If 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. | |||
- 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 | |||
skipping to change at line 1621 | skipping to change at line 1642 | |||
the matchedDN field containing <DC=NET>. | the matchedDN field containing <DC=NET>. | |||
If the deleteoldrdn field is TRUE, the attribute values forming the | If the deleteoldrdn field is TRUE, the attribute values forming the | |||
old RDN but not the new RDN are deleted from the entry. If the | old RDN but not the new RDN are deleted from the entry. If the | |||
deleteoldrdn field is FALSE, the attribute values forming the old RDN | deleteoldrdn field is FALSE, the attribute values forming the old RDN | |||
will be retained as non-distinguished attribute values of the entry. | will be retained as non-distinguished attribute values of the entry. | |||
The server MUST fail the operation and return an error in the result | The server MUST fail the operation and return an error in the result | |||
code if the setting of the deleteoldrdn field would cause a schema | code if the setting of the deleteoldrdn field would cause a schema | |||
inconsistency in the entry. | inconsistency in the entry. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 } | |||
Fields of the Compare Request are: | Fields of the Compare Request are: | |||
skipping to change at line 1669 | skipping to change at line 1691 | |||
either that the result of the comparison was Undefined (Section | either that the result of the comparison was Undefined (Section | |||
4.5.1), or that some error occurred. | 4.5.1), or that some error occurred. | |||
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 uncompleted operation. The Abandon Request | |||
is defined as follows: | is defined as follows: | |||
AbandonRequest ::= [APPLICATION 16] MessageID | AbandonRequest ::= [APPLICATION 16] MessageID | |||
Lightweight Directory Access Protocol Version 3 | ||||
The MessageID is that of an operation which was requested earlier in | The MessageID is that of an operation which was requested earlier in | |||
this LDAP association. The abandon request itself has its own message | this LDAP association. The abandon request itself has its own message | |||
id. This is distinct from the id of the earlier operation being | id. This is distinct from the id of the earlier operation being | |||
abandoned. | abandoned. | |||
There is no response defined in the Abandon operation. Upon receipt | There is no response defined in the Abandon operation. Upon receipt | |||
of an AbandonRequest, the server MAY abandon the operation identified | of an AbandonRequest, the server MAY abandon the operation identified | |||
by the MessageID. 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 uncompleted 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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned. | 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 | |||
skipping to change at line 1728 | skipping to change at line 1750 | |||
Each extended operation consists of an extended request and an | Each extended operation consists of an extended request and an | |||
extended response. | extended response. | |||
ExtendedRequest ::= [APPLICATION 23] SEQUENCE { | ExtendedRequest ::= [APPLICATION 23] SEQUENCE { | |||
requestName [0] LDAPOID, | requestName [0] LDAPOID, | |||
requestValue [1] OCTET STRING OPTIONAL } | requestValue [1] OCTET STRING OPTIONAL } | |||
The requestName is a dotted-decimal representation of the unique | The requestName is a dotted-decimal representation of the unique | |||
OBJECT IDENTIFIER corresponding to the request. The requestValue is | OBJECT IDENTIFIER corresponding to the request. The requestValue is | |||
Lightweight Directory Access Protocol Version 3 | ||||
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. | |||
If the requestName is not recognized by the server, the server MUST | If the extended operation associated with the requestName is not | |||
NOT provide a responseName nor a responseValue and MUST return a | supported by the server, the server MUST NOT provide a responseName | |||
resultCode of protocolError. | nor a responseValue and MUST return a 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 | |||
Section 4. | Section 4. | |||
It is RECOMMENDED that servers list the requestName of extended | It is RECOMMENDED that servers list the requestName of extended | |||
skipping to change at line 1781 | skipping to change at line 1805 | |||
(if any), and | (if any), and | |||
- the semantics of the operation. | - the semantics of the operation. | |||
4.13. IntermediateResponse Message | 4.13. IntermediateResponse Message | |||
While the Search operation provides a mechanism to return multiple | While the Search operation provides a mechanism to return multiple | |||
response messages for a single search request, other operations, by | response messages for a single search request, other operations, by | |||
nature, do not provide for multiple response messages. | nature, do not provide for multiple response messages. | |||
Lightweight Directory Access Protocol Version 3 | ||||
The IntermediateResponse message provides a general mechanism for | The IntermediateResponse message provides a general mechanism for | |||
defining single-request/multiple-response operations in LDAP. This | defining single-request/multiple-response operations in LDAP. This | |||
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, | |||
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 | |||
skipping to change at line 1834 | skipping to change at line 1858 | |||
A single-request/multiple-response operation may be defined using a | A single-request/multiple-response operation may be defined using a | |||
single ExtendedRequest message to solicit zero or more | single ExtendedRequest message to solicit zero or more | |||
IntermediateResponse messages of one or more kinds followed by an | IntermediateResponse messages of one or more kinds followed by an | |||
ExtendedResponse message. | ExtendedResponse message. | |||
4.13.2. Usage with LDAP Request Controls | 4.13.2. Usage with LDAP Request Controls | |||
A control's semantics may include the return of zero or more | A control's semantics may include the return of zero or more | |||
IntermediateResponse messages prior to returning the final result | IntermediateResponse messages prior to returning the final result | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
The Start Transport Layer Security (StartTLS) operation provides the | The Start Transport Layer Security (StartTLS) operation provides the | |||
ability to establish a TLS-protected LDAP exchange. 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 | |||
skipping to change at line 1884 | skipping to change at line 1910 | |||
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. | |||
4.14.2.1. "Success" Response | 4.14.2.1. "Success" Response | |||
If the StartTLS Response contains a resultCode of success, this | If the StartTLS Response contains a resultCode of success, this | |||
indicates that the server is willing and able to negotiate TLS. Refer | indicates that the server is willing and able to negotiate TLS. Refer | |||
to Section 4 of [AuthMeth] for details. | to Section 4 of [AuthMeth] for details. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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. | |||
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 | |||
skipping to change at line 1919 | skipping to change at line 1945 | |||
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 connection. | 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 removal -- graceful and abrupt -- are | |||
do not involve LDAP PDUs, but are preformed at the underlying layers. | supported. These do not involve LDAP PDUs, but are preformed at the | |||
underlying layers. | ||||
If the connection is closed, outstanding operations are handled as | If the connection is closed, uncompleted 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 | |||
LDAP exchange 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 LDAP exchange intact, it then MUST cease to send | wishes to leave the LDAP exchange intact, it then MUST cease to send | |||
Lightweight Directory Access Protocol Version 3 | ||||
further PDUs and MUST ignore any received LDAP PDUs until it receives | further PDUs and MUST ignore any received LDAP PDUs until it receives | |||
a 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 LDAP exchange 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 connection after sending or receiving a | Protocol peers MAY close the connection after sending or receiving a | |||
TLS 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. | |||
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 connection. 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 connection. | 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 and each bit 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: | |||
+---------------+ | | +---------------+ | | |||
| LDAP exchange | | | | LDAP exchange | | | |||
+---------------+ > LDAP PDU | | +---------------+ > LDAP PDU | | |||
+---------------+ < data | | +---------------+ < data | | |||
| SASL layer | | | | SASL layer | | | |||
+---------------+ > SASL-protected data | | +---------------+ > SASL-protected data | | |||
+---------------+ < data | | +---------------+ < data | | |||
Lightweight Directory Access Protocol Version 3 | ||||
| TLS layer | | | | TLS layer | | | |||
+---------------+ > TLS-protected data | Application | +---------------+ > TLS-protected data | Application | |||
+---------------+ < data +------------ | +---------------+ < data +------------ | |||
| connection | | Transport | | connection | | Transport | |||
+---------------+ | +---------------+ | |||
5.1 Operation and LDAP exchange Relationship | ||||
Protocol operations are tied to an LDAP exchange. If the connection | ||||
is closed, any outstanding operations tied to the LDAP exchange are, | ||||
when possible, abandoned, and when not possible, completed without | ||||
transmission of the response. Also, if the connection is closed, the | ||||
client MUST NOT assume that any outstanding update operations tied to | ||||
the LDAP exchange have succeeded or failed. | ||||
Lightweight Directory Access Protocol Version 3 | ||||
5.2. Protocol Encoding | 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. | |||
skipping to change at line 2046 | skipping to change at line 2066 | |||
6. Security Considerations | 6. Security Considerations | |||
This version of the protocol provides facilities for simple | This version of the protocol provides facilities for simple | |||
authentication using a cleartext password, as well as any [SASL] | authentication using a cleartext password, as well as any [SASL] | |||
mechanism. Installing SASL layers can provide integrity and privacy | mechanism. Installing SASL layers can provide integrity and privacy | |||
services. | services. | |||
It is also permitted that the server can return its credentials to | It is also permitted that the server can return its credentials to | |||
the client, if it chooses to do so. | the client, if it chooses to do so. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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]. | |||
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 | |||
skipping to change at line 2102 | skipping to change at line 2122 | |||
resultCode values (e.g., attributeOrValueExists and | resultCode values (e.g., attributeOrValueExists and | |||
entryAlreadyExists), could disclose the presence the specific data in | entryAlreadyExists), could disclose the presence the specific data in | |||
the directory which is subject to access and other administrative | the directory which is subject to access and other administrative | |||
controls. Server implementations should restrict access to protected | controls. Server implementations should restrict access to protected | |||
information equally under both normal and error conditions. | information equally under both normal and error conditions. | |||
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]. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 RFC 3771 by Roger Harrison, and | and Mark Wahl. It is also based on RFC 3771 by Roger Harrison, and | |||
Lightweight Directory Access Protocol Version 3 | ||||
Kurt Zeilenga. Notable amounts of technical reviews and content were | 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. | |||
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. | |||
skipping to change at line 2156 | skipping to change at line 2176 | |||
[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). | |||
[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). | |||
Lightweight Directory Access Protocol Version 3 | ||||
[Roadmap] Zeilenga, K., "LDAP: Technical Specification Road Map", | [Roadmap] Zeilenga, K., "LDAP: Technical Specification Road Map", | |||
draft-ietf-ldapbis-roadmap-xx.txt (a work in progress). | draft-ietf-ldapbis-roadmap-xx.txt (a work in progress). | |||
[SASL] Melnikov, A., "Simple Authentication and Security Layer", | [SASL] Melnikov, A., "Simple Authentication and Security Layer", | |||
draft-ietf-sasl-rfc2222bis-xx.txt (a work in progress). | draft-ietf-sasl-rfc2222bis-xx.txt (a work in progress). | |||
Lightweight Directory Access Protocol Version 3 | ||||
[SASLPrep] Zeilenga, K., "Stringprep profile for user names and | [SASLPrep] Zeilenga, K., "Stringprep profile for user names and | |||
passwords", draft-ietf-sasl-saslprep-xx.txt, (a work in | passwords", draft-ietf-sasl-saslprep-xx.txt, (a work in | |||
progress). | progress). | |||
[StringPrep] Hoffman P. and M. Blanchet, "Preparation of | [StringPrep] Hoffman P. and M. Blanchet, "Preparation of | |||
Internationalized Strings ('stringprep')", draft-hoffman- | Internationalized Strings ('stringprep')", draft-hoffman- | |||
rfc3454bis-xx.txt, a work in progress. | rfc3454bis-xx.txt, a work in progress. | |||
[Syntaxes] Legg, S., and K. Dally, "LDAP: Syntaxes and Matching | [Syntaxes] Legg, S., and K. Dally, "LDAP: Syntaxes and Matching | |||
Rules", draft-ietf-ldapbis-syntaxes-xx.txt, (a work in | Rules", draft-ietf-ldapbis-syntaxes-xx.txt, (a work in | |||
skipping to change at line 2212 | skipping to change at line 2232 | |||
[X.511] ITU-T Rec. X.511, "The Directory: Abstract Service | [X.511] ITU-T Rec. X.511, "The Directory: Abstract Service | |||
Definition", 1993. | Definition", 1993. | |||
9. Informative References | 9. Informative References | |||
[CERT] The CERT(R) Center, http://www.cert.org | [CERT] The CERT(R) Center, http://www.cert.org | |||
[PortReg] IANA, "Port Numbers", | [PortReg] IANA, "Port Numbers", | |||
http://www.iana.org/assignments/port-numbers | http://www.iana.org/assignments/port-numbers | |||
Lightweight Directory Access Protocol Version 3 | ||||
10. IANA Considerations | 10. IANA Considerations | |||
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 2280 | skipping to change at line 2301 | |||
success (0) | success (0) | |||
Indicates the successful completion of an operation. Note: | Indicates the successful completion of an operation. Note: | |||
this code is not used with the compare operation. See | this code is not used with the compare operation. See | |||
compareFalse (5) and compareTrue (6). | compareFalse (5) and compareTrue (6). | |||
operationsError (1) | operationsError (1) | |||
Indicates that the operation is not properly sequenced with | Indicates that the operation is not properly sequenced with | |||
relation to other operations (of same or different type). | relation to other operations (of same or different type). | |||
For example, this code is returned if the client attempts to | For example, this code is returned if the client attempts to | |||
StartTLS [TLS] while there are other operations outstanding | StartTLS [TLS] while there are other uncompleted operations | |||
or if a TLS layer was already installed. | or if a TLS layer was already installed. | |||
protocolError (2) | protocolError (2) | |||
Indicates the server received data which has incorrect | Indicates the server received data which is not well-formed. | |||
structure. | ||||
For bind operation only, this code is also used to indicate | For bind operation only, this code is also used to indicate | |||
that the server does not support the requested protocol | that the server does not support the requested protocol | |||
version. | version. | |||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
For the extended operation only, this code indicates that the | For extended operations only, this code indicates that the | |||
server does not recognize the requestName. | server does not support (by design or configuration) the | |||
extended operation associated with the requestName. | ||||
For the Start TLS operation, this code may also indicate that | ||||
the server does not currently support Start TLS (even though | ||||
it may recognize the requestName). | ||||
For request operations specifying multiple controls, this may | 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, or that the combination of the | of the controls as specified, or that the combination of the | |||
specified controls is not supported. | specified controls is invalid or unspecified. | |||
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 2347 | skipping to change at line 2364 | |||
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 | |||
skipping to change at line 2458 | skipping to change at line 2476 | |||
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 2509 | skipping to change at line 2527 | |||
addResponse AddResponse, | addResponse AddResponse, | |||
delRequest DelRequest, | delRequest DelRequest, | |||
delResponse DelResponse, | delResponse DelResponse, | |||
modDNRequest ModifyDNRequest, | modDNRequest ModifyDNRequest, | |||
modDNResponse ModifyDNResponse, | modDNResponse ModifyDNResponse, | |||
compareRequest CompareRequest, | compareRequest CompareRequest, | |||
compareResponse CompareResponse, | compareResponse CompareResponse, | |||
abandonRequest AbandonRequest, | abandonRequest AbandonRequest, | |||
extendedReq ExtendedRequest, | extendedReq ExtendedRequest, | |||
extendedResp ExtendedResponse, | extendedResp ExtendedResponse, | |||
intermediateResponse IntermediateResponse | ..., | |||
... }, | intermediateResponse IntermediateResponse }, | |||
controls [0] Controls OPTIONAL } | controls [0] Controls OPTIONAL } | |||
MessageID ::= INTEGER (0 .. maxInt) | MessageID ::= INTEGER (0 .. maxInt) | |||
maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- | maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- | |||
LDAPString ::= OCTET STRING -- UTF-8 encoded, | LDAPString ::= OCTET STRING -- UTF-8 encoded, | |||
-- [ISO10646] characters | -- [ISO10646] characters | |||
LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] | LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] | |||
skipping to change at line 3077 | skipping to change at line 3103 | |||
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 RFC 3771: | 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 | IPR Disclosure Acknowledgement | |||
By submitting this Internet-Draft, I certify that any applicable | ||||
patent or other IPR claims of which I am aware have been disclosed, | ||||
and any of which I become aware will be disclosed, in accordance with | ||||
RFC 3668. | ||||
IPR Notice | ||||
The IETF takes no position regarding the validity or scope of any | The IETF takes no position regarding the validity or scope of any | |||
intellectual property or other rights that might be claimed to | Intellectual Property Rights or other rights that might be claimed to | |||
pertain to the implementation or use of the technology described in | pertain to the implementation or use of the technology described in | |||
this document or the extent to which any license under such rights | this document or the extent to which any license under such rights | |||
might or might not be available; neither does it represent that it | might or might not be available; nor does it represent that it has | |||
has made any effort to identify any such rights. Information on the | made any independent effort to identify any such rights. Information | |||
IETF's procedures with respect to rights in standards-track and | on the IETF's procedures with respect to rights in IETF Documents can | |||
standards-related documentation can be found in BCP-11. Copies of | be found in BCP 78 and BCP 79. | |||
claims of rights made available for publication and any assurances of | ||||
licenses to be made available, or the result of an attempt made to | Copies of IPR disclosures made to the IETF Secretariat and any | |||
obtain a general license or permission for the use of such | assurances of licenses to be made available, or the result of an | |||
proprietary rights by implementors or users of this specification can | attempt made to obtain a general license or permission for the use of | |||
be obtained from the IETF Secretariat. | such proprietary rights by implementers or users of this | |||
specification can be obtained from the IETF on-line IPR repository at | ||||
http://www.ietf.org/ipr. | ||||
The IETF invites any interested party to bring to its attention any | The IETF invites any interested party to bring to its attention any | |||
copyrights, patents or patent applications, or other proprietary | copyrights, patents or patent applications, or other proprietary | |||
rights which may cover technology that may be required to practice | rights that may cover technology that may be required to implement | |||
this standard. Please address the information to the IETF Executive | this standard. Please address the information to the IETF at ietf- | |||
Director. | ipr@ietf.org." | |||
Full Copyright Statement | Copyright Notice | |||
Copyright (C) The Internet Society (2003). All Rights Reserved. | Copyright (C) The Internet Society 1994. | |||
This document and translations of it may be copied and furnished to | This document is subject to the rights, licenses and restrictions | |||
others, and derivative works that comment on or otherwise explain it | contained in BCP 78, and except as set forth therein, the authors | |||
or assist in its implementation may be prepared, copied, published | retain all their rights." | |||
and distributed, in whole or in part, without restriction of any | ||||
kind, provided that the above copyright notice and this paragraph are | ||||
included on all such copies and derivative works. However, this | ||||
document itself may not be modified in any way, such as by removing | ||||
the copyright notice or references to the Internet Society or other | ||||
Internet organizations, except as needed for the purpose of | ||||
developing Internet standards in which case the procedures for | ||||
copyrights defined in the Internet Standards process must be | ||||
followed, or as required to translate it into languages other than | ||||
English. | ||||
The limited permissions granted above are perpetual and will not be | Disclaimer | |||
revoked by the Internet Society or its successors or assigns. | ||||
This document and the information contained herein is provided on an | This document and the information contained herein are provided on an | |||
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | |||
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION | ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | |||
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF | INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | |||
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | |||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | ||||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |