draft-ietf-ldapbis-protocol-26.txt | draft-ietf-ldapbis-protocol-27.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-26.txt Aug 2004 | Document: draft-ietf-ldapbis-protocol-27.txt Oct 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 subject to all provisions | This document is an Internet-Draft and is subject to all provisions | |||
of section 3 of RFC 3667. By submitting this Internet-Draft, each | of section 3 of RFC 3667. By submitting this Internet-Draft, each | |||
author represents that any applicable patent or other IPR claims of | author represents that any applicable patent or other IPR claims of | |||
which he or she is aware have been or will be disclosed, and any of | which he or she is aware have been or will be disclosed, and any of | |||
which he or she become aware will be disclosed, in accordance with | which he or she become aware will be disclosed, in accordance with | |||
RFC 3668. | RFC 3668. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that other | |||
other groups may also distribute working documents as Internet- | groups may also distribute working documents as Internet-Drafts. | |||
Drafts. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress". | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | <http://www.ietf.org/ietf/1id-abstracts.txt>. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | <http://www.ietf.org/shadow.html>. | |||
This Internet-Draft will expire in February 2005. | ||||
Technical discussion of this document will take place on the IETF | Technical discussion of this document will take place on the IETF | |||
LDAP Revision Working Group (LDAPbis) mailing list <ietf- | LDAP Revision Working Group (LDAPbis) mailing list <ietf- | |||
ldapbis@openldap.org>. Please send editorial comments directly to the | ldapbis@openldap.org>. Please send editorial comments directly to the | |||
editor <jimse@novell.com>. | editor <jimse@novell.com>. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The Internet Society 2004. | Copyright (C) The Internet Society 2004. All Rights Reserved. | |||
Abstract | Abstract | |||
This document describes the protocol elements, along with their | This document describes the protocol elements, along with their | |||
semantics and encodings, of the Lightweight Directory Access Protocol | semantics and encodings, of the Lightweight Directory Access Protocol | |||
(LDAP). LDAP provides access to distributed directory services that | (LDAP). LDAP provides access to distributed directory services that | |||
act in accordance with X.500 data and service models. These protocol | act in accordance with X.500 data and service models. These protocol | |||
elements are based on those described in the X.500 Directory Access | elements are based on those described in the X.500 Directory Access | |||
Protocol (DAP). | Protocol (DAP). | |||
skipping to change at line 86 | skipping to change at line 86 | |||
4.4. Unsolicited Notification.....................................17 | 4.4. Unsolicited Notification.....................................17 | |||
4.5. Search Operation.............................................18 | 4.5. Search Operation.............................................18 | |||
4.6. Modify Operation.............................................27 | 4.6. Modify Operation.............................................27 | |||
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..........................................30 | 4.9. Modify DN Operation..........................................30 | |||
4.10. Compare Operation...........................................31 | 4.10. Compare Operation...........................................31 | |||
4.11. Abandon Operation...........................................32 | 4.11. Abandon Operation...........................................32 | |||
4.12. Extended Operation..........................................32 | 4.12. Extended Operation..........................................32 | |||
4.13. IntermediateResponse Message................................34 | 4.13. IntermediateResponse Message................................34 | |||
4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse......35 | 4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse......34 | |||
4.13.2. Usage with LDAP Request Controls..........................35 | 4.13.2. Usage with LDAP Request Controls..........................35 | |||
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.2. Protocol Encoding............................................38 | 5.2. Protocol Encoding............................................37 | |||
5.3. Transmission Control Protocol (TCP)..........................38 | 5.3. Transmission Control Protocol (TCP)..........................38 | |||
6. Security Considerations........................................39 | 6. Security Considerations........................................38 | |||
7. Acknowledgements...............................................40 | 7. Acknowledgements...............................................39 | |||
8. Normative References...........................................40 | 8. Normative References...........................................40 | |||
9. Informative References.........................................42 | 9. Informative References.........................................41 | |||
10. IANA Considerations...........................................42 | 10. IANA Considerations...........................................42 | |||
11. Editor's Address..............................................43 | 11. Editor's Address..............................................42 | |||
Appendix A - LDAP Result Codes....................................44 | Appendix A - LDAP Result Codes....................................43 | |||
A.1 Non-Error Result Codes........................................44 | A.1 Non-Error Result Codes........................................43 | |||
A.2 Result Codes..................................................44 | A.2 Result Codes..................................................43 | |||
Appendix B - Complete ASN.1 Definition............................49 | Appendix B - Complete ASN.1 Definition............................48 | |||
Appendix C - Changes..............................................55 | Appendix C - Changes..............................................54 | |||
C.1 Changes made to RFC 2251:.....................................55 | C.1 Changes made to RFC 2251:.....................................54 | |||
C.2 Changes made to RFC 2830:.....................................60 | C.2 Changes made to RFC 2830:.....................................59 | |||
C.3 Changes made to RFC 3771:.....................................61 | C.3 Changes made to RFC 3771:.....................................59 | |||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
1. Introduction | 1. Introduction | |||
The Directory is "a collection of open systems cooperating to provide | The Directory is "a collection of open systems cooperating to provide | |||
directory services" [X.500]. A directory user, which may be a human | directory services" [X.500]. A directory user, which may be a human | |||
or other entity, accesses the Directory through a client (or | or other entity, accesses the Directory through a client (or | |||
Directory User Agent (DUA)). The client, on behalf of the directory | Directory User Agent (DUA)). The client, on behalf of the directory | |||
user, interacts with one or more servers (or Directory System Agents | user, interacts with one or more servers (or Directory System Agents | |||
(DSA)). Clients interact with servers using a directory access | (DSA)). Clients interact with servers using a directory access | |||
skipping to change at line 151 | skipping to change at line 152 | |||
summarizes substantive changes to the remaining sections. | summarizes substantive changes to the remaining sections. | |||
This document also obsoletes RFC 3771 in entirety. | This document also obsoletes RFC 3771 in entirety. | |||
2. Conventions | 2. Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are | "SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are | |||
to be interpreted as described in [Keyword]. | to be interpreted as described in [Keyword]. | |||
Character names in this document use the notation for code points and | ||||
names from the Unicode Standard [Unicode]. For example, the letter | ||||
"a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>. | ||||
Note: a glossary of terms used in Unicode can be found in [Glossary]. | ||||
Information on the Unicode character encoding model can be found in | ||||
[CharModel]. | ||||
Lightweight Directory Access Protocol Version 3 | ||||
The term "connection" refers to the underlying transport service used | The term "connection" refers to the underlying transport service used | |||
to carry the protocol exchange. | to carry the protocol exchange. | |||
The term "LDAP exchange" refers to application layer where LDAP PDUs | The term "LDAP exchange" refers to the layer where LDAP PDUs are | |||
are exchanged between protocol peers. | exchanged between protocol peers. | |||
The term "TLS layer" refers to a layer inserted between the | The term "TLS layer" refers to a layer inserted between the | |||
connection and the LDAP exchange that utilizes Transport Layer | connection and the LDAP exchange that utilizes Transport Layer | |||
Security ([TLS]) to protect the exchange of LDAP PDUs. | Security ([TLS]) to protect the exchange of LDAP PDUs. | |||
Lightweight Directory Access Protocol Version 3 | ||||
The term "SASL layer" refers to a layer inserted between the | The term "SASL layer" refers to a layer inserted between the | |||
connection and the LDAP exchange that utilizes Simple Authentication | connection and the LDAP exchange that utilizes Simple Authentication | |||
and Security Layer ([SASL]) to protect the exchange of LDAP PDUs. | and Security Layer ([SASL]) to protect the exchange of LDAP PDUs. | |||
See the table in Section 5 for an illustration of these four terms. | See the table in Section 5 for an illustration of these four terms. | |||
The term "TLS-protected LDAP exchange" refers to an LDAP exchange | ||||
protected by a TLS-layer. | ||||
The term "association" refers to the association of the LDAP exchange | ||||
and its current authentication and authorization state. | ||||
Character names in this document use the notation for code points and | ||||
names from the Unicode Standard [Unicode]. For example, the letter | ||||
"a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>. | ||||
Note: a glossary of terms used in Unicode can be found in [Glossary]. | ||||
Information on the Unicode character encoding model can be found in | ||||
[CharModel]. | ||||
3. Protocol Model | 3. Protocol Model | |||
The general model adopted by this protocol is one of clients | The general model adopted by this protocol is one of clients | |||
performing protocol operations against servers. In this model, a | performing protocol operations against servers. In this model, a | |||
client transmits a protocol request describing the operation to be | client transmits a protocol request describing the operation to be | |||
performed to a server. The server is then responsible for performing | performed to a server. The server is then responsible for performing | |||
the necessary operation(s) in the Directory. Upon completion of an | the necessary operation(s) in the Directory. Upon completion of an | |||
operation, the server typically returns a response containing | operation, the server typically returns a response containing | |||
appropriate data to the requesting client. | appropriate data to the requesting client. | |||
skipping to change at line 212 | skipping to change at line 207 | |||
synchronous behavior may be controlled by client applications. | synchronous behavior may be controlled by client applications. | |||
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 | 3.1 Operation and LDAP Exchange Relationship | |||
Lightweight Directory Access Protocol Version 3 | ||||
Protocol operations are tied to an LDAP exchange. When the connection | Protocol operations are tied to an LDAP exchange. When the connection | |||
is closed, any uncompleted operations tied to the LDAP exchange are, | is closed, any uncompleted operations tied to the LDAP exchange are, | |||
when possible, abandoned, and when not possible, completed without | when possible, abandoned, and when not possible, completed without | |||
transmission of the response. Also, when the connection is closed, | transmission of the response. Also, when the connection is closed, | |||
the client MUST NOT assume that any uncompleted update operations | the client MUST NOT assume that any uncompleted update operations | |||
tied to the LDAP exchange have succeeded or failed. | tied to the LDAP exchange have succeeded or failed. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 (...) | |||
skipping to change at line 265 | skipping to change at line 261 | |||
encapsulated in a common envelope, the LDAPMessage, which is defined | encapsulated in a common envelope, the LDAPMessage, which is defined | |||
as follows: | as follows: | |||
LDAPMessage ::= SEQUENCE { | LDAPMessage ::= SEQUENCE { | |||
messageID MessageID, | messageID MessageID, | |||
protocolOp CHOICE { | protocolOp CHOICE { | |||
bindRequest BindRequest, | bindRequest BindRequest, | |||
bindResponse BindResponse, | bindResponse BindResponse, | |||
unbindRequest UnbindRequest, | unbindRequest UnbindRequest, | |||
searchRequest SearchRequest, | searchRequest SearchRequest, | |||
Lightweight Directory Access Protocol Version 3 | ||||
searchResEntry SearchResultEntry, | searchResEntry SearchResultEntry, | |||
searchResDone SearchResultDone, | searchResDone SearchResultDone, | |||
searchResRef SearchResultReference, | searchResRef SearchResultReference, | |||
modifyRequest ModifyRequest, | modifyRequest ModifyRequest, | |||
modifyResponse ModifyResponse, | modifyResponse ModifyResponse, | |||
addRequest AddRequest, | addRequest AddRequest, | |||
Lightweight Directory Access Protocol Version 3 | ||||
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, | |||
skipping to change at line 317 | skipping to change at line 314 | |||
(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 uncompleted requests in the LDAP association | the the messageID of any other uncompleted requests in the LDAP | |||
of which this message is a part. The zero value is reserved for the | exchange. The zero value is reserved for the unsolicited notification | |||
unsolicited notification message. | message. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 in the same LDAP exchange unless it can be determined | |||
determined that the server is no longer servicing the earlier request | that the server is no longer servicing the earlier request (e.g. | |||
(e.g. after the final response is received, or a subsequent bind | ||||
Lightweight Directory Access Protocol Version 3 | ||||
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, | |||
note that abandon and abandoned operations do not send responses. | note that abandon and abandoned operations do not send responses. | |||
4.1.2. String Types | 4.1.2. String Types | |||
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 | |||
skipping to change at line 373 | skipping to change at line 371 | |||
-- Constrained to <distinguishedName> [LDAPDN] | -- Constrained to <distinguishedName> [LDAPDN] | |||
A RelativeLDAPDN is defined to be the representation of a Relative | A RelativeLDAPDN is defined to be the representation of a Relative | |||
Distinguished Name (RDN) after encoding according to the | Distinguished Name (RDN) after encoding according to the | |||
specification in [LDAPDN]. | specification in [LDAPDN]. | |||
RelativeLDAPDN ::= LDAPString | RelativeLDAPDN ::= LDAPString | |||
-- Constrained to <name-component> [LDAPDN] | -- Constrained to <name-component> [LDAPDN] | |||
4.1.4. Attribute Descriptions | 4.1.4. Attribute Descriptions | |||
Lightweight Directory Access Protocol Version 3 | ||||
The definition and encoding rules for attribute descriptions are | The definition and encoding rules for attribute descriptions are | |||
defined in Section 2.5 of [Models]. Briefly, an attribute description | defined in Section 2.5 of [Models]. Briefly, an attribute description | |||
is an attribute type and zero or more options. | is an attribute type and zero or more options. | |||
AttributeDescription ::= LDAPString | AttributeDescription ::= LDAPString | |||
Lightweight Directory Access Protocol Version 3 | ||||
-- Constrained to <attributedescription> | -- Constrained to <attributedescription> | |||
-- [Models] | -- [Models] | |||
4.1.5. Attribute Value | 4.1.5. Attribute Value | |||
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 | |||
skipping to change at line 426 | skipping to change at line 426 | |||
AttributeValueAssertion ::= SEQUENCE { | AttributeValueAssertion ::= SEQUENCE { | |||
attributeDesc AttributeDescription, | attributeDesc AttributeDescription, | |||
assertionValue AssertionValue } | assertionValue AssertionValue } | |||
AssertionValue ::= OCTET STRING | AssertionValue ::= OCTET STRING | |||
The syntax of the AssertionValue depends on the context of the LDAP | The syntax of the AssertionValue depends on the context of the LDAP | |||
operation being performed. For example, the syntax of the EQUALITY | operation being performed. For example, the syntax of the EQUALITY | |||
matching rule for an attribute is used when performing a Compare | matching rule for an attribute is used when performing a Compare | |||
Lightweight Directory Access Protocol Version 3 | ||||
operation. Often this is the same syntax used for values of the | operation. Often this is the same syntax used for values of the | |||
attribute type, but in some cases the assertion syntax differs from | attribute type, but in some cases the assertion syntax differs from | |||
the value syntax. See objectIdentiferFirstComponentMatch in | the value syntax. See objectIdentiferFirstComponentMatch in | |||
[Syntaxes] for an example. | [Syntaxes] for an example. | |||
Lightweight Directory Access Protocol Version 3 | ||||
4.1.7. Attribute and PartialAttribute | 4.1.7. Attribute and PartialAttribute | |||
Attributes and partial attributes consist of an attribute description | Attributes and partial attributes consist of an attribute description | |||
and attribute values. A PartialAttribute allows zero values, while | and attribute values. A PartialAttribute allows zero values, while | |||
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 } | |||
skipping to change at line 479 | skipping to change at line 479 | |||
resultCode ENUMERATED { | resultCode ENUMERATED { | |||
success (0), | success (0), | |||
operationsError (1), | operationsError (1), | |||
protocolError (2), | protocolError (2), | |||
timeLimitExceeded (3), | timeLimitExceeded (3), | |||
sizeLimitExceeded (4), | sizeLimitExceeded (4), | |||
compareFalse (5), | compareFalse (5), | |||
compareTrue (6), | compareTrue (6), | |||
authMethodNotSupported (7), | authMethodNotSupported (7), | |||
strongAuthRequired (8), | strongAuthRequired (8), | |||
Lightweight Directory Access Protocol Version 3 | ||||
-- 9 reserved -- | -- 9 reserved -- | |||
referral (10), | referral (10), | |||
adminLimitExceeded (11), | adminLimitExceeded (11), | |||
unavailableCriticalExtension (12), | unavailableCriticalExtension (12), | |||
confidentialityRequired (13), | confidentialityRequired (13), | |||
saslBindInProgress (14), | saslBindInProgress (14), | |||
Lightweight Directory Access Protocol Version 3 | ||||
noSuchAttribute (16), | noSuchAttribute (16), | |||
undefinedAttributeType (17), | undefinedAttributeType (17), | |||
inappropriateMatching (18), | inappropriateMatching (18), | |||
constraintViolation (19), | constraintViolation (19), | |||
attributeOrValueExists (20), | attributeOrValueExists (20), | |||
invalidAttributeSyntax (21), | invalidAttributeSyntax (21), | |||
-- 22-31 unused -- | -- 22-31 unused -- | |||
noSuchObject (32), | noSuchObject (32), | |||
aliasProblem (33), | aliasProblem (33), | |||
invalidDNSyntax (34), | invalidDNSyntax (34), | |||
skipping to change at line 534 | skipping to change at line 535 | |||
[LDAPIANA]. The meanings of the listed result codes are given in | [LDAPIANA]. The meanings of the listed result codes are given in | |||
Appendix A. If a server detects multiple errors for an operation, | Appendix A. If a server detects multiple errors for an operation, | |||
only one result code is returned. The server should return the result | only one result code is returned. The server should return the result | |||
code that best indicates the nature of the error encountered. | code that best indicates the nature of the error encountered. | |||
The diagnosticMessage field of this construct may, at the server's | The diagnosticMessage field of this construct may, at the server's | |||
option, be used to return a string containing a textual, human- | option, be used to return a string containing a textual, human- | |||
readable (terminal control and page formatting characters should be | readable (terminal control and page formatting characters should be | |||
avoided) diagnostic message. As this diagnostic message is not | avoided) diagnostic message. As this diagnostic message is not | |||
standardized, implementations MUST NOT rely on the values returned. | standardized, implementations MUST NOT rely on the values returned. | |||
Lightweight Directory Access Protocol Version 3 | ||||
If the server chooses not to return a textual diagnostic, the | If the server chooses not to return a textual diagnostic, the | |||
diagnosticMessage field MUST be empty. | diagnosticMessage field MUST be empty. | |||
For certain result codes (typically, but not restricted to | For certain result codes (typically, but not restricted to | |||
noSuchObject, aliasProblem, invalidDNSyntax and | noSuchObject, aliasProblem, invalidDNSyntax and | |||
aliasDereferencingProblem), the matchedDN field is set to the name of | aliasDereferencingProblem), the matchedDN field is set (subject to | |||
the lowest entry (object or alias) in the Directory that was matched. | access controls) to the name of the last entry (object or alias) used | |||
If no aliases were dereferenced while attempting to locate the entry, | ||||
this will be a truncated form of the name provided, or if aliases | Lightweight Directory Access Protocol Version 3 | |||
were dereferenced, of the resulting name, as defined in Section 12.5 | ||||
of [X.511]. Otherwise the matchedDN field is empty. | in finding the target (or base) object. If no aliases were | |||
dereferenced while attempting to locate the entry, this will be a | ||||
truncated form of the name provided or if aliases were dereferenced, | ||||
of the resulting name, as defined in Section 12.5 of [X.511]. | ||||
Otherwise the matchedDN field is empty. | ||||
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. | |||
skipping to change at line 590 | skipping to change at line 592 | |||
If the client wishes to progress the operation, it MUST follow the | If the client wishes to progress the operation, it MUST follow the | |||
referral by contacting one of the supported services. If multiple | referral by contacting one of the supported services. If multiple | |||
URIs are present, the client assumes that any supported URI may be | URIs are present, the client assumes that any supported URI may be | |||
used to progress the operation. | used to progress the operation. | |||
Protocol peers that follow referrals MUST ensure that they do not | Protocol peers that follow referrals MUST ensure that they do not | |||
loop between servers. They MUST NOT repeatedly contact the same | loop between servers. They MUST NOT repeatedly contact the same | |||
server for the same request with the same target entry name, scope | server for the same request with the same target entry name, scope | |||
and filter. Some implementations use a counter that is incremented | and filter. Some implementations use a counter that is incremented | |||
each time referral handling occurs for an operation, and these kinds | each time referral handling occurs for an operation, and these kinds | |||
Lightweight Directory Access Protocol Version 3 | ||||
of implementations MUST be able to handle at least ten nested | of implementations MUST be able to handle at least ten nested | |||
referrals between the root and a leaf entry. | referrals between the root and a leaf entry. | |||
A URI for a server implementing LDAP and accessible via [TCP]/[IP] | A URI for a server implementing LDAP and accessible via [TCP]/[IP] | |||
(v4 or v6) is written as an LDAP URL according to [LDAPURL]. | (v4 or v6) is written as an LDAP URL according to [LDAPURL]. | |||
Lightweight Directory Access Protocol Version 3 | ||||
When an LDAP URL is used, the following instructions are followed: | When an LDAP URL is used, the following instructions are followed: | |||
- If an alias was dereferenced, the <dn> part of the URL MUST be | - If an alias was dereferenced, the <dn> part of the URL MUST be | |||
present, with the new target object name. UTF-8 encoded characters | present, with the new target object name. UTF-8 encoded characters | |||
appearing in the string representation of a DN or search filter | appearing in the string representation of a DN or search filter | |||
may not be legal for URLs (e.g. spaces) and MUST be escaped using | may not be legal for URLs (e.g. spaces) and MUST be escaped using | |||
the % method in [URI]. | the % method in [URI]. | |||
- It is RECOMMENDED that the <dn> part be present to avoid | - It is RECOMMENDED that the <dn> part be present to avoid | |||
ambiguity. | ambiguity. | |||
skipping to change at line 645 | skipping to change at line 647 | |||
4.1.11. Controls | 4.1.11. Controls | |||
Controls provide a mechanism whereby the semantics and arguments of | Controls provide a mechanism whereby the semantics and arguments of | |||
existing LDAP operations may be extended. One or more controls may be | existing LDAP operations may be extended. One or more controls may be | |||
attached to a single LDAP message. A control only affects the | attached to a single LDAP message. A control only affects the | |||
semantics of the message it is attached to. | semantics of the message it is attached to. | |||
Controls sent by clients are termed 'request controls' and those sent | Controls sent by clients are termed 'request controls' and those sent | |||
by servers are termed 'response controls'. | by servers are termed 'response controls'. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Controls ::= SEQUENCE OF control Control | Controls ::= SEQUENCE OF control Control | |||
Control ::= SEQUENCE { | Control ::= SEQUENCE { | |||
controlType LDAPOID, | controlType LDAPOID, | |||
criticality BOOLEAN DEFAULT FALSE, | criticality BOOLEAN DEFAULT FALSE, | |||
controlValue OCTET STRING OPTIONAL } | controlValue OCTET STRING OPTIONAL } | |||
Lightweight Directory Access Protocol Version 3 | ||||
The controlType field is the dotted-decimal representation of an | The controlType field is the dotted-decimal representation of an | |||
OBJECT IDENTIFIER which uniquely identifies the control. This | OBJECT IDENTIFIER which uniquely identifies the control. This | |||
provides unambiguous naming of controls. Often, response control(s) | provides unambiguous naming of controls. Often, response control(s) | |||
solicited by a request control share controlType values with the | solicited by a request control share controlType values with the | |||
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 | |||
skipping to change at line 701 | skipping to change at line 703 | |||
Servers list the controlType of request controls they recognize in | Servers list the controlType of request controls they recognize in | |||
the 'supportedControl' attribute in the root DSE (Section 5.1 of | 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 invalid, not specified (or not | is encountered whose semantics are invalid, not specified (or not | |||
Lightweight Directory Access Protocol Version 3 | ||||
known), the message is considered to be not well-formed, thus the | 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 message is | is to be ignored but cannot be ignored by the server, the message is | |||
Lightweight Directory Access Protocol Version 3 | ||||
considered not well-formed and the operation fails with | considered not well-formed and the operation fails with | |||
protocolError. | 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 | |||
skipping to change at line 757 | skipping to change at line 760 | |||
-- 1 and 2 reserved | -- 1 and 2 reserved | |||
sasl [3] SaslCredentials, | sasl [3] SaslCredentials, | |||
... } | ... } | |||
SaslCredentials ::= SEQUENCE { | SaslCredentials ::= SEQUENCE { | |||
mechanism LDAPString, | mechanism LDAPString, | |||
credentials OCTET STRING OPTIONAL } | credentials OCTET STRING OPTIONAL } | |||
Fields of the Bind Request are: | Fields of the Bind Request are: | |||
- version: A version number indicating the version of the protocol | ||||
to be used for the LDAP exchange. This document describes version | ||||
3 of the protocol. There is no version negotiation. The client | ||||
sets this field to the version it desires. If the server does not | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
- version: A version number indicating the version of the protocol | support the specified version, it MUST respond with protocolError | |||
to be used in this LDAP association. This document describes | in the resultCode field of the BindResponse. | |||
version 3 of the protocol. There is no version negotiation. The | ||||
client sets this field to the version it desires. If the server | ||||
does not support the specified version, it MUST respond with | ||||
protocolError in the resultCode field of the BindResponse. | ||||
- name: The name of the Directory object that the client wishes to | - name: If not empty, the name of the Directory object that the | |||
bind as. This field may take on a null value (a zero length | client wishes to bind as. This field may take on a null value (a | |||
string) for the purposes of anonymous binds ([AuthMeth] Section | zero length string) for the purposes of anonymous binds | |||
5.1) or when using Simple Authentication and Security Layer [SASL] | ([AuthMeth] Section 5.1) or when using Simple Authentication and | |||
authentication ([AuthMeth] Section 3.3.2). Where the server | Security Layer [SASL] authentication ([AuthMeth] Section 3.3.2). | |||
attempts to locate the named object, it SHALL NOT perform alias | Where the server attempts to locate the named object, it SHALL NOT | |||
dereferencing. | perform alias dereferencing. | |||
- authentication: information used in authentication. This type is | - authentication: information used in authentication. This type is | |||
extensible as defined in Section 3.7 of [LDAPIANA]. Servers that | extensible as defined in Section 3.7 of [LDAPIANA]. Servers that | |||
do not support a choice supplied by a client return | do not support a choice supplied by a client return | |||
authMethodNotSupported in the resultCode field of the | authMethodNotSupported in the resultCode field of the | |||
BindResponse. | BindResponse. | |||
Textual passwords (consisting of a character sequence with a known | Textual passwords (consisting of a character sequence with a known | |||
character set and encoding) transferred to the server using the | character set and encoding) transferred to the server using the | |||
simple AuthenticationChoice SHALL be transferred as [UTF-8] | simple AuthenticationChoice SHALL be transferred as [UTF-8] | |||
skipping to change at line 811 | skipping to change at line 815 | |||
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 | |||
operationsError to that request, it may then send a Bind Request. If | operationsError to that request, it may then send a Bind Request. If | |||
Lightweight Directory Access Protocol Version 3 | ||||
this also fails or the client chooses not to bind on the existing | this also fails or the client chooses not to bind on the existing | |||
LDAP exchange, it may close the connection, reopen it and begin again | LDAP exchange, it may close the connection, reopen it and begin again | |||
by first sending a PDU with a Bind Request. This will aid in | by first sending a PDU with a Bind Request. This will aid in | |||
interoperating with servers implementing other versions of LDAP. | interoperating with servers implementing other versions of LDAP. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Clients may send multiple Bind Requests on an LDAP exchange to change | Clients may send multiple Bind Requests on an LDAP exchange to change | |||
the authentication and/or security associations or to complete a | the authentication and/or security associations or to complete a | |||
multi-stage bind process. Authentication from earlier binds is | multi-stage bind process. Authentication from earlier binds is | |||
subsequently ignored. | subsequently ignored. | |||
For some SASL authentication mechanisms, it may be necessary for the | For some SASL authentication mechanisms, it may be necessary for the | |||
client to invoke the BindRequest multiple times ([AuthMeth] Section | client to invoke the BindRequest multiple times ([AuthMeth] Section | |||
8.2). Clients MUST NOT invoke operations between two Bind Requests | 8.2). Clients MUST NOT invoke operations between two Bind Requests | |||
made as part of a multi-stage bind. | made as part of a multi-stage bind. | |||
skipping to change at line 866 | skipping to change at line 870 | |||
protocolError, it is to assume that the server does not support this | protocolError, it is to assume that the server does not support this | |||
version of LDAP. While the client may be able proceed with another | version of LDAP. While the client may be able proceed with another | |||
version of this protocol (this may or may not require closing and re- | version of this protocol (this may or may not require closing and re- | |||
establishing the connection), how to proceed with another version of | establishing the connection), how to proceed with another version of | |||
this protocol is beyond the scope of this document. Clients which are | this protocol is beyond the scope of this document. Clients which are | |||
unable or unwilling to proceed SHOULD close the connection. | unable or unwilling to proceed SHOULD close the connection. | |||
The serverSaslCreds field is used as part of a SASL-defined bind | The serverSaslCreds field is used as part of a SASL-defined bind | |||
mechanism to allow the client to authenticate the server to which it | mechanism to allow the client to authenticate the server to which it | |||
is communicating, or to perform "challenge-response" authentication. | is communicating, or to perform "challenge-response" authentication. | |||
Lightweight Directory Access Protocol Version 3 | ||||
If the client bound with the simple choice, or the SASL mechanism | If the client bound with the simple choice, or the SASL mechanism | |||
does not require the server to return information to the client, then | does not require the server to return information to the client, then | |||
this field SHALL NOT be included in the BindResponse. | this field SHALL NOT be included in the BindResponse. | |||
Lightweight Directory Access Protocol Version 3 | ||||
4.3. Unbind Operation | 4.3. Unbind Operation | |||
The function of the Unbind Operation is to terminate an LDAP | The function of the Unbind Operation is to terminate an LDAP exchange | |||
association and close the connection. The Unbind operation is not the | and close the connection. The Unbind operation is not the antithesis | |||
antithesis of the Bind operation as the name implies. The naming of | of the Bind operation as the name implies. The naming of these | |||
these operations is historical. The Unbind operation should be | operations is historical. The Unbind operation should be thought of | |||
thought of as the "quit" operation. | 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 | exchange terminated, MUST cease transmission of messages to the other | |||
other peer, and MUST close the connection. Uncompleted operations are | 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. | |||
skipping to change at line 920 | skipping to change at line 923 | |||
specified in the responseName, | specified in the responseName, | |||
- the format of the contents (if any) of the responseValue, | - the format of the contents (if any) of the responseValue, | |||
- the circumstances which will cause the notification to be | - the circumstances which will cause the notification to be | |||
returned, and | returned, and | |||
- the semantics of the operation. | - the semantics of the operation. | |||
4.4.1. Notice of Disconnection | 4.4.1. Notice of Disconnection | |||
Lightweight Directory Access Protocol Version 3 | ||||
This notification may be used by the server to advise the client that | This notification may be used by the server to advise the client that | |||
the server is about to close the connection due to an error | the server is about to close the 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 | |||
Lightweight Directory Access Protocol Version 3 | ||||
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. Uncompleted operations are handled as | requested by the client. Uncompleted 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 responseValue field | The responseName is 1.3.6.1.4.1.1466.20036, the responseValue field | |||
is absent, and the resultCode is used to indicate the reason for the | is 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 | ||||
notification: | ||||
- protocolError: The server has received data from the client in | ||||
which the LDAPMessage structure could not be parsed. | ||||
- strongAuthRequired: The server has detected that an established | ||||
security association between the client and server has | ||||
unexpectedly failed or been compromised, or that the server now | ||||
requires the client to authenticate using a strong(er) mechanism. | ||||
- unavailable: This server will stop accepting new connections and | ||||
operations on all existing LDAP exchanges, and be unavailable for | ||||
an extended period of time. The client may make use of an | ||||
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 exchange terminated, MUST cease transmission of | |||
messages to the client, and MUST close the connection. | messages to the client, and MUST close the connection. | |||
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. | |||
skipping to change at line 973 | skipping to change at line 962 | |||
The Search Request is defined as follows: | The Search Request is defined as follows: | |||
SearchRequest ::= [APPLICATION 3] SEQUENCE { | SearchRequest ::= [APPLICATION 3] SEQUENCE { | |||
baseObject LDAPDN, | baseObject LDAPDN, | |||
scope ENUMERATED { | scope ENUMERATED { | |||
baseObject (0), | baseObject (0), | |||
singleLevel (1), | singleLevel (1), | |||
wholeSubtree (2) }, | wholeSubtree (2) }, | |||
derefAliases ENUMERATED { | derefAliases ENUMERATED { | |||
Lightweight Directory Access Protocol Version 3 | ||||
neverDerefAliases (0), | neverDerefAliases (0), | |||
derefInSearching (1), | derefInSearching (1), | |||
derefFindingBaseObj (2), | derefFindingBaseObj (2), | |||
derefAlways (3) }, | derefAlways (3) }, | |||
sizeLimit INTEGER (0 .. maxInt), | sizeLimit INTEGER (0 .. maxInt), | |||
timeLimit INTEGER (0 .. maxInt), | timeLimit INTEGER (0 .. maxInt), | |||
typesOnly BOOLEAN, | typesOnly BOOLEAN, | |||
filter Filter, | filter Filter, | |||
attributes AttributeSelection } | attributes AttributeSelection } | |||
AttributeSelection ::= SEQUENCE OF 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 OF filter Filter, | |||
or [1] SET SIZE (1..MAX) OF filter Filter, | or [1] SET OF filter Filter, | |||
not [2] Filter, | not [2] Filter, | |||
equalityMatch [3] AttributeValueAssertion, | equalityMatch [3] AttributeValueAssertion, | |||
substrings [4] SubstringFilter, | substrings [4] SubstringFilter, | |||
greaterOrEqual [5] AttributeValueAssertion, | greaterOrEqual [5] AttributeValueAssertion, | |||
Lightweight Directory Access Protocol Version 3 | ||||
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, | |||
skipping to change at line 1030 | skipping to change at line 1020 | |||
- scope: Specifies the scope of the search to be performed. The | - scope: Specifies the scope of the search to be performed. The | |||
semantics (as described in [X.511]) of the possible values of this | semantics (as described in [X.511]) of the possible values of this | |||
field are: | field are: | |||
baseObject: The scope is constrained to the entry named by | baseObject: The scope is constrained to the entry named by | |||
baseObject. | baseObject. | |||
singleLevel: The scope is constrained to the immediate | singleLevel: The scope is constrained to the immediate | |||
subordinates of the entry named by baseObject. | subordinates of the entry named by baseObject. | |||
Lightweight Directory Access Protocol Version 3 | ||||
wholeSubtree: the scope is constrained to the entry named by | wholeSubtree: the scope is constrained to the entry named by | |||
the baseObject, and all its subordinates. | the baseObject, and all its subordinates. | |||
- derefAliases: An indicator as to how alias entries (as defined in | - derefAliases: An indicator as to how alias entries (as defined in | |||
[Models]) are to be handled in searching. The semantics of the | [Models]) are to be handled in searching. The semantics of the | |||
possible values of this field are: | possible values of this field are: | |||
neverDerefAliases: Do not dereference aliases in searching or | neverDerefAliases: Do not dereference aliases in searching or | |||
in locating the base object of the search. | in locating the base object of the search. | |||
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 | |||
skipping to change at line 1084 | skipping to change at line 1074 | |||
descriptions (no values) to be returned. Setting this field to | descriptions (no values) to be returned. Setting this field to | |||
FALSE causes both attribute descriptions and values to be | FALSE causes both attribute descriptions and values to be | |||
returned. | returned. | |||
- filter: A filter that defines the conditions that must be | - filter: A filter that defines the conditions that must be | |||
fulfilled in order for the search to match a given entry. | fulfilled in order for the search to match a given entry. | |||
The 'and', 'or' and 'not' choices can be used to form combinations | The 'and', 'or' and 'not' choices can be used to form combinations | |||
of filters. At least one filter element MUST be present in an | of filters. At least one filter element MUST be present in an | |||
'and' or 'or' choice. The others match against individual | 'and' or 'or' choice. The others match against individual | |||
Lightweight Directory Access Protocol Version 3 | ||||
attribute values of entries in the scope of the search. | attribute values of entries in the scope of the search. | |||
(Implementor's note: the 'not' filter is an example of a tagged | (Implementor's note: the 'not' filter is an example of a tagged | |||
choice in an implicitly-tagged module. In BER this is treated as | choice in an implicitly-tagged module. In BER this is treated as | |||
if the tag was explicit.) | if the tag was explicit.) | |||
A server MUST evaluate filters according to the three-valued logic | A server MUST evaluate filters according to the three-valued logic | |||
of X.511 (1993) Section 7.8.1. In summary, a filter is evaluated | of X.511 (1993) Section 7.8.1. In summary, a filter is evaluated | |||
to either "TRUE", "FALSE" or "Undefined". If the filter evaluates | to either "TRUE", "FALSE" or "Undefined". If the filter evaluates | |||
to TRUE for a particular entry, then the attributes of that entry | to TRUE for a particular entry, then the attributes of that entry | |||
are returned as part of the search result (subject to any | are returned as part of the search result (subject to any | |||
skipping to change at line 1107 | skipping to change at line 1095 | |||
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 | |||
is TRUE, and Undefined if it is Undefined. | is TRUE, and Undefined if it is Undefined. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
skipping to change at line 1140 | skipping to change at line 1130 | |||
The matching rule for the lessOrEqual filter item is defined by | The matching rule for the lessOrEqual filter item is defined by | |||
the ORDERING matching rule for the attribute type. | the ORDERING matching rule for the attribute type. | |||
An approxMatch filter item evaluates to TRUE when there is a value | An approxMatch filter item evaluates to TRUE when there is a value | |||
of the attribute or subtype for which some locally-defined | of the attribute or subtype for which some locally-defined | |||
approximate matching algorithm (e.g. spelling variations, phonetic | approximate matching algorithm (e.g. spelling variations, phonetic | |||
match, etc.) returns TRUE. If an item matches for equality, it | match, etc.) returns TRUE. If an item matches for equality, it | |||
also satisfies an approximate match. If approximate matching is | also satisfies an approximate match. If approximate matching is | |||
not supported for the attribute, this filter item should be | not supported for the attribute, this filter item should be | |||
Lightweight Directory Access Protocol Version 3 | ||||
treated as an equalityMatch. | treated as an equalityMatch. | |||
An extensibleMatch filter item is evaluated as follows: | An extensibleMatch filter item is evaluated as follows: | |||
If the matchingRule field is absent, the type field MUST be | If the matchingRule field is absent, the type field MUST be | |||
present, and an equality match is performed for that type. | present, and an equality match is performed for that type. | |||
If the type field is absent and the matchingRule is present, the | If the type field is absent and the matchingRule is present, the | |||
matchValue is compared against all attributes in an entry which | matchValue is compared against all attributes in an entry which | |||
support that matchingRule. The matchingRule determines the | support that matchingRule. The matchingRule determines the | |||
syntax for the assertion value. The filter item evaluates to | syntax for the assertion value. The filter item evaluates to | |||
TRUE if it matches with at least one attribute in the entry, | TRUE if it matches with at least one attribute in the entry, | |||
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. | |||
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. | |||
an attribute description in an equalityMatch, substrings, | Examples include: | |||
greaterOrEqual, lessOrEqual, approxMatch or extensibleMatch filter | ||||
is not recognized by the server, a MatchingRuleId in the | - An attribute description in an equalityMatch, substrings, | |||
extensibleMatch is not recognized by the server, the assertion | greaterOrEqual, lessOrEqual, approxMatch or extensibleMatch | |||
value is invalid, or the type of filtering requested is not | filter is not recognized by the server. | |||
implemented, then the filter is Undefined. Thus for example if a | ||||
server did not recognize the attribute type shoeSize, a filter of | - The attribute type does not define the appropriate matching | |||
(shoeSize=*) would evaluate to FALSE, and the filters | rule. | |||
(shoeSize=12), (shoeSize>=12) and (shoeSize<=12) would evaluate to | ||||
Undefined. | - A MatchingRuleId in the extensibleMatch is not recognized by | |||
the server or is not valid for the attribute type. | ||||
- The type of filtering requested is not implemented. | ||||
- The assertion value is invalid. | ||||
For example, if a server did not recognize the attribute type | ||||
shoeSize, a filter of (shoeSize=*) would evaluate to FALSE, and | ||||
the filters (shoeSize=12), (shoeSize>=12) and (shoeSize<=12) would | ||||
each evaluate to Undefined. | ||||
Servers MUST NOT return errors if attribute descriptions or | Servers MUST NOT return errors if attribute descriptions or | |||
matching rule ids are not recognized, assertion values are | matching rule ids are not recognized, assertion values are | |||
invalid, or the assertion syntax is not supported. More details of | invalid, or the assertion syntax is not supported. More details of | |||
filter processing are given in Section 7.8 of [X.511]. | filter processing are given in Section 7.8 of [X.511]. | |||
- attributes: A selection list of the attributes to be returned from | - attributes: A selection list of the attributes to be returned from | |||
each entry which matches the search filter. LDAPString values of | each entry which matches the search filter. LDAPString values of | |||
this field are constrained to the following Augmented Backus-Naur | this field are constrained to the following Augmented Backus-Naur | |||
Form ([ABNF]): | Form ([ABNF]): | |||
Lightweight Directory Access Protocol Version 3 | ||||
attributeSelector = attributedescription / selectorpecial | attributeSelector = attributedescription / selectorpecial | |||
selectorspecial = noattrs / alluserattrs | selectorspecial = noattrs / alluserattrs | |||
noattrs = %x31.2E.31 ; "1.1" | noattrs = %x31.2E.31 ; "1.1" | |||
alluserattrs = %x2A ; asterisk ("*") | alluserattrs = %x2A ; asterisk ("*") | |||
Lightweight Directory Access Protocol Version 3 | ||||
The <attributedescription> production is defined in Section 2.5 of | The <attributedescription> production is defined in Section 2.5 of | |||
[Models]. | [Models]. | |||
There are three special cases which may appear in the attributes | There are three special cases which may appear in the attributes | |||
selection list: | selection list: | |||
- 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 | |||
skipping to change at line 1252 | skipping to change at line 1253 | |||
Note that an X.500 "list"-like operation can be emulated by the | Note that an X.500 "list"-like operation can be emulated by the | |||
client requesting a one-level LDAP search operation with a filter | client requesting a one-level LDAP search operation with a filter | |||
checking for the presence of the 'objectClass' attribute, and that an | checking for the presence of the 'objectClass' attribute, and that an | |||
X.500 "read"-like operation can be emulated by a base object LDAP | X.500 "read"-like operation can be emulated by a base object LDAP | |||
search operation with the same filter. A server which provides a | search operation with the same filter. A server which provides a | |||
gateway to X.500 is not required to use the Read or List operations, | gateway to X.500 is not required to use the Read or List operations, | |||
although it may choose to do so, and if it does, it must provide the | although it may choose to do so, and if it does, it must provide the | |||
same semantics as the X.500 search operation. | same semantics as the X.500 search operation. | |||
Lightweight Directory Access Protocol Version 3 | ||||
4.5.2. Search Result | 4.5.2. Search Result | |||
The results of the search operation are returned as zero or more | The results of the search operation are returned as zero or more | |||
searchResultEntry messages, zero or more SearchResultReference | searchResultEntry messages, zero or more SearchResultReference | |||
messages, followed by a single searchResultDone message. | messages, followed by a single searchResultDone message. | |||
SearchResultEntry ::= [APPLICATION 4] SEQUENCE { | SearchResultEntry ::= [APPLICATION 4] SEQUENCE { | |||
Lightweight Directory Access Protocol Version 3 | ||||
objectName LDAPDN, | objectName LDAPDN, | |||
attributes PartialAttributeList } | attributes PartialAttributeList } | |||
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 | |||
skipping to change at line 1305 | skipping to change at line 1307 | |||
If the server's schema defines short names [Models] for an attribute | If the server's schema defines short names [Models] for an attribute | |||
type then the server SHOULD use one of those names in attribute | type then the server SHOULD use one of those names in attribute | |||
descriptions for that attribute type (in preference to using the | descriptions for that attribute type (in preference to using the | |||
<numericoid> [Models] format of the attribute type's object | <numericoid> [Models] format of the attribute type's object | |||
identifier). The server SHOULD NOT use the short name if that name is | identifier). The server SHOULD NOT use the short name if that name is | |||
known by the server to be ambiguous, or otherwise likely to cause | known by the server to be ambiguous, or otherwise likely to cause | |||
interoperability problems. | interoperability problems. | |||
4.5.3. Continuation References in the Search Result | 4.5.3. Continuation References in the Search Result | |||
Lightweight Directory Access Protocol Version 3 | ||||
If the server was able to locate the entry referred to by the | If the server was able to locate the entry referred to by the | |||
baseObject but was unable to search one or more non-local entries, | baseObject but was unable to search one or more non-local entries, | |||
the server may return one or more SearchResultReference entries, each | the server may return one or more SearchResultReference entries, each | |||
containing a reference to another set of servers for continuing the | containing a reference to another set of servers for continuing the | |||
operation. A server MUST NOT return any SearchResultReference if it | operation. A server MUST NOT return any SearchResultReference if it | |||
has not located the baseObject and thus has not searched any entries; | has not located the baseObject and thus has not searched any entries; | |||
in this case it would return a SearchResultDone containing either a | in this case it would return a SearchResultDone containing either a | |||
Lightweight Directory Access Protocol Version 3 | ||||
referral or noSuchObject result code (depending on the server's | referral or noSuchObject result code (depending on the server's | |||
knowledge of the entry named in the baseObject). | knowledge of the entry named in the baseObject). | |||
If a server holds a copy or partial copy of the subordinate naming | If a server holds a copy or partial copy of the subordinate naming | |||
context [Section 5 of Models], it may use the search filter to | context [Section 5 of Models], it may use the search filter to | |||
determine whether or not to return a SearchResultReference response. | determine whether or not to return a SearchResultReference response. | |||
Otherwise SearchResultReference responses are always returned when in | Otherwise SearchResultReference responses are always returned when in | |||
scope. | scope. | |||
The SearchResultReference is of the same data type as the Referral. | The SearchResultReference is of the same data type as the Referral. | |||
A URI for a server implementing LDAP and accessible via [TCP]/[IP] | A URI for a server implementing LDAP and accessible via [TCP]/[IP] | |||
(v4 or v6) is written as an LDAP URL according to [LDAPURL]. | (v4 or v6) is written as an LDAP URL according to [LDAPURL]. | |||
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 the LDAP exchange 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 | |||
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. | |||
skipping to change at line 1362 | skipping to change at line 1366 | |||
provide a different filter in a URL of a SearchResultReference. | provide a different filter in a URL of a SearchResultReference. | |||
- If the <filter> part of the URL is present, the client MUST use | - If the <filter> part of the URL is present, the client MUST use | |||
this filter in its next request to progress this search, and if it | this filter in its next request to progress this search, and if it | |||
is not present the client MUST use the same filter as it used for | is not present the client MUST use the same filter as it used for | |||
that search. | that search. | |||
- If the originating search scope was singleLevel, the <scope> part | - If the originating search scope was singleLevel, the <scope> part | |||
of the URL will be "base". | of the URL will be "base". | |||
Lightweight Directory Access Protocol Version 3 | - It is RECOMMENDED that the <scope> part be present to avoid | |||
- it is RECOMMENDED that the <scope> part be present to avoid | ||||
ambiguity. | ambiguity. | |||
- Other aspects of the new search request may be the same as or | - Other aspects of the new search request may be the same as or | |||
different from the search request which generated the | different from the search request which generated the | |||
SearchResultReference. | SearchResultReference. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- The name of an unexplored subtree in a SearchResultReference need | - The name of an unexplored subtree in a SearchResultReference need | |||
not be subordinate to the base object. | not be subordinate to the base object. | |||
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 | |||
skipping to change at line 1416 | skipping to change at line 1420 | |||
ldap://hoste/OU=Managers,OU=People,DC=Example,DC=NET??sub } | ldap://hoste/OU=Managers,OU=People,DC=Example,DC=NET??sub } | |||
SearchResultReference { | SearchResultReference { | |||
ldap://hostf/OU=Consultants,OU=People,DC=Example,DC=NET??sub } | ldap://hostf/OU=Consultants,OU=People,DC=Example,DC=NET??sub } | |||
SearchResultDone (success) | SearchResultDone (success) | |||
Similarly, if a singleLevel search of <DC=Example,DC=NET> is | Similarly, if a singleLevel search of <DC=Example,DC=NET> is | |||
requested to the contacted server, it may return the following: | requested to the contacted server, it may return the following: | |||
SearchResultEntry for CN=Manager,DC=Example,DC=NET | SearchResultEntry for CN=Manager,DC=Example,DC=NET | |||
SearchResultReference { | SearchResultReference { | |||
Lightweight Directory Access Protocol Version 3 | ||||
ldap://hostb/OU=People,DC=Example,DC=NET??base | ldap://hostb/OU=People,DC=Example,DC=NET??base | |||
ldap://hostc/OU=People,DC=Example,DC=NET??base } | ldap://hostc/OU=People,DC=Example,DC=NET??base } | |||
SearchResultReference { | SearchResultReference { | |||
ldap://hostd/OU=Roles,DC=Example,DC=NET??base } | ldap://hostd/OU=Roles,DC=Example,DC=NET??base } | |||
SearchResultDone (success) | SearchResultDone (success) | |||
Lightweight Directory Access Protocol Version 3 | ||||
If the contacted server does not hold the base object for the search, | If the contacted server does not hold the base object for the search, | |||
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 | |||
skipping to change at line 1471 | skipping to change at line 1475 | |||
performed MUST conform to the requirements of the directory model | performed MUST conform to the requirements of the directory model | |||
and controlling schema [Models]. | and controlling schema [Models]. | |||
- operation: Used to specify the type of modification being | - operation: Used to specify the type of modification being | |||
performed. Each operation type acts on the following | performed. Each operation type acts on the following | |||
modification. The values of this field have the following | modification. The values of this field have the following | |||
semantics respectively: | semantics respectively: | |||
add: add values listed to the modification attribute, | add: add values listed to the modification attribute, | |||
creating the attribute if necessary; | creating the attribute if necessary; | |||
Lightweight Directory Access Protocol Version 3 | ||||
delete: delete values listed from the modification attribute, | delete: delete values listed from the modification attribute, | |||
removing the entire attribute if no values are listed, or if | removing the entire attribute if no values are listed, or if | |||
all current values of the attribute are listed for deletion; | all current values of the attribute are listed for deletion; | |||
Lightweight Directory Access Protocol Version 3 | ||||
replace: replace all existing values of the modification | replace: replace all existing values of the modification | |||
attribute with the new values listed, creating the attribute | attribute with the new values listed, creating the attribute | |||
if it did not already exist. A replace with no value will | if it did not already exist. A replace with no value will | |||
delete the entire attribute if it exists, and is ignored if | delete the entire attribute if it exists, and is ignored if | |||
the attribute does not exist. | the attribute does not exist. | |||
- 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. | |||
skipping to change at line 1501 | skipping to change at line 1506 | |||
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. The result of the modification is indeterminate if the | |||
whether the modification occurred or not is indeterminate. | Modify Response is not received (e.g. the LDA exchange is terminated | |||
or the Modify Operation is abandoned). | ||||
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 | |||
skipping to change at line 1525 | skipping to change at line 1531 | |||
entry MUST be identical. | entry MUST be identical. | |||
4.7. Add Operation | 4.7. Add Operation | |||
The Add Operation allows a client to request the addition of an entry | The Add Operation allows a client to request the addition of an entry | |||
into the Directory. The Add Request is defined as follows: | into the Directory. The Add Request is defined as follows: | |||
AddRequest ::= [APPLICATION 8] SEQUENCE { | AddRequest ::= [APPLICATION 8] SEQUENCE { | |||
entry LDAPDN, | entry LDAPDN, | |||
attributes AttributeList } | attributes AttributeList } | |||
Lightweight Directory Access Protocol Version 3 | ||||
AttributeList ::= SEQUENCE OF attribute Attribute | AttributeList ::= SEQUENCE OF attribute Attribute | |||
Fields of the Add Request are: | Fields of the Add Request are: | |||
Lightweight Directory Access Protocol Version 3 | ||||
- entry: the name of the entry to be added. The server SHALL NOT | - entry: the name of the entry to be added. The server SHALL NOT | |||
dereference any aliases in locating the entry to be added. | dereference any aliases in locating the entry to be added. | |||
- attributes: the list of attributes that, along with those from the | - attributes: the list of attributes that, along with those from the | |||
RDN, make up the content of the entry being added. Clients 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 | |||
skipping to change at line 1579 | skipping to change at line 1586 | |||
DelRequest ::= [APPLICATION 10] LDAPDN | DelRequest ::= [APPLICATION 10] LDAPDN | |||
The Delete Request consists of the name of the entry to be deleted. | The Delete Request consists of the name of the entry to be deleted. | |||
The server SHALL NOT dereference aliases while resolving the name of | The server SHALL NOT dereference aliases while resolving the name of | |||
the target entry to be removed. | the target entry to be removed. | |||
Only leaf entries (those with no subordinate entries) can be deleted | Only leaf entries (those with no subordinate entries) can be deleted | |||
with this operation. | with this operation. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Upon receipt of a Delete Request, a server will attempt to perform | Upon receipt of a Delete Request, a server will attempt to perform | |||
the entry removal requested and return the result in the Delete | the entry removal requested and return the result in the Delete | |||
Response defined as follows: | Response defined as follows: | |||
Lightweight Directory Access Protocol Version 3 | ||||
DelResponse ::= [APPLICATION 11] LDAPResult | DelResponse ::= [APPLICATION 11] LDAPResult | |||
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 { | |||
skipping to change at line 1633 | skipping to change at line 1640 | |||
Upon receipt of a ModifyDNRequest, a server will attempt to perform | Upon receipt of a ModifyDNRequest, a server will attempt to perform | |||
the name change and return the result in the Modify DN Response, | the name change and return the result in the Modify DN Response, | |||
defined as follows: | defined as follows: | |||
ModifyDNResponse ::= [APPLICATION 13] LDAPResult | ModifyDNResponse ::= [APPLICATION 13] LDAPResult | |||
For example, if the entry named in the entry field was <cn=John | For example, if the entry named in the entry field was <cn=John | |||
Smith,c=US>, the newrdn field was <cn=John Cougar Smith>, and the | Smith,c=US>, the newrdn field was <cn=John Cougar Smith>, and the | |||
newSuperior field was absent, then this operation would attempt to | newSuperior field was absent, then this operation would attempt to | |||
rename the entry to be <cn=John Cougar Smith,c=US>. If there was | rename the entry to be <cn=John Cougar Smith,c=US>. If there was | |||
Lightweight Directory Access Protocol Version 3 | ||||
already an entry with that name, the operation would fail with the | already an entry with that name, the operation would fail with the | |||
entryAlreadyExists result code. | entryAlreadyExists result code. | |||
The object named in newSuperior MUST exist. For example, if the | The object named in newSuperior MUST exist. For example, if the | |||
client attempted to add <CN=JS,DC=Example,DC=NET>, the | client attempted to add <CN=JS,DC=Example,DC=NET>, the | |||
Lightweight Directory Access Protocol Version 3 | ||||
<DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did | <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did | |||
exist, then the server would return the noSuchObject result code with | exist, then the server would return the noSuchObject result code with | |||
the matchedDN field containing <DC=NET>. | the matchedDN field containing <DC=NET>. | |||
If the 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 | |||
skipping to change at line 1688 | skipping to change at line 1696 | |||
the requested comparison and return the result in the Compare | the requested comparison and return the result in the Compare | |||
Response, defined as follows: | Response, defined as follows: | |||
CompareResponse ::= [APPLICATION 15] LDAPResult | CompareResponse ::= [APPLICATION 15] LDAPResult | |||
The resultCode field is set to compareTrue, compareFalse, or an | The resultCode field is set to compareTrue, compareFalse, or an | |||
appropriate error. compareTrue indicates that the assertion value in | appropriate error. compareTrue indicates that the assertion value in | |||
the ava field matches a value of the attribute or subtype according | the ava field matches a value of the attribute or subtype according | |||
to the attribute's EQUALITY matching rule. compareFalse indicates | to the attribute's EQUALITY matching rule. compareFalse indicates | |||
that the assertion value in the ava field and the values of the | that the assertion value in the ava field and the values of the | |||
Lightweight Directory Access Protocol Version 3 | ||||
attribute or subtype did not match. Other result codes indicate | attribute or subtype did not match. Other result codes indicate | |||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
Note that some directory systems may establish access controls which | Note that some directory systems may establish access controls which | |||
permit the values of certain attributes (such as userPassword) to be | permit the values of certain attributes (such as userPassword) to be | |||
compared but not interrogated by other means. | compared but not interrogated by other means. | |||
4.11. Abandon Operation | 4.11. Abandon Operation | |||
The function of the Abandon Operation is to allow a client to request | The function of the Abandon Operation is to allow a client to request | |||
that the server abandon an uncompleted 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 | |||
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 | this LDAP exchange. The abandon request itself has its own MessageID. | |||
MessageID. This is distinct from the MessageID of the earlier | This is distinct from the MessageID of the earlier operation being | |||
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 uncompleted 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. | |||
Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned. | Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned. | |||
skipping to change at line 1740 | skipping to change at line 1748 | |||
Clients should not send abandon requests for the same operation | Clients should not send abandon requests for the same operation | |||
multiple times, and MUST also be prepared to receive results from | multiple times, and MUST also be prepared to receive results from | |||
operations it has abandoned (since these may have been in transit | operations it has abandoned (since these may have been in transit | |||
when the abandon was requested, or are not able to be abandoned). | when the abandon was requested, or are not able to be abandoned). | |||
Servers MUST discard abandon requests for message IDs they do not | Servers MUST discard abandon requests for message IDs they do not | |||
recognize, for operations which cannot be abandoned, and for | recognize, for operations which cannot be abandoned, and for | |||
operations which have already been abandoned. | operations which have already been abandoned. | |||
4.12. Extended Operation | 4.12. Extended Operation | |||
Lightweight Directory Access Protocol Version 3 | ||||
The extended operation allows additional operations to be defined for | The extended operation allows additional operations to be defined for | |||
services not already available in the protocol. For example, to add | services not already available in the protocol. For example, to add | |||
operations to install transport layer security (see Section 4.14). | operations to install transport layer security (see Section 4.14). | |||
Lightweight Directory Access Protocol Version 3 | ||||
The extended operation allows clients to make requests and receive | The extended operation allows clients to make requests and receive | |||
responses with predefined syntaxes and semantics. These may be | responses with predefined syntaxes and semantics. These may be | |||
defined in RFCs or be private to particular implementations. | defined in RFCs or be private to particular implementations. | |||
Each extended operation consists of an extended request and an | Each extended operation consists of an extended request and an | |||
extended response. | extended response. | |||
ExtendedRequest ::= [APPLICATION 23] SEQUENCE { | ExtendedRequest ::= [APPLICATION 23] SEQUENCE { | |||
requestName [0] LDAPOID, | requestName [0] LDAPOID, | |||
requestValue [1] OCTET STRING OPTIONAL } | requestValue [1] OCTET STRING OPTIONAL } | |||
skipping to change at line 1795 | skipping to change at line 1804 | |||
Section 4. | Section 4. | |||
Servers list the requestName of Extended Requests they recognize in | Servers list the requestName of Extended Requests they recognize in | |||
the ' supportedExtension ' attribute in the root DSE (Section 5.1 of | the ' supportedExtension ' attribute in the root DSE (Section 5.1 of | |||
[Models]). | [Models]). | |||
Extended operations may be specified in other documents. The | Extended operations may be specified in other documents. The | |||
specification of an extended operation consists of: | specification of an extended operation consists of: | |||
- the OBJECT IDENTIFIER assigned to the requestName, | - the OBJECT IDENTIFIER assigned to the requestName, | |||
Lightweight Directory Access Protocol Version 3 | ||||
- the OBJECT IDENTIFIER (if any) assigned to the responseName (note | - the OBJECT IDENTIFIER (if any) assigned to the responseName (note | |||
that the same OBJECT IDENTIFIER my be used for both the | that the same OBJECT IDENTIFIER my be used for both the | |||
requestName and responseName), | requestName and responseName), | |||
Lightweight Directory Access Protocol Version 3 | ||||
- the format of the contents of the requestValue and responseValue | - the format of the contents of the requestValue and responseValue | |||
(if any), and | (if any), and | |||
- 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. | |||
skipping to change at line 1848 | skipping to change at line 1858 | |||
- the OBJECT IDENTIFIER (if any) assigned to the responseName, | - the OBJECT IDENTIFIER (if any) assigned to the responseName, | |||
- the format of the contents of the responseValue, and | - the format of the contents of the responseValue, and | |||
- the semantics associated with the IntermediateResponse message. | - the semantics associated with the IntermediateResponse message. | |||
Extensions that allow the return of multiple types of | Extensions that allow the return of multiple types of | |||
IntermediateResponse messages SHALL identify those types using unique | IntermediateResponse messages SHALL identify those types using unique | |||
responseName values (note that one of these may specify no value). | responseName values (note that one of these may specify no value). | |||
Lightweight Directory Access Protocol Version 3 | ||||
Sections 4.13.1 and 4.13.2 describe additional requirements on the | Sections 4.13.1 and 4.13.2 describe additional requirements on the | |||
inclusion of responseName and responseValue in IntermediateResponse | inclusion of responseName and responseValue in IntermediateResponse | |||
messages. | messages. | |||
4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse | 4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 | |||
code for the operation. One or more kinds of IntermediateResponse | code for the operation. One or more kinds of IntermediateResponse | |||
skipping to change at line 1882 | skipping to change at line 1892 | |||
- two or more controls using IntermediateResponse messages are | - two or more controls using IntermediateResponse messages are | |||
included in a request for any LDAP operation or | included in a request for any LDAP operation or | |||
- one or more controls using IntermediateResponse messages are | - one or more controls using IntermediateResponse messages are | |||
included in a request with an LDAP extended operation that uses | included in a request with an LDAP extended operation that uses | |||
IntermediateResponse messages. | IntermediateResponse messages. | |||
4.14. StartTLS Operation | 4.14. StartTLS Operation | |||
The Start Transport Layer Security (StartTLS) operation provides the | The Start Transport Layer Security (StartTLS) operationÆs purpose is | |||
ability to establish a TLS-protected LDAP exchange. The StartTLS | to initiate installation of a TLS layer. The StartTLS operation is | |||
operation is defined using the extended operation mechanism described | defined using the extended operation mechanism described in Section | |||
in Section 4.12. | 4.12. | |||
4.14.1. StartTLS Request | 4.14.1. StartTLS Request | |||
A client requests TLS establishment by transmitting a StartTLS | A client requests TLS establishment by transmitting a StartTLS | |||
request PDU to the server. The StartTLS request is defined in terms | request PDU to the server. The StartTLS request is defined in terms | |||
of an ExtendedRequest. The requestName is "1.3.6.1.4.1.1466.20037", | of an ExtendedRequest. The requestName is "1.3.6.1.4.1.1466.20037", | |||
and the requestValue field is always absent. | and the requestValue field is always absent. | |||
The client MUST NOT send any PDUs on this LDAP exchange following | The client MUST NOT send any PDUs on this LDAP exchange following | |||
this request until it receives a StartTLS extended response and, in | this request until it receives a StartTLS extended response and, in | |||
the case of a successful response, completes TLS negotiations. | the case of a successful response, completes TLS negotiations. | |||
Sequencing problems (particularly those detailed in Section 3.1.1 of | ||||
[AuthMeth] result in an operationsError being returned in the | ||||
resultCode. | ||||
If the server does not support TLS (whether by design or by current | ||||
configuration), it returns the protocolError resultCode as described | ||||
in Section 4.12. | ||||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
4.14.2. StartTLS Response | 4.14.2. StartTLS Response | |||
When a StartTLS request is made, servers supporting the operation | When a StartTLS request is made, servers supporting the operation | |||
MUST return a StartTLS response PDU to the requestor. The | MUST return a StartTLS response PDU to the requestor. The | |||
responseName, if present, is also "1.3.6.1.4.1.1466.20037". The | responseName, if present, is also "1.3.6.1.4.1.1466.20037". The | |||
responseValue is absent. | responseValue is absent. | |||
The server provides a resultCode field to either success or one of | If the server is willing and able to negotiate TLS, it returns a | |||
the other values outlined in Section 4.14.2.2. | success resultCode. Refer to Section 4 of [AuthMeth] for details. | |||
4.14.2.1. "Success" Response | ||||
If the StartTLS Response contains a resultCode of success, this | ||||
indicates that the server is willing and able to negotiate TLS. Refer | ||||
to Section 4 of [AuthMeth] for details. | ||||
4.14.2.2. Response other than "success" | ||||
If the ExtendedResponse contains a result code other than success, | ||||
this indicates that the server is unwilling or unable to negotiate | ||||
TLS. The following result codes have these meanings for this | ||||
operation: | ||||
- operationsError: operations sequencing incorrect; e.g. TLS is | ||||
already established. | ||||
- protocolError: TLS is not supported or incorrect PDU structure. | ||||
- unavailable: Some major problem with TLS, or the server is | ||||
shutting down. | ||||
The server MUST return operationsError if the client violates any of | ||||
the StartTLS extended operation sequencing requirements described in | ||||
Section 4 of [AuthMeth]. | ||||
If the server does not support TLS (whether by design or by current | ||||
configuration), it MUST return the protocolError resultCode. In this | ||||
event, the client may proceed with any LDAP operation, or it may | ||||
close the connection. | ||||
The server MUST return unavailable if it supports TLS but cannot | If the server is otherwise unwilling or unable to perform this | |||
install the TLS layer for some reason, e.g. the certificate server | operation, the server is to return an appropriate result code | |||
not responding, it cannot contact its TLS implementation, or if the | indicating the nature of the problem. For example, if the TLS | |||
server is in process of shutting down. The client may retry the | subsystem is not presently available, the server may return indicate | |||
StartTLS operation, or it may proceed with any other LDAP operation, | so by returning the unavailable resultCode. | |||
or it may close the connection. | ||||
4.14.3. Removal of the TLS Layer | 4.14.3. Removal of the TLS Layer | |||
Lightweight Directory Access Protocol Version 3 | ||||
Two forms of TLS layer removal -- graceful and abrupt -- are | Two forms of TLS layer removal -- graceful and abrupt -- are | |||
provided. These do not involve LDAP PDUs, but are preformed at the | provided. These do not involve LDAP PDUs, but are preformed at the | |||
underlying layers. | underlying layers. | |||
If the connection is closed, uncompleted 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 | |||
skipping to change at line 1980 | skipping to change at line 1966 | |||
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. | |||
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 | |||
Lightweight Directory Access Protocol Version 3 | ||||
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 and each bit 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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
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: | |||
+---------------+ | +---------------+ | |||
skipping to change at line 2033 | skipping to change at line 2019 | |||
+---------------+ | +---------------+ | |||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- OCTET STRING values are encoded in the primitive form only. | - OCTET STRING values are encoded in the primitive form only. | |||
- If the value of a BOOLEAN type is true, the encoding of the value | - If the value of a BOOLEAN type is true, the encoding of the value | |||
octet is set to hex "FF". | octet is set to hex "FF". | |||
- If a value of a type is its default value, it is absent. Only some | - If a value of a type is its default value, it is absent. Only some | |||
BOOLEAN and INTEGER types have default values in this protocol | BOOLEAN and INTEGER types have default values in this protocol | |||
definition. | definition. | |||
These restrictions are meant to ease the overhead of encoding and | These restrictions are meant to ease the overhead of encoding and | |||
skipping to change at line 2056 | skipping to change at line 2044 | |||
OCTET STRING values, such as attribute values, unless otherwise | OCTET STRING values, such as attribute values, unless otherwise | |||
stated. | stated. | |||
5.3. Transmission Control Protocol (TCP) | 5.3. Transmission Control Protocol (TCP) | |||
The encoded LDAPMessage PDUs are mapped directly onto the [TCP] | The encoded LDAPMessage PDUs are mapped directly onto the [TCP] | |||
bytestream using the BER-based encoding described in Section 5.2. It | bytestream using the BER-based encoding described in Section 5.2. It | |||
is recommended that server implementations running over the TCP | is recommended that server implementations running over the TCP | |||
provide a protocol listener on the Internet Assigned Numbers | provide a protocol listener on the Internet Assigned Numbers | |||
Authority (IANA)-assigned LDAP port, 389 [PortReg]. Servers may | Authority (IANA)-assigned LDAP port, 389 [PortReg]. Servers may | |||
Lightweight Directory Access Protocol Version 3 | ||||
instead provide a listener on a different port number. Clients MUST | instead provide a listener on a different port number. Clients MUST | |||
support contacting servers on any valid TCP port. | support contacting servers on any valid TCP port. | |||
6. Security Considerations | 6. Security Considerations | |||
This version of the protocol provides facilities for simple | This version of the protocol provides facilities for simple | |||
authentication using a cleartext password, as well as any [SASL] | authentication using a cleartext password, as well as any [SASL] | |||
mechanism. Installing SASL layers can provide integrity and other | mechanism. Installing SASL layers can provide integrity and other | |||
data security services. | data security services. | |||
skipping to change at line 2087 | skipping to change at line 2073 | |||
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 | |||
Lightweight Directory Access Protocol Version 3 | ||||
protected (such as by establishing protections at the transport | protected (such as by establishing protections at the transport | |||
layer). | layer). | |||
Server implementors should plan for the possibility of an identity in | Server implementors should plan for the possibility of (protocol or | |||
and association being deleted, renamed, or modified, and take | external) events which alter the information used to establish | |||
appropriate actions to prevent insecure side effects. Likewise, | security factors (e.g., credentials, authorization identities, access | |||
server implementors should plan for the possibility of an associated | controls) during the course of the LDAP exchange, and even during the | |||
identity's credentials becoming invalid, or an identity's privileges | performance of a particular operation, and should take steps to avoid | |||
being changed. The ways in which these issues are addressed are | insecure side effects of these changes. The ways in which these | |||
application and/or implementation specific. | issues are addressed are application and/or implementation specific. | |||
Implementations which cache attributes and entries obtained via LDAP | Implementations which cache attributes and entries obtained via LDAP | |||
MUST ensure that access controls are maintained if that information | MUST ensure that access controls are maintained if that information | |||
is to be provided to multiple clients, since servers may have access | is to be provided to multiple clients, since servers may have access | |||
control policies which prevent the return of entries or attributes in | control policies which prevent the return of entries or attributes in | |||
search results except to particular authenticated clients. For | search results except to particular authenticated clients. For | |||
example, caches could serve result information only to the client | example, caches could serve result information only to the client | |||
whose request caused it to be in the cache. | whose request caused it to be in the cache. | |||
Servers may return referrals or search result references which | Servers may return referrals or search result references which | |||
redirect clients to peer servers. It is possible for a rogue | redirect clients to peer servers. It is possible for a rogue | |||
application to inject such referrals into the data stream in an | application to inject such referrals into the data stream in an | |||
attempt to redirect a client to a rogue server. Clients are advised | attempt to redirect a client to a rogue server. Clients are advised | |||
to be aware of this, and possibly reject referrals when | to be aware of this, and possibly reject referrals when | |||
Lightweight Directory Access Protocol Version 3 | ||||
confidentiality measures are not in place. Clients are advised to | confidentiality measures are not in place. Clients are advised to | |||
reject referrals from the StartTLS operation. | reject referrals from the StartTLS operation. | |||
The matchedDN and diagnosticMessage fields, as well as some | The matchedDN and diagnosticMessage fields, as well as some | |||
resultCode values (e.g., attributeOrValueExists and | resultCode values (e.g., attributeOrValueExists and | |||
entryAlreadyExists), could disclose the presence the specific data in | entryAlreadyExists), could disclose the presence the specific data in | |||
the directory which is subject to access and other administrative | the directory which is subject to access and other administrative | |||
controls. Server implementations should restrict access to protected | controls. Server implementations should restrict access to protected | |||
information equally under both normal and error conditions. | information equally under both normal and error conditions. | |||
skipping to change at line 2142 | skipping to change at line 2129 | |||
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. RFC 2251 was a product of the IETF ASID Working Group. | Kille. RFC 2251 was a product of the IETF ASID Working Group. | |||
It is also based on RFC 2830 by Jeff Hodges, RL "Bob" Morgan, and | It is also based on RFC 2830 by Jeff Hodges, RL "Bob" Morgan, and | |||
Mark Wahl. RFC 2830 was a product of the IETF LDAPEXT Working Group. | Mark Wahl. RFC 2830 was a product of the IETF LDAPEXT Working Group. | |||
It is also based on RFC 3771 by Roger Harrison, and Kurt Zeilenga. | It is also based on RFC 3771 by Roger Harrison, and Kurt Zeilenga. | |||
RFC 3771 was an individual submission to the IETF. | RFC 3771 was an individual submission to the IETF. | |||
This document is a product of the LDAPBIS Working Group. Significant | Lightweight Directory Access Protocol Version 3 | |||
contributors of technical review and content include Kurt Zeilenga, | ||||
Steven Legg, and Hallvard Furuseth. | This document is a product of the IETF LDAPBIS Working Group. | |||
Significant contributors of technical review and content include Kurt | ||||
Zeilenga, Steven Legg, and Hallvard Furuseth. | ||||
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. | |||
Lightweight Directory Access Protocol Version 3 | ||||
[ASN.1] ITU-T Recommendation X.680 (07/2002) | ISO/IEC 8824-1:2002 | [ASN.1] ITU-T Recommendation X.680 (07/2002) | ISO/IEC 8824-1:2002 | |||
"Information Technology - Abstract Syntax Notation One | "Information Technology - Abstract Syntax Notation One | |||
(ASN.1): Specification of basic notation" | (ASN.1): Specification of basic notation" | |||
[AuthMeth] Harrison, R., "LDAP: Authentication Methods and Connection | [AuthMeth] Harrison, R., "LDAP: Authentication Methods and Connection | |||
Level Security Mechanisms", draft-ietf-ldapbis-authmeth- | Level Security Mechanisms", draft-ietf-ldapbis-authmeth- | |||
xx.txt, (a work in progress). | xx.txt, (a work in progress). | |||
[BER] ITU-T Rec. X.690 (07/2002) | ISO/IEC 8825-1:2002, | [BER] ITU-T Rec. X.690 (07/2002) | ISO/IEC 8825-1:2002, | |||
"Information technology - ASN.1 encoding rules: | "Information technology - ASN.1 encoding rules: | |||
skipping to change at line 2196 | skipping to change at line 2183 | |||
[Models] Zeilenga, K., "LDAP: Directory Information Models", draft- | [Models] Zeilenga, K., "LDAP: Directory Information Models", draft- | |||
ietf-ldapbis-models-xx.txt (a work in progress). | ietf-ldapbis-models-xx.txt (a work in progress). | |||
[Roadmap] Zeilenga, K., "LDAP: Technical Specification Road Map", | [Roadmap] Zeilenga, K., "LDAP: Technical Specification Road Map", | |||
draft-ietf-ldapbis-roadmap-xx.txt (a work in progress). | draft-ietf-ldapbis-roadmap-xx.txt (a work in progress). | |||
[SASL] Melnikov, A., "Simple Authentication and Security Layer", | [SASL] Melnikov, A., "Simple Authentication and Security Layer", | |||
draft-ietf-sasl-rfc2222bis-xx.txt (a work in progress). | draft-ietf-sasl-rfc2222bis-xx.txt (a work in progress). | |||
Lightweight Directory Access Protocol Version 3 | ||||
[SASLPrep] Zeilenga, K., "Stringprep profile for user names and | [SASLPrep] Zeilenga, K., "Stringprep profile for user names and | |||
passwords", draft-ietf-sasl-saslprep-xx.txt, (a work in | passwords", draft-ietf-sasl-saslprep-xx.txt, (a work in | |||
progress). | progress). | |||
[StringPrep] Hoffman P. and M. Blanchet, "Preparation of | [StringPrep] Hoffman P. and M. Blanchet, "Preparation of | |||
Internationalized Strings ('stringprep')", draft-hoffman- | Internationalized Strings ('stringprep')", draft-hoffman- | |||
rfc3454bis-xx.txt, a work in progress. | rfc3454bis-xx.txt, a work in progress. | |||
Lightweight Directory Access Protocol Version 3 | ||||
[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 | |||
progress). | progress). | |||
[TCP] Postel, J., "Transmission Control Protocol", STD7 and RFC | [TCP] Postel, J., "Transmission Control Protocol", STD7 and RFC | |||
793, September 1981 | 793, September 1981 | |||
[TLS] Dierks, T. and C. Allen. "The TLS Protocol Version 1.1", | [TLS] Dierks, T. and C. Allen. "The TLS Protocol Version 1.1", | |||
draft-ietf-tls-rfc2246-bis-xx.txt, a work in progress. | draft-ietf-tls-rfc2246-bis-xx.txt, a work in progress. | |||
skipping to change at line 2249 | skipping to change at line 2236 | |||
9. Informative References | 9. Informative References | |||
[Glossary] The Unicode Consortium, "Unicode Glossary", | [Glossary] The Unicode Consortium, "Unicode Glossary", | |||
<http://www.unicode.org/glossary/>. | <http://www.unicode.org/glossary/>. | |||
[CharModel] Whistler, K. and M. Davis, "Unicode Technical Report | [CharModel] Whistler, K. and M. Davis, "Unicode Technical Report | |||
#17, Character Encoding Model", UTR17, | #17, Character Encoding Model", UTR17, | |||
<http://www.unicode.org/unicode/reports/tr17/>, August | <http://www.unicode.org/unicode/reports/tr17/>, August | |||
2000. | 2000. | |||
Lightweight Directory Access Protocol Version 3 | ||||
[PROTOS-LDAP] University of Oulu, "PROTOS Test-Suite: c06-ldapv3" | [PROTOS-LDAP] University of Oulu, "PROTOS Test-Suite: c06-ldapv3" | |||
<http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/l | <http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/l | |||
dapv3/> | dapv3/> | |||
[PortReg] IANA, "Port Numbers", | [PortReg] IANA, "Port Numbers", | |||
http://www.iana.org/assignments/port-numbers | http://www.iana.org/assignments/port-numbers | |||
10. IANA Considerations | 10. IANA Considerations | |||
Lightweight Directory Access Protocol Version 3 | ||||
It is requested that the Internet Assigned Numbers Authority (IANA) | It is requested that the Internet Assigned Numbers Authority (IANA) | |||
update the LDAP result code registry to indicate that this document | update the LDAP result code registry to indicate that this document | |||
provides the definitive technical specification for result codes 0- | provides the definitive technical specification for result codes 0- | |||
36, 48-54, 64-70, 80-90. | 36, 48-54, 64-70, 80-90. | |||
It is requested that the IANA update the LDAP Protocol Mechanism | It is requested that the IANA update the LDAP Protocol Mechanism | |||
registry to indicate that this document and [AuthMeth] provides the | registry to indicate that this document and [AuthMeth] provides the | |||
definitive technical specification for the StartTLS | definitive technical specification for the StartTLS | |||
(1.3.6.1.4.1.1466.20037) extended operation. | (1.3.6.1.4.1.1466.20037) extended operation. | |||
skipping to change at line 2702 | skipping to change at line 2695 | |||
timeLimit INTEGER (0 .. maxInt), | timeLimit INTEGER (0 .. maxInt), | |||
typesOnly BOOLEAN, | typesOnly BOOLEAN, | |||
filter Filter, | filter Filter, | |||
attributes AttributeSelection } | attributes AttributeSelection } | |||
AttributeSelection ::= SEQUENCE OF selector LDAPString | AttributeSelection ::= SEQUENCE OF selector LDAPString | |||
-- The LDAPString is constrained to | -- The LDAPString is constrained to | |||
-- <attributeSelection> in Section 4.5.1 | -- <attributeSelection> in Section 4.5.1 | |||
Filter ::= CHOICE { | Filter ::= CHOICE { | |||
and [0] SET SIZE (1..MAX) OF filter Filter, | and [0] SET OF filter Filter, | |||
or [1] SET SIZE (1..MAX) OF filter Filter, | or [1] SET OF filter Filter, | |||
not [2] Filter, | not [2] Filter, | |||
equalityMatch [3] AttributeValueAssertion, | equalityMatch [3] AttributeValueAssertion, | |||
substrings [4] SubstringFilter, | substrings [4] SubstringFilter, | |||
greaterOrEqual [5] AttributeValueAssertion, | greaterOrEqual [5] AttributeValueAssertion, | |||
lessOrEqual [6] AttributeValueAssertion, | lessOrEqual [6] AttributeValueAssertion, | |||
present [7] AttributeDescription, | present [7] AttributeDescription, | |||
approxMatch [8] AttributeValueAssertion, | approxMatch [8] AttributeValueAssertion, | |||
extensibleMatch [9] MatchingRuleAssertion } | extensibleMatch [9] MatchingRuleAssertion } | |||
SubstringFilter ::= SEQUENCE { | SubstringFilter ::= SEQUENCE { | |||
skipping to change at line 2855 | skipping to change at line 2851 | |||
Lightweight Directory Access Protocol Version 3 | Lightweight Directory Access Protocol Version 3 | |||
- Clarified when it is and isn't appropriate to return an already | - Clarified when it is and isn't appropriate to return an already | |||
used message id. RFC 2251 accidentally imposed synchronous server | used message id. RFC 2251 accidentally imposed synchronous server | |||
behavior in its wording of this. | behavior in its wording of this. | |||
C.1.6 Section 4.1.2 | C.1.6 Section 4.1.2 | |||
- Stated that LDAPOID is constrained to <numericoid> from [Models]. | - Stated that LDAPOID is constrained to <numericoid> from [Models]. | |||
C.1.7 Section 4.1.5.1 | C.1.7 Section 4.1.5.1 and others | |||
- Removed the Binary Option from the specification. There are | - Removed the Binary Option from the specification. There are | |||
numerous interoperability problems associated with this method of | numerous interoperability problems associated with this method of | |||
alternate attribute type encoding. Work to specify a suitable | alternate attribute type encoding. Work to specify a suitable | |||
replacement is ongoing. | replacement is ongoing. | |||
C.1.8 Section 4.1.6 | C.1.8 Section 4.1.8 | |||
- Removed references to the "binary" encoding as it has been removed | ||||
from the specification. | ||||
C.1.9 Section 4.1.7 | ||||
- Removed references to the "binary" encoding as it has been removed | ||||
from the specification. | ||||
C.1.10 Section 4.1.8 | ||||
- Combined the definitions of PartialAttribute and Attribute here, | - Combined the definitions of PartialAttribute and Attribute here, | |||
and defined Attribute in terms of PartialAttribute. | and defined Attribute in terms of PartialAttribute. | |||
C.1.11 Section 4.1.10 | C.1.9 Section 4.1.10 | |||
- Renamed "errorMessage" to "diagnosticMessage" as it is allowed to | - Renamed "errorMessage" to "diagnosticMessage" as it is allowed to | |||
be sent for non-error results. | be sent for non-error results. | |||
- Moved some language into Appendix A, and refer the reader there. | - Moved some language into Appendix A, and refer the reader there. | |||
- Allowed matchedDN to be present for other result codes than those | - Allowed matchedDN to be present for other result codes than those | |||
listed in RFC 2251. | listed in RFC 2251. | |||
C.1.12 Section 4.1.11 | C.1.10 Section 4.1.11 | |||
- Defined referrals in terms of URIs rather than URLs. | - Defined referrals in terms of URIs rather than URLs. | |||
- Removed the requirement that all referral URIs MUST be equally | - Removed the requirement that all referral URIs MUST be equally | |||
capable of progressing the operation. The statement was ambiguous | capable of progressing the operation. The statement was ambiguous | |||
and provided no instructions on how to carry it out. | and provided no instructions on how to carry it out. | |||
- Added the requirement that clients MUST NOT loop between servers. | - Added the requirement that clients MUST NOT loop between servers. | |||
- Clarified the instructions for using LDAPURLs in referrals, and in | - Clarified the instructions for using LDAPURLs in referrals, and in | |||
doing so added a recommendation that the scope part be present. | doing so added a recommendation that the scope part be present. | |||
Lightweight Directory Access Protocol Version 3 | C.1.11 Section 4.1.12 | |||
C.1.13 Section 4.1.12 | ||||
- Specified how control values defined in terms of ASN.1 are to be | - Specified how control values defined in terms of ASN.1 are to be | |||
encoded. | encoded. | |||
- Noted that the criticality field is only applied to request | - Noted that the criticality field is only applied to request | |||
messages (except unbindRequest), and must be ignored when present | messages (except unbindRequest), and must be ignored when present | |||
on response messages and unbindRequest. | on response messages and unbindRequest. | |||
- Added language regarding combinations of controls and the ordering | - Added language regarding combinations of controls and the ordering | |||
of controls on a message. | of controls on a message. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- Specified that when the semantics of the combination of controls | - Specified that when the semantics of the combination of controls | |||
is undefined or unknown, it results in a protocolError. | is undefined or unknown, it results in a protocolError. | |||
- Changed "The server MUST be prepared" to "Implementations MUST be | - Changed "The server MUST be prepared" to "Implementations MUST be | |||
prepared" in the eighth paragraph to reflect that both client and | prepared" in the eighth paragraph to reflect that both client and | |||
server implementations must be able to handle this (as both parse | server implementations must be able to handle this (as both parse | |||
controls). | controls). | |||
C.1.14 Section 4.2 | C.1.12 Section 4.2 | |||
- Mandated that servers return protocolError when the version is not | - Mandated that servers return protocolError when the version is not | |||
supported. | supported. | |||
- Clarified behavior when the simple authentication is used, the | - Clarified behavior when the simple authentication is used, the | |||
name is empty and the password is non-empty. | name is empty and the password is non-empty. | |||
- Required servers to not dereference aliases for bind. This was | - Required servers to not dereference aliases for bind. This was | |||
added for consistency with other operations and to help ensure | added for consistency with other operations and to help ensure | |||
data consistency. | data consistency. | |||
- Required that textual passwords be transferred as UTF-8 encoded | - Required that textual passwords be transferred as UTF-8 encoded | |||
Unicode, and added recommendations on string preparation. This was | Unicode, and added recommendations on string preparation. This was | |||
to help ensure interoperability of passwords being sent from | to help ensure interoperability of passwords being sent from | |||
different clients. | different clients. | |||
C.1.15 Section 4.2.1 | C.1.13 Section 4.2.1 | |||
- This section was largely reorganized for readability and language | - This section was largely reorganized for readability and language | |||
was added to clarify the authentication state of failed and | was added to clarify the authentication state of failed and | |||
abandoned bind operations. | abandoned bind operations. | |||
- Removed: "If a SASL transfer encryption or integrity mechanism has | - Removed: "If a SASL transfer encryption or integrity mechanism has | |||
been negotiated, that mechanism does not support the changing of | been negotiated, that mechanism does not support the changing of | |||
credentials from one identity to another, then the client MUST | credentials from one identity to another, then the client MUST | |||
instead establish a new connection." | instead establish a new connection." | |||
Each SASL negotiation is, generally, independent of other SASL | Each SASL negotiation is, generally, independent of other SASL | |||
negotiations. If there were dependencies between multiple | negotiations. If there were dependencies between multiple | |||
negotiations of a particular mechanism, the mechanism technical | negotiations of a particular mechanism, the mechanism technical | |||
specification should detail how applications are to deal with | specification should detail how applications are to deal with | |||
them. LDAP should not require any special handling. And if an LDAP | them. LDAP should not require any special handling. And if an LDAP | |||
client had used such a mechanism, it would have the option of | client had used such a mechanism, it would have the option of | |||
using another mechanism. | using another mechanism. | |||
- Dropped MUST imperative in paragraph 3 to align with [Keywords]. | - Dropped MUST imperative in paragraph 3 to align with [Keywords]. | |||
- Mandated that clients not send non-bind operations while a bind is | - Mandated that clients not send non-bind operations while a bind is | |||
in progress, and suggested that servers not process them if they | in progress, and suggested that servers not process them if they | |||
Lightweight Directory Access Protocol Version 3 | ||||
are received. This is needed to ensure proper sequencing of the | are received. This is needed to ensure proper sequencing of the | |||
bind in relationship to other operations. | bind in relationship to other operations. | |||
C.1.16 Section 4.2.3 | C.1.14 Section 4.2.3 | |||
- Moved most error-related text to Appendix A, and added text | - Moved most error-related text to Appendix A, and added text | |||
regarding certain errors used in conjunction with the bind | regarding certain errors used in conjunction with the bind | |||
operation. | operation. | |||
- Prohibited the server from specifying serverSaslCreds when not | - Prohibited the server from specifying serverSaslCreds when not | |||
appropriate. | appropriate. | |||
C.1.17 Section 4.3 | Lightweight Directory Access Protocol Version 3 | |||
C.1.15 Section 4.3 | ||||
- Required both peers to cease transmission and close the LDAP | - Required both peers to cease transmission and close the LDAP | |||
exchange for the unbind operation. | exchange for the unbind operation. | |||
C.1.18 Section 4.4 | C.1.16 Section 4.4 | |||
- Added instructions for future specifications of Unsolicited | - Added instructions for future specifications of Unsolicited | |||
Notifications. | Notifications. | |||
C.1.19 Section 4.5.1 | C.1.17 Section 4.5.1 | |||
- SearchRequest attributes is now defined as an AttributeSelection | - SearchRequest attributes is now defined as an AttributeSelection | |||
type rather than AttributeDescriptionList, and an ABNF is | type rather than AttributeDescriptionList, and an ABNF is | |||
provided. | provided. | |||
- SearchRequest attributes may contain duplicate attribute | - SearchRequest attributes may contain duplicate attribute | |||
descriptions. This was previously prohibited. Now servers are | descriptions. This was previously prohibited. Now servers are | |||
instructed to ignore subsequent names when they are duplicated. | instructed to ignore subsequent names when they are duplicated. | |||
This was relaxed in order to allow different short names and also | This was relaxed in order to allow different short names and also | |||
OIDs to be requested for an attribute. | OIDs to be requested for an attribute. | |||
- The Filter choices 'and' and 'or', and the SubstringFilter | - The Filter choice SubstringFilter substrings type is now defined | |||
substrings types are now defined with a lower bound of 1. | with a lower bound of 1. | |||
- The SubstringFilter substrings 'initial, 'any', and 'final' types | - The SubstringFilter substrings 'initial, 'any', and 'final' types | |||
are now AssertionValue rather than LDAPString. Also, added | are now AssertionValue rather than LDAPString. Also, added | |||
imperatives stating that 'initial' (if present) must be listed | imperatives stating that 'initial' (if present) must be listed | |||
first, and 'final' (if present) must be listed last. | first, and 'final' (if present) must be listed last. | |||
- Clarified the semantics of the derefAliases choices. | - Clarified the semantics of the derefAliases choices. | |||
- Added instructions for equalityMatch, substrings, greaterOrEqual, | - Added instructions for equalityMatch, substrings, greaterOrEqual, | |||
lessOrEqual, and approxMatch. | lessOrEqual, and approxMatch. | |||
C.1.20 Section 4.5.2 | C.1.18 Section 4.5.2 | |||
- Recommended that servers not use attribute short names when it | - Recommended that servers not use attribute short names when it | |||
knows they are ambiguous or may cause interoperability problems. | knows they are ambiguous or may cause interoperability problems. | |||
- Removed all mention of ExtendedResponse due to lack of | - Removed all mention of ExtendedResponse due to lack of | |||
implementation. | implementation. | |||
Lightweight Directory Access Protocol Version 3 | C.1.19 Section 4.5.3 | |||
C.1.21 Section 4.5.3 | ||||
- Made changes similar to those made to Section 4.1.11. | - Made changes similar to those made to Section 4.1.11. | |||
C.1.22 Section 4.5.3.1 | C.1.20 Section 4.5.3.1 | |||
- Fixed examples to adhere to changes made to Section 4.5.3. | - Fixed examples to adhere to changes made to Section 4.5.3. | |||
C.1.23 Section 4.6 | C.1.21 Section 4.6 | |||
Lightweight Directory Access Protocol Version 3 | ||||
- Removed restriction that required an EQUALITY matching rule in | - Removed restriction that required an EQUALITY matching rule in | |||
order to perform value delete modifications. It is sufficiently | order to perform value delete modifications. It is sufficiently | |||
documented that in absence of an equality matching rule, octet | documented that in absence of an equality matching rule, octet | |||
equality is used. | equality is used. | |||
- Replaced AttributeTypeAndValues with Attribute as they are | - Replaced AttributeTypeAndValues with Attribute as they are | |||
equivalent. | equivalent. | |||
- Clarified what type of modification changes might temporarily | - Clarified what type of modification changes might temporarily | |||
violate schema. | violate schema. | |||
C.1.24 Section 4.7 | C.1.22 Section 4.7 | |||
- Aligned Add operation with X.511 in that the attributes of the RDN | - Aligned Add operation with X.511 in that the attributes of the RDN | |||
are used in conjunction with the listed attributes to create the | are used in conjunction with the listed attributes to create the | |||
entry. Previously, Add required that the distinguished values be | entry. Previously, Add required that the distinguished values be | |||
present in the listed attributes. | present in the listed attributes. | |||
C.1.25 Section 4.9 | C.1.23 Section 4.9 | |||
- Required servers to not dereference aliases for modify DN. This | - Required servers to not dereference aliases for modify DN. This | |||
was added for consistency with other operations and to help ensure | was added for consistency with other operations and to help ensure | |||
data consistency. | data consistency. | |||
- Allow modify DN to fail when moving between naming contexts. | - Allow modify DN to fail when moving between naming contexts. | |||
- Specified what happens when the attributes of the newrdn are no | - Specified what happens when the attributes of the newrdn are no | |||
present on the entry. | present on the entry. | |||
C.1.26 Section 4.10 | C.1.24 Section 4.10 | |||
- Clarified that compareFalse means that the compare took place and | - Clarified that compareFalse means that the compare took place and | |||
the result is false. There was confusion which lead people to | the result is false. There was confusion which lead people to | |||
believe that an Undefined match resulted in compareFalse. | believe that an Undefined match resulted in compareFalse. | |||
- Required servers to not dereference aliases for compare. This was | - Required servers to not dereference aliases for compare. This was | |||
added for consistency with other operations and to help ensure | added for consistency with other operations and to help ensure | |||
data consistency. | data consistency. | |||
C.1.27 Section 4.11 | C.1.25 Section 4.11 | |||
- Explained that since abandon returns no response, clients should | - Explained that since abandon returns no response, clients should | |||
not use it if they need to know the outcome. | not use it if they need to know the outcome. | |||
Lightweight Directory Access Protocol Version 3 | ||||
- Specified that Abandon and Unbind cannot be abandoned. | - Specified that Abandon and Unbind cannot be abandoned. | |||
C.1.28 Section 4.12 | C.1.26 Section 4.12 | |||
- Specified how values of extended operations defined in terms of | - Specified how values of extended operations defined in terms of | |||
ASN.1 are to be encoded. | ASN.1 are to be encoded. | |||
- Added instructions on what extended operation specifications | - Added instructions on what extended operation specifications | |||
consist of. | consist of. | |||
- Added a recommendation that servers advertise supported extended | - Added a recommendation that servers advertise supported extended | |||
operations. | operations. | |||
C.1.29 Section 5.2 | Lightweight Directory Access Protocol Version 3 | |||
C.1.27 Section 5.2 | ||||
- Moved referral-specific instructions into referral-related | - Moved referral-specific instructions into referral-related | |||
sections. | sections. | |||
C.1.30 Section 7 | C.1.28 Section 7 | |||
- Reworded notes regarding SASL not protecting certain aspects of | - Reworded notes regarding SASL not protecting certain aspects of | |||
the LDAP bind PDU. | the LDAP bind PDU. | |||
- Noted that Servers are encouraged to prevent directory | - Noted that Servers are encouraged to prevent directory | |||
modifications by clients that have authenticated anonymously | modifications by clients that have authenticated anonymously | |||
[AuthMeth]. | [AuthMeth]. | |||
- Added a note regarding the scenario where an identity is changed | - Added a note regarding the scenario where an identity is changed | |||
(deleted, privileges or credentials modified, etc.). | (deleted, privileges or credentials modified, etc.). | |||
- Warned against following referrals that may have been injected in | - Warned against following referrals that may have been injected in | |||
the data stream. | the data stream. | |||
- Noted that servers should protect information equally, whether in | - Noted that servers should protect information equally, whether in | |||
an error condition or not, and mentioned specifically; matchedDN, | an error condition or not, and mentioned specifically; matchedDN, | |||
diagnosticMessage, and resultCodes. | diagnosticMessage, and resultCodes. | |||
- Added a note regarding malformed and long encodings. | - Added a note regarding malformed and long encodings. | |||
C.1.31 Appendix A | C.1.29 Appendix A | |||
- Added "EXTESIBILITY IMPLIED" to ASN.1 definition. | - Added "EXTENSIBILITY IMPLIED" to ASN.1 definition. | |||
- Removed AttributeType. It is not used. | - Removed AttributeType. It is not used. | |||
C.2 Changes made to RFC 2830: | C.2 Changes made to RFC 2830: | |||
This section summarizes the substantive changes made to Sections of | This section summarizes the substantive changes made to Sections of | |||
RFC 2830. Readers should consult [AuthMeth] for summaries of changes | RFC 2830. Readers should consult [AuthMeth] for summaries of changes | |||
to other sections. | to other sections. | |||
C.2.1 Section 2.3 | C.2.1 Section 2.3 | |||
- Removed wording indicating that referrals can be returned from | - Removed wording indicating that referrals can be returned from | |||
StartTLS | StartTLS | |||
Lightweight Directory Access Protocol Version 3 | ||||
- Removed requirement that only a narrow set of result codes can be | - Removed requirement that only a narrow set of result codes can be | |||
returned. Some result codes are required in certain scenarios, but | returned. Some result codes are required in certain scenarios, but | |||
any other may be returned if appropriate. | any other may be returned if appropriate. | |||
C.2.1 Section 4.13.3.1 | C.2.1 Section 4.13.3.1 | |||
- Reworded most of this section and added the requirement that after | - Reworded most of this section and added the requirement that after | |||
the TLS connection has been closed, the server MUST NOT send | the TLS connection has been closed, the server MUST NOT send | |||
responses to any request message received before the TLS closure. | responses to any request message received before the TLS closure. | |||
C.3 Changes made to RFC 3771: | C.3 Changes made to RFC 3771: | |||
Lightweight Directory Access Protocol Version 3 | ||||
- 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 Statement | Intellectual Property Statement | |||
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 Rights 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; nor does it represent that it has | might or might not be available; nor does it represent that it has | |||
made any independent effort to identify any such rights. Information | made any independent effort to identify any such rights. Information | |||
on the IETF's procedures with respect to rights in IETF Documents can | on the procedures with respect to rights in RFC documents can be | |||
be found in BCP 78 and BCP 79. | found in BCP 78 and BCP 79. | |||
Copies of IPR disclosures made to the IETF Secretariat and any | Copies of IPR disclosures made to the IETF Secretariat and any | |||
assurances of licenses to be made available, or the result of an | assurances of licenses to be made available, or the result of an | |||
attempt made to obtain a general license or permission for the use of | attempt made to obtain a general license or permission for the use of | |||
such proprietary rights by implementers or users of this | such proprietary rights by implementers or users of this | |||
specification can be obtained from the IETF on-line IPR repository at | specification can be obtained from the IETF on-line IPR repository at | |||
http://www.ietf.org/ipr. | <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 that may cover technology that may be required to implement | rights that may cover technology that may be required to implement | |||
this standard. Please address the information to the IETF at ietf- | this standard. Please address the information to the IETF at ietf- | |||
ipr@ietf.org." | ipr@ietf.org. | |||
Copyright Statement | ||||
This document is subject to the rights, licenses and restrictions | ||||
contained in BCP 78, and except as set forth therein, the authors | ||||
retain all their rights. | ||||
Disclaimer of Validity | Disclaimer of Validity | |||
This document and the information contained herein are provided on an | This document and the information contained herein are provided on an | |||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | |||
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | |||
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | |||
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | |||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |||
Copyright Statement | ||||
Copyright (C) The Internet Society (2004). This document is subject | ||||
to the rights, licenses and restrictions contained in BCP 78, and | ||||
except as set forth therein, the authors retain all their rights. | ||||
Acknowledgement | ||||
Funding for the RFC Editor function is currently provided by the | ||||
Internet Society. | ||||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |