3 Internet-Draft Editor: J. Sermersheim
4 Intended Category: Standard Track Novell, Inc
5 Document: draft-ietf-ldapbis-protocol-32.txt Oct 2005
6 Obsoletes: RFCs 2251, 2830, 3771
14 By submitting this Internet-Draft, each
15 author represents that any applicable patent or other IPR claims of
16 which he or she is aware have been or will be disclosed, and any of
17 which he or she becomes aware will be disclosed, in accordance with
20 Internet-Drafts are working documents of the Internet Engineering
21 Task Force (IETF), its areas, and its working groups. Note that other
22 groups may also distribute working documents as Internet-Drafts.
24 Internet-Drafts are draft documents valid for a maximum of six months
25 and may be updated, replaced, or obsoleted by other documents at any
26 time. It is inappropriate to use Internet-Drafts as reference
27 material or to cite them other than as "work in progress".
29 The list of current Internet-Drafts can be accessed at
30 http://www.ietf.org/ietf/1id-abstracts.txt.
32 The list of Internet-Draft Shadow Directories can be accessed at
33 http://www.ietf.org/shadow.html.
35 This Internet-Draft will expire in February 2005.
37 Technical discussion of this document will take place on the IETF
38 LDAP Revision Working Group (LDAPbis) mailing list <ietf-
39 ldapbis@openldap.org>. Please send editorial comments directly to the
40 editor <jimse@novell.com>.
45 This document describes the protocol elements, along with their
46 semantics and encodings, of the Lightweight Directory Access Protocol
47 (LDAP). LDAP provides access to distributed directory services that
48 act in accordance with X.500 data and service models. These protocol
49 elements are based on those described in the X.500 Directory Access
57 Sermersheim Internet-Draft - Expires April 2006 Page 1
\f
58 Lightweight Directory Access Protocol Version 3
60 1. Introduction....................................................3
61 1.1. Relationship to Other LDAP Specifications.....................3
62 2. Conventions.....................................................3
63 3. Protocol Model..................................................4
64 3.1 Operation and LDAP Message Layer Relationship..................5
65 4. Elements of Protocol............................................5
66 4.1. Common Elements...............................................5
67 4.1.1. Message Envelope............................................5
68 4.1.2. String Types................................................7
69 4.1.3. Distinguished Name and Relative Distinguished Name..........7
70 4.1.4. Attribute Descriptions......................................8
71 4.1.5. Attribute Value.............................................8
72 4.1.6. Attribute Value Assertion...................................8
73 4.1.7. Attribute and PartialAttribute..............................9
74 4.1.8. Matching Rule Identifier....................................9
75 4.1.9. Result Message..............................................9
76 4.1.10. Referral..................................................11
77 4.1.11. Controls..................................................13
78 4.2. Bind Operation...............................................14
79 4.3. Unbind Operation.............................................17
80 4.4. Unsolicited Notification.....................................17
81 4.5. Search Operation.............................................18
82 4.6. Modify Operation.............................................29
83 4.7. Add Operation................................................31
84 4.8. Delete Operation.............................................31
85 4.9. Modify DN Operation..........................................32
86 4.10. Compare Operation...........................................33
87 4.11. Abandon Operation...........................................34
88 4.12. Extended Operation..........................................35
89 4.13. IntermediateResponse Message................................36
90 4.14. StartTLS Operation..........................................37
91 5. Protocol Encoding, Connection, and Transfer....................39
92 5.1. Protocol Encoding............................................39
93 5.2. Transmission Control Protocol (TCP)..........................40
94 5.3. Termination of the LDAP session..............................40
95 6. Security Considerations........................................40
96 7. Acknowledgements...............................................42
97 8. Normative References...........................................42
98 9. Informative References.........................................44
99 10. IANA Considerations...........................................44
100 11. Editor's Address..............................................45
101 Appendix A - LDAP Result Codes....................................46
102 A.1 Non-Error Result Codes........................................46
103 A.2 Result Codes..................................................46
104 Appendix B - Complete ASN.1 Definition............................51
105 Appendix C - Changes..............................................57
106 C.1 Changes made to RFC 2251:.....................................57
107 C.2 Changes made to RFC 2830:.....................................62
108 C.3 Changes made to RFC 3771:.....................................63
115 Sermersheim Internet-Draft - Expires April 2006 Page 2
\f
116 Lightweight Directory Access Protocol Version 3
120 The Directory is "a collection of open systems cooperating to provide
121 directory services" [X.500]. A directory user, which may be a human
122 or other entity, accesses the Directory through a client (or
123 Directory User Agent (DUA)). The client, on behalf of the directory
124 user, interacts with one or more servers (or Directory System Agents
125 (DSA)). Clients interact with servers using a directory access
128 This document details the protocol elements of the Lightweight
129 Directory Access Protocol (LDAP), along with their semantics.
130 Following the description of protocol elements, it describes the way
131 in which the protocol elements are encoded and transferred.
134 1.1. Relationship to Other LDAP Specifications
136 This document is an integral part of the LDAP Technical Specification
137 [Roadmap] which obsoletes the previously defined LDAP technical
138 specification, RFC 3377, in its entirety.
140 This document, together with [Roadmap], [AuthMeth], and [Models],
141 obsoletes RFC 2251 in its entirety. Section 3.3 is obsoleted by
142 [Roadmap]. Sections 4.2.1 (portions), and 4.2.2 are obsoleted by
143 [AuthMeth]. Sections 3.2, 3.4, 4.1.3 (last paragraph), 4.1.4, 4.1.5,
144 4.1.5.1, 4.1.9 (last paragraph), 5.1, 6.1, and 6.2 (last paragraph)
145 are obsoleted by [Models]. The remainder of RFC 2251 is obsoleted by
146 this document. Appendix C.1 summarizes substantive changes in the
149 This document obsoletes RFC 2830, Sections 2 and 4. The remainder of
150 RFC 2830 is obsoleted by [AuthMeth]. Appendix C.2 summarizes
151 substantive changes to the remaining sections.
153 This document also obsoletes RFC 3771 in entirety.
158 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
159 "SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are
160 to be interpreted as described in [Keyword].
162 Character names in this document use the notation for code points and
163 names from the Unicode Standard [Unicode]. For example, the letter
164 "a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>.
166 Note: a glossary of terms used in Unicode can be found in [Glossary].
167 Information on the Unicode character encoding model can be found in
173 Sermersheim Internet-Draft - Expires April 2006 Page 3
\f
174 Lightweight Directory Access Protocol Version 3
176 The term "transport connection" refers to the underlying transport
177 services used to carry the protocol exchange, as well as associations
178 established by these services.
180 The term "TLS layer" refers to TLS services used in providing
181 security services, as well as associations established by these
184 The term "SASL layer" refers to SASL services used in providing
185 security services, as well as associations established by these
188 The term "LDAP message layer" refers to the LDAP Message Protocol
189 Data Unit (PDU) services used in providing directory services, as
190 well as associations established by these services.
192 The term "LDAP session" refers to combined services (transport
193 connection, TLS layer, SASL layer, LDAP message layer) and their
196 See the table in Section 5 for an illustration of these four terms.
201 The general model adopted by this protocol is one of clients
202 performing protocol operations against servers. In this model, a
203 client transmits a protocol request describing the operation to be
204 performed to a server. The server is then responsible for performing
205 the necessary operation(s) in the Directory. Upon completion of an
206 operation, the server typically returns a response containing
207 appropriate data to the requesting client.
209 Protocol operations are generally independent of one another. Each
210 operation is processed as an atomic action, leaving the directory in
213 Although servers are required to return responses whenever such
214 responses are defined in the protocol, there is no requirement for
215 synchronous behavior on the part of either clients or servers.
216 Requests and responses for multiple operations generally may be
217 exchanged between a client and server in any order. If required,
218 synchronous behavior may be controlled by client applications.
220 The core protocol operations defined in this document can be mapped
221 to a subset of the X.500 (1993) Directory Abstract Service [X.511].
222 However there is not a one-to-one mapping between LDAP operations and
223 X.500 Directory Access Protocol (DAP) operations. Server
224 implementations acting as a gateway to X.500 directories may need to
225 make multiple DAP requests to service a single LDAP request.
231 Sermersheim Internet-Draft - Expires April 2006 Page 4
\f
232 Lightweight Directory Access Protocol Version 3
235 3.1. Operation and LDAP Message Layer Relationship
237 Protocol operations are exchanged at the LDAP message layer. When the
238 transport connection is closed, any uncompleted operations at the
239 LDAP message layer, when possible, are abandoned, and when not
240 possible, are completed without transmission of the response. Also,
241 when the transport connection is closed, the client MUST NOT assume
242 that any uncompleted update operations have succeeded or failed.
245 4. Elements of Protocol
247 The protocol is described using Abstract Syntax Notation One
248 ([ASN.1]), and is transferred using a subset of ASN.1 Basic Encoding
249 Rules ([BER]). Section 5 specifies how the protocol elements are
250 encoded and transferred.
252 In order to support future extensions to this protocol, extensibility
253 is implied where it is allowed per ASN.1 (i.e. sequence, set, choice,
254 and enumerated types are extensible). In addition, ellipses (...)
255 have been supplied in ASN.1 types that are explicitly extensible as
256 discussed in [LDAPIANA]. Because of the implied extensibility,
257 clients and servers MUST (unless otherwise specified) ignore trailing
258 SEQUENCE components whose tags they do not recognize.
260 Changes to the protocol other than through the extension mechanisms
261 described here require a different version number. A client indicates
262 the version it is using as part of the BindRequest, described in
263 Section 4.2. If a client has not sent a Bind, the server MUST assume
264 the client is using version 3 or later.
266 Clients may attempt to determine the protocol versions a server
267 supports by reading the 'supportedLDAPVersion' attribute from the
268 root DSE (DSA-Specific Entry) [Models].
273 This section describes the LDAPMessage envelope Protocol Data Unit
274 (PDU) format, as well as data type definitions, which are used in the
278 4.1.1. Message Envelope
280 For the purposes of protocol exchanges, all protocol operations are
281 encapsulated in a common envelope, the LDAPMessage, which is defined
289 Sermersheim Internet-Draft - Expires April 2006 Page 5
\f
290 Lightweight Directory Access Protocol Version 3
292 LDAPMessage ::= SEQUENCE {
295 bindRequest BindRequest,
296 bindResponse BindResponse,
297 unbindRequest UnbindRequest,
298 searchRequest SearchRequest,
299 searchResEntry SearchResultEntry,
300 searchResDone SearchResultDone,
301 searchResRef SearchResultReference,
302 modifyRequest ModifyRequest,
303 modifyResponse ModifyResponse,
304 addRequest AddRequest,
305 addResponse AddResponse,
306 delRequest DelRequest,
307 delResponse DelResponse,
308 modDNRequest ModifyDNRequest,
309 modDNResponse ModifyDNResponse,
310 compareRequest CompareRequest,
311 compareResponse CompareResponse,
312 abandonRequest AbandonRequest,
313 extendedReq ExtendedRequest,
314 extendedResp ExtendedResponse,
316 intermediateResponse IntermediateResponse },
317 controls [0] Controls OPTIONAL }
319 MessageID ::= INTEGER (0 .. maxInt)
321 maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) --
323 The ASN.1 type Controls is defined in Section 4.1.11.
325 The function of the LDAPMessage is to provide an envelope containing
326 common fields required in all protocol exchanges. At this time the
327 only common fields are the messageID and the controls.
329 If the server receives an LDAPMessage from the client in which the
330 LDAPMessage SEQUENCE tag cannot be recognized, the messageID cannot
331 be parsed, the tag of the protocolOp is not recognized as a request,
332 or the encoding structures or lengths of data fields are found to be
333 incorrect, then the server SHOULD return the Notice of Disconnection
334 described in Section 4.4.1, with the resultCode set to protocolError,
335 and MUST immediately terminate the LDAP session as described in
338 In other cases where the client or server cannot parse an LDAP PDU,
339 it SHOULD abruptly terminate the LDAP session (Section 5.3) where
340 further communication (including providing notice) would be
341 pernicious. Otherwise, server implementations MUST return an
342 appropriate response to the request, with the resultCode set to
347 Sermersheim Internet-Draft - Expires April 2006 Page 6
\f
348 Lightweight Directory Access Protocol Version 3
352 All LDAPMessage envelopes encapsulating responses contain the
353 messageID value of the corresponding request LDAPMessage.
355 The message ID of a request MUST have a non-zero value different from
356 the messageID of any other request in progress in the same LDAP
357 session. The zero value is reserved for the unsolicited notification
360 Typical clients increment a counter for each request.
362 A client MUST NOT send a request with the same message ID as an
363 earlier request in the same LDAP session unless it can be determined
364 that the server is no longer servicing the earlier request (e.g.
365 after the final response is received, or a subsequent Bind
366 completes). Otherwise the behavior is undefined. For this purpose,
367 note that Abandon and successfully abandoned operations do not send
373 The LDAPString is a notational convenience to indicate that, although
374 strings of LDAPString type encode as ASN.1 OCTET STRING types, the
375 [ISO10646] character set (a superset of [Unicode]) is used, encoded
376 following the [UTF-8] algorithm. Note that Unicode characters U+0000
377 through U+007F are the same as ASCII 0 through 127, respectively, and
378 have the same single octet UTF-8 encoding. Other Unicode characters
379 have a multiple octet UTF-8 encoding.
381 LDAPString ::= OCTET STRING -- UTF-8 encoded,
382 -- [ISO10646] characters
384 The LDAPOID is a notational convenience to indicate that the
385 permitted value of this string is a (UTF-8 encoded) dotted-decimal
386 representation of an OBJECT IDENTIFIER. Although an LDAPOID is
387 encoded as an OCTET STRING, values are limited to the definition of
388 <numericoid> given in Section 1.4 of [Models].
390 LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models]
394 1.3.6.1.4.1.1466.1.2.3
397 4.1.3. Distinguished Name and Relative Distinguished Name
399 An LDAPDN is defined to be the representation of a Distinguished Name
400 (DN) after encoding according to the specification in [LDAPDN].
402 LDAPDN ::= LDAPString
403 -- Constrained to <distinguishedName> [LDAPDN]
405 Sermersheim Internet-Draft - Expires April 2006 Page 7
\f
406 Lightweight Directory Access Protocol Version 3
409 A RelativeLDAPDN is defined to be the representation of a Relative
410 Distinguished Name (RDN) after encoding according to the
411 specification in [LDAPDN].
413 RelativeLDAPDN ::= LDAPString
414 -- Constrained to <name-component> [LDAPDN]
417 4.1.4. Attribute Descriptions
419 The definition and encoding rules for attribute descriptions are
420 defined in Section 2.5 of [Models]. Briefly, an attribute description
421 is an attribute type and zero or more options.
423 AttributeDescription ::= LDAPString
424 -- Constrained to <attributedescription>
428 4.1.5. Attribute Value
430 A field of type AttributeValue is an OCTET STRING containing an
431 encoded attribute value. The attribute value is encoded according to
432 the LDAP-specific encoding definition of its corresponding syntax.
433 The LDAP-specific encoding definitions for different syntaxes and
434 attribute types may be found in other documents and in particular
437 AttributeValue ::= OCTET STRING
439 Note that there is no defined limit on the size of this encoding;
440 thus protocol values may include multi-megabyte attribute values
443 Attribute values may be defined which have arbitrary and non-
444 printable syntax. Implementations MUST NOT display nor attempt to
445 decode an attribute value if its syntax is not known. The
446 implementation may attempt to discover the subschema of the source
447 entry, and retrieve the descriptions of 'attributeTypes' from it
450 Clients MUST only send attribute values in a request that are valid
451 according to the syntax defined for the attributes.
454 4.1.6. Attribute Value Assertion
456 The AttributeValueAssertion (AVA) type definition is similar to the
457 one in the X.500 Directory standards. It contains an attribute
458 description and a matching rule ([Models] Section 4.1.3) assertion
459 value suitable for that type. Elements of this type are typically
460 used to assert that the value in assertionValue matches a value of an
463 Sermersheim Internet-Draft - Expires April 2006 Page 8
\f
464 Lightweight Directory Access Protocol Version 3
467 AttributeValueAssertion ::= SEQUENCE {
468 attributeDesc AttributeDescription,
469 assertionValue AssertionValue }
471 AssertionValue ::= OCTET STRING
473 The syntax of the AssertionValue depends on the context of the LDAP
474 operation being performed. For example, the syntax of the EQUALITY
475 matching rule for an attribute is used when performing a Compare
476 operation. Often this is the same syntax used for values of the
477 attribute type, but in some cases the assertion syntax differs from
478 the value syntax. See objectIdentiferFirstComponentMatch in
479 [Syntaxes] for an example.
482 4.1.7. Attribute and PartialAttribute
484 Attributes and partial attributes consist of an attribute description
485 and attribute values. A PartialAttribute allows zero values, while
486 Attribute requires at least one value.
488 PartialAttribute ::= SEQUENCE {
489 type AttributeDescription,
490 vals SET OF value AttributeValue }
492 Attribute ::= PartialAttribute(WITH COMPONENTS {
494 vals (SIZE(1..MAX))})
496 No two of the attribute values may be equivalent as described by
497 Section 2.3 of [Models]. The set of attribute values is unordered.
498 Implementations MUST NOT rely upon the ordering being repeatable.
501 4.1.8. Matching Rule Identifier
503 Matching rules are defined in Section 4.1.3 of [Models]. A matching
504 rule is identified in the protocol by the printable representation of
505 either its <numericoid>, or one of its short name descriptors
506 [Models], e.g. 'caseIgnoreMatch' or '2.5.13.2'.
508 MatchingRuleId ::= LDAPString
511 4.1.9. Result Message
513 The LDAPResult is the construct used in this protocol to return
514 success or failure indications from servers to clients. To various
515 requests, servers will return responses containing the elements found
516 in LDAPResult to indicate the final status of the protocol operation
521 Sermersheim Internet-Draft - Expires April 2006 Page 9
\f
522 Lightweight Directory Access Protocol Version 3
524 LDAPResult ::= SEQUENCE {
525 resultCode ENUMERATED {
529 timeLimitExceeded (3),
530 sizeLimitExceeded (4),
533 authMethodNotSupported (7),
534 strongerAuthRequired (8),
537 adminLimitExceeded (11),
538 unavailableCriticalExtension (12),
539 confidentialityRequired (13),
540 saslBindInProgress (14),
541 noSuchAttribute (16),
542 undefinedAttributeType (17),
543 inappropriateMatching (18),
544 constraintViolation (19),
545 attributeOrValueExists (20),
546 invalidAttributeSyntax (21),
550 invalidDNSyntax (34),
551 -- 35 reserved for undefined isLeaf --
552 aliasDereferencingProblem (36),
554 inappropriateAuthentication (48),
555 invalidCredentials (49),
556 insufficientAccessRights (50),
559 unwillingToPerform (53),
562 namingViolation (64),
563 objectClassViolation (65),
564 notAllowedOnNonLeaf (66),
565 notAllowedOnRDN (67),
566 entryAlreadyExists (68),
567 objectClassModsProhibited (69),
568 -- 70 reserved for CLDAP --
569 affectsMultipleDSAs (71),
574 diagnosticMessage LDAPString,
575 referral [3] Referral OPTIONAL }
579 Sermersheim Internet-Draft - Expires April 2006 Page 10
\f
580 Lightweight Directory Access Protocol Version 3
582 The resultCode enumeration is extensible as defined in Section 3.6 of
583 [LDAPIANA]. The meanings of the listed result codes are given in
584 Appendix A. If a server detects multiple errors for an operation,
585 only one result code is returned. The server should return the result
586 code that best indicates the nature of the error encountered. Servers
587 may return substituted result codes to prevent unauthorized
590 The diagnosticMessage field of this construct may, at the server's
591 option, be used to return a string containing a textual, human-
592 readable (terminal control and page formatting characters should be
593 avoided) diagnostic message. As this diagnostic message is not
594 standardized, implementations MUST NOT rely on the values returned.
595 Diagnostic messages typically supplement the resultCode with
596 additional information. If the server chooses not to return a textual
597 diagnostic, the diagnosticMessage field MUST be empty.
599 For certain result codes (typically, but not restricted to
600 noSuchObject, aliasProblem, invalidDNSyntax and
601 aliasDereferencingProblem), the matchedDN field is set (subject to
602 access controls) to the name of the last entry (object or alias) used
603 in finding the target (or base) object. This will be a truncated form
604 of the provided name or, if an alias was dereferenced while
605 attempting to locate the entry, of the resulting name. Otherwise the
606 matchedDN field is empty.
611 The referral result code indicates that the contacted server cannot
612 or will not perform the operation and that one or more other servers
613 may be able to. Reasons for this include:
615 - The target entry of the request is not held locally, but the
616 server has knowledge of its possible existence elsewhere.
618 - The operation is restricted on this server -- perhaps due to a
619 read-only copy of an entry to be modified.
621 The referral field is present in an LDAPResult if the resultCode is
622 set to referral, and absent with all other result codes. It contains
623 one or more references to one or more servers or services that may be
624 accessed via LDAP or other protocols. Referrals can be returned in
625 response to any operation request (except Unbind and Abandon which do
626 not have responses). At least one URI MUST be present in the
629 During a Search operation, after the baseObject is located, and
630 entries are being evaluated, the referral is not returned. Instead,
631 continuation references, described in Section 4.5.3, are returned
632 when other servers would need to be contacted to complete the
635 Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI
637 Sermersheim Internet-Draft - Expires April 2006 Page 11
\f
638 Lightweight Directory Access Protocol Version 3
641 URI ::= LDAPString -- limited to characters permitted in
644 If the client wishes to progress the operation, it contacts one of
645 the supported services found in the referral. If multiple URIs are
646 present, the client assumes that any supported URI may be used to
647 progress the operation.
649 Clients that follow referrals MUST ensure that they do not loop
650 between servers. They MUST NOT repeatedly contact the same server for
651 the same request with the same parameters. Some clients use a counter
652 that is incremented each time referral handling occurs for an
653 operation, and these kinds of clients MUST be able to handle at least
654 ten nested referrals while progressing the operation.
656 A URI for a server implementing LDAP and accessible via [TCP]/[IP]
657 (v4 or v6) is written as an LDAP URL according to [LDAPURL].
659 Referral values which are LDAP URLs follow these rules:
661 - If an alias was dereferenced, the <dn> part of the LDAP URL MUST
662 be present, with the new target object name.
664 - It is RECOMMENDED that the <dn> part be present to avoid
667 - If the <dn> part is present, the client uses this name in its next
668 request to progress the operation, and if it is not present the
669 client uses the same name as in the original request.
671 - Some servers (e.g. participating in distributed indexing) may
672 provide a different filter in a URL of a referral for a Search
675 - If the <filter> part of the LDAP URL is present, the client uses
676 this filter in its next request to progress this Search, and if it
677 is not present the client uses the same filter as it used for that
680 - For Search, it is RECOMMENDED that the <scope> part be present to
683 - If the <scope> part is missing, the scope of the original Search
684 is used by the client to progress the operation.
686 - Other aspects of the new request may be the same as or different
687 from the request which generated the referral.
689 Other kinds of URIs may be returned. The syntax and semantics of such
690 URIs is left to future specifications. Clients may ignore URIs that
695 Sermersheim Internet-Draft - Expires April 2006 Page 12
\f
696 Lightweight Directory Access Protocol Version 3
698 UTF-8 encoded characters appearing in the string representation of a
699 DN, search filter, or other fields of the referral value may not be
700 legal for URIs (e.g. spaces) and MUST be escaped using the % method
706 Controls provide a mechanism whereby the semantics and arguments of
707 existing LDAP operations may be extended. One or more controls may be
708 attached to a single LDAP message. A control only affects the
709 semantics of the message it is attached to.
711 Controls sent by clients are termed 'request controls' and those sent
712 by servers are termed 'response controls'.
714 Controls ::= SEQUENCE OF control Control
716 Control ::= SEQUENCE {
718 criticality BOOLEAN DEFAULT FALSE,
719 controlValue OCTET STRING OPTIONAL }
721 The controlType field is the dotted-decimal representation of an
722 OBJECT IDENTIFIER which uniquely identifies the control. This
723 provides unambiguous naming of controls. Often, response control(s)
724 solicited by a request control share controlType values with the
727 The criticality field only has meaning in controls attached to
728 request messages (except UnbindRequest). For controls attached to
729 response messages and the UnbindRequest, the criticality field SHOULD
730 be FALSE, and MUST be ignored by the receiving protocol peer. A value
731 of TRUE indicates that it is unacceptable to perform the operation
732 without applying the semantics of the control. Specifically, the
733 criticality field is applied as follows:
735 - If the server does not recognize the control type, determines that
736 it is not appropriate for the operation, or is otherwise unwilling
737 to perform the operation with the control, and the criticality
738 field is TRUE, the server MUST NOT perform the operation, and for
739 operations that have a response message, MUST return with the
740 resultCode set to unavailableCriticalExtension.
742 - If the server does not recognize the control type, determines that
743 it is not appropriate for the operation, or is otherwise unwilling
744 to perform the operation with the control, and the criticality
745 field is FALSE, the server MUST ignore the control.
747 - Regardless of criticality, if a control is applied to an
748 operation, it is applied consistently and impartially to the
753 Sermersheim Internet-Draft - Expires April 2006 Page 13
\f
754 Lightweight Directory Access Protocol Version 3
756 The controlValue may contain information associated with the
757 controlType. Its format is defined by the specification of the
758 control. Implementations MUST be prepared to handle arbitrary
759 contents of the controlValue octet string, including zero bytes. It
760 is absent only if there is no value information which is associated
761 with a control of its type. When a controlValue is defined in terms
762 of ASN.1, and BER encoded according to Section 5.1, it also follows
763 the extensibility rules in Section 4.
765 Servers list the controlType of request controls they recognize in
766 the 'supportedControl' attribute in the root DSE (Section 5.1 of
769 Controls SHOULD NOT be combined unless the semantics of the
770 combination has been specified. The semantics of control
771 combinations, if specified, are generally found in the control
772 specification most recently published. When a combination of controls
773 is encountered whose semantics are invalid, not specified (or not
774 known), the message is considered to be not well-formed, thus the
775 operation fails with protocolError. Controls with a criticality of
776 FALSE may be ignored in order to arrive at a valid combination.
777 Additionally, unless order-dependent semantics are given in a
778 specification, the order of a combination of controls in the SEQUENCE
779 is ignored. Where the order is to be ignored but cannot be ignored by
780 the server, the message is considered not well-formed and the
781 operation fails with protocolError. Again, controls with a
782 criticality of FALSE may be ignored in order to arrive at a valid
785 This document does not specify any controls. Controls may be
786 specified in other documents. Documents detailing control extensions
787 are to provide for each control:
789 - the OBJECT IDENTIFIER assigned to the control,
791 - direction as to what value the sender should provide for the
792 criticality field (note: the semantics of the criticality field
793 are defined above should not be altered by the control's
796 - whether the controlValue field is present, and if so, the format
799 - the semantics of the control, and
801 - optionally, semantics regarding the combination of the control
811 Sermersheim Internet-Draft - Expires April 2006 Page 14
\f
812 Lightweight Directory Access Protocol Version 3
814 The function of the Bind operation is to allow authentication
815 information to be exchanged between the client and server. The Bind
816 operation should be thought of as the "authenticate" operation.
817 Operational, authentication, and security-related semantics of this
818 operation are given in [AuthMeth].
820 The Bind request is defined as follows:
822 BindRequest ::= [APPLICATION 0] SEQUENCE {
823 version INTEGER (1 .. 127),
825 authentication AuthenticationChoice }
827 AuthenticationChoice ::= CHOICE {
828 simple [0] OCTET STRING,
830 sasl [3] SaslCredentials,
833 SaslCredentials ::= SEQUENCE {
834 mechanism LDAPString,
835 credentials OCTET STRING OPTIONAL }
837 Fields of the BindRequest are:
839 - version: A version number indicating the version of the protocol
840 to be used at the LDAP message layer. This document describes
841 version 3 of the protocol. There is no version negotiation. The
842 client sets this field to the version it desires. If the server
843 does not support the specified version, it MUST respond with a
844 BindResponse where the resultCode is set to protocolError.
846 - name: If not empty, the name of the Directory object that the
847 client wishes to bind as. This field may take on a null value (a
848 zero length string) for the purposes of anonymous binds
849 ([AuthMeth] Section 5.1) or when using Simple Authentication and
850 Security Layer [SASL] authentication ([AuthMeth] Section 5.2).
851 Where the server attempts to locate the named object, it SHALL NOT
852 perform alias dereferencing.
854 - authentication: information used in authentication. This type is
855 extensible as defined in Section 3.7 of [LDAPIANA]. Servers that
856 do not support a choice supplied by a client return a BindResponse
857 with the resultCode set to authMethodNotSupported.
859 Textual passwords (consisting of a character sequence with a known
860 character set and encoding) transferred to the server using the
861 simple AuthenticationChoice SHALL be transferred as [UTF-8]
862 encoded [Unicode]. Prior to transfer, clients SHOULD prepare text
863 passwords as "query" strings by applying the [SASLprep] profile of
864 the [Stringprep] algorithm. Passwords consisting of other data
865 (such as random octets) MUST NOT be altered. The determination of
866 whether a password is textual is a local client matter.
869 Sermersheim Internet-Draft - Expires April 2006 Page 15
\f
870 Lightweight Directory Access Protocol Version 3
873 4.2.1. Processing of the Bind Request
875 Before processing a BindRequest, all uncompleted operations MUST
876 either complete or be abandoned. The server may either wait for the
877 uncompleted operations to complete, or abandon them. The server then
878 proceeds to authenticate the client in either a single-step, or
879 multi-step Bind process. Each step requires the server to return a
880 BindResponse to indicate the status of authentication.
882 After sending a BindRequest, clients MUST NOT send further LDAP PDUs
883 until receiving the BindResponse. Similarly, servers SHOULD NOT
884 process or respond to requests received while processing a
887 If the client did not bind before sending a request and receives an
888 operationsError to that request, it may then send a BindRequest. If
889 this also fails or the client chooses not to bind on the existing
890 LDAP session, it may terminate the LDAP session, re-establish it and
891 begin again by first sending a BindRequest. This will aid in
892 interoperating with servers implementing other versions of LDAP.
894 Clients may send multiple Bind requests to change the authentication
895 and/or security associations or to complete a multi-stage Bind
896 process. Authentication from earlier binds is subsequently ignored.
898 For some SASL authentication mechanisms, it may be necessary for the
899 client to invoke the BindRequest multiple times ([AuthMeth] Section
900 5.2). Clients MUST NOT invoke operations between two Bind requests
901 made as part of a multi-stage Bind.
903 A client may abort a SASL bind negotiation by sending a BindRequest
904 with a different value in the mechanism field of SaslCredentials, or
905 an AuthenticationChoice other than sasl.
907 If the client sends a BindRequest with the sasl mechanism field as an
908 empty string, the server MUST return a BindResponse with the
909 resultCode set to authMethodNotSupported. This will allow clients to
910 abort a negotiation if it wishes to try again with the same SASL
916 The Bind response is defined as follows.
918 BindResponse ::= [APPLICATION 1] SEQUENCE {
919 COMPONENTS OF LDAPResult,
920 serverSaslCreds [7] OCTET STRING OPTIONAL }
922 BindResponse consists simply of an indication from the server of the
923 status of the client's request for authentication.
927 Sermersheim Internet-Draft - Expires April 2006 Page 16
\f
928 Lightweight Directory Access Protocol Version 3
930 A successful Bind operation is indicated by a BindResponse with a
931 resultCode set to success. Otherwise, an appropriate result code is
932 set in the BindResponse. For BindResponse, the protocolError result
933 code may be used to indicate that the version number supplied by the
934 client is unsupported.
936 If the client receives a BindResponse where the resultCode is set to
937 protocolError, it is to assume that the server does not support this
938 version of LDAP. While the client may be able proceed with another
939 version of this protocol (this may or may not require closing and re-
940 establishing the transport connection), how to proceed with another
941 version of this protocol is beyond the scope of this document.
942 Clients which are unable or unwilling to proceed SHOULD terminate the
945 The serverSaslCreds field is used as part of a SASL-defined bind
946 mechanism to allow the client to authenticate the server to which it
947 is communicating, or to perform "challenge-response" authentication.
948 If the client bound with the simple choice, or the SASL mechanism
949 does not require the server to return information to the client, then
950 this field SHALL NOT be included in the BindResponse.
953 4.3. Unbind Operation
955 The function of the Unbind operation is to terminate an LDAP session.
956 The Unbind operation is not the antithesis of the Bind operation as
957 the name implies. The naming of these operations are historical. The
958 Unbind operation should be thought of as the "quit" operation.
960 The Unbind operation is defined as follows:
962 UnbindRequest ::= [APPLICATION 2] NULL
964 The client, upon transmission of the UnbindRequest, and the server,
965 upon receipt of the UnbindRequest are to gracefully terminate the
966 LDAP session as described in Section 5.3.
968 Uncompleted operations are handled as specified in Section 3.1.
971 4.4. Unsolicited Notification
973 An unsolicited notification is an LDAPMessage sent from the server to
974 the client which is not in response to any LDAPMessage received by
975 the server. It is used to signal an extraordinary condition in the
976 server or in the LDAP session between the client and the server. The
977 notification is of an advisory nature, and the server will not expect
978 any response to be returned from the client.
985 Sermersheim Internet-Draft - Expires April 2006 Page 17
\f
986 Lightweight Directory Access Protocol Version 3
988 The unsolicited notification is structured as an LDAPMessage in which
989 the messageID is zero and protocolOp is set to the extendedResp
990 choice using the ExtendedResponse type (See Section 4.12). The
991 responseName field of the ExtendedResponse always contains an LDAPOID
992 which is unique for this notification.
994 One unsolicited notification (Notice of Disconnection) is defined in
995 this document. The specification of an unsolicited notification
998 - the OBJECT IDENTIFIER assigned to the notification (to be
999 specified in the responseName,
1001 - the format of the contents of the responseValue (if any),
1003 - the circumstances which will cause the notification to be sent,
1006 - the semantics of the message.
1009 4.4.1. Notice of Disconnection
1011 This notification may be used by the server to advise the client that
1012 the server is about to terminate the LDAP session on its own
1013 initiative. This notification is intended to assist clients in
1014 distinguishing between an exceptional server condition and a
1015 transient network failure. Note that this notification is not a
1016 response to an Unbind requested by the client. Uncompleted operations
1017 are handled as specified in Section 3.1.
1019 The responseName is 1.3.6.1.4.1.1466.20036, the responseValue field
1020 is absent, and the resultCode is used to indicate the reason for the
1021 disconnection. When the strongerAuthRequired resultCode is returned
1022 with this message, it indicates that the server has detected that an
1023 established security association between the client and server has
1024 unexpectedly failed or been compromised.
1026 Upon transmission of the Notice of Disconnection, the server
1027 gracefully terminates the LDAP session as described in Section 5.3.
1030 4.5. Search Operation
1032 The Search operation is used to request a server to return, subject
1033 to access controls and other restrictions, a set of entries matching
1034 a complex search criterion. This can be used to read attributes from
1035 a single entry, from entries immediately subordinate to a particular
1036 entry, or a whole subtree of entries.
1039 4.5.1. Search Request
1041 The Search request is defined as follows:
1043 Sermersheim Internet-Draft - Expires April 2006 Page 18
\f
1044 Lightweight Directory Access Protocol Version 3
1047 SearchRequest ::= [APPLICATION 3] SEQUENCE {
1054 derefAliases ENUMERATED {
1055 neverDerefAliases (0),
1056 derefInSearching (1),
1057 derefFindingBaseObj (2),
1059 sizeLimit INTEGER (0 .. maxInt),
1060 timeLimit INTEGER (0 .. maxInt),
1063 attributes AttributeSelection }
1065 AttributeSelection ::= SEQUENCE OF selector LDAPString
1066 -- The LDAPString is constrained to
1067 -- <attributeSelector> in Section 4.5.1.7
1070 and [0] SET SIZE (1..MAX) OF filter Filter,
1071 or [1] SET SIZE (1..MAX) OF filter Filter,
1073 equalityMatch [3] AttributeValueAssertion,
1074 substrings [4] SubstringFilter,
1075 greaterOrEqual [5] AttributeValueAssertion,
1076 lessOrEqual [6] AttributeValueAssertion,
1077 present [7] AttributeDescription,
1078 approxMatch [8] AttributeValueAssertion,
1079 extensibleMatch [9] MatchingRuleAssertion,
1082 SubstringFilter ::= SEQUENCE {
1083 type AttributeDescription,
1084 substrings SEQUENCE SIZE (1..MAX) OF substring CHOICE {
1085 initial [0] AssertionValue, -- can occur at most once
1086 any [1] AssertionValue,
1087 final [2] AssertionValue } -- can occur at most once
1090 MatchingRuleAssertion ::= SEQUENCE {
1091 matchingRule [1] MatchingRuleId OPTIONAL,
1092 type [2] AttributeDescription OPTIONAL,
1093 matchValue [3] AssertionValue,
1094 dnAttributes [4] BOOLEAN DEFAULT FALSE }
1101 Sermersheim Internet-Draft - Expires April 2006 Page 19
\f
1102 Lightweight Directory Access Protocol Version 3
1104 Note that an X.500 "list"-like operation can be emulated by the
1105 client requesting a singleLevel Search operation with a filter
1106 checking for the presence of the 'objectClass' attribute, and that an
1107 X.500 "read"-like operation can be emulated by a baseObject Search
1108 operation with the same filter. A server which provides a gateway to
1109 X.500 is not required to use the Read or List operations, although it
1110 may choose to do so, and if it does, it must provide the same
1111 semantics as the X.500 Search operation.
1114 4.5.1.1. SearchRequest.baseObject
1116 The name of the base object entry (or possibly the root) relative to
1117 which the Search is to be performed.
1120 4.5.1.2. SearchRequest.scope
1122 Specifies the scope of the Search to be performed. The semantics (as
1123 described in [X.511]) of the defined values of this field are:
1125 baseObject: The scope is constrained to the entry named by
1128 singleLevel: The scope is constrained to the immediate
1129 subordinates of the entry named by baseObject.
1131 wholeSubtree: the scope is constrained to the entry named by the
1132 baseObject, and all its subordinates.
1135 4.5.1.3. SearchRequest.derefAliases
1137 An indicator as to whether or not alias entries (as defined in
1138 [Models]) are to be dereferenced during stages of the Search
1141 The act of dereferencing an alias includes recursively dereferencing
1142 aliases which refer to aliases.
1144 Servers MUST detect looping while dereferencing aliases in order to
1145 prevent denial of service attacks of this nature.
1147 The semantics of the defined values of this field are:
1149 neverDerefAliases: Do not dereference aliases in searching or in
1150 locating the base object of the Search.
1159 Sermersheim Internet-Draft - Expires April 2006 Page 20
\f
1160 Lightweight Directory Access Protocol Version 3
1162 derefInSearching: While searching subordinates of the base object,
1163 dereference any alias within the search scope. Dereferenced
1164 objects become the vertices of further search scopes where the
1165 Search operation is also applied. If the search scope is
1166 wholeSubtree, the Search continues in the subtree(s) of any
1167 dereferenced object. If the search scope is singleLevel, the
1168 search is applied to any dereferenced objects, and is not applied
1169 to their subordinates. Servers SHOULD eliminate duplicate entries
1170 that arise due to alias dereferencing while searching.
1172 derefFindingBaseObj: Dereference aliases in locating the base
1173 object of the Search, but not when searching subordinates of the
1176 derefAlways: Dereference aliases both in searching and in locating
1177 the base object of the Search.
1180 4.5.1.4. SearchRequest.sizeLimit
1182 A size limit that restricts the maximum number of entries to be
1183 returned as a result of the Search. A value of zero in this field
1184 indicates that no client-requested size limit restrictions are in
1185 effect for the Search. Servers may also enforce a maximum number of
1189 4.5.1.5. SearchRequest.timeLimit
1191 A time limit that restricts the maximum time (in seconds) allowed for
1192 a Search. A value of zero in this field indicates that no client-
1193 requested time limit restrictions are in effect for the Search.
1194 Servers may also enforce a maximum time limit for the Search.
1197 4.5.1.6. SearchRequest.typesOnly
1199 An indicator as to whether Search results are to contain both
1200 attribute descriptions and values, or just attribute descriptions.
1201 Setting this field to TRUE causes only attribute descriptions (no
1202 values) to be returned. Setting this field to FALSE causes both
1203 attribute descriptions and values to be returned.
1217 Sermersheim Internet-Draft - Expires April 2006 Page 21
\f
1218 Lightweight Directory Access Protocol Version 3
1220 4.5.1.7. SearchRequest.filter
1222 A filter that defines the conditions that must be fulfilled in order
1223 for the Search to match a given entry.
1225 The 'and', 'or' and 'not' choices can be used to form combinations of
1226 filters. At least one filter element MUST be present in an 'and' or
1227 'or' choice. The others match against individual attribute values of
1228 entries in the scope of the Search. (Implementor's note: the 'not'
1229 filter is an example of a tagged choice in an implicitly-tagged
1230 module. In BER this is treated as if the tag was explicit.)
1232 A server MUST evaluate filters according to the three-valued logic of
1233 [X.511] (1993) Clause 7.8.1. In summary, a filter is evaluated to
1234 either "TRUE", "FALSE" or "Undefined". If the filter evaluates to
1235 TRUE for a particular entry, then the attributes of that entry are
1236 returned as part of the Search result (subject to any applicable
1237 access control restrictions). If the filter evaluates to FALSE or
1238 Undefined, then the entry is ignored for the Search.
1240 A filter of the "and" choice is TRUE if all the filters in the SET OF
1241 evaluate to TRUE, FALSE if at least one filter is FALSE, and
1242 otherwise Undefined. A filter of the "or" choice is FALSE if all of
1243 the filters in the SET OF evaluate to FALSE, TRUE if at least one
1244 filter is TRUE, and Undefined otherwise. A filter of the 'not' choice
1245 is TRUE if the filter being negated is FALSE, FALSE if it is TRUE,
1246 and Undefined if it is Undefined.
1248 A filter item evaluates to Undefined when the server would not be
1249 able to determine whether the assertion value matches an entry.
1252 - An attribute description in an equalityMatch, substrings,
1253 greaterOrEqual, lessOrEqual, approxMatch or extensibleMatch
1254 filter is not recognized by the server.
1256 - The attribute type does not define the appropriate matching
1259 - A MatchingRuleId in the extensibleMatch is not recognized by
1260 the server or is not valid for the attribute type.
1262 - The type of filtering requested is not implemented.
1264 - The assertion value is invalid.
1266 For example, if a server did not recognize the attribute type
1267 shoeSize, the filters (shoeSize=*), (shoeSize=12), (shoeSize>=12) and
1268 (shoeSize<=12) would each evaluate to Undefined.
1270 Servers MUST NOT return errors if attribute descriptions or matching
1271 rule ids are not recognized, assertion values are invalid, or the
1272 assertion syntax is not supported. More details of filter processing
1273 are given in Clause 7.8 of [X.511].
1275 Sermersheim Internet-Draft - Expires April 2006 Page 22
\f
1276 Lightweight Directory Access Protocol Version 3
1280 4.5.1.7.1. SearchRequest.filter.equalityMatch
1282 The matching rule for an equalityMatch filter is defined by the
1283 EQUALITY matching rule for the attribute type or subtype. The filter
1284 is TRUE when the EQUALITY rule returns TRUE as applied to the
1285 attribute or subtype and the asserted value.
1288 4.5.1.7.2. SearchRequest.filter.substrings
1290 There SHALL be at most one 'initial', and at most one 'final' in the
1291 'substrings' of a SubstringFilter. If 'initial' is present, it SHALL
1292 be the first element of 'substrings'. If 'final' is present, it SHALL
1293 be the last element of 'substrings'.
1295 The matching rule for an AssertionValue in a substrings filter item
1296 is defined by the SUBSTR matching rule for the attribute type or
1297 subtype. The filter is TRUE when the SUBSTR rule returns TRUE as
1298 applied to the attribute or subtype and the asserted value.
1300 Note that the AssertionValue in a substrings filter item conforms to
1301 the assertion syntax of the EQUALITY matching rule for the attribute
1302 type rather than the assertion syntax of the SUBSTR matching rule for
1303 the attribute type. Conceptually, the entire SubstringFilter is
1304 converted into an assertion value of the substrings matching rule
1305 prior to applying the rule.
1308 4.5.1.7.3. SearchRequest.filter.greaterOrEqual
1310 The matching rule for a greaterOrEqual filter is defined by the
1311 ORDERING matching rule for the attribute type or subtype. The filter
1312 is TRUE when the ORDERING rule returns FALSE as applied to the
1313 attribute or subtype and the asserted value.
1316 4.5.1.7.4. SearchRequest.filter.lessOrEqual
1318 The matching rules for a lessOrEqual filter are defined by the
1319 ORDERING and EQUALITY matching rules for the attribute type or
1320 subtype. The filter is TRUE when either the ORDERING or EQUALITY rule
1321 returns TRUE as applied to the attribute or subtype and the asserted
1325 4.5.1.7.5. SearchRequest.filter.present
1327 A present filter is TRUE when there is an attribute or subtype of the
1328 specified attribute description present in an entry, FALSE when no
1329 attribute or subtype of the specified attribute description is
1330 present in an entry, and Undefined otherwise.
1333 Sermersheim Internet-Draft - Expires April 2006 Page 23
\f
1334 Lightweight Directory Access Protocol Version 3
1337 4.5.1.7.6. SearchRequest.filter.approxMatch
1339 An approxMatch filter is TRUE when there is a value of the attribute
1340 type or subtype for which some locally-defined approximate matching
1341 algorithm (e.g. spelling variations, phonetic match, etc.) returns
1342 TRUE. If a value matches for equality, it also satisfies an
1343 approximate match. If approximate matching is not supported for the
1344 attribute, this filter item should be treated as an equalityMatch.
1347 4.5.1.7.7. SearchRequest.filter.extensibleMatch
1349 The fields of the extensibleMatch filter item are evaluated as
1352 - If the matchingRule field is absent, the type field MUST be
1353 present, and an equality match is performed for that type.
1355 - If the type field is absent and the matchingRule is present, the
1356 matchValue is compared against all attributes in an entry which
1357 support that matchingRule.
1359 - If the type field is present and the matchingRule is present, the
1360 matchValue is compared against the specified attribute type and
1363 - If the dnAttributes field is set to TRUE, the match is
1364 additionally applied against all the AttributeValueAssertions in
1365 an entry's distinguished name, and evaluates to TRUE if there is
1366 at least one attribute or subtype in the distinguished name for
1367 which the filter item evaluates to TRUE. The dnAttributes field is
1368 present to alleviate the need for multiple versions of generic
1369 matching rules (such as word matching), where one applies to
1370 entries and another applies to entries and DN attributes as well.
1372 The matchingRule used for evaluation determines the syntax for the
1373 assertion value. Once the matchingRule and attribute(s) have been
1374 determined, the filter item evaluates to TRUE if it matches at least
1375 one attribute type or subtype in the entry, FALSE if it does not
1376 match any attribute type or subtype in the entry, and Undefined if
1377 the matchingRule is not recognized, the matchingRule is unsuitable
1378 for use with the specified type, or the assertionValue is invalid.
1381 4.5.1.7. SearchRequest.attributes
1383 A selection list of the attributes to be returned from each entry
1384 which matches the search filter. Attributes which are subtypes of
1385 listed attributes are implicitly included. LDAPString values of this
1386 field are constrained to the following Augmented Backus-Naur Form
1389 attributeSelector = attributedescription / selectorspecial
1391 Sermersheim Internet-Draft - Expires April 2006 Page 24
\f
1392 Lightweight Directory Access Protocol Version 3
1395 selectorspecial = noattrs / alluserattrs
1397 noattrs = %x31.2E.31 ; "1.1"
1399 alluserattrs = %x2A ; asterisk ("*")
1401 The <attributedescription> production is defined in Section 2.5 of
1404 There are three special cases which may appear in the attributes
1407 - an empty list with no attributes,
1409 - a list containing "*" (with zero or more attribute
1412 - a list containing only "1.1".
1414 An empty list requests the return of all user attributes.
1416 A list containing "*" requests the return of all user attributes
1417 in addition to other listed (operational) attributes.
1419 A list containing only the OID "1.1" indicates that no attributes
1420 are to be returned. If "1.1" is provided with other
1421 attributeSelector values, the "1.1" attributeSelector is ignored.
1422 This OID was chosen because it does not (and can not) correspond
1423 to any attribute in use.
1425 Client implementors should note that even if all user attributes are
1426 requested, some attributes and/or attribute values of the entry may
1427 not be included in Search results due to access controls or other
1428 restrictions. Furthermore, servers will not return operational
1429 attributes, such as objectClasses or attributeTypes, unless they are
1430 listed by name. Operational attributes are described in [Models].
1432 Attributes are returned at most once in an entry. If an attribute
1433 description is named more than once in the list, the subsequent names
1434 are ignored. If an attribute description in the list is not
1435 recognized, it is ignored by the server.
1438 4.5.2. Search Result
1440 The results of the Search operation are returned as zero or more
1441 SearchResultEntry and/or SearchResultReference messages, followed by
1442 a single SearchResultDone message.
1444 SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
1446 attributes PartialAttributeList }
1449 Sermersheim Internet-Draft - Expires April 2006 Page 25
\f
1450 Lightweight Directory Access Protocol Version 3
1452 PartialAttributeList ::= SEQUENCE OF
1453 partialAttribute PartialAttribute
1455 SearchResultReference ::= [APPLICATION 19] SEQUENCE
1456 SIZE (1..MAX) OF uri URI
1458 SearchResultDone ::= [APPLICATION 5] LDAPResult
1460 Each SearchResultEntry represents an entry found during the Search.
1461 Each SearchResultReference represents an area not yet explored during
1462 the Search. The SearchResultEntry and SearchResultReference messages
1463 may come in any order. Following all the SearchResultReference and
1464 SearchResultEntry responses, the server returns a SearchResultDone
1465 response, which contains an indication of success, or detailing any
1466 errors that have occurred.
1468 Each entry returned in a SearchResultEntry will contain all
1469 appropriate attributes as specified in the attributes field of the
1470 Search Request, subject to access control and other administrative
1471 policy. Note that the PartialAttributeList may hold zero elements.
1472 This may happen when none of the attributes of an entry were
1473 requested, or could be returned. Note also that the partialAttribute
1474 vals set may hold zero elements. This may happen when typesOnly is
1475 requested, access controls prevent the return of values, or other
1478 Some attributes may be constructed by the server and appear in a
1479 SearchResultEntry attribute list, although they are not stored
1480 attributes of an entry. Clients SHOULD NOT assume that all attributes
1481 can be modified, even if permitted by access control.
1483 If the server's schema defines short names [Models] for an attribute
1484 type then the server SHOULD use one of those names in attribute
1485 descriptions for that attribute type (in preference to using the
1486 <numericoid> [Models] format of the attribute type's object
1487 identifier). The server SHOULD NOT use the short name if that name is
1488 known by the server to be ambiguous, or otherwise likely to cause
1489 interoperability problems.
1492 4.5.3. Continuation References in the Search Result
1494 If the server was able to locate the entry referred to by the
1495 baseObject but was unable or unwilling to search one or more non-
1496 local entries, the server may return one or more
1497 SearchResultReference messages, each containing a reference to
1498 another set of servers for continuing the operation. A server MUST
1499 NOT return any SearchResultReference messages if it has not located
1500 the baseObject and thus has not searched any entries; in this case it
1501 would return a SearchResultDone containing either a referral or
1502 noSuchObject result code (depending on the server's knowledge of the
1503 entry named in the baseObject).
1507 Sermersheim Internet-Draft - Expires April 2006 Page 26
\f
1508 Lightweight Directory Access Protocol Version 3
1510 If a server holds a copy or partial copy of the subordinate naming
1511 context (Section 5 of [Models]), it may use the search filter to
1512 determine whether or not to return a SearchResultReference response.
1513 Otherwise SearchResultReference responses are always returned when in
1516 The SearchResultReference is of the same data type as the Referral.
1518 If the client wishes to progress the Search, it issues a new Search
1519 operation for each SearchResultReference that is returned. If
1520 multiple URIs are present, the client assumes that any supported URI
1521 may be used to progress the operation.
1523 Clients that follow search continuation references MUST ensure that
1524 they do not loop between servers. They MUST NOT repeatedly contact
1525 the same server for the same request with the same parameters. Some
1526 clients use a counter that is incremented each time search result
1527 reference handling occurs for an operation, and these kinds of
1528 clients MUST be able to handle at least ten nested referrals while
1529 progressing the operation.
1531 Note that the Abandon operation described in Section 4.11 applies
1532 only to a particular operation sent at the LDAP message layer between
1533 a client and server. The client must abandon subsequent Search
1534 operations it wishes to individually.
1536 A URI for a server implementing LDAP and accessible via [TCP]/[IP]
1537 (v4 or v6) is written as an LDAP URL according to [LDAPURL].
1539 SearchResultReference values which are LDAP URLs follow these rules:
1541 - The <dn> part of the LDAP URL MUST be present, with the new target
1542 object name. The client uses this name when following the
1545 - Some servers (e.g. participating in distributed indexing) may
1546 provide a different filter in the LDAP URL.
1548 - If the <filter> part of the LDAP URL is present, the client uses
1549 this filter in its next request to progress this Search, and if it
1550 is not present the client uses the same filter as it used for that
1553 - If the originating search scope was singleLevel, the <scope> part
1554 of the LDAP URL will be "base".
1556 - It is RECOMMENDED that the <scope> part be present to avoid
1557 ambiguity. In the absence of a <scope> part, the scope of the
1558 original Search request is assumed.
1560 - Other aspects of the new Search request may be the same as or
1561 different from the Search request which generated the
1562 SearchResultReference.
1565 Sermersheim Internet-Draft - Expires April 2006 Page 27
\f
1566 Lightweight Directory Access Protocol Version 3
1568 - The name of an unexplored subtree in a SearchResultReference need
1569 not be subordinate to the base object.
1571 Other kinds of URIs may be returned. The syntax and semantics of such
1572 URIs is left to future specifications. Clients may ignore URIs that
1573 they do not support.
1575 UTF-8 encoded characters appearing in the string representation of a
1576 DN, search filter, or other fields of the referral value may not be
1577 legal for URIs (e.g. spaces) and MUST be escaped using the % method
1584 For example, suppose the contacted server (hosta) holds the entry
1585 <DC=Example,DC=NET> and the entry <CN=Manager,DC=Example,DC=NET>. It
1586 knows that both LDAP servers (hostb) and (hostc) hold
1587 <OU=People,DC=Example,DC=NET> (one is the master and the other server
1588 a shadow), and that LDAP-capable server (hostd) holds the subtree
1589 <OU=Roles,DC=Example,DC=NET>. If a wholeSubtree Search of
1590 <DC=Example,DC=NET> is requested to the contacted server, it may
1591 return the following:
1593 SearchResultEntry for DC=Example,DC=NET
1594 SearchResultEntry for CN=Manager,DC=Example,DC=NET
1595 SearchResultReference {
1596 ldap://hostb/OU=People,DC=Example,DC=NET??sub
1597 ldap://hostc/OU=People,DC=Example,DC=NET??sub }
1598 SearchResultReference {
1599 ldap://hostd/OU=Roles,DC=Example,DC=NET??sub }
1600 SearchResultDone (success)
1602 Client implementors should note that when following a
1603 SearchResultReference, additional SearchResultReference may be
1604 generated. Continuing the example, if the client contacted the server
1605 (hostb) and issued the Search request for the subtree
1606 <OU=People,DC=Example,DC=NET>, the server might respond as follows:
1608 SearchResultEntry for OU=People,DC=Example,DC=NET
1609 SearchResultReference {
1610 ldap://hoste/OU=Managers,OU=People,DC=Example,DC=NET??sub }
1611 SearchResultReference {
1612 ldap://hostf/OU=Consultants,OU=People,DC=Example,DC=NET??sub }
1613 SearchResultDone (success)
1615 Similarly, if a singleLevel Search of <DC=Example,DC=NET> is
1616 requested to the contacted server, it may return the following:
1623 Sermersheim Internet-Draft - Expires April 2006 Page 28
\f
1624 Lightweight Directory Access Protocol Version 3
1626 SearchResultEntry for CN=Manager,DC=Example,DC=NET
1627 SearchResultReference {
1628 ldap://hostb/OU=People,DC=Example,DC=NET??base
1629 ldap://hostc/OU=People,DC=Example,DC=NET??base }
1630 SearchResultReference {
1631 ldap://hostd/OU=Roles,DC=Example,DC=NET??base }
1632 SearchResultDone (success)
1634 If the contacted server does not hold the base object for the Search,
1635 but has knowledge of its possible location, then it may return a
1636 referral to the client. In this case, if the client requests a
1637 subtree Search of <DC=Example,DC=ORG> to hosta, the server returns a
1638 SearchResultDone containing a referral.
1640 SearchResultDone (referral) {
1641 ldap://hostg/DC=Example,DC=ORG??sub }
1644 4.6. Modify Operation
1646 The Modify operation allows a client to request that a modification
1647 of an entry be performed on its behalf by a server. The Modify
1648 Request is defined as follows:
1650 ModifyRequest ::= [APPLICATION 6] SEQUENCE {
1652 changes SEQUENCE OF change SEQUENCE {
1653 operation ENUMERATED {
1658 modification PartialAttribute } }
1660 Fields of the Modify Request are:
1662 - object: The value of this field contains the name of the entry to
1663 be modified. The server SHALL NOT perform any alias dereferencing
1664 in determining the object to be modified.
1666 - changes: A list of modifications to be performed on the entry. The
1667 entire list of modifications MUST be performed in the order they
1668 are listed as a single atomic operation. While individual
1669 modifications may violate certain aspects of the directory schema
1670 (such as the object class definition and DIT content rule), the
1671 resulting entry after the entire list of modifications is
1672 performed MUST conform to the requirements of the directory model
1673 and controlling schema [Models].
1675 - operation: Used to specify the type of modification being
1676 performed. Each operation type acts on the following
1677 modification. The values of this field have the following
1678 semantics respectively:
1681 Sermersheim Internet-Draft - Expires April 2006 Page 29
\f
1682 Lightweight Directory Access Protocol Version 3
1684 add: add values listed to the modification attribute,
1685 creating the attribute if necessary;
1687 delete: delete values listed from the modification attribute.
1688 If no values are listed, or if all current values of the
1689 attribute are listed, the entire attribute is removed;
1691 replace: replace all existing values of the modification
1692 attribute with the new values listed, creating the attribute
1693 if it did not already exist. A replace with no value will
1694 delete the entire attribute if it exists, and is ignored if
1695 the attribute does not exist.
1697 - modification: A PartialAttribute (which may have an empty SET
1698 of vals) used to hold the attribute type or attribute type and
1699 values being modified.
1701 Upon receipt of a Modify Request, the server attempts to perform the
1702 necessary modifications to the DIT and returns the result in a Modify
1703 Response, defined as follows:
1705 ModifyResponse ::= [APPLICATION 7] LDAPResult
1707 The server will return to the client a single Modify Response
1708 indicating either the successful completion of the DIT modification,
1709 or the reason that the modification failed. Due to the requirement
1710 for atomicity in applying the list of modifications in the Modify
1711 Request, the client may expect that no modifications of the DIT have
1712 been performed if the Modify Response received indicates any sort of
1713 error, and that all requested modifications have been performed if
1714 the Modify Response indicates successful completion of the Modify
1715 operation. Whether the modification was applied or not cannot be
1716 determined by the client if the Modify Response was not received
1717 (e.g. the LDAP session was terminated or the Modify operation was
1720 Servers MUST ensure that entries conform to user and system schema
1721 rules or other data model constraints. The Modify operation cannot be
1722 used to remove from an entry any of its distinguished values, i.e.
1723 those values which form the entry's relative distinguished name. An
1724 attempt to do so will result in the server returning the
1725 notAllowedOnRDN result code. The Modify DN operation described in
1726 Section 4.9 is used to rename an entry.
1728 For attribute types which specify no equality matching, the rules in
1729 Section 2.5.1 of [Models] are followed.
1731 Note that due to the simplifications made in LDAP, there is not a
1732 direct mapping of the changes in an LDAP ModifyRequest onto the
1733 changes of a DAP ModifyEntry operation, and different implementations
1734 of LDAP-DAP gateways may use different means of representing the
1735 change. If successful, the final effect of the operations on the
1736 entry MUST be identical.
1739 Sermersheim Internet-Draft - Expires April 2006 Page 30
\f
1740 Lightweight Directory Access Protocol Version 3
1745 The Add operation allows a client to request the addition of an entry
1746 into the Directory. The Add Request is defined as follows:
1748 AddRequest ::= [APPLICATION 8] SEQUENCE {
1750 attributes AttributeList }
1752 AttributeList ::= SEQUENCE OF attribute Attribute
1754 Fields of the Add Request are:
1756 - entry: the name of the entry to be added. The server SHALL NOT
1757 dereference any aliases in locating the entry to be added.
1759 - attributes: the list of attributes that, along with those from the
1760 RDN, make up the content of the entry being added. Clients MAY or
1761 MAY NOT include the RDN attribute(s) in this list. Clients MUST
1762 NOT supply NO-USER-MODIFICATION attributes such as the
1763 createTimestamp or creatorsName attributes, since the server
1764 maintains these automatically.
1766 Servers MUST ensure that entries conform to user and system schema
1767 rules or other data model constraints. For attribute types which
1768 specify no equality matching, the rules in Section 2.5.1 of [Models]
1769 are followed (this applies to the naming attribute in addition to any
1770 multi-valued attributes being added).
1772 The entry named in the entry field of the AddRequest MUST NOT exist
1773 for the AddRequest to succeed. The immediate superior (parent) of an
1774 object or alias entry to be added MUST exist. For example, if the
1775 client attempted to add <CN=JS,DC=Example,DC=NET>, the
1776 <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did
1777 exist, then the server would return the noSuchObject result code with
1778 the matchedDN field containing <DC=NET>.
1780 Upon receipt of an Add Request, a server will attempt to add the
1781 requested entry. The result of the Add attempt will be returned to
1782 the client in the Add Response, defined as follows:
1784 AddResponse ::= [APPLICATION 9] LDAPResult
1786 A response of success indicates that the new entry has been added to
1790 4.8. Delete Operation
1792 The Delete operation allows a client to request the removal of an
1793 entry from the Directory. The Delete Request is defined as follows:
1795 DelRequest ::= [APPLICATION 10] LDAPDN
1797 Sermersheim Internet-Draft - Expires April 2006 Page 31
\f
1798 Lightweight Directory Access Protocol Version 3
1801 The Delete Request consists of the name of the entry to be deleted.
1802 The server SHALL NOT dereference aliases while resolving the name of
1803 the target entry to be removed.
1805 Only leaf entries (those with no subordinate entries) can be deleted
1806 with this operation.
1808 Upon receipt of a Delete Request, a server will attempt to perform
1809 the entry removal requested and return the result in the Delete
1810 Response defined as follows:
1812 DelResponse ::= [APPLICATION 11] LDAPResult
1815 4.9. Modify DN Operation
1817 The Modify DN operation allows a client to change the Relative
1818 Distinguished Name (RDN) of an entry in the Directory, and/or to move
1819 a subtree of entries to a new location in the Directory. The Modify
1820 DN Request is defined as follows:
1822 ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
1824 newrdn RelativeLDAPDN,
1825 deleteoldrdn BOOLEAN,
1826 newSuperior [0] LDAPDN OPTIONAL }
1828 Fields of the Modify DN Request are:
1830 - entry: the name of the entry to be changed. This entry may or may
1831 not have subordinate entries.
1833 - newrdn: the new RDN of the entry. The value of the old RDN is
1834 supplied when moving the entry to a new superior without changing
1835 its RDN. Attribute values of the new RDN not matching any
1836 attribute value of the entry are added to the entry and an
1837 appropriate error is returned if this fails.
1839 - deleteoldrdn: a boolean field that controls whether the old RDN
1840 attribute values are to be retained as attributes of the entry, or
1841 deleted from the entry.
1843 - newSuperior: if present, this is the name of an existing object
1844 entry which becomes the immediate superior (parent) of the
1847 The server SHALL NOT dereference any aliases in locating the objects
1848 named in entry or newSuperior.
1850 Upon receipt of a ModifyDNRequest, a server will attempt to perform
1851 the name change and return the result in the Modify DN Response,
1855 Sermersheim Internet-Draft - Expires April 2006 Page 32
\f
1856 Lightweight Directory Access Protocol Version 3
1858 ModifyDNResponse ::= [APPLICATION 13] LDAPResult
1860 For example, if the entry named in the entry field was <cn=John
1861 Smith,c=US>, the newrdn field was <cn=John Cougar Smith>, and the
1862 newSuperior field was absent, then this operation would attempt to
1863 rename the entry to be <cn=John Cougar Smith,c=US>. If there was
1864 already an entry with that name, the operation would fail with the
1865 entryAlreadyExists result code.
1867 Servers MUST ensure that entries conform to user and system schema
1868 rules or other data model constraints. For attribute types which
1869 specify no equality matching, the rules in Section 2.5.1 of [Models]
1870 are followed (this pertains to newrdn and deleteoldrdn).
1872 The object named in newSuperior MUST exist. For example, if the
1873 client attempted to add <CN=JS,DC=Example,DC=NET>, the
1874 <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did
1875 exist, then the server would return the noSuchObject result code with
1876 the matchedDN field containing <DC=NET>.
1878 If the deleteoldrdn field is TRUE, the attribute values forming the
1879 old RDN but not the new RDN are deleted from the entry. If the
1880 deleteoldrdn field is FALSE, the attribute values forming the old RDN
1881 will be retained as non-distinguished attribute values of the entry.
1883 Note that X.500 restricts the ModifyDN operation to only affect
1884 entries that are contained within a single server. If the LDAP server
1885 is mapped onto DAP, then this restriction will apply, and the
1886 affectsMultipleDSAs result code will be returned if this error
1887 occurred. In general, clients MUST NOT expect to be able to perform
1888 arbitrary movements of entries and subtrees between servers or
1889 between naming contexts.
1892 4.10. Compare Operation
1894 The Compare operation allows a client to compare an assertion value
1895 with the values of a particular attribute in a particular entry in
1896 the Directory. The Compare Request is defined as follows:
1898 CompareRequest ::= [APPLICATION 14] SEQUENCE {
1900 ava AttributeValueAssertion }
1902 Fields of the Compare Request are:
1904 - entry: the name of the entry to be compared. The server SHALL NOT
1905 dereference any aliases in locating the entry to be compared.
1907 - ava: holds the attribute value assertion to be compared.
1909 Upon receipt of a Compare Request, a server will attempt to perform
1910 the requested comparison and return the result in the Compare
1911 Response, defined as follows:
1913 Sermersheim Internet-Draft - Expires April 2006 Page 33
\f
1914 Lightweight Directory Access Protocol Version 3
1917 CompareResponse ::= [APPLICATION 15] LDAPResult
1919 The resultCode is set to compareTrue, compareFalse, or an appropriate
1920 error. compareTrue indicates that the assertion value in the ava
1921 field matches a value of the attribute or subtype according to the
1922 attribute's EQUALITY matching rule. compareFalse indicates that the
1923 assertion value in the ava field and the values of the attribute or
1924 subtype did not match. Other result codes indicate either that the
1925 result of the comparison was Undefined (Section 4.5.1), or that some
1928 Note that some directory systems may establish access controls which
1929 permit the values of certain attributes (such as userPassword) to be
1930 compared but not interrogated by other means.
1933 4.11. Abandon Operation
1935 The function of the Abandon operation is to allow a client to request
1936 that the server abandon an uncompleted operation. The Abandon Request
1937 is defined as follows:
1939 AbandonRequest ::= [APPLICATION 16] MessageID
1941 The MessageID is that of an operation which was requested earlier at
1942 this LDAP message layer. The Abandon request itself has its own
1943 MessageID. This is distinct from the MessageID of the earlier
1944 operation being abandoned.
1946 There is no response defined in the Abandon operation. Upon receipt
1947 of an AbandonRequest, the server MAY abandon the operation identified
1948 by the MessageID. Since the client cannot tell the difference between
1949 a successfully abandoned operation and an uncompleted operation, the
1950 application of the Abandon operation is limited to uses where the
1951 client does not require an indication of its outcome.
1953 Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned.
1955 In the event that a server receives an Abandon Request on a Search
1956 operation in the midst of transmitting responses to the Search, that
1957 server MUST cease transmitting entry responses to the abandoned
1958 request immediately, and MUST NOT send the SearchResultDone. Of
1959 course, the server MUST ensure that only properly encoded LDAPMessage
1960 PDUs are transmitted.
1962 The ability to abandon other (particularly update) operations is at
1963 the discretion of the server.
1965 Clients should not send Abandon requests for the same operation
1966 multiple times, and MUST also be prepared to receive results from
1967 operations it has abandoned (since these may have been in transit
1968 when the Abandon was requested, or are not able to be abandoned).
1971 Sermersheim Internet-Draft - Expires April 2006 Page 34
\f
1972 Lightweight Directory Access Protocol Version 3
1974 Servers MUST discard Abandon requests for message IDs they do not
1975 recognize, for operations which cannot be abandoned, and for
1976 operations which have already been abandoned.
1979 4.12. Extended Operation
1981 The Extended operation allows additional operations to be defined for
1982 services not already available in the protocol. For example, to Add
1983 operations to install transport layer security (see Section 4.14).
1985 The Extended operation allows clients to make requests and receive
1986 responses with predefined syntaxes and semantics. These may be
1987 defined in RFCs or be private to particular implementations.
1989 Each Extended operation consists of an Extended request and an
1992 ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
1993 requestName [0] LDAPOID,
1994 requestValue [1] OCTET STRING OPTIONAL }
1996 The requestName is a dotted-decimal representation of the unique
1997 OBJECT IDENTIFIER corresponding to the request. The requestValue is
1998 information in a form defined by that request, encapsulated inside an
2001 The server will respond to this with an LDAPMessage containing an
2004 ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
2005 COMPONENTS OF LDAPResult,
2006 responseName [10] LDAPOID OPTIONAL,
2007 responseValue [11] OCTET STRING OPTIONAL }
2009 The responseName field, when present, contains an LDAPOID which is
2010 unique for this extended operation or response. This field is
2011 optional (even when the extension specification specifies an LDAPOID
2012 to be returned in the field). The field will be absent whenever the
2013 server is unable or unwilling to determine the appropriate LDAPOID to
2014 return, for instance when the requestName cannot be parsed or its
2015 value is not recognized.
2017 Where the requestName is not recognized, the server returns
2018 protocolError (The server may return protocolError in other cases).
2020 The requestValue and responseValue fields contain information
2021 associated with the operation. The format of these fields is defined
2022 by the specification of the Extended operation. Implementations MUST
2023 be prepared to handle arbitrary contents of these fields, including
2024 zero bytes. Values that are defined in terms of ASN.1 and BER encoded
2025 according to Section 5.1, also follow the extensibility rules in
2029 Sermersheim Internet-Draft - Expires April 2006 Page 35
\f
2030 Lightweight Directory Access Protocol Version 3
2032 Servers list the requestName of Extended Requests they recognize in
2033 the 'supportedExtension' attribute in the root DSE (Section 5.1 of
2036 Extended operations may be specified in other documents. The
2037 specification of an Extended operation consists of:
2039 - the OBJECT IDENTIFIER assigned to the requestName,
2041 - the OBJECT IDENTIFIER (if any) assigned to the responseName (note
2042 that the same OBJECT IDENTIFIER may be used for both the
2043 requestName and responseName),
2045 - the format of the contents of the requestValue and responseValue
2048 - the semantics of the operation.
2051 4.13. IntermediateResponse Message
2053 While the Search operation provides a mechanism to return multiple
2054 response messages for a single Search request, other operations, by
2055 nature, do not provide for multiple response messages.
2057 The IntermediateResponse message provides a general mechanism for
2058 defining single-request/multiple-response operations in LDAP. This
2059 message is intended to be used in conjunction with the Extended
2060 operation to define new single-request/multiple-response operations
2061 or in conjunction with a control when extending existing LDAP
2062 operations in a way that requires them to return Intermediate
2063 response information.
2065 It is intended that the definitions and descriptions of Extended
2066 operations and controls that make use of the IntermediateResponse
2067 message will define the circumstances when an IntermediateResponse
2068 message can be sent by a server and the associated meaning of an
2069 IntermediateResponse message sent in a particular circumstance.
2071 IntermediateResponse ::= [APPLICATION 25] SEQUENCE {
2072 responseName [0] LDAPOID OPTIONAL,
2073 responseValue [1] OCTET STRING OPTIONAL }
2075 IntermediateResponse messages SHALL NOT be returned to the client
2076 unless the client issues a request that specifically solicits their
2077 return. This document defines two forms of solicitation: Extended
2078 operation and request control. IntermediateResponse messages are
2079 specified in documents describing the manner in which they are
2080 solicited (i.e. in the Extended operation or request control
2081 specification that uses them). These specifications include:
2083 - the OBJECT IDENTIFIER (if any) assigned to the responseName,
2085 - the format of the contents of the responseValue (if any), and
2087 Sermersheim Internet-Draft - Expires April 2006 Page 36
\f
2088 Lightweight Directory Access Protocol Version 3
2091 - the semantics associated with the IntermediateResponse message.
2093 Extensions that allow the return of multiple types of
2094 IntermediateResponse messages SHALL identify those types using unique
2095 responseName values (note that one of these may specify no value).
2097 Sections 4.13.1 and 4.13.2 describe additional requirements on the
2098 inclusion of responseName and responseValue in IntermediateResponse
2102 4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse
2104 A single-request/multiple-response operation may be defined using a
2105 single ExtendedRequest message to solicit zero or more
2106 IntermediateResponse messages of one or more kinds followed by an
2107 ExtendedResponse message.
2110 4.13.2. Usage with LDAP Request Controls
2112 A control's semantics may include the return of zero or more
2113 IntermediateResponse messages prior to returning the final result
2114 code for the operation. One or more kinds of IntermediateResponse
2115 messages may be sent in response to a request control.
2117 All IntermediateResponse messages associated with request controls
2118 SHALL include a responseName. This requirement ensures that the
2119 client can correctly identify the source of IntermediateResponse
2122 - two or more controls using IntermediateResponse messages are
2123 included in a request for any LDAP operation or
2125 - one or more controls using IntermediateResponse messages are
2126 included in a request with an LDAP Extended operation that uses
2127 IntermediateResponse messages.
2130 4.14. StartTLS Operation
2132 The Start Transport Layer Security (StartTLS) operation's purpose is
2133 to initiate installation of a TLS layer. The StartTLS operation is
2134 defined using the Extended operation mechanism described in Section
2145 Sermersheim Internet-Draft - Expires April 2006 Page 37
\f
2146 Lightweight Directory Access Protocol Version 3
2148 4.14.1. StartTLS Request
2150 A client requests TLS establishment by transmitting a StartTLS
2151 request message to the server. The StartTLS request is defined in
2152 terms of an ExtendedRequest. The requestName is
2153 "1.3.6.1.4.1.1466.20037", and the requestValue field is always
2156 The client MUST NOT send any LDAP PDUs at this LDAP message layer
2157 following this request until it receives a StartTLS Extended response
2158 and, in the case of a successful response, completes TLS
2161 Detected sequencing problems (particularly those detailed in Section
2162 3.1.1 of [AuthMeth]) result in the resultCode being set to
2165 If the server does not support TLS (whether by design or by current
2166 configuration), it returns with the resultCode set to protocolError
2167 as described in Section 4.12.
2170 4.14.2. StartTLS Response
2172 When a StartTLS request is received, servers supporting the operation
2173 MUST return a StartTLS response message to the requestor. The
2174 responseName is "1.3.6.1.4.1.1466.20037" when provided (See 4.12).
2175 The responseValue is always absent.
2177 If the server is willing and able to negotiate TLS, it returns the
2178 StartTLS response with the resultCode set to success. Upon client
2179 receipt of a successful StartTLS response, protocol peers may
2180 commence with TLS negotiation as discussed in Section 3 of
2183 If the server is otherwise unwilling or unable to perform this
2184 operation, the server is to return an appropriate result code
2185 indicating the nature of the problem. For example, if the TLS
2186 subsystem is not presently available, the server may indicate so by
2187 returning with the resultCode set to unavailable. In cases where a
2188 non-success result code is returned, the LDAP session is left without
2192 4.14.3. Removal of the TLS Layer
2194 Either the client or server MAY remove the TLS layer and leave the
2195 LDAP message layer intact by sending and receiving a TLS closure
2201 Sermersheim Internet-Draft - Expires April 2006 Page 38
\f
2202 Lightweight Directory Access Protocol Version 3
2204 The initiating protocol peer sends the TLS closure alert and MUST
2205 wait until it receives a TLS closure alert from the other peer before
2206 sending further LDAP PDUs.
2208 When a protocol peer receives the initial TLS closure alert, it may
2209 choose to allow the LDAP message layer to remain intact. In this
2210 case, it MUST immediately transmit a TLS closure alert. Following
2211 this, it MAY send and receive LDAP PDUs.
2213 Protocol peers MAY terminate the LDAP session after sending or
2214 receiving a TLS closure alert.
2217 5. Protocol Encoding, Connection, and Transfer
2219 This protocol is designed to run over connection-oriented, reliable
2220 transports, where the data stream is divided into octets (8-bit
2221 units), with each octet and each bit being significant.
2223 One underlying service, LDAP over TCP, is defined in Section
2224 5.2. This service is generally applicable to applications providing
2225 or consuming X.500-based directory services on the Internet. This
2226 specification was generally written with the TCP mapping in mind.
2227 Specifications detailing other mappings may encounter various
2230 Implementations of LDAP over TCP MUST implement the mapping as
2231 described in Section 5.2.
2233 This table illustrates the relationship between the different layers
2234 involved in an exchange between two protocol peers:
2236 +----------------------+
2237 | LDAP message layer |
2238 +----------------------+ > LDAP PDUs
2239 +----------------------+ < data
2241 +----------------------+ > SASL-protected data
2242 +----------------------+ < data
2244 Application +----------------------+ > TLS-protected data
2245 ------------+----------------------+ < data
2246 Transport | transport connection |
2247 +----------------------+
2250 5.1. Protocol Encoding
2252 The protocol elements of LDAP SHALL be encoded for exchange using the
2253 Basic Encoding Rules [BER] of [ASN.1] with the following
2256 - Only the definite form of length encoding is used.
2259 Sermersheim Internet-Draft - Expires April 2006 Page 39
\f
2260 Lightweight Directory Access Protocol Version 3
2263 - OCTET STRING values are encoded in the primitive form only.
2265 - If the value of a BOOLEAN type is true, the encoding of the value
2266 octet is set to hex "FF".
2268 - If a value of a type is its default value, it is absent. Only some
2269 BOOLEAN and INTEGER types have default values in this protocol
2272 These restrictions are meant to ease the overhead of encoding and
2273 decoding certain elements in BER.
2275 These restrictions do not apply to ASN.1 types encapsulated inside of
2276 OCTET STRING values, such as attribute values, unless otherwise
2280 5.2. Transmission Control Protocol (TCP)
2282 The encoded LDAPMessage PDUs are mapped directly onto the [TCP]
2283 bytestream using the BER-based encoding described in Section 5.1. It
2284 is recommended that server implementations running over the TCP
2285 provide a protocol listener on the Internet Assigned Numbers
2286 Authority (IANA)-assigned LDAP port, 389 [PortReg]. Servers may
2287 instead provide a listener on a different port number. Clients MUST
2288 support contacting servers on any valid TCP port.
2291 5.3. Termination of the LDAP session
2293 Termination of the LDAP session is typically initiated by the client
2294 sending an UnbindRequest (Section 4.3), or by the server sending a
2295 Notice of Disconnection (Section 4.4.1). In these cases each protocol
2296 peer gracefully terminates the LDAP session by ceasing exchanges at
2297 the LDAP message layer, tearing down any SASL layer, tearing down any
2298 TLS layer, and closing the transport connection.
2300 A protocol peer may determine that the continuation of any
2301 communication would be pernicious, and in this case may abruptly
2302 terminate the session by ceasing communication and closing the
2303 transport connection.
2305 In either case, when the LDAP session is terminated, uncompleted
2306 operations are handled as specified in Section 3.1.
2309 6. Security Considerations
2311 This version of the protocol provides facilities for simple
2312 authentication using a cleartext password, as well as any [SASL]
2313 mechanism. Installing SASL and/or TLS layers can provide integrity
2314 and other data security services.
2317 Sermersheim Internet-Draft - Expires April 2006 Page 40
\f
2318 Lightweight Directory Access Protocol Version 3
2320 It is also permitted that the server can return its credentials to
2321 the client, if it chooses to do so.
2323 Use of cleartext password is strongly discouraged where the
2324 underlying transport service cannot guarantee confidentiality and may
2325 result in disclosure of the password to unauthorized parties.
2327 Servers are encouraged to prevent directory modifications by clients
2328 that have authenticated anonymously [AuthMeth].
2330 Security considerations for authentication methods, SASL mechanisms,
2331 and TLS are described in [AuthMeth].
2333 It should be noted that SASL authentication exchanges do not provide
2334 data confidentiality nor integrity protection for the version or name
2335 fields of the BindRequest nor the resultCode, diagnosticMessage, or
2336 referral fields of the BindResponse nor of any information contained
2337 in controls attached to Bind requests or responses. Thus information
2338 contained in these fields SHOULD NOT be relied on unless otherwise
2339 protected (such as by establishing protections at the transport
2342 Implementors should note that various security factors, including
2343 authentication and authorization information and data security
2344 services may change during the course of the LDAP session, or even
2345 during the performance of a particular operation. For instance,
2346 credentials could expire, authorization identities or access controls
2347 could change, or the underlying security layer(s) could be replaced
2348 or terminated. Implementations should be robust in the handling of
2349 changing security factors.
2350 In some cases, it may be appropriate to continue the operation even
2351 in light of security factor changes. For instance, it may be
2352 appropriate to continue an Abandon operation regardless of the
2353 change, or to continue an operation when the change upgraded (or
2354 maintained) the security factor. In other cases, it may be
2355 appropriate to fail, or alter the processing of the operation. For
2356 instance, if confidential protections were removed, it would be
2357 appropriate to either fail a request to return sensitive data, or
2358 minimally, to exclude the return of sensitive data.
2360 Implementations which cache attributes and entries obtained via LDAP
2361 MUST ensure that access controls are maintained if that information
2362 is to be provided to multiple clients, since servers may have access
2363 control policies which prevent the return of entries or attributes in
2364 Search results except to particular authenticated clients. For
2365 example, caches could serve result information only to the client
2366 whose request caused it to be in the cache.
2375 Sermersheim Internet-Draft - Expires April 2006 Page 41
\f
2376 Lightweight Directory Access Protocol Version 3
2378 Servers may return referrals or Search result references which
2379 redirect clients to peer servers. It is possible for a rogue
2380 application to inject such referrals into the data stream in an
2381 attempt to redirect a client to a rogue server. Clients are advised
2382 to be aware of this, and possibly reject referrals when
2383 confidentiality measures are not in place. Clients are advised to
2384 reject referrals from the StartTLS operation.
2386 The matchedDN and diagnosticMessage fields, as well as some
2387 resultCode values (e.g., attributeOrValueExists and
2388 entryAlreadyExists), could disclose the presence or absence of
2389 specific data in the directory which is subject to access and other
2390 administrative controls. Server implementations should restrict
2391 access to protected information equally under both normal and error
2394 Protocol peers MUST be prepared to handle invalid and arbitrary
2395 length protocol encodings. Invalid protocol encodings include: BER
2396 encoding exceptions, format string and UTF-8 encoding exceptions,
2397 overflow exceptions, integer value exceptions, and binary mode on/off
2398 flag exceptions. The LDAPv3 PROTOS [PROTOS-LDAP] test suite provides
2399 excellent examples of these exceptions and test cases used to
2402 In the event that a protocol peer senses an attack which in its
2403 nature could cause damage due to further communication at any layer
2404 in the LDAP session, the protocol peer should abruptly terminate the
2405 LDAP session as described in Section 5.3.
2410 This document is based on RFC 2251 by Mark Wahl, Tim Howes, and Steve
2411 Kille. RFC 2251 was a product of the IETF ASID Working Group.
2413 It is also based on RFC 2830 by Jeff Hodges, RL "Bob" Morgan, and
2414 Mark Wahl. RFC 2830 was a product of the IETF LDAPEXT Working Group.
2416 It is also based on RFC 3771 by Roger Harrison, and Kurt Zeilenga.
2417 RFC 3771 was an individual submission to the IETF.
2419 This document is a product of the IETF LDAPBIS Working Group.
2420 Significant contributors of technical review and content include Kurt
2421 Zeilenga, Steven Legg, and Hallvard Furuseth.
2424 8. Normative References
2426 [ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax
2427 Specifications: ABNF", draft-crocker-abnf-rfc2234bis-
2428 xx.txt, (a work in progress).
2433 Sermersheim Internet-Draft - Expires April 2006 Page 42
\f
2434 Lightweight Directory Access Protocol Version 3
2436 [ASN.1] ITU-T Recommendation X.680 (07/2002) | ISO/IEC 8824-1:2002
2437 "Information Technology - Abstract Syntax Notation One
2438 (ASN.1): Specification of basic notation"
2440 [AuthMeth] Harrison, R., "LDAP: Authentication Methods and Connection
2441 Level Security Mechanisms", draft-ietf-ldapbis-authmeth-
2442 xx.txt, (a work in progress).
2444 [BER] ITU-T Rec. X.690 (07/2002) | ISO/IEC 8825-1:2002,
2445 "Information technology - ASN.1 encoding rules:
2446 Specification of Basic Encoding Rules (BER), Canonical
2447 Encoding Rules (CER) and Distinguished Encoding Rules
2450 [IP] Postel, J., "Internet Protocol", STD5 and RFC 791,
2453 [ISO10646] Universal Multiple-Octet Coded Character Set (UCS) -
2454 Architecture and Basic Multilingual Plane, ISO/IEC 10646-1
2457 [Keyword] Bradner, S., "Key words for use in RFCs to Indicate
2458 Requirement Levels", RFC 2119, March 1997.
2460 [LDAPDN] Zeilenga, K., "LDAP: String Representation of
2461 Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, (a
2464 [LDAPIANA] Zeilenga, K., "IANA Considerations for LDAP", draft-ietf-
2465 ldapbis-bcp64-xx.txt, (a work in progress).
2467 [LDAPURL] Smith, M., "LDAP: Uniform Resource Locator", draft-ietf-
2468 ldapbis-url-xx.txt, (a work in progress).
2470 [Models] Zeilenga, K., "LDAP: Directory Information Models", draft-
2471 ietf-ldapbis-models-xx.txt (a work in progress).
2473 [Roadmap] Zeilenga, K., "LDAP: Technical Specification Road Map",
2474 draft-ietf-ldapbis-roadmap-xx.txt (a work in progress).
2476 [SASL] Melnikov, A., "Simple Authentication and Security Layer",
2477 draft-ietf-sasl-rfc2222bis-xx.txt (a work in progress).
2479 [SASLPrep] Zeilenga, K., "Stringprep profile for user names and
2480 passwords", draft-ietf-sasl-saslprep-xx.txt, (a work in
2483 [StringPrep] Hoffman P. and M. Blanchet, "Preparation of
2484 Internationalized Strings ('stringprep')", draft-hoffman-
2485 rfc3454bis-xx.txt, a work in progress.
2487 [Syntaxes] Legg, S., and K. Dally, "LDAP: Syntaxes and Matching
2488 Rules", draft-ietf-ldapbis-syntaxes-xx.txt, (a work in
2491 Sermersheim Internet-Draft - Expires April 2006 Page 43
\f
2492 Lightweight Directory Access Protocol Version 3
2495 [TCP] Postel, J., "Transmission Control Protocol", STD7 and RFC
2498 [TLS] Dierks, T. and C. Allen. "The TLS Protocol Version 1.1",
2499 draft-ietf-tls-rfc2246-bis-xx.txt, a work in progress.
2501 [Unicode] The Unicode Consortium, "The Unicode Standard, Version
2502 3.2.0" is defined by "The Unicode Standard, Version 3.0"
2503 (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5),
2504 as amended by the "Unicode Standard Annex #27: Unicode
2505 3.1" (http://www.unicode.org/reports/tr27/) and by the
2506 "Unicode Standard Annex #28: Unicode 3.2"
2507 (http://www.unicode.org/reports/tr28/).
2509 [URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
2510 Resource Identifiers (URI): Generic Syntax", RFC 2396,
2513 [UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO
2514 10646", STD63 and RFC3629, November 2003.
2516 [X.500] ITU-T Rec. X.500, "The Directory: Overview of Concepts,
2517 Models and Service", 1993.
2519 [X.501] ITU-T Rec. X.501, "The Directory: Models", 1993.
2521 [X.511] ITU-T Rec. X.511, "The Directory: Abstract Service
2525 9. Informative References
2527 [Glossary] The Unicode Consortium, "Unicode Glossary",
2528 <http://www.unicode.org/glossary/>.
2530 [CharModel] Whistler, K. and M. Davis, "Unicode Technical Report
2531 #17, Character Encoding Model", UTR17,
2532 <http://www.unicode.org/unicode/reports/tr17/>, August
2535 [PROTOS-LDAP] University of Oulu, "PROTOS Test-Suite: c06-ldapv3"
2536 <http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/l
2539 [PortReg] IANA, "Port Numbers",
2540 http://www.iana.org/assignments/port-numbers
2543 10. IANA Considerations
2549 Sermersheim Internet-Draft - Expires April 2006 Page 44
\f
2550 Lightweight Directory Access Protocol Version 3
2552 It is requested that the Internet Assigned Numbers Authority (IANA)
2553 update the LDAP result code registry to indicate that this document
2554 provides the definitive technical specification for result codes 0-
2555 36, 48-54, 64-70, 80-90. It is also noted that one resultCode value
2556 (strongAuthRequired) has been renamed (to strongerAuthRequired).
2558 It is requested that the IANA update the LDAP Protocol Mechanism
2559 registry to indicate that this document and [AuthMeth] provides the
2560 definitive technical specification for the StartTLS
2561 (1.3.6.1.4.1.1466.20037) Extended operation.
2563 It is requested that the IANA update the occurrence of "RFC XXXX" in
2564 this section and Appendix B with this RFC number at publication.
2566 It is requested that IANA assign upon Standards Action an LDAP Object
2567 Identifier [LDAPIANA] to identify the ASN.1 module defined in this
2570 Subject: Request for LDAP Object Identifier Registration
2571 Person & email address to contact for further information:
2572 Jim Sermersheim <jimse@novell.com>
2573 Specification: RFC XXXX
2574 Author/Change Controller: IESG
2576 Identifies the LDAP ASN.1 module
2578 [[Note to RFC Editor: please replace the occurrence of <IANA-
2579 ASSIGNED-DIRECTORY-NUMBER> in Appendix B with the IANA assigned
2583 11. Editor's Address
2587 1800 South Novell Place
2588 Provo, Utah 84606, USA
2607 Sermersheim Internet-Draft - Expires April 2006 Page 45
\f
2608 Lightweight Directory Access Protocol Version 3
2610 Appendix A. LDAP Result Codes
2612 This normative appendix details additional considerations regarding
2613 LDAP result codes and provides a brief, general description of each
2614 LDAP result code enumerated in Section 4.1.9.
2616 Additional result codes MAY be defined for use with extensions
2617 [LDAPIANA]. Client implementations SHALL treat any result code which
2618 they do not recognize as an unknown error condition.
2620 The descriptions provided here do not fully account for result code
2621 substitutions used to prevent unauthorized disclosures (such as
2622 substitution of noSuchObject for insufficientAccessRights, or
2623 invalidCredentials for insufficientAccessRights).
2626 A.1. Non-Error Result Codes
2628 These result codes (called "non-error" result codes) do not indicate
2634 saslBindInProgress (14).
2636 The success, compareTrue, and compareFalse result codes indicate
2637 successful completion (and, hence, are referred to as "successful"
2640 The referral and saslBindInProgress result codes indicate the client
2641 needs to take additional action to complete the operation.
2646 Existing LDAP result codes are described as follows:
2649 Indicates the successful completion of an operation. Note:
2650 this code is not used with the Compare operation. See
2651 compareFalse (5) and compareTrue (6).
2654 Indicates that the operation is not properly sequenced with
2655 relation to other operations (of same or different type).
2657 For example, this code is returned if the client attempts to
2658 StartTLS [TLS] while there are other uncompleted operations
2659 or if a TLS layer was already installed.
2662 Indicates the server received data which is not well-formed.
2665 Sermersheim Internet-Draft - Expires April 2006 Page 46
\f
2666 Lightweight Directory Access Protocol Version 3
2668 For Bind operation only, this code is also used to indicate
2669 that the server does not support the requested protocol
2672 For Extended operations only, this code is also used to
2673 indicate that the server does not support (by design or
2674 configuration) the Extended operation associated with the
2677 For request operations specifying multiple controls, this may
2678 be used to indicate that the server cannot ignore the order
2679 of the controls as specified, or that the combination of the
2680 specified controls is invalid or unspecified.
2682 timeLimitExceeded (3)
2683 Indicates that the time limit specified by the client was
2684 exceeded before the operation could be completed.
2686 sizeLimitExceeded (4)
2687 Indicates that the size limit specified by the client was
2688 exceeded before the operation could be completed.
2691 Indicates that the Compare operation has successfully
2692 completed and the assertion has evaluated to FALSE or
2696 Indicates that the Compare operation has successfully
2697 completed and the assertion has evaluated to TRUE.
2699 authMethodNotSupported (7)
2700 Indicates that the authentication method or mechanism is not
2703 strongerAuthRequired (8)
2704 Indicates the server requires strong(er) authentication in
2705 order to complete the operation.
2707 When used with the Notice of Disconnection operation, this
2708 code indicates that the server has detected that an
2709 established security association between the client and
2710 server has unexpectedly failed or been compromised.
2713 Indicates that a referral needs to be chased to complete the
2714 operation (see Section 4.1.10).
2716 adminLimitExceeded (11)
2717 Indicates that an administrative limit has been exceeded.
2719 unavailableCriticalExtension (12)
2720 Indicates a critical control is unrecognized (see Section
2723 Sermersheim Internet-Draft - Expires April 2006 Page 47
\f
2724 Lightweight Directory Access Protocol Version 3
2727 confidentialityRequired (13)
2728 Indicates that data confidentiality protections are required.
2730 saslBindInProgress (14)
2731 Indicates the server requires the client to send a new bind
2732 request, with the same SASL mechanism, to continue the
2733 authentication process (see Section 4.2).
2735 noSuchAttribute (16)
2736 Indicates that the named entry does not contain the specified
2737 attribute or attribute value.
2739 undefinedAttributeType (17)
2740 Indicates that a request field contains an unrecognized
2741 attribute description.
2743 inappropriateMatching (18)
2744 Indicates that an attempt was made (e.g. in an assertion) to
2745 use a matching rule not defined for the attribute type
2748 constraintViolation (19)
2749 Indicates that the client supplied an attribute value which
2750 does not conform to the constraints placed upon it by the
2753 For example, this code is returned when multiple values are
2754 supplied to an attribute which has a SINGLE-VALUE constraint.
2756 attributeOrValueExists (20)
2757 Indicates that the client supplied an attribute or value to
2758 be added to an entry, but the attribute or value already
2761 invalidAttributeSyntax (21)
2762 Indicates that a purported attribute value does not conform
2763 to the syntax of the attribute.
2766 Indicates that the object does not exist in the DIT.
2769 Indicates that an alias problem has occurred. For example,
2770 the code may used to indicate an alias has been dereferenced
2771 which names no object.
2773 invalidDNSyntax (34)
2774 Indicates that an LDAPDN or RelativeLDAPDN field (e.g. search
2775 base, target entry, ModifyDN newrdn, etc.) of a request does
2776 not conform to the required syntax or contains attribute
2777 values which do not conform to the syntax of the attribute's
2781 Sermersheim Internet-Draft - Expires April 2006 Page 48
\f
2782 Lightweight Directory Access Protocol Version 3
2785 aliasDereferencingProblem (36)
2786 Indicates that a problem occurred while dereferencing an
2787 alias. Typically an alias was encountered in a situation
2788 where it was not allowed or where access was denied.
2790 inappropriateAuthentication (48)
2791 Indicates the server requires the client which had attempted
2792 to bind anonymously or without supplying credentials to
2793 provide some form of credentials.
2795 invalidCredentials (49)
2796 Indicates that the provided credentials (e.g. the user's name
2797 and password) are invalid.
2799 insufficientAccessRights (50)
2800 Indicates that the client does not have sufficient access
2801 rights to perform the operation.
2804 Indicates that the server is too busy to service the
2808 Indicates that the server is shutting down or a subsystem
2809 necessary to complete the operation is offline.
2811 unwillingToPerform (53)
2812 Indicates that the server is unwilling to perform the
2816 Indicates that the server has detected an internal loop (e.g.
2817 while dereferencing aliases or chaining an operation).
2819 namingViolation (64)
2820 Indicates that the entry's name violates naming restrictions.
2822 objectClassViolation (65)
2823 Indicates that the entry violates object class restrictions.
2825 notAllowedOnNonLeaf (66)
2826 Indicates that the operation is inappropriately acting upon a
2829 notAllowedOnRDN (67)
2830 Indicates that the operation is inappropriately attempting to
2831 remove a value which forms the entry's relative distinguished
2834 entryAlreadyExists (68)
2835 Indicates that the request cannot be fulfilled (added, moved,
2836 or renamed) as the target entry already exists.
2839 Sermersheim Internet-Draft - Expires April 2006 Page 49
\f
2840 Lightweight Directory Access Protocol Version 3
2843 objectClassModsProhibited (69)
2844 Indicates that an attempt to modify the object class(es) of
2845 an entry's 'objectClass' attribute is prohibited.
2847 For example, this code is returned when a client attempts to
2848 modify the structural object class of an entry.
2850 affectsMultipleDSAs (71)
2851 Indicates that the operation cannot be performed as it would
2852 affect multiple servers (DSAs).
2855 Indicates the server has encountered an internal error.
2897 Sermersheim Internet-Draft - Expires April 2006 Page 50
\f
2898 Lightweight Directory Access Protocol Version 3
2900 Appendix B. Complete ASN.1 Definition
2902 This appendix is normative.
2904 Lightweight-Directory-Access-Protocol-V3 {1 3 6 1 1 <IANA-
2905 ASSIGNED-DIRECTORY-NUMBER>}
2906 -- Copyright (C) The Internet Society (2005). This version of
2907 -- this ASN.1 module is part of RFC XXXX; see the RFC itself
2908 -- for full legal notices.
2911 EXTENSIBILITY IMPLIED ::=
2915 LDAPMessage ::= SEQUENCE {
2916 messageID MessageID,
2918 bindRequest BindRequest,
2919 bindResponse BindResponse,
2920 unbindRequest UnbindRequest,
2921 searchRequest SearchRequest,
2922 searchResEntry SearchResultEntry,
2923 searchResDone SearchResultDone,
2924 searchResRef SearchResultReference,
2925 modifyRequest ModifyRequest,
2926 modifyResponse ModifyResponse,
2927 addRequest AddRequest,
2928 addResponse AddResponse,
2929 delRequest DelRequest,
2930 delResponse DelResponse,
2931 modDNRequest ModifyDNRequest,
2932 modDNResponse ModifyDNResponse,
2933 compareRequest CompareRequest,
2934 compareResponse CompareResponse,
2935 abandonRequest AbandonRequest,
2936 extendedReq ExtendedRequest,
2937 extendedResp ExtendedResponse,
2939 intermediateResponse IntermediateResponse },
2940 controls [0] Controls OPTIONAL }
2942 MessageID ::= INTEGER (0 .. maxInt)
2944 maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) --
2946 LDAPString ::= OCTET STRING -- UTF-8 encoded,
2947 -- [ISO10646] characters
2949 LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models]
2951 LDAPDN ::= LDAPString -- Constrained to <distinguishedName>
2955 Sermersheim Internet-Draft - Expires April 2006 Page 51
\f
2956 Lightweight Directory Access Protocol Version 3
2958 RelativeLDAPDN ::= LDAPString -- Constrained to <name-component>
2961 AttributeDescription ::= LDAPString
2962 -- Constrained to <attributedescription>
2965 AttributeValue ::= OCTET STRING
2967 AttributeValueAssertion ::= SEQUENCE {
2968 attributeDesc AttributeDescription,
2969 assertionValue AssertionValue }
2971 AssertionValue ::= OCTET STRING
2973 PartialAttribute ::= SEQUENCE {
2974 type AttributeDescription,
2975 vals SET OF value AttributeValue }
2977 Attribute ::= PartialAttribute(WITH COMPONENTS {
2979 vals (SIZE(1..MAX))})
2981 MatchingRuleId ::= LDAPString
3013 Sermersheim Internet-Draft - Expires April 2006 Page 52
\f
3014 Lightweight Directory Access Protocol Version 3
3016 LDAPResult ::= SEQUENCE {
3017 resultCode ENUMERATED {
3019 operationsError (1),
3021 timeLimitExceeded (3),
3022 sizeLimitExceeded (4),
3025 authMethodNotSupported (7),
3026 strongerAuthRequired (8),
3029 adminLimitExceeded (11),
3030 unavailableCriticalExtension (12),
3031 confidentialityRequired (13),
3032 saslBindInProgress (14),
3033 noSuchAttribute (16),
3034 undefinedAttributeType (17),
3035 inappropriateMatching (18),
3036 constraintViolation (19),
3037 attributeOrValueExists (20),
3038 invalidAttributeSyntax (21),
3042 invalidDNSyntax (34),
3043 -- 35 reserved for undefined isLeaf --
3044 aliasDereferencingProblem (36),
3046 inappropriateAuthentication (48),
3047 invalidCredentials (49),
3048 insufficientAccessRights (50),
3051 unwillingToPerform (53),
3054 namingViolation (64),
3055 objectClassViolation (65),
3056 notAllowedOnNonLeaf (66),
3057 notAllowedOnRDN (67),
3058 entryAlreadyExists (68),
3059 objectClassModsProhibited (69),
3060 -- 70 reserved for CLDAP --
3061 affectsMultipleDSAs (71),
3066 diagnosticMessage LDAPString,
3067 referral [3] Referral OPTIONAL }
3069 Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI
3071 Sermersheim Internet-Draft - Expires April 2006 Page 53
\f
3072 Lightweight Directory Access Protocol Version 3
3075 URI ::= LDAPString -- limited to characters permitted in
3078 Controls ::= SEQUENCE OF control Control
3080 Control ::= SEQUENCE {
3081 controlType LDAPOID,
3082 criticality BOOLEAN DEFAULT FALSE,
3083 controlValue OCTET STRING OPTIONAL }
3085 BindRequest ::= [APPLICATION 0] SEQUENCE {
3086 version INTEGER (1 .. 127),
3088 authentication AuthenticationChoice }
3090 AuthenticationChoice ::= CHOICE {
3091 simple [0] OCTET STRING,
3093 sasl [3] SaslCredentials,
3096 SaslCredentials ::= SEQUENCE {
3097 mechanism LDAPString,
3098 credentials OCTET STRING OPTIONAL }
3100 BindResponse ::= [APPLICATION 1] SEQUENCE {
3101 COMPONENTS OF LDAPResult,
3102 serverSaslCreds [7] OCTET STRING OPTIONAL }
3104 UnbindRequest ::= [APPLICATION 2] NULL
3106 SearchRequest ::= [APPLICATION 3] SEQUENCE {
3113 derefAliases ENUMERATED {
3114 neverDerefAliases (0),
3115 derefInSearching (1),
3116 derefFindingBaseObj (2),
3118 sizeLimit INTEGER (0 .. maxInt),
3119 timeLimit INTEGER (0 .. maxInt),
3122 attributes AttributeSelection }
3124 AttributeSelection ::= SEQUENCE OF selector LDAPString
3125 -- The LDAPString is constrained to
3126 -- <attributeSelector> in Section 4.5.1.7
3129 Sermersheim Internet-Draft - Expires April 2006 Page 54
\f
3130 Lightweight Directory Access Protocol Version 3
3133 and [0] SET SIZE (1..MAX) OF filter Filter,
3134 or [1] SET SIZE (1..MAX) OF filter Filter,
3136 equalityMatch [3] AttributeValueAssertion,
3137 substrings [4] SubstringFilter,
3138 greaterOrEqual [5] AttributeValueAssertion,
3139 lessOrEqual [6] AttributeValueAssertion,
3140 present [7] AttributeDescription,
3141 approxMatch [8] AttributeValueAssertion,
3142 extensibleMatch [9] MatchingRuleAssertion,
3145 SubstringFilter ::= SEQUENCE {
3146 type AttributeDescription,
3147 substrings SEQUENCE SIZE (1..MAX) OF substring CHOICE {
3148 initial [0] AssertionValue, -- can occur at most once
3149 any [1] AssertionValue,
3150 final [2] AssertionValue } -- can occur at most once
3153 MatchingRuleAssertion ::= SEQUENCE {
3154 matchingRule [1] MatchingRuleId OPTIONAL,
3155 type [2] AttributeDescription OPTIONAL,
3156 matchValue [3] AssertionValue,
3157 dnAttributes [4] BOOLEAN DEFAULT FALSE }
3159 SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
3161 attributes PartialAttributeList }
3163 PartialAttributeList ::= SEQUENCE OF
3164 partialAttribute PartialAttribute
3166 SearchResultReference ::= [APPLICATION 19] SEQUENCE
3167 SIZE (1..MAX) OF uri URI
3169 SearchResultDone ::= [APPLICATION 5] LDAPResult
3171 ModifyRequest ::= [APPLICATION 6] SEQUENCE {
3173 changes SEQUENCE OF change SEQUENCE {
3174 operation ENUMERATED {
3179 modification PartialAttribute } }
3181 ModifyResponse ::= [APPLICATION 7] LDAPResult
3183 AddRequest ::= [APPLICATION 8] SEQUENCE {
3185 attributes AttributeList }
3187 Sermersheim Internet-Draft - Expires April 2006 Page 55
\f
3188 Lightweight Directory Access Protocol Version 3
3191 AttributeList ::= SEQUENCE OF attribute Attribute
3193 AddResponse ::= [APPLICATION 9] LDAPResult
3195 DelRequest ::= [APPLICATION 10] LDAPDN
3197 DelResponse ::= [APPLICATION 11] LDAPResult
3199 ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
3201 newrdn RelativeLDAPDN,
3202 deleteoldrdn BOOLEAN,
3203 newSuperior [0] LDAPDN OPTIONAL }
3205 ModifyDNResponse ::= [APPLICATION 13] LDAPResult
3207 CompareRequest ::= [APPLICATION 14] SEQUENCE {
3209 ava AttributeValueAssertion }
3211 CompareResponse ::= [APPLICATION 15] LDAPResult
3213 AbandonRequest ::= [APPLICATION 16] MessageID
3215 ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
3216 requestName [0] LDAPOID,
3217 requestValue [1] OCTET STRING OPTIONAL }
3219 ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
3220 COMPONENTS OF LDAPResult,
3221 responseName [10] LDAPOID OPTIONAL,
3222 responseValue [11] OCTET STRING OPTIONAL }
3224 IntermediateResponse ::= [APPLICATION 25] SEQUENCE {
3225 responseName [0] LDAPOID OPTIONAL,
3226 responseValue [1] OCTET STRING OPTIONAL }
3245 Sermersheim Internet-Draft - Expires April 2006 Page 56
\f
3246 Lightweight Directory Access Protocol Version 3
3250 This appendix is non-normative.
3252 This appendix summarizes substantive changes made to RFC 2251, RFC
3256 C.1. Changes made to RFC 2251:
3258 This section summarizes the substantive changes made to Sections 1,
3259 2, 3.1, and 4 through the remainder of RFC 2251. Readers should
3260 consult [Models] and [AuthMeth] for summaries of changes to other
3264 C.1.1. Section 1 (Status of this Memo)
3266 - Removed IESG note. Post publication of RFC 2251, mandatory LDAP
3267 authentication mechanisms have been standardized which are
3268 sufficient to remove this note. See [AuthMeth] for authentication
3272 C.1.2. Section 3.1 (Protocol Model) and others
3274 - Removed notes giving history between LDAP v1, v2 and v3. Instead,
3275 added sufficient language so that this document can stand on its
3279 C.1.3. Section 4 (Elements of Protocol)
3281 - Clarified where the extensibility features of ASN.1 apply to the
3282 protocol. This change affected various ASN.1 types by the
3283 inclusion of ellipses (...) to certain elements.
3284 - Removed the requirement that servers which implement version 3 or
3285 later MUST provide the 'supportedLDAPVersion' attribute. This
3286 statement provided no interoperability advantages.
3289 C.1.4. Section 4.1.1 (Message Envelope)
3291 - There was a mandatory requirement for the server to return a
3292 Notice of Disconnection and drop the transport connection when a
3293 PDU is malformed in a certain way. This has been updated such that
3294 the server SHOULD return the Notice of Disconnection, and MUST
3295 terminate the LDAP Session.
3298 C.1.5. Section 4.1.1.1 (Message ID)
3300 - Required that the messageID of requests MUST be non-zero as the
3301 zero is reserved for Notice of Disconnection.
3303 Sermersheim Internet-Draft - Expires April 2006 Page 57
\f
3304 Lightweight Directory Access Protocol Version 3
3306 - Specified when it is and isn't appropriate to return an already
3307 used message id. RFC 2251 accidentally imposed synchronous server
3308 behavior in its wording of this.
3311 C.1.6. Section 4.1.2 (String Types)
3313 - Stated that LDAPOID is constrained to <numericoid> from [Models].
3316 C.1.7. Section 4.1.5.1 (Binary Option) and others
3318 - Removed the Binary Option from the specification. There are
3319 numerous interoperability problems associated with this method of
3320 alternate attribute type encoding. Work to specify a suitable
3321 replacement is ongoing.
3324 C.1.8. Section 4.1.8 (Attribute)
3326 - Combined the definitions of PartialAttribute and Attribute here,
3327 and defined Attribute in terms of PartialAttribute.
3330 C.1.9. Section 4.1.10 (Result Message)
3332 - Renamed "errorMessage" to "diagnosticMessage" as it is allowed to
3333 be sent for non-error results.
3334 - Moved some language into Appendix A, and refer the reader there.
3335 - Allowed matchedDN to be present for other result codes than those
3337 - renamed the code "strongAuthRequired" to "strongerAuthRequired" to
3338 clarify that this code may often be returned to indicate that a
3339 stronger authentication is needed to perform a given operation.
3342 C.1.10. Section 4.1.11 (Referral)
3344 - Defined referrals in terms of URIs rather than URLs.
3345 - Removed the requirement that all referral URIs MUST be equally
3346 capable of progressing the operation. The statement was ambiguous
3347 and provided no instructions on how to carry it out.
3348 - Added the requirement that clients MUST NOT loop between servers.
3349 - Clarified the instructions for using LDAPURLs in referrals, and in
3350 doing so added a recommendation that the scope part be present.
3351 - Removed imperatives which required clients to use URLs in specific
3352 ways to progress an operation. These did nothing for
3356 C.1.11. Section 4.1.12 (Controls)
3358 - Specified how control values defined in terms of ASN.1 are to be
3361 Sermersheim Internet-Draft - Expires April 2006 Page 58
\f
3362 Lightweight Directory Access Protocol Version 3
3364 - Noted that the criticality field is only applied to request
3365 messages (except UnbindRequest), and must be ignored when present
3366 on response messages and UnbindRequest.
3367 - Specified that non-critical controls may be ignored at the
3368 server's discretion. There was confusion in the original wording
3369 which led some to believe that recognized controls may not be
3370 ignored as long as they were associated with a proper request.
3371 - Added language regarding combinations of controls and the ordering
3372 of controls on a message.
3373 - Specified that when the semantics of the combination of controls
3374 is undefined or unknown, it results in a protocolError.
3375 - Changed "The server MUST be prepared" to "Implementations MUST be
3376 prepared" in the eighth paragraph to reflect that both client and
3377 server implementations must be able to handle this (as both parse
3381 C.1.12. Section 4.2 (Bind Operation)
3383 - Mandated that servers return protocolError when the version is not
3385 - Disambiguated behavior when the simple authentication is used, the
3386 name is empty and the password is non-empty.
3387 - Required servers to not dereference aliases for Bind. This was
3388 added for consistency with other operations and to help ensure
3390 - Required that textual passwords be transferred as UTF-8 encoded
3391 Unicode, and added recommendations on string preparation. This was
3392 to help ensure interoperability of passwords being sent from
3396 C.1.13. Section 4.2.1 (Sequencing of the Bind Request)
3398 - This section was largely reorganized for readability and language
3399 was added to clarify the authentication state of failed and
3400 abandoned Bind operations.
3401 - Removed: "If a SASL transfer encryption or integrity mechanism has
3402 been negotiated, that mechanism does not support the changing of
3403 credentials from one identity to another, then the client MUST
3404 instead establish a new connection."
3405 If there are dependencies between multiple negotiations of a
3406 particular SASL mechanism, the technical specification for that
3407 SASL mechanism details how applications are to deal with them.
3408 LDAP should not require any special handling.
3409 - Dropped MUST imperative in paragraph 3 to align with [Keywords].
3410 - Mandated that clients not send non-Bind operations while a Bind is
3411 in progress, and suggested that servers not process them if they
3412 are received. This is needed to ensure proper sequencing of the
3413 Bind in relationship to other operations.
3419 Sermersheim Internet-Draft - Expires April 2006 Page 59
\f
3420 Lightweight Directory Access Protocol Version 3
3422 C.1.14. Section 4.2.3 (Bind Response)
3424 - Moved most error-related text to Appendix A, and added text
3425 regarding certain errors used in conjunction with the Bind
3427 - Prohibited the server from specifying serverSaslCreds when not
3431 C.1.15. Section 4.3 (Unbind Operation)
3433 - Specified that both peers are to cease transmission and terminate
3434 the LDAP session for the Unbind operation.
3437 C.1.16. Section 4.4 (Unsolicited Notification)
3439 - Added instructions for future specifications of Unsolicited
3443 C.1.17. Section 4.5.1 (Search Request)
3445 - SearchRequest attributes is now defined as an AttributeSelection
3446 type rather than AttributeDescriptionList, and an ABNF is
3448 - SearchRequest attributes may contain duplicate attribute
3449 descriptions. This was previously prohibited. Now servers are
3450 instructed to ignore subsequent names when they are duplicated.
3451 This was relaxed in order to allow different short names and also
3452 OIDs to be requested for an attribute.
3453 - The present search filter now evaluates to Undefined when the
3454 specified attribute is not known to the server. It used to
3455 evaluate to FALSE, which caused behavior inconsistent with what
3456 most would expect, especially when the not operator was used.
3457 - The Filter choice SubstringFilter substrings type is now defined
3458 with a lower bound of 1.
3459 - The SubstringFilter substrings 'initial, 'any', and 'final' types
3460 are now AssertionValue rather than LDAPString. Also, added
3461 imperatives stating that 'initial' (if present) must be listed
3462 first, and 'final' (if present) must be listed last.
3463 - Disambiguated the semantics of the derefAliases choices. There was
3464 question as to whether derefInSearching applied to the base object
3465 in a wholeSubtree Search.
3466 - Added instructions for equalityMatch, substrings, greaterOrEqual,
3467 lessOrEqual, and approxMatch.
3470 C.1.18. Section 4.5.2 (Search Result)
3472 - Recommended that servers not use attribute short names when it
3473 knows they are ambiguous or may cause interoperability problems.
3474 - Removed all mention of ExtendedResponse due to lack of
3477 Sermersheim Internet-Draft - Expires April 2006 Page 60
\f
3478 Lightweight Directory Access Protocol Version 3
3482 C.1.19. Section 4.5.3 (Continuation References in the Search Result)
3484 - Made changes similar to those made to Section 4.1.11.
3487 C.1.20. Section 4.5.3.1 (Example)
3489 - Fixed examples to adhere to changes made to Section 4.5.3.
3492 C.1.21. Section 4.6 (Modify Operation)
3494 - Replaced AttributeTypeAndValues with Attribute as they are
3496 - Specified the types of modification changes which might
3497 temporarily violate schema. Some readers were under the impression
3498 that any temporary schema violation was allowed.
3501 C.1.22. Section 4.7 (Add Operation)
3503 - Aligned Add operation with X.511 in that the attributes of the RDN
3504 are used in conjunction with the listed attributes to create the
3505 entry. Previously, Add required that the distinguished values be
3506 present in the listed attributes.
3507 - Removed requirement that the objectClass attribute MUST be
3508 specified as some DSE types do not require this attribute.
3509 Instead, generic wording was added, requiring the added entry to
3510 adhere to the data model.
3511 - Removed recommendation regarding placement of objects. This is
3512 covered in the data model document.
3515 C.1.23. Section 4.9 (Modify DN Operation)
3517 - Required servers to not dereference aliases for Modify DN. This
3518 was added for consistency with other operations and to help ensure
3520 - Allow Modify DN to fail when moving between naming contexts.
3521 - Specified what happens when the attributes of the newrdn are not
3522 present on the entry.
3525 C.1.24. Section 4.10 (Compare Operation)
3527 - Specified that compareFalse means that the Compare took place and
3528 the result is false. There was confusion which lead people to
3529 believe that an Undefined match resulted in compareFalse.
3530 - Required servers to not dereference aliases for Compare. This was
3531 added for consistency with other operations and to help ensure
3535 Sermersheim Internet-Draft - Expires April 2006 Page 61
\f
3536 Lightweight Directory Access Protocol Version 3
3539 C.1.25. Section 4.11 (Abandon Operation)
3541 - Explained that since Abandon returns no response, clients should
3542 not use it if they need to know the outcome.
3543 - Specified that Abandon and Unbind cannot be abandoned.
3546 C.1.26. Section 4.12 (Extended Operation)
3548 - Specified how values of Extended operations defined in terms of
3549 ASN.1 are to be encoded.
3550 - Added instructions on what Extended operation specifications
3552 - Added a recommendation that servers advertise supported Extended
3556 C.1.27. Section 5.2 (Transfer Protocols)
3558 - Moved referral-specific instructions into referral-related
3562 C.1.28. Section 7 (Security Considerations)
3564 - Reworded notes regarding SASL not protecting certain aspects of
3565 the LDAP Bind messages.
3566 - Noted that Servers are encouraged to prevent directory
3567 modifications by clients that have authenticated anonymously
3569 - Added a note regarding the possibility of changes to security
3570 factors (authentication, authorization, data confidentiality).
3571 - Warned against following referrals that may have been injected in
3573 - Noted that servers should protect information equally, whether in
3574 an error condition or not, and mentioned specifically; matchedDN,
3575 diagnosticMessage, and resultCodes.
3576 - Added a note regarding malformed and long encodings.
3579 C.1.29. Appendix A (Complete ASN.1 Definition)
3581 - Added "EXTENSIBILITY IMPLIED" to ASN.1 definition.
3582 - Removed AttributeType. It is not used.
3585 C.2. Changes made to RFC 2830:
3587 This section summarizes the substantive changes made to Sections of
3588 RFC 2830. Readers should consult [AuthMeth] for summaries of changes
3593 Sermersheim Internet-Draft - Expires April 2006 Page 62
\f
3594 Lightweight Directory Access Protocol Version 3
3596 C.2.1. Section 2.3 (Response other than "success")
3598 - Removed wording indicating that referrals can be returned from
3600 - Removed requirement that only a narrow set of result codes can be
3601 returned. Some result codes are required in certain scenarios, but
3602 any other may be returned if appropriate.
3603 - Removed requirement that the ExtendedResponse.responseName MUST be
3604 present. There are circumstances where this is impossible, and
3605 requiring this is at odds with language in Section 4.12.
3608 C.2.1. Section 4 (Closing a TLS Connection)
3610 - Reworded most of this section to align with definitions of the
3611 LDAP protocol layers.
3612 - Removed instructions on abrupt closure as this is covered in other
3613 areas of the document (specifically, Section 5.3)
3616 C.3. Changes made to RFC 3771:
3618 - Rewrote to fit into this document. In general, semantics were
3619 preserved. Supporting and background language seen as redundant
3620 due to its presence in this document was omitted.
3621 - Specified that Intermediate responses to a request may be of
3622 different types, and one of the response types may be specified to
3623 have no response value.
3651 Sermersheim Internet-Draft - Expires April 2006 Page 63
\f
3652 Lightweight Directory Access Protocol Version 3
3657 Intellectual Property Statement
3659 The IETF takes no position regarding the validity or scope of any
3660 Intellectual Property Rights or other rights that might be claimed to
3661 pertain to the implementation or use of the technology described in
3662 this document or the extent to which any license under such rights
3663 might or might not be available; nor does it represent that it has
3664 made any independent effort to identify any such rights. Information
3665 on the procedures with respect to rights in RFC documents can be
3666 found in BCP 78 and BCP 79.
3668 Copies of IPR disclosures made to the IETF Secretariat and any
3669 assurances of licenses to be made available, or the result of an
3670 attempt made to obtain a general license or permission for the use of
3671 such proprietary rights by implementers or users of this
3672 specification can be obtained from the IETF on-line IPR repository at
3673 http://www.ietf.org/ipr.
3675 The IETF invites any interested party to bring to its attention any
3676 copyrights, patents or patent applications, or other proprietary
3677 rights that may cover technology that may be required to implement
3678 this standard. Please address the information to the IETF at ietf-
3681 Disclaimer of Validity
3683 This document and the information contained herein are provided on an
3684 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
3685 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
3686 ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
3687 INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
3688 INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
3689 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
3693 Copyright (C) The Internet Society (2005).
3695 This document is subject to the rights, licenses and restrictions
3696 contained in BCP 78, and except as set forth therein, the authors
3697 retain all their rights.
3701 Funding for the RFC Editor function is currently provided by the
3709 Sermersheim Internet-Draft - Expires April 2006 Page 64