]> git.sur5r.net Git - openldap/commitdiff
add manageDIt control spec, update protocol
authorKurt Zeilenga <kurt@openldap.org>
Tue, 28 Feb 2006 22:28:02 +0000 (22:28 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Tue, 28 Feb 2006 22:28:02 +0000 (22:28 +0000)
doc/drafts/draft-ietf-ldapbis-protocol-xx.txt
doc/drafts/draft-zeilenga-ldap-managedit-xx.txt [new file with mode: 0644]

index a04954d25815a97c203f1d16e7893c0009e97348..575f1dc529a1f87c117ab60a21f04f6fc69b36e7 100644 (file)
\r
-\r
-Internet-Draft                                  Editor:  J. Sermersheim \r
-Intended Category: Standard Track                           Novell, Inc \r
-Document: draft-ietf-ldapbis-protocol-32.txt                   Oct 2005 \r
-Obsoletes: RFCs 2251, 2830, 3771                                        \r
\r
-    \r
-                            LDAP: The Protocol \r
\r
\r
-Status of this Memo \r
\r
-   By submitting this Internet-Draft, each \r
-   author represents that any applicable patent or other IPR claims of \r
-   which he or she is aware have been or will be disclosed, and any of \r
-   which he or she becomes aware will be disclosed, in accordance with \r
-   Section 6 of BCP 79. \r
-    \r
-   Internet-Drafts are working documents of the Internet Engineering \r
-   Task Force (IETF), its areas, and its working groups. Note that other \r
-   groups may also distribute working documents as Internet-Drafts. \r
-    \r
-   Internet-Drafts are draft documents valid for a maximum of six months \r
-   and may be updated, replaced, or obsoleted by other documents at any \r
-   time. It is inappropriate to use Internet-Drafts as reference \r
-   material or to cite them other than as "work in progress".  \r
-    \r
-   The list of current Internet-Drafts can be accessed at \r
-   http://www.ietf.org/ietf/1id-abstracts.txt.  \r
-    \r
-   The list of Internet-Draft Shadow Directories can be accessed at \r
-   http://www.ietf.org/shadow.html.  \r
-    \r
-   This Internet-Draft will expire in February 2005.  \r
-    \r
-   Technical discussion of this document will take place on the IETF \r
-   LDAP Revision Working Group (LDAPbis) mailing list <ietf-\r
-   ldapbis@openldap.org>. Please send editorial comments directly to the \r
-   editor <jimse@novell.com>. \r
-    \r
\r
-Abstract \r
\r
-   This document describes the protocol elements, along with their \r
-   semantics and encodings, of the Lightweight Directory Access Protocol \r
-   (LDAP). LDAP provides access to distributed directory services that \r
-   act in accordance with X.500 data and service models. These protocol \r
-   elements are based on those described in the X.500 Directory Access \r
-   Protocol (DAP). \r
-    \r
-    \r
-Table of Contents \r
-    \r
-\r
\r
-Sermersheim      Internet-Draft - Expires April 2006              Page 1 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   1. Introduction....................................................3 \r
-   1.1. Relationship to Other LDAP Specifications.....................3 \r
-   2. Conventions.....................................................3 \r
-   3. Protocol Model..................................................4 \r
-   3.1 Operation and LDAP Message Layer Relationship..................5 \r
-   4. Elements of Protocol............................................5 \r
-   4.1. Common Elements...............................................5 \r
-   4.1.1. Message Envelope............................................5 \r
-   4.1.2. String Types................................................7 \r
-   4.1.3. Distinguished Name and Relative Distinguished Name..........7 \r
-   4.1.4. Attribute Descriptions......................................8 \r
-   4.1.5. Attribute Value.............................................8 \r
-   4.1.6. Attribute Value Assertion...................................8 \r
-   4.1.7. Attribute and PartialAttribute..............................9 \r
-   4.1.8. Matching Rule Identifier....................................9 \r
-   4.1.9. Result Message..............................................9 \r
-   4.1.10. Referral..................................................11 \r
-   4.1.11. Controls..................................................13 \r
-   4.2. Bind Operation...............................................14 \r
-   4.3. Unbind Operation.............................................17 \r
-   4.4. Unsolicited Notification.....................................17 \r
-   4.5. Search Operation.............................................18 \r
-   4.6. Modify Operation.............................................29 \r
-   4.7. Add Operation................................................31 \r
-   4.8. Delete Operation.............................................31 \r
-   4.9. Modify DN Operation..........................................32 \r
-   4.10. Compare Operation...........................................33 \r
-   4.11. Abandon Operation...........................................34 \r
-   4.12. Extended Operation..........................................35 \r
-   4.13. IntermediateResponse Message................................36 \r
-   4.14. StartTLS Operation..........................................37 \r
-   5. Protocol Encoding, Connection, and Transfer....................39 \r
-   5.1. Protocol Encoding............................................39 \r
-   5.2. Transmission Control Protocol (TCP)..........................40 \r
-   5.3. Termination of the LDAP session..............................40 \r
-   6. Security Considerations........................................40 \r
-   7. Acknowledgements...............................................42 \r
-   8. Normative References...........................................42 \r
-   9. Informative References.........................................44 \r
-   10. IANA Considerations...........................................44 \r
-   11. Editor's Address..............................................45 \r
-   Appendix A - LDAP Result Codes....................................46 \r
-   A.1 Non-Error Result Codes........................................46 \r
-   A.2 Result Codes..................................................46 \r
-   Appendix B - Complete ASN.1 Definition............................51 \r
-   Appendix C - Changes..............................................57 \r
-   C.1 Changes made to RFC 2251:.....................................57 \r
-   C.2 Changes made to RFC 2830:.....................................62 \r
-   C.3 Changes made to RFC 3771:.....................................63 \r
-    \r
\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006              Page 2 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-1. Introduction \r
-    \r
-   The Directory is "a collection of open systems cooperating to provide \r
-   directory services" [X.500]. A directory user, which may be a human \r
-   or other entity, accesses the Directory through a client (or \r
-   Directory User Agent (DUA)). The client, on behalf of the directory \r
-   user, interacts with one or more servers (or Directory System Agents \r
-   (DSA)). Clients interact with servers using a directory access \r
-   protocol.  \r
-    \r
-   This document details the protocol elements of the Lightweight \r
-   Directory Access Protocol (LDAP), along with their semantics. \r
-   Following the description of protocol elements, it describes the way \r
-   in which the protocol elements are encoded and transferred. \r
-    \r
-    \r
-1.1. Relationship to Other LDAP Specifications \r
-    \r
-   This document is an integral part of the LDAP Technical Specification \r
-   [Roadmap] which obsoletes the previously defined LDAP technical \r
-   specification, RFC 3377, in its entirety. \r
-    \r
-   This document, together with [Roadmap], [AuthMeth], and [Models], \r
-   obsoletes RFC 2251 in its entirety. Section 3.3 is obsoleted by \r
-   [Roadmap]. Sections 4.2.1 (portions), and 4.2.2 are obsoleted by \r
-   [AuthMeth].  Sections 3.2, 3.4, 4.1.3 (last paragraph), 4.1.4, 4.1.5, \r
-   4.1.5.1, 4.1.9 (last paragraph), 5.1, 6.1, and 6.2 (last paragraph) \r
-   are obsoleted by [Models].  The remainder of RFC 2251 is obsoleted by \r
-   this document.  Appendix C.1 summarizes substantive changes in the \r
-   remainder. \r
-    \r
-   This document obsoletes RFC 2830, Sections 2 and 4. The remainder of \r
-   RFC 2830 is obsoleted by [AuthMeth]. Appendix C.2 summarizes \r
-   substantive changes to the remaining sections. \r
-    \r
-   This document also obsoletes RFC 3771 in entirety. \r
-    \r
-    \r
-2. Conventions \r
-    \r
-   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", \r
-   "SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are \r
-   to be interpreted as described in [Keyword]. \r
-    \r
-   Character names in this document use the notation for code points and \r
-   names from the Unicode Standard [Unicode].  For example, the letter \r
-   "a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>. \r
-    \r
-   Note: a glossary of terms used in Unicode can be found in [Glossary]. \r
-   Information on the Unicode character encoding model can be found in \r
-   [CharModel]. \r
-    \r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006              Page 3 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   The term "transport connection" refers to the underlying transport \r
-   services used to carry the protocol exchange, as well as associations \r
-   established by these services. \r
-    \r
-   The term "TLS layer" refers to TLS services used in providing \r
-   security services, as well as associations established by these \r
-   services. \r
-    \r
-   The term "SASL layer" refers to SASL services used in providing \r
-   security services, as well as associations established by these \r
-   services. \r
-    \r
-   The term "LDAP message layer" refers to the LDAP Message Protocol \r
-   Data Unit (PDU) services used in providing directory services, as \r
-   well as associations established by these services. \r
-    \r
-   The term "LDAP session" refers to combined services (transport \r
-   connection, TLS layer, SASL layer, LDAP message layer) and their \r
-   associations. \r
-    \r
-   See the table in Section 5 for an illustration of these four terms. \r
\r
\r
-3. Protocol Model \r
\r
-   The general model adopted by this protocol is one of clients \r
-   performing protocol operations against servers. In this model, a \r
-   client transmits a protocol request describing the operation to be \r
-   performed to a server. The server is then responsible for performing \r
-   the necessary operation(s) in the Directory. Upon completion of an \r
-   operation, the server typically returns a response containing \r
-   appropriate data to the requesting client. \r
-    \r
-   Protocol operations are generally independent of one another. Each \r
-   operation is processed as an atomic action, leaving the directory in \r
-   a consistent state. \r
-    \r
-   Although servers are required to return responses whenever such \r
-   responses are defined in the protocol, there is no requirement for \r
-   synchronous behavior on the part of either clients or servers. \r
-   Requests and responses for multiple operations generally may be \r
-   exchanged between a client and server in any order. If required, \r
-   synchronous behavior may be controlled by client applications. \r
\r
-   The core protocol operations defined in this document can be mapped \r
-   to a subset of the X.500 (1993) Directory Abstract Service [X.511]. \r
-   However there is not a one-to-one mapping between LDAP operations and \r
-   X.500 Directory Access Protocol (DAP) operations. Server \r
-   implementations acting as a gateway to X.500 directories may need to \r
-   make multiple DAP requests to service a single LDAP request. \r
\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006              Page 4 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
\r
-3.1. Operation and LDAP Message Layer Relationship \r
-    \r
-   Protocol operations are exchanged at the LDAP message layer. When the \r
-   transport connection is closed, any uncompleted operations at the \r
-   LDAP message layer, when possible, are abandoned, and when not \r
-   possible, are completed without transmission of the response. Also, \r
-   when the transport connection is closed, the client MUST NOT assume \r
-   that any uncompleted update operations have succeeded or failed. \r
-    \r
\r
-4. Elements of Protocol \r
-    \r
-   The protocol is described using Abstract Syntax Notation One \r
-   ([ASN.1]), and is transferred using a subset of ASN.1 Basic Encoding \r
-   Rules ([BER]). Section 5 specifies how the protocol elements are \r
-   encoded and transferred. \r
\r
-   In order to support future extensions to this protocol, extensibility \r
-   is implied where it is allowed per ASN.1 (i.e. sequence, set, choice, \r
-   and enumerated types are extensible). In addition, ellipses (...) \r
-   have been supplied in ASN.1 types that are explicitly extensible as \r
-   discussed in [LDAPIANA]. Because of the implied extensibility, \r
-   clients and servers MUST (unless otherwise specified) ignore trailing \r
-   SEQUENCE components whose tags they do not recognize.  \r
-    \r
-   Changes to the protocol other than through the extension mechanisms \r
-   described here require a different version number. A client indicates \r
-   the version it is using as part of the BindRequest, described in \r
-   Section 4.2. If a client has not sent a Bind, the server MUST assume \r
-   the client is using version 3 or later. \r
-    \r
-   Clients may attempt to determine the protocol versions a server \r
-   supports by reading the 'supportedLDAPVersion' attribute from the \r
-   root DSE (DSA-Specific Entry) [Models]. \r
-    \r
-    \r
-4.1. Common Elements \r
-    \r
-   This section describes the LDAPMessage envelope Protocol Data Unit \r
-   (PDU) format, as well as data type definitions, which are used in the \r
-   protocol operations. \r
-    \r
-    \r
-4.1.1. Message Envelope \r
-    \r
-   For the purposes of protocol exchanges, all protocol operations are \r
-   encapsulated in a common envelope, the LDAPMessage, which is defined \r
-   as follows: \r
-    \r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006              Page 5 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-        LDAPMessage ::= SEQUENCE { \r
-             messageID       MessageID, \r
-             protocolOp      CHOICE { \r
-                  bindRequest           BindRequest, \r
-                  bindResponse          BindResponse, \r
-                  unbindRequest         UnbindRequest, \r
-                  searchRequest         SearchRequest, \r
-                  searchResEntry        SearchResultEntry, \r
-                  searchResDone         SearchResultDone, \r
-                  searchResRef          SearchResultReference, \r
-                  modifyRequest         ModifyRequest, \r
-                  modifyResponse        ModifyResponse, \r
-                  addRequest            AddRequest, \r
-                  addResponse           AddResponse, \r
-                  delRequest            DelRequest, \r
-                  delResponse           DelResponse, \r
-                  modDNRequest          ModifyDNRequest, \r
-                  modDNResponse         ModifyDNResponse, \r
-                  compareRequest        CompareRequest, \r
-                  compareResponse       CompareResponse, \r
-                  abandonRequest        AbandonRequest, \r
-                  extendedReq           ExtendedRequest, \r
-                  extendedResp          ExtendedResponse, \r
-                  ..., \r
-                  intermediateResponse  IntermediateResponse }, \r
-             controls       [0] Controls OPTIONAL } \r
-    \r
-        MessageID ::= INTEGER (0 .. maxInt) \r
-    \r
-        maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- \r
-    \r
-   The ASN.1 type Controls is defined in Section 4.1.11. \r
-    \r
-   The function of the LDAPMessage is to provide an envelope containing \r
-   common fields required in all protocol exchanges. At this time the \r
-   only common fields are the messageID and the controls. \r
-    \r
-   If the server receives an LDAPMessage from the client in which the \r
-   LDAPMessage SEQUENCE tag cannot be recognized, the messageID cannot \r
-   be parsed, the tag of the protocolOp is not recognized as a request, \r
-   or the encoding structures or lengths of data fields are found to be \r
-   incorrect, then the server SHOULD return the Notice of Disconnection \r
-   described in Section 4.4.1, with the resultCode set to protocolError, \r
-   and MUST immediately terminate the LDAP session as described in \r
-   Section 5.3.  \r
-    \r
-   In other cases where the client or server cannot parse an LDAP PDU, \r
-   it SHOULD abruptly terminate the LDAP session (Section 5.3) where \r
-   further communication (including providing notice) would be \r
-   pernicious. Otherwise, server implementations MUST return an \r
-   appropriate response to the request, with the resultCode set to \r
-   protocolError. \r
-    \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006              Page 6 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-4.1.1.1. Message ID \r
-    \r
-   All LDAPMessage envelopes encapsulating responses contain the \r
-   messageID value of the corresponding request LDAPMessage. \r
-    \r
-   The message ID of a request MUST have a non-zero value different from \r
-   the messageID of any other request in progress in the same LDAP \r
-   session. The zero value is reserved for the unsolicited notification \r
-   message. \r
-    \r
-   Typical clients increment a counter for each request. \r
-    \r
-   A client MUST NOT send a request with the same message ID as an \r
-   earlier request in the same LDAP session unless it can be determined \r
-   that the server is no longer servicing the earlier request (e.g. \r
-   after the final response is received, or a subsequent Bind \r
-   completes). Otherwise the behavior is undefined. For this purpose, \r
-   note that Abandon and successfully abandoned operations do not send \r
-   responses. \r
\r
\r
-4.1.2. String Types \r
-    \r
-   The LDAPString is a notational convenience to indicate that, although \r
-   strings of LDAPString type encode as ASN.1 OCTET STRING types, the \r
-   [ISO10646] character set (a superset of [Unicode]) is used, encoded \r
-   following the [UTF-8] algorithm. Note that Unicode characters U+0000 \r
-   through U+007F are the same as ASCII 0 through 127, respectively, and \r
-   have the same single octet UTF-8 encoding.  Other Unicode characters \r
-   have a multiple octet UTF-8 encoding. \r
-    \r
-        LDAPString ::= OCTET STRING -- UTF-8 encoded, \r
-                                    -- [ISO10646] characters \r
-    \r
-   The LDAPOID is a notational convenience to indicate that the \r
-   permitted value of this string is a (UTF-8 encoded) dotted-decimal \r
-   representation of an OBJECT IDENTIFIER. Although an LDAPOID is \r
-   encoded as an OCTET STRING, values are limited to the definition of \r
-   <numericoid> given in Section 1.4 of [Models]. \r
-    \r
-        LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] \r
-         \r
-   For example, \r
-    \r
-        1.3.6.1.4.1.1466.1.2.3 \r
-    \r
-    \r
-4.1.3. Distinguished Name and Relative Distinguished Name \r
-    \r
-   An LDAPDN is defined to be the representation of a Distinguished Name \r
-   (DN) after encoding according to the specification in [LDAPDN]. \r
-    \r
-        LDAPDN ::= LDAPString \r
-                   -- Constrained to <distinguishedName> [LDAPDN] \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006              Page 7 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-   A RelativeLDAPDN is defined to be the representation of a Relative \r
-   Distinguished Name (RDN) after encoding according to the \r
-   specification in [LDAPDN]. \r
-    \r
-        RelativeLDAPDN ::= LDAPString \r
-                           -- Constrained to <name-component> [LDAPDN] \r
-    \r
-    \r
-4.1.4. Attribute Descriptions \r
-    \r
-   The definition and encoding rules for attribute descriptions are \r
-   defined in Section 2.5 of [Models]. Briefly, an attribute description \r
-   is an attribute type and zero or more options. \r
-    \r
-        AttributeDescription ::= LDAPString \r
-                                -- Constrained to <attributedescription> \r
-                                -- [Models] \r
-         \r
\r
-4.1.5. Attribute Value \r
-    \r
-   A field of type AttributeValue is an OCTET STRING containing an \r
-   encoded attribute value. The attribute value is encoded according to \r
-   the LDAP-specific encoding definition of its corresponding syntax. \r
-   The LDAP-specific encoding definitions for different syntaxes and \r
-   attribute types may be found in other documents and in particular \r
-   [Syntaxes]. \r
\r
-        AttributeValue ::= OCTET STRING \r
-    \r
-   Note that there is no defined limit on the size of this encoding; \r
-   thus protocol values may include multi-megabyte attribute values \r
-   (e.g. photographs). \r
-    \r
-   Attribute values may be defined which have arbitrary and non-\r
-   printable syntax. Implementations MUST NOT display nor attempt to \r
-   decode an attribute value if its syntax is not known. The \r
-   implementation may attempt to discover the subschema of the source \r
-   entry, and retrieve the descriptions of 'attributeTypes' from it \r
-   [Models]. \r
-    \r
-   Clients MUST only send attribute values in a request that are valid \r
-   according to the syntax defined for the attributes. \r
-    \r
-    \r
-4.1.6. Attribute Value Assertion \r
-    \r
-   The AttributeValueAssertion (AVA) type definition is similar to the \r
-   one in the X.500 Directory standards. It contains an attribute \r
-   description and a matching rule ([Models] Section 4.1.3) assertion \r
-   value suitable for that type. Elements of this type are typically \r
-   used to assert that the value in assertionValue matches a value of an \r
-   attribute. \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006              Page 8 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-        AttributeValueAssertion ::= SEQUENCE { \r
-             attributeDesc   AttributeDescription, \r
-             assertionValue  AssertionValue } \r
-    \r
-        AssertionValue ::= OCTET STRING \r
-    \r
-   The syntax of the AssertionValue depends on the context of the LDAP \r
-   operation being performed. For example, the syntax of the EQUALITY \r
-   matching rule for an attribute is used when performing a Compare \r
-   operation. Often this is the same syntax used for values of the \r
-   attribute type, but in some cases the assertion syntax differs from \r
-   the value syntax. See objectIdentiferFirstComponentMatch in \r
-   [Syntaxes] for an example. \r
-    \r
-    \r
-4.1.7. Attribute and PartialAttribute \r
-    \r
-   Attributes and partial attributes consist of an attribute description \r
-   and attribute values. A PartialAttribute allows zero values, while \r
-   Attribute requires at least one value. \r
-    \r
-        PartialAttribute ::= SEQUENCE { \r
-             type       AttributeDescription, \r
-             vals       SET OF value AttributeValue } \r
-    \r
-        Attribute ::= PartialAttribute(WITH COMPONENTS { \r
-             ...,  \r
-             vals (SIZE(1..MAX))}) \r
-    \r
-   No two of the attribute values may be equivalent as described by \r
-   Section 2.3 of [Models]. The set of attribute values is unordered. \r
-   Implementations MUST NOT rely upon the ordering being repeatable. \r
-    \r
-    \r
-4.1.8. Matching Rule Identifier \r
-    \r
-   Matching rules are defined in Section 4.1.3 of [Models]. A matching \r
-   rule is identified in the protocol by the printable representation of \r
-   either its <numericoid>, or one of its short name descriptors \r
-   [Models], e.g. 'caseIgnoreMatch' or '2.5.13.2'. \r
-    \r
-        MatchingRuleId ::= LDAPString \r
-         \r
-    \r
-4.1.9. Result Message \r
-    \r
-   The LDAPResult is the construct used in this protocol to return \r
-   success or failure indications from servers to clients. To various \r
-   requests, servers will return responses containing the elements found \r
-   in LDAPResult to indicate the final status of the protocol operation \r
-   request. \r
-    \r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006              Page 9 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-        LDAPResult ::= SEQUENCE { \r
-             resultCode         ENUMERATED { \r
-                  success                      (0), \r
-                  operationsError              (1), \r
-                  protocolError                (2), \r
-                  timeLimitExceeded            (3), \r
-                  sizeLimitExceeded            (4), \r
-                  compareFalse                 (5), \r
-                  compareTrue                  (6), \r
-                  authMethodNotSupported       (7), \r
-                  strongerAuthRequired         (8), \r
-                       -- 9 reserved -- \r
-                  referral                     (10), \r
-                  adminLimitExceeded           (11), \r
-                  unavailableCriticalExtension (12), \r
-                  confidentialityRequired      (13), \r
-                  saslBindInProgress           (14), \r
-                  noSuchAttribute              (16), \r
-                  undefinedAttributeType       (17), \r
-                  inappropriateMatching        (18), \r
-                  constraintViolation          (19), \r
-                  attributeOrValueExists       (20), \r
-                  invalidAttributeSyntax       (21), \r
-                       -- 22-31 unused -- \r
-                  noSuchObject                 (32), \r
-                  aliasProblem                 (33), \r
-                  invalidDNSyntax              (34), \r
-                       -- 35 reserved for undefined isLeaf -- \r
-                  aliasDereferencingProblem    (36), \r
-                       -- 37-47 unused -- \r
-                  inappropriateAuthentication  (48), \r
-                  invalidCredentials           (49), \r
-                  insufficientAccessRights     (50), \r
-                  busy                         (51), \r
-                  unavailable                  (52), \r
-                  unwillingToPerform           (53), \r
-                  loopDetect                   (54), \r
-                       -- 55-63 unused -- \r
-                  namingViolation              (64), \r
-                  objectClassViolation         (65), \r
-                  notAllowedOnNonLeaf          (66), \r
-                  notAllowedOnRDN              (67), \r
-                  entryAlreadyExists           (68), \r
-                  objectClassModsProhibited    (69), \r
-                       -- 70 reserved for CLDAP -- \r
-                  affectsMultipleDSAs          (71), \r
-                       -- 72-79 unused -- \r
-                  other                        (80), \r
-                  ... }, \r
-             matchedDN          LDAPDN, \r
-             diagnosticMessage  LDAPString, \r
-             referral           [3] Referral OPTIONAL } \r
-    \r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 10 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   The resultCode enumeration is extensible as defined in Section 3.6 of \r
-   [LDAPIANA]. The meanings of the listed result codes are given in \r
-   Appendix A. If a server detects multiple errors for an operation, \r
-   only one result code is returned. The server should return the result \r
-   code that best indicates the nature of the error encountered. Servers \r
-   may return substituted result codes to prevent unauthorized \r
-   disclosures. \r
-    \r
-   The diagnosticMessage field of this construct may, at the server's \r
-   option, be used to return a string containing a textual, human-\r
-   readable (terminal control and page formatting characters should be \r
-   avoided) diagnostic message. As this diagnostic message is not \r
-   standardized, implementations MUST NOT rely on the values returned. \r
-   Diagnostic messages typically supplement the resultCode with \r
-   additional information. If the server chooses not to return a textual \r
-   diagnostic, the diagnosticMessage field MUST be empty. \r
-    \r
-   For certain result codes (typically, but not restricted to \r
-   noSuchObject, aliasProblem, invalidDNSyntax and \r
-   aliasDereferencingProblem), the matchedDN field is set (subject to \r
-   access controls) to the name of the last entry (object or alias) used \r
-   in finding the target (or base) object. This will be a truncated form \r
-   of the provided name or, if an alias was dereferenced while \r
-   attempting to locate the entry, of the resulting name. Otherwise the \r
-   matchedDN field is empty. \r
-    \r
-    \r
-4.1.10. Referral \r
-    \r
-   The referral result code indicates that the contacted server cannot \r
-   or will not perform the operation and that one or more other servers \r
-   may be able to. Reasons for this include: \r
-    \r
-   - The target entry of the request is not held locally, but the \r
-     server has knowledge of its possible existence elsewhere. \r
-    \r
-   - The operation is restricted on this server -- perhaps due to a \r
-     read-only copy of an entry to be modified. \r
-    \r
-   The referral field is present in an LDAPResult if the resultCode is \r
-   set to referral, and absent with all other result codes. It contains \r
-   one or more references to one or more servers or services that may be \r
-   accessed via LDAP or other protocols. Referrals can be returned in \r
-   response to any operation request (except Unbind and Abandon which do \r
-   not have responses). At least one URI MUST be present in the \r
-   Referral. \r
-    \r
-   During a Search operation, after the baseObject is located, and \r
-   entries are being evaluated, the referral is not returned. Instead, \r
-   continuation references, described in Section 4.5.3, are returned \r
-   when other servers would need to be contacted to complete the \r
-   operation. \r
-    \r
-        Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 11 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-        URI ::= LDAPString     -- limited to characters permitted in \r
-                               -- URIs \r
-    \r
-   If the client wishes to progress the operation, it contacts one of \r
-   the supported services found in the referral. If multiple URIs are \r
-   present, the client assumes that any supported URI may be used to \r
-   progress the operation. \r
-    \r
-   Clients that follow referrals MUST ensure that they do not loop \r
-   between servers. They MUST NOT repeatedly contact the same server for \r
-   the same request with the same parameters. Some clients use a counter \r
-   that is incremented each time referral handling occurs for an \r
-   operation, and these kinds of clients MUST be able to handle at least \r
-   ten nested referrals while progressing the operation. \r
-    \r
-   A URI for a server implementing LDAP and accessible via [TCP]/[IP] \r
-   (v4 or v6) is written as an LDAP URL according to [LDAPURL].  \r
-    \r
-   Referral values which are LDAP URLs follow these rules: \r
-    \r
-   - If an alias was dereferenced, the <dn> part of the LDAP URL MUST \r
-     be present, with the new target object name. \r
-    \r
-   - It is RECOMMENDED that the <dn> part be present to avoid \r
-     ambiguity. \r
-    \r
-   - If the <dn> part is present, the client uses this name in its next \r
-     request to progress the operation, and if it is not present the \r
-     client uses the same name as in the original request.  \r
-    \r
-   - Some servers (e.g. participating in distributed indexing) may \r
-     provide a different filter in a URL of a referral for a Search \r
-     operation. \r
-    \r
-   - If the <filter> part of the LDAP URL is present, the client uses \r
-     this filter in its next request to progress this Search, and if it \r
-     is not present the client uses the same filter as it used for that \r
-     Search. \r
-    \r
-   - For Search, it is RECOMMENDED that the <scope> part be present to \r
-     avoid ambiguity. \r
-    \r
-   - If the <scope> part is missing, the scope of the original Search \r
-     is used by the client to progress the operation. \r
-    \r
-   - Other aspects of the new request may be the same as or different \r
-     from the request which generated the referral. \r
-    \r
-   Other kinds of URIs may be returned. The syntax and semantics of such \r
-   URIs is left to future specifications. Clients may ignore URIs that \r
-   they do not support. \r
-    \r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 12 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   UTF-8 encoded characters appearing in the string representation of a \r
-   DN, search filter, or other fields of the referral value may not be \r
-   legal for URIs (e.g. spaces) and MUST be escaped using the % method \r
-   in [URI]. \r
-    \r
-    \r
-4.1.11. Controls \r
-    \r
-   Controls provide a mechanism whereby the semantics and arguments of \r
-   existing LDAP operations may be extended. One or more controls may be \r
-   attached to a single LDAP message. A control only affects the \r
-   semantics of the message it is attached to. \r
-    \r
-   Controls sent by clients are termed 'request controls' and those sent \r
-   by servers are termed 'response controls'. \r
-    \r
-        Controls ::= SEQUENCE OF control Control \r
-    \r
-        Control ::= SEQUENCE { \r
-             controlType             LDAPOID, \r
-             criticality             BOOLEAN DEFAULT FALSE, \r
-             controlValue            OCTET STRING OPTIONAL } \r
-    \r
-   The controlType field is the dotted-decimal representation of an \r
-   OBJECT IDENTIFIER which uniquely identifies the control. This \r
-   provides unambiguous naming of controls. Often, response control(s) \r
-   solicited by a request control share controlType values with the \r
-   request control. \r
-    \r
-   The criticality field only has meaning in controls attached to \r
-   request messages (except UnbindRequest). For controls attached to \r
-   response messages and the UnbindRequest, the criticality field SHOULD \r
-   be FALSE, and MUST be ignored by the receiving protocol peer. A value \r
-   of TRUE indicates that it is unacceptable to perform the operation \r
-   without applying the semantics of the control. Specifically, the \r
-   criticality field is applied as follows: \r
-    \r
-   - If the server does not recognize the control type, determines that \r
-     it is not appropriate for the operation, or is otherwise unwilling \r
-     to perform the operation with the control, and the criticality \r
-     field is TRUE, the server MUST NOT perform the operation, and for \r
-     operations that have a response message, MUST return with the \r
-     resultCode set to unavailableCriticalExtension. \r
-    \r
-   - If the server does not recognize the control type, determines that \r
-     it is not appropriate for the operation, or is otherwise unwilling \r
-     to perform the operation with the control, and the criticality \r
-     field is FALSE, the server MUST ignore the control. \r
-    \r
-   - Regardless of criticality, if a control is applied to an \r
-     operation, it is applied consistently and impartially to the \r
-     entire operation.  \r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 13 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   The controlValue may contain information associated with the \r
-   controlType. Its format is defined by the specification of the \r
-   control. Implementations MUST be prepared to handle arbitrary \r
-   contents of the controlValue octet string, including zero bytes. It \r
-   is absent only if there is no value information which is associated \r
-   with a control of its type. When a controlValue is defined in terms \r
-   of ASN.1, and BER encoded according to Section 5.1, it also follows \r
-   the extensibility rules in Section 4. \r
\r
-   Servers list the controlType of request controls they recognize in \r
-   the 'supportedControl' attribute in the root DSE (Section 5.1 of \r
-   [Models]). \r
\r
-   Controls SHOULD NOT be combined unless the semantics of the \r
-   combination has been specified. The semantics of control \r
-   combinations, if specified, are generally found in the control \r
-   specification most recently published. When a combination of controls \r
-   is encountered whose semantics are invalid, not specified (or not \r
-   known), the message is considered to be not well-formed, thus the \r
-   operation fails with protocolError. Controls with a criticality of \r
-   FALSE may be ignored in order to arrive at a valid combination. \r
-   Additionally, unless order-dependent semantics are given in a \r
-   specification, the order of a combination of controls in the SEQUENCE \r
-   is ignored. Where the order is to be ignored but cannot be ignored by \r
-   the server, the message is considered not well-formed and the \r
-   operation fails with protocolError. Again, controls with a \r
-   criticality of FALSE may be ignored in order to arrive at a valid \r
-   combination. \r
-    \r
-   This document does not specify any controls. Controls may be \r
-   specified in other documents. Documents detailing control extensions \r
-   are to provide for each control: \r
-    \r
-   - the OBJECT IDENTIFIER assigned to the control, \r
-    \r
-   - direction as to what value the sender should provide for the \r
-     criticality field (note: the semantics of the criticality field \r
-     are defined above should not be altered by the control's \r
-     specification),  \r
-    \r
-   - whether the controlValue field is present, and if so, the format \r
-     of its contents, \r
-    \r
-   - the semantics of the control, and \r
-    \r
-   - optionally, semantics regarding the combination of the control \r
-     with other controls. \r
-    \r
-    \r
-4.2. Bind Operation \r
-    \r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 14 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   The function of the Bind operation is to allow authentication \r
-   information to be exchanged between the client and server. The Bind \r
-   operation should be thought of as the "authenticate" operation. \r
-   Operational, authentication, and security-related semantics of this \r
-   operation are given in [AuthMeth].  \r
-    \r
-   The Bind request is defined as follows: \r
-    \r
-        BindRequest ::= [APPLICATION 0] SEQUENCE { \r
-             version                 INTEGER (1 .. 127), \r
-             name                    LDAPDN, \r
-             authentication          AuthenticationChoice } \r
-    \r
-        AuthenticationChoice ::= CHOICE { \r
-             simple                  [0] OCTET STRING, \r
-                                     -- 1 and 2 reserved \r
-             sasl                    [3] SaslCredentials, \r
-             ... } \r
-    \r
-        SaslCredentials ::= SEQUENCE { \r
-             mechanism               LDAPString, \r
-             credentials             OCTET STRING OPTIONAL } \r
-    \r
-   Fields of the BindRequest are: \r
-    \r
-   - version: A version number indicating the version of the protocol \r
-     to be used at the LDAP message layer. This document describes \r
-     version 3 of the protocol. There is no version negotiation. The \r
-     client sets this field to the version it desires. If the server \r
-     does not support the specified version, it MUST respond with a \r
-     BindResponse where the resultCode is set to protocolError. \r
-    \r
-   - name: If not empty, the name of the Directory object that the \r
-     client wishes to bind as. This field may take on a null value (a \r
-     zero length string) for the purposes of anonymous binds \r
-     ([AuthMeth] Section 5.1) or when using Simple Authentication and \r
-     Security Layer [SASL] authentication ([AuthMeth] Section 5.2). \r
-     Where the server attempts to locate the named object, it SHALL NOT \r
-     perform alias dereferencing. \r
-    \r
-   - authentication: information used in authentication. This type is \r
-     extensible as defined in Section 3.7 of [LDAPIANA]. Servers that \r
-     do not support a choice supplied by a client return a BindResponse \r
-     with the resultCode set to authMethodNotSupported. \r
-      \r
-     Textual passwords (consisting of a character sequence with a known \r
-     character set and encoding) transferred to the server using the \r
-     simple AuthenticationChoice SHALL be transferred as [UTF-8] \r
-     encoded [Unicode]. Prior to transfer, clients SHOULD prepare text \r
-     passwords as "query" strings by applying the [SASLprep] profile of \r
-     the [Stringprep] algorithm. Passwords consisting of other data \r
-     (such as random octets) MUST NOT be altered. The determination of \r
-     whether a password is textual is a local client matter. \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 15 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-4.2.1. Processing of the Bind Request \r
-    \r
-   Before processing a BindRequest, all uncompleted operations MUST \r
-   either complete or be abandoned. The server may either wait for the \r
-   uncompleted operations to complete, or abandon them. The server then \r
-   proceeds to authenticate the client in either a single-step, or \r
-   multi-step Bind process. Each step requires the server to return a \r
-   BindResponse to indicate the status of authentication.  \r
-    \r
-   After sending a BindRequest, clients MUST NOT send further LDAP PDUs \r
-   until receiving the BindResponse. Similarly, servers SHOULD NOT \r
-   process or respond to requests received while processing a \r
-   BindRequest. \r
\r
-   If the client did not bind before sending a request and receives an \r
-   operationsError to that request, it may then send a BindRequest. If \r
-   this also fails or the client chooses not to bind on the existing \r
-   LDAP session, it may terminate the LDAP session, re-establish it and \r
-   begin again by first sending a BindRequest. This will aid in \r
-   interoperating with servers implementing other versions of LDAP. \r
-    \r
-   Clients may send multiple Bind requests to change the authentication \r
-   and/or security associations or to complete a multi-stage Bind \r
-   process. Authentication from earlier binds is subsequently ignored. \r
\r
-   For some SASL authentication mechanisms, it may be necessary for the \r
-   client to invoke the BindRequest multiple times ([AuthMeth] Section \r
-   5.2). Clients MUST NOT invoke operations between two Bind requests \r
-   made as part of a multi-stage Bind. \r
-    \r
-   A client may abort a SASL bind negotiation by sending a BindRequest \r
-   with a different value in the mechanism field of SaslCredentials, or \r
-   an AuthenticationChoice other than sasl. \r
-    \r
-   If the client sends a BindRequest with the sasl mechanism field as an \r
-   empty string, the server MUST return a BindResponse with the \r
-   resultCode set to authMethodNotSupported. This will allow clients to \r
-   abort a negotiation if it wishes to try again with the same SASL \r
-   mechanism. \r
-    \r
-    \r
-4.2.2. Bind Response \r
-    \r
-   The Bind response is defined as follows. \r
-    \r
-        BindResponse ::= [APPLICATION 1] SEQUENCE { \r
-             COMPONENTS OF LDAPResult, \r
-             serverSaslCreds    [7] OCTET STRING OPTIONAL } \r
-    \r
-   BindResponse consists simply of an indication from the server of the \r
-   status of the client's request for authentication. \r
-    \r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 16 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   A successful Bind operation is indicated by a BindResponse with a \r
-   resultCode set to success. Otherwise, an appropriate result code is \r
-   set in the BindResponse. For BindResponse, the protocolError result \r
-   code may be used to indicate that the version number supplied by the \r
-   client is unsupported. \r
\r
-   If the client receives a BindResponse where the resultCode is set to \r
-   protocolError, it is to assume that the server does not support this \r
-   version of LDAP. While the client may be able proceed with another \r
-   version of this protocol (this may or may not require closing and re-\r
-   establishing the transport connection), how to proceed with another \r
-   version of this protocol is beyond the scope of this document. \r
-   Clients which are unable or unwilling to proceed SHOULD terminate the \r
-   LDAP session. \r
-    \r
-   The serverSaslCreds field is used as part of a SASL-defined bind \r
-   mechanism to allow the client to authenticate the server to which it \r
-   is communicating, or to perform "challenge-response" authentication. \r
-   If the client bound with the simple choice, or the SASL mechanism \r
-   does not require the server to return information to the client, then \r
-   this field SHALL NOT be included in the BindResponse. \r
-    \r
-    \r
-4.3. Unbind Operation \r
-    \r
-   The function of the Unbind operation is to terminate an LDAP session. \r
-   The Unbind operation is not the antithesis of the Bind operation as \r
-   the name implies. The naming of these operations are historical. The \r
-   Unbind operation should be thought of as the "quit" operation. \r
-    \r
-   The Unbind operation is defined as follows: \r
-    \r
-        UnbindRequest ::= [APPLICATION 2] NULL \r
-    \r
-   The client, upon transmission of the UnbindRequest, and the server, \r
-   upon receipt of the UnbindRequest are to gracefully terminate the \r
-   LDAP session as described in Section 5.3.  \r
\r
-   Uncompleted operations are handled as specified in Section 3.1. \r
-    \r
-    \r
-4.4. Unsolicited Notification \r
-    \r
-   An unsolicited notification is an LDAPMessage sent from the server to \r
-   the client which is not in response to any LDAPMessage received by \r
-   the server. It is used to signal an extraordinary condition in the \r
-   server or in the LDAP session between the client and the server. The \r
-   notification is of an advisory nature, and the server will not expect \r
-   any response to be returned from the client. \r
-    \r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 17 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   The unsolicited notification is structured as an LDAPMessage in which \r
-   the messageID is zero and protocolOp is set to the extendedResp \r
-   choice using the ExtendedResponse type (See Section 4.12). The \r
-   responseName field of the ExtendedResponse always contains an LDAPOID \r
-   which is unique for this notification. \r
-    \r
-   One unsolicited notification (Notice of Disconnection) is defined in \r
-   this document. The specification of an unsolicited notification \r
-   consists of: \r
-    \r
-   - the OBJECT IDENTIFIER assigned to the notification (to be \r
-     specified in the responseName, \r
-    \r
-   - the format of the contents of the responseValue (if any), \r
-    \r
-   - the circumstances which will cause the notification to be sent, \r
-     and \r
-    \r
-   - the semantics of the message. \r
-    \r
-    \r
-4.4.1. Notice of Disconnection \r
-    \r
-   This notification may be used by the server to advise the client that \r
-   the server is about to terminate the LDAP session on its own \r
-   initiative. This notification is intended to assist clients in \r
-   distinguishing between an exceptional server condition and a \r
-   transient network failure. Note that this notification is not a \r
-   response to an Unbind requested by the client. Uncompleted operations \r
-   are handled as specified in Section 3.1. \r
-    \r
-   The responseName is 1.3.6.1.4.1.1466.20036, the responseValue field \r
-   is absent, and the resultCode is used to indicate the reason for the \r
-   disconnection. When the strongerAuthRequired resultCode is returned \r
-   with this message, it indicates that the server has detected that an \r
-   established security association between the client and server has \r
-   unexpectedly failed or been compromised. \r
-    \r
-   Upon transmission of the Notice of Disconnection, the server \r
-   gracefully terminates the LDAP session as described in Section 5.3.  \r
-    \r
-    \r
-4.5. Search Operation \r
-    \r
-   The Search operation is used to request a server to return, subject \r
-   to access controls and other restrictions, a set of entries matching \r
-   a complex search criterion. This can be used to read attributes from \r
-   a single entry, from entries immediately subordinate to a particular \r
-   entry, or a whole subtree of entries. \r
-    \r
-    \r
-4.5.1. Search Request \r
-    \r
-   The Search request is defined as follows: \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 18 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-        SearchRequest ::= [APPLICATION 3] SEQUENCE { \r
-             baseObject      LDAPDN, \r
-             scope           ENUMERATED { \r
-                  baseObject              (0), \r
-                  singleLevel             (1), \r
-                  wholeSubtree            (2), \r
-                  ... }, \r
-             derefAliases    ENUMERATED { \r
-                  neverDerefAliases       (0), \r
-                  derefInSearching        (1), \r
-                  derefFindingBaseObj     (2), \r
-                  derefAlways             (3) }, \r
-             sizeLimit       INTEGER (0 .. maxInt), \r
-             timeLimit       INTEGER (0 .. maxInt), \r
-             typesOnly       BOOLEAN, \r
-             filter          Filter, \r
-             attributes      AttributeSelection } \r
-    \r
-        AttributeSelection ::= SEQUENCE OF selector LDAPString \r
-                        -- The LDAPString is constrained to \r
-                        -- <attributeSelector> in Section 4.5.1.7 \r
-    \r
-        Filter ::= CHOICE { \r
-             and             [0] SET SIZE (1..MAX) OF filter Filter, \r
-             or              [1] SET SIZE (1..MAX) OF filter Filter, \r
-             not             [2] Filter, \r
-             equalityMatch   [3] AttributeValueAssertion, \r
-             substrings      [4] SubstringFilter, \r
-             greaterOrEqual  [5] AttributeValueAssertion, \r
-             lessOrEqual     [6] AttributeValueAssertion, \r
-             present         [7] AttributeDescription, \r
-             approxMatch     [8] AttributeValueAssertion, \r
-             extensibleMatch [9] MatchingRuleAssertion, \r
-             ... } \r
-    \r
-        SubstringFilter ::= SEQUENCE { \r
-             type           AttributeDescription, \r
-             substrings     SEQUENCE SIZE (1..MAX) OF substring CHOICE { \r
-                  initial [0] AssertionValue,  -- can occur at most once \r
-                  any     [1] AssertionValue, \r
-                  final   [2] AssertionValue } -- can occur at most once  \r
-             } \r
-    \r
-        MatchingRuleAssertion ::= SEQUENCE { \r
-             matchingRule    [1] MatchingRuleId OPTIONAL, \r
-             type            [2] AttributeDescription OPTIONAL, \r
-             matchValue      [3] AssertionValue, \r
-             dnAttributes    [4] BOOLEAN DEFAULT FALSE } \r
-    \r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 19 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   Note that an X.500 "list"-like operation can be emulated by the \r
-   client requesting a singleLevel Search operation with a filter \r
-   checking for the presence of the 'objectClass' attribute, and that an \r
-   X.500 "read"-like operation can be emulated by a baseObject Search \r
-   operation with the same filter.  A server which provides a gateway to \r
-   X.500 is not required to use the Read or List operations, although it \r
-   may choose to do so, and if it does, it must provide the same \r
-   semantics as the X.500 Search operation. \r
\r
\r
-4.5.1.1. SearchRequest.baseObject \r
-    \r
-   The name of the base object entry (or possibly the root) relative to \r
-   which the Search is to be performed. \r
-    \r
-    \r
-4.5.1.2. SearchRequest.scope \r
\r
-   Specifies the scope of the Search to be performed. The semantics (as \r
-   described in [X.511]) of the defined values of this field are: \r
-    \r
-     baseObject:  The scope is constrained to the entry named by \r
-     baseObject. \r
-      \r
-     singleLevel: The scope is constrained to the immediate \r
-     subordinates of the entry named by baseObject. \r
-      \r
-     wholeSubtree: the scope is constrained to the entry named by the \r
-     baseObject, and all its subordinates. \r
-    \r
-    \r
-4.5.1.3. SearchRequest.derefAliases \r
\r
-   An indicator as to whether or not alias entries (as defined in \r
-   [Models]) are to be dereferenced during stages of the Search \r
-   operation.  \r
-    \r
-   The act of dereferencing an alias includes recursively dereferencing \r
-   aliases which refer to aliases. \r
-    \r
-   Servers MUST detect looping while dereferencing aliases in order to \r
-   prevent denial of service attacks of this nature. \r
-    \r
-   The semantics of the defined values of this field are: \r
-    \r
-     neverDerefAliases: Do not dereference aliases in searching or in \r
-     locating the base object of the Search. \r
-      \r
-\r
-\r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 20 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-     derefInSearching: While searching subordinates of the base object, \r
-     dereference any alias within the search scope. Dereferenced \r
-     objects become the vertices of further search scopes where the \r
-     Search operation is also applied. If the search scope is \r
-     wholeSubtree, the Search continues in the subtree(s) of any \r
-     dereferenced object. If the search scope is singleLevel, the \r
-     search is applied to any dereferenced objects, and is not applied \r
-     to their subordinates. Servers SHOULD eliminate duplicate entries \r
-     that arise due to alias dereferencing while searching. \r
-      \r
-     derefFindingBaseObj: Dereference aliases in locating the base \r
-     object of the Search, but not when searching subordinates of the \r
-     base object. \r
-      \r
-     derefAlways: Dereference aliases both in searching and in locating \r
-     the base object of the Search. \r
\r
-    \r
-4.5.1.4. SearchRequest.sizeLimit \r
\r
-   A size limit that restricts the maximum number of entries to be \r
-   returned as a result of the Search. A value of zero in this field \r
-   indicates that no client-requested size limit restrictions are in \r
-   effect for the Search. Servers may also enforce a maximum number of \r
-   entries to return. \r
-    \r
-    \r
-4.5.1.5. SearchRequest.timeLimit \r
\r
-   A time limit that restricts the maximum time (in seconds) allowed for \r
-   a Search. A value of zero in this field indicates that no client-\r
-   requested time limit restrictions are in effect for the Search. \r
-   Servers may also enforce a maximum time limit for the Search. \r
-    \r
-    \r
-4.5.1.6. SearchRequest.typesOnly \r
-    \r
-   An indicator as to whether Search results are to contain both \r
-   attribute descriptions and values, or just attribute descriptions. \r
-   Setting this field to TRUE causes only attribute descriptions (no \r
-   values) to be returned. Setting this field to FALSE causes both \r
-   attribute descriptions and values to be returned. \r
-    \r
-    \r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 21 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-4.5.1.7. SearchRequest.filter \r
\r
-   A filter that defines the conditions that must be fulfilled in order \r
-   for the Search to match a given entry. \r
-    \r
-   The 'and', 'or' and 'not' choices can be used to form combinations of \r
-   filters. At least one filter element MUST be present in an 'and' or \r
-   'or' choice. The others match against individual attribute values of \r
-   entries in the scope of the Search. (Implementor's note: the 'not' \r
-   filter is an example of a tagged choice in an implicitly-tagged \r
-   module. In BER this is treated as if the tag was explicit.) \r
-    \r
-   A server MUST evaluate filters according to the three-valued logic of \r
-   [X.511] (1993) Clause 7.8.1. In summary, a filter is evaluated to \r
-   either "TRUE", "FALSE" or "Undefined". If the filter evaluates to \r
-   TRUE for a particular entry, then the attributes of that entry are \r
-   returned as part of the Search result (subject to any applicable \r
-   access control restrictions). If the filter evaluates to FALSE or \r
-   Undefined, then the entry is ignored for the Search. \r
-    \r
-   A filter of the "and" choice is TRUE if all the filters in the SET OF \r
-   evaluate to TRUE, FALSE if at least one filter is FALSE, and \r
-   otherwise Undefined. A filter of the "or" choice is FALSE if all of \r
-   the filters in the SET OF evaluate to FALSE, TRUE if at least one \r
-   filter is TRUE, and Undefined otherwise. A filter of the 'not' choice \r
-   is TRUE if the filter being negated is FALSE, FALSE if it is TRUE, \r
-   and Undefined if it is Undefined. \r
-    \r
-   A filter item evaluates to Undefined when the server would not be \r
-   able to determine whether the assertion value matches an entry. \r
-   Examples include: \r
-  \r
-   - An attribute description in an equalityMatch, substrings, \r
-     greaterOrEqual, lessOrEqual, approxMatch or extensibleMatch \r
-     filter is not recognized by the server. \r
-    \r
-   - The attribute type does not define the appropriate matching \r
-     rule. \r
-    \r
-   - A MatchingRuleId in the extensibleMatch is not recognized by \r
-     the server or is not valid for the attribute type. \r
-    \r
-   - The type of filtering requested is not implemented. \r
-    \r
-   - The assertion value is invalid.  \r
-    \r
-   For example, if a server did not recognize the attribute type \r
-   shoeSize, the filters (shoeSize=*), (shoeSize=12), (shoeSize>=12) and \r
-   (shoeSize<=12) would each evaluate to Undefined. \r
-    \r
-   Servers MUST NOT return errors if attribute descriptions or matching \r
-   rule ids are not recognized, assertion values are invalid, or the \r
-   assertion syntax is not supported. More details of filter processing \r
-   are given in Clause 7.8 of [X.511]. \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 22 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
\r
\r
-4.5.1.7.1. SearchRequest.filter.equalityMatch \r
-    \r
-   The matching rule for an equalityMatch filter is defined by the \r
-   EQUALITY matching rule for the attribute type or subtype. The filter \r
-   is TRUE when the EQUALITY rule returns TRUE as applied to the \r
-   attribute or subtype and the asserted value. \r
-    \r
-    \r
-4.5.1.7.2. SearchRequest.filter.substrings \r
-    \r
-   There SHALL be at most one 'initial', and at most one 'final' in the \r
-   'substrings' of a SubstringFilter. If 'initial' is present, it SHALL \r
-   be the first element of 'substrings'. If 'final' is present, it SHALL \r
-   be the last element of 'substrings'.  \r
-    \r
-   The matching rule for an AssertionValue in a substrings filter item \r
-   is defined by the SUBSTR matching rule for the attribute type or \r
-   subtype. The filter is TRUE when the SUBSTR rule returns TRUE as \r
-   applied to the attribute or subtype and the asserted value. \r
-    \r
-   Note that the AssertionValue in a substrings filter item conforms to \r
-   the assertion syntax of the EQUALITY matching rule for the attribute \r
-   type rather than the assertion syntax of the SUBSTR matching rule for \r
-   the attribute type. Conceptually, the entire SubstringFilter is \r
-   converted into an assertion value of the substrings matching rule \r
-   prior to applying the rule. \r
-    \r
-    \r
-4.5.1.7.3. SearchRequest.filter.greaterOrEqual \r
-    \r
-   The matching rule for a greaterOrEqual filter is defined by the \r
-   ORDERING matching rule for the attribute type or subtype. The filter \r
-   is TRUE when the ORDERING rule returns FALSE as applied to the \r
-   attribute or subtype and the asserted value. \r
\r
\r
-4.5.1.7.4. SearchRequest.filter.lessOrEqual \r
-    \r
-   The matching rules for a lessOrEqual filter are defined by the \r
-   ORDERING and EQUALITY matching rules for the attribute type or \r
-   subtype. The filter is TRUE when either the ORDERING or EQUALITY rule \r
-   returns TRUE as applied to the attribute or subtype and the asserted \r
-   value. \r
-    \r
-    \r
-4.5.1.7.5. SearchRequest.filter.present \r
-    \r
-   A present filter is TRUE when there is an attribute or subtype of the \r
-   specified attribute description present in an entry, FALSE when no \r
-   attribute or subtype of the specified attribute description is \r
-   present in an entry, and Undefined otherwise. \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 23 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-4.5.1.7.6. SearchRequest.filter.approxMatch \r
-    \r
-   An approxMatch filter is TRUE when there is a value of the attribute \r
-   type or subtype for which some locally-defined approximate matching \r
-   algorithm (e.g. spelling variations, phonetic match, etc.) returns \r
-   TRUE. If a value matches for equality, it also satisfies an \r
-   approximate match. If approximate matching is not supported for the \r
-   attribute, this filter item should be treated as an equalityMatch. \r
-    \r
-    \r
-4.5.1.7.7. SearchRequest.filter.extensibleMatch \r
\r
-   The fields of the extensibleMatch filter item are evaluated as \r
-   follows: \r
-    \r
-   - If the matchingRule field is absent, the type field MUST be \r
-     present, and an equality match is performed for that type. \r
-      \r
-   - If the type field is absent and the matchingRule is present, the \r
-     matchValue is compared against all attributes in an entry which \r
-     support that matchingRule.  \r
-    \r
-   - If the type field is present and the matchingRule is present, the \r
-     matchValue is compared against the specified attribute type and \r
-     its subtypes. \r
\r
-   - If the dnAttributes field is set to TRUE, the match is \r
-     additionally applied against all the AttributeValueAssertions in \r
-     an entry's distinguished name, and evaluates to TRUE if there is \r
-     at least one attribute or subtype in the distinguished name for \r
-     which the filter item evaluates to TRUE. The dnAttributes field is \r
-     present to alleviate the need for multiple versions of generic \r
-     matching rules (such as word matching), where one applies to \r
-     entries and another applies to entries and DN attributes as well. \r
-      \r
-   The matchingRule used for evaluation determines the syntax for the \r
-   assertion value. Once the matchingRule and attribute(s) have been \r
-   determined, the filter item evaluates to TRUE if it matches at least \r
-   one attribute type or subtype in the entry, FALSE if it does not \r
-   match any attribute type or subtype in the entry, and Undefined if \r
-   the matchingRule is not recognized, the matchingRule is unsuitable \r
-   for use with the specified type, or the assertionValue is invalid. \r
-    \r
-    \r
-4.5.1.7. SearchRequest.attributes \r
-    \r
-   A selection list of the attributes to be returned from each entry \r
-   which matches the search filter. Attributes which are subtypes of \r
-   listed attributes are implicitly included. LDAPString values of this \r
-   field are constrained to the following Augmented Backus-Naur Form \r
-   ([ABNF]): \r
-    \r
-     attributeSelector = attributedescription / selectorspecial \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 24 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-     selectorspecial = noattrs / alluserattrs \r
-    \r
-     noattrs = %x31.2E.31 ; "1.1" \r
-    \r
-     alluserattrs = %x2A ; asterisk ("*") \r
-    \r
-     The <attributedescription> production is defined in Section 2.5 of \r
-     [Models]. \r
-    \r
-   There are three special cases which may appear in the attributes \r
-   selection list:  \r
-        \r
-     - an empty list with no attributes,  \r
-        \r
-     - a list containing "*" (with zero or more attribute \r
-        descriptions), and  \r
-                                          \r
-     - a list containing only "1.1".  \r
-        \r
-     An empty list requests the return of all user attributes.   \r
-        \r
-     A list containing "*" requests the return of all user attributes \r
-     in addition to other listed (operational) attributes.   \r
-        \r
-     A list containing only the OID "1.1" indicates that no attributes \r
-     are to be returned. If "1.1" is provided with other \r
-     attributeSelector values, the "1.1" attributeSelector is ignored. \r
-     This OID was chosen because it does not (and can not) correspond \r
-     to any attribute in use. \r
\r
-   Client implementors should note that even if all user attributes are \r
-   requested, some attributes and/or attribute values of the entry may \r
-   not be included in Search results due to access controls or other \r
-   restrictions. Furthermore, servers will not return operational \r
-   attributes, such as objectClasses or attributeTypes, unless they are \r
-   listed by name. Operational attributes are described in [Models]. \r
-    \r
-   Attributes are returned at most once in an entry. If an attribute \r
-   description is named more than once in the list, the subsequent names \r
-   are ignored. If an attribute description in the list is not \r
-   recognized, it is ignored by the server. \r
-    \r
-    \r
-4.5.2. Search Result \r
-    \r
-   The results of the Search operation are returned as zero or more \r
-   SearchResultEntry and/or SearchResultReference messages, followed by \r
-   a single SearchResultDone message. \r
-    \r
-        SearchResultEntry ::= [APPLICATION 4] SEQUENCE { \r
-             objectName      LDAPDN, \r
-             attributes      PartialAttributeList } \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 25 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-        PartialAttributeList ::= SEQUENCE OF  \r
-                             partialAttribute PartialAttribute   \r
-    \r
-        SearchResultReference ::= [APPLICATION 19] SEQUENCE  \r
-                                  SIZE (1..MAX) OF uri URI \r
-    \r
-        SearchResultDone ::= [APPLICATION 5] LDAPResult \r
-    \r
-   Each SearchResultEntry represents an entry found during the Search. \r
-   Each SearchResultReference represents an area not yet explored during \r
-   the Search. The SearchResultEntry and SearchResultReference messages \r
-   may come in any order. Following all the SearchResultReference and \r
-   SearchResultEntry responses, the server returns a SearchResultDone \r
-   response, which contains an indication of success, or detailing any \r
-   errors that have occurred. \r
-    \r
-   Each entry returned in a SearchResultEntry will contain all \r
-   appropriate attributes as specified in the attributes field of the \r
-   Search Request, subject to access control and other administrative \r
-   policy. Note that the PartialAttributeList may hold zero elements. \r
-   This may happen when none of the attributes of an entry were \r
-   requested, or could be returned. Note also that the partialAttribute \r
-   vals set may hold zero elements. This may happen when typesOnly is \r
-   requested, access controls prevent the return of values, or other \r
-   reasons. \r
-    \r
-   Some attributes may be constructed by the server and appear in a \r
-   SearchResultEntry attribute list, although they are not stored \r
-   attributes of an entry. Clients SHOULD NOT assume that all attributes \r
-   can be modified, even if permitted by access control. \r
-    \r
-   If the server's schema defines short names [Models] for an attribute \r
-   type then the server SHOULD use one of those names in attribute \r
-   descriptions for that attribute type (in preference to using the \r
-   <numericoid> [Models] format of the attribute type's object \r
-   identifier). The server SHOULD NOT use the short name if that name is \r
-   known by the server to be ambiguous, or otherwise likely to cause \r
-   interoperability problems. \r
-    \r
-    \r
-4.5.3. Continuation References in the Search Result \r
-    \r
-   If the server was able to locate the entry referred to by the \r
-   baseObject but was unable or unwilling to search one or more non-\r
-   local entries, the server may return one or more \r
-   SearchResultReference messages, each containing a reference to \r
-   another set of servers for continuing the operation. A server MUST \r
-   NOT return any SearchResultReference messages if it has not located \r
-   the baseObject and thus has not searched any entries; in this case it \r
-   would return a SearchResultDone containing either a referral or \r
-   noSuchObject result code (depending on the server's knowledge of the \r
-   entry named in the baseObject). \r
-    \r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 26 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   If a server holds a copy or partial copy of the subordinate naming \r
-   context (Section 5 of [Models]), it may use the search filter to \r
-   determine whether or not to return a SearchResultReference response. \r
-   Otherwise SearchResultReference responses are always returned when in \r
-   scope. \r
-    \r
-   The SearchResultReference is of the same data type as the Referral.  \r
-    \r
-   If the client wishes to progress the Search, it issues a new Search \r
-   operation for each SearchResultReference that is returned. If \r
-   multiple URIs are present, the client assumes that any supported URI \r
-   may be used to progress the operation. \r
-    \r
-   Clients that follow search continuation references MUST ensure that \r
-   they do not loop between servers. They MUST NOT repeatedly contact \r
-   the same server for the same request with the same parameters. Some \r
-   clients use a counter that is incremented each time search result \r
-   reference handling occurs for an operation, and these kinds of \r
-   clients MUST be able to handle at least ten nested referrals while \r
-   progressing the operation. \r
-    \r
-   Note that the Abandon operation described in Section 4.11 applies \r
-   only to a particular operation sent at the LDAP message layer between \r
-   a client and server. The client must abandon subsequent Search \r
-   operations it wishes to individually.  \r
-    \r
-   A URI for a server implementing LDAP and accessible via [TCP]/[IP] \r
-   (v4 or v6) is written as an LDAP URL according to [LDAPURL].  \r
-    \r
-   SearchResultReference values which are LDAP URLs follow these rules: \r
-    \r
-   - The <dn> part of the LDAP URL MUST be present, with the new target \r
-     object name. The client uses this name when following the \r
-     reference.  \r
-    \r
-   - Some servers (e.g. participating in distributed indexing) may \r
-     provide a different filter in the LDAP URL. \r
-    \r
-   - If the <filter> part of the LDAP URL is present, the client uses \r
-     this filter in its next request to progress this Search, and if it \r
-     is not present the client uses the same filter as it used for that \r
-     Search.  \r
-    \r
-   - If the originating search scope was singleLevel, the <scope> part \r
-     of the LDAP URL will be "base". \r
-    \r
-   - It is RECOMMENDED that the <scope> part be present to avoid \r
-     ambiguity. In the absence of a <scope> part, the scope of the \r
-     original Search request is assumed. \r
-    \r
-   - Other aspects of the new Search request may be the same as or \r
-     different from the Search request which generated the \r
-     SearchResultReference. \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 27 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   - The name of an unexplored subtree in a SearchResultReference need \r
-     not be subordinate to the base object. \r
\r
-   Other kinds of URIs may be returned. The syntax and semantics of such \r
-   URIs is left to future specifications. Clients may ignore URIs that \r
-   they do not support. \r
-    \r
-   UTF-8 encoded characters appearing in the string representation of a \r
-   DN, search filter, or other fields of the referral value may not be \r
-   legal for URIs (e.g. spaces) and MUST be escaped using the % method \r
-   in [URI]. \r
-    \r
\r
-    \r
-4.5.3.1. Examples \r
-    \r
-   For example, suppose the contacted server (hosta) holds the entry \r
-   <DC=Example,DC=NET> and the entry <CN=Manager,DC=Example,DC=NET>. It \r
-   knows that both LDAP servers (hostb) and (hostc) hold \r
-   <OU=People,DC=Example,DC=NET> (one is the master and the other server \r
-   a shadow), and that LDAP-capable server (hostd) holds the subtree \r
-   <OU=Roles,DC=Example,DC=NET>. If a wholeSubtree Search of \r
-   <DC=Example,DC=NET> is requested to the contacted server, it may \r
-   return the following: \r
-    \r
-     SearchResultEntry for DC=Example,DC=NET \r
-     SearchResultEntry for CN=Manager,DC=Example,DC=NET \r
-     SearchResultReference { \r
-       ldap://hostb/OU=People,DC=Example,DC=NET??sub \r
-       ldap://hostc/OU=People,DC=Example,DC=NET??sub } \r
-     SearchResultReference { \r
-       ldap://hostd/OU=Roles,DC=Example,DC=NET??sub } \r
-     SearchResultDone (success) \r
-    \r
-   Client implementors should note that when following a \r
-   SearchResultReference, additional SearchResultReference may be \r
-   generated. Continuing the example, if the client contacted the server \r
-   (hostb) and issued the Search request for the subtree \r
-   <OU=People,DC=Example,DC=NET>, the server might respond as follows: \r
-    \r
-     SearchResultEntry for OU=People,DC=Example,DC=NET \r
-     SearchResultReference { \r
-       ldap://hoste/OU=Managers,OU=People,DC=Example,DC=NET??sub } \r
-     SearchResultReference { \r
-       ldap://hostf/OU=Consultants,OU=People,DC=Example,DC=NET??sub } \r
-     SearchResultDone (success) \r
-    \r
-   Similarly, if a singleLevel Search of <DC=Example,DC=NET> is \r
-   requested to the contacted server, it may return the following: \r
-    \r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 28 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-     SearchResultEntry for CN=Manager,DC=Example,DC=NET \r
-     SearchResultReference { \r
-       ldap://hostb/OU=People,DC=Example,DC=NET??base \r
-       ldap://hostc/OU=People,DC=Example,DC=NET??base } \r
-     SearchResultReference { \r
-       ldap://hostd/OU=Roles,DC=Example,DC=NET??base } \r
-     SearchResultDone (success) \r
-    \r
-   If the contacted server does not hold the base object for the Search, \r
-   but has knowledge of its possible location, then it may return a \r
-   referral to the client. In this case, if the client requests a \r
-   subtree Search of <DC=Example,DC=ORG> to hosta, the server returns a \r
-   SearchResultDone containing a referral. \r
-    \r
-     SearchResultDone (referral) { \r
-       ldap://hostg/DC=Example,DC=ORG??sub } \r
-    \r
-    \r
-4.6. Modify Operation \r
-    \r
-   The Modify operation allows a client to request that a modification \r
-   of an entry be performed on its behalf by a server. The Modify \r
-   Request is defined as follows: \r
-    \r
-        ModifyRequest ::= [APPLICATION 6] SEQUENCE { \r
-             object          LDAPDN, \r
-             changes         SEQUENCE OF change SEQUENCE { \r
-                  operation       ENUMERATED { \r
-                       add     (0), \r
-                       delete  (1), \r
-                       replace (2), \r
-                       ... }, \r
-                  modification    PartialAttribute } } \r
\r
-   Fields of the Modify Request are: \r
-    \r
-   - object: The value of this field contains the name of the entry to \r
-     be modified. The server SHALL NOT perform any alias dereferencing \r
-     in determining the object to be modified. \r
-    \r
-   - changes: A list of modifications to be performed on the entry. The \r
-     entire list of modifications MUST be performed in the order they \r
-     are listed as a single atomic operation. While individual \r
-     modifications may violate certain aspects of the directory schema \r
-     (such as the object class definition and DIT content rule), the \r
-     resulting entry after the entire list of modifications is \r
-     performed MUST conform to the requirements of the directory model \r
-     and controlling schema [Models]. \r
-         \r
-     -  operation: Used to specify the type of modification being \r
-        performed. Each operation type acts on the following \r
-        modification. The values of this field have the following \r
-        semantics respectively: \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 29 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-           add: add values listed to the modification attribute, \r
-           creating the attribute if necessary; \r
-            \r
-           delete: delete values listed from the modification attribute. \r
-           If no values are listed, or if all current values of the \r
-           attribute are listed, the entire attribute is removed; \r
-            \r
-           replace: replace all existing values of the modification \r
-           attribute with the new values listed, creating the attribute \r
-           if it did not already exist. A replace with no value will \r
-           delete the entire attribute if it exists, and is ignored if \r
-           the attribute does not exist. \r
-    \r
-     -  modification: A PartialAttribute (which may have an empty SET \r
-        of vals) used to hold the attribute type or attribute type and \r
-        values being modified. \r
-    \r
-   Upon receipt of a Modify Request, the server attempts to perform the \r
-   necessary modifications to the DIT and returns the result in a Modify \r
-   Response, defined as follows: \r
-    \r
-        ModifyResponse ::= [APPLICATION 7] LDAPResult \r
-    \r
-   The server will return to the client a single Modify Response \r
-   indicating either the successful completion of the DIT modification, \r
-   or the reason that the modification failed. Due to the requirement \r
-   for atomicity in applying the list of modifications in the Modify \r
-   Request, the client may expect that no modifications of the DIT have \r
-   been performed if the Modify Response received indicates any sort of \r
-   error, and that all requested modifications have been performed if \r
-   the Modify Response indicates successful completion of the Modify \r
-   operation. Whether the modification was applied or not cannot be \r
-   determined by the client if the Modify Response was not received \r
-   (e.g. the LDAP session was terminated or the Modify operation was \r
-   abandoned). \r
-    \r
-   Servers MUST ensure that entries conform to user and system schema \r
-   rules or other data model constraints. The Modify operation cannot be \r
-   used to remove from an entry any of its distinguished values, i.e. \r
-   those values which form the entry's relative distinguished name. An \r
-   attempt to do so will result in the server returning the \r
-   notAllowedOnRDN result code. The Modify DN operation described in \r
-   Section 4.9 is used to rename an entry. \r
-    \r
-   For attribute types which specify no equality matching, the rules in \r
-   Section 2.5.1 of [Models] are followed. \r
-    \r
-   Note that due to the simplifications made in LDAP, there is not a \r
-   direct mapping of the changes in an LDAP ModifyRequest onto the \r
-   changes of a DAP ModifyEntry operation, and different implementations \r
-   of LDAP-DAP gateways may use different means of representing the \r
-   change. If successful, the final effect of the operations on the \r
-   entry MUST be identical. \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 30 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-4.7. Add Operation \r
-    \r
-   The Add operation allows a client to request the addition of an entry \r
-   into the Directory. The Add Request is defined as follows: \r
-    \r
-        AddRequest ::= [APPLICATION 8] SEQUENCE { \r
-             entry           LDAPDN, \r
-             attributes      AttributeList } \r
-    \r
-        AttributeList ::= SEQUENCE OF attribute Attribute \r
-    \r
-   Fields of the Add Request are: \r
-    \r
-   - entry: the name of the entry to be added. The server SHALL NOT \r
-     dereference any aliases in locating the entry to be added. \r
-    \r
-   - attributes: the list of attributes that, along with those from the \r
-     RDN, make up the content of the entry being added. Clients MAY or \r
-     MAY NOT include the RDN attribute(s) in this list. Clients MUST \r
-     NOT supply NO-USER-MODIFICATION attributes such as the \r
-     createTimestamp or creatorsName attributes, since the server \r
-     maintains these automatically. \r
-    \r
-   Servers MUST ensure that entries conform to user and system schema \r
-   rules or other data model constraints. For attribute types which \r
-   specify no equality matching, the rules in Section 2.5.1 of [Models] \r
-   are followed (this applies to the naming attribute in addition to any \r
-   multi-valued attributes being added). \r
-    \r
-   The entry named in the entry field of the AddRequest MUST NOT exist \r
-   for the AddRequest to succeed. The immediate superior (parent) of an \r
-   object or alias entry to be added MUST exist. For example, if the \r
-   client attempted to add <CN=JS,DC=Example,DC=NET>, the \r
-   <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did \r
-   exist, then the server would return the noSuchObject result code with \r
-   the matchedDN field containing <DC=NET>.  \r
-    \r
-   Upon receipt of an Add Request, a server will attempt to add the \r
-   requested entry. The result of the Add attempt will be returned to \r
-   the client in the Add Response, defined as follows: \r
-    \r
-        AddResponse ::= [APPLICATION 9] LDAPResult \r
-    \r
-   A response of success indicates that the new entry has been added to \r
-   the Directory. \r
-    \r
-    \r
-4.8. Delete Operation \r
-    \r
-   The Delete operation allows a client to request the removal of an \r
-   entry from the Directory. The Delete Request is defined as follows: \r
-    \r
-        DelRequest ::= [APPLICATION 10] LDAPDN \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 31 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-   The Delete Request consists of the name of the entry to be deleted. \r
-   The server SHALL NOT dereference aliases while resolving the name of \r
-   the target entry to be removed. \r
-    \r
-   Only leaf entries (those with no subordinate entries) can be deleted \r
-   with this operation. \r
-    \r
-   Upon receipt of a Delete Request, a server will attempt to perform \r
-   the entry removal requested and return the result in the Delete \r
-   Response defined as follows: \r
-    \r
-        DelResponse ::= [APPLICATION 11] LDAPResult \r
-    \r
-    \r
-4.9. Modify DN Operation \r
-    \r
-   The Modify DN operation allows a client to change the Relative \r
-   Distinguished Name (RDN) of an entry in the Directory, and/or to move \r
-   a subtree of entries to a new location in the Directory. The Modify \r
-   DN Request is defined as follows: \r
-    \r
-        ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { \r
-             entry           LDAPDN, \r
-             newrdn          RelativeLDAPDN, \r
-             deleteoldrdn    BOOLEAN, \r
-             newSuperior     [0] LDAPDN OPTIONAL } \r
-    \r
-   Fields of the Modify DN Request are: \r
-    \r
-   - entry: the name of the entry to be changed. This entry may or may \r
-     not have subordinate entries. \r
-    \r
-   - newrdn: the new RDN of the entry. The value of the old RDN is \r
-     supplied when moving the entry to a new superior without changing \r
-     its RDN. Attribute values of the new RDN not matching any \r
-     attribute value of the entry are added to the entry and an \r
-     appropriate error is returned if this fails. \r
-     \r
-   - deleteoldrdn: a boolean field that controls whether the old RDN \r
-     attribute values are to be retained as attributes of the entry, or \r
-     deleted from the entry. \r
-    \r
-   - newSuperior: if present, this is the name of an existing object \r
-     entry which becomes the immediate superior (parent) of the \r
-     existing entry. \r
-    \r
-   The server SHALL NOT dereference any aliases in locating the objects \r
-   named in entry or newSuperior. \r
-    \r
-   Upon receipt of a ModifyDNRequest, a server will attempt to perform \r
-   the name change and return the result in the Modify DN Response, \r
-   defined as follows: \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 32 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-        ModifyDNResponse ::= [APPLICATION 13] LDAPResult \r
-    \r
-   For example, if the entry named in the entry field was <cn=John \r
-   Smith,c=US>, the newrdn field was <cn=John Cougar Smith>, and the \r
-   newSuperior field was absent, then this operation would attempt to \r
-   rename the entry to be <cn=John Cougar Smith,c=US>. If there was \r
-   already an entry with that name, the operation would fail with the \r
-   entryAlreadyExists result code. \r
-    \r
-   Servers MUST ensure that entries conform to user and system schema \r
-   rules or other data model constraints. For attribute types which \r
-   specify no equality matching, the rules in Section 2.5.1 of [Models] \r
-   are followed (this pertains to newrdn and deleteoldrdn). \r
-    \r
-   The object named in newSuperior MUST exist. For example, if the \r
-   client attempted to add <CN=JS,DC=Example,DC=NET>, the \r
-   <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did \r
-   exist, then the server would return the noSuchObject result code with \r
-   the matchedDN field containing <DC=NET>. \r
\r
-   If the deleteoldrdn field is TRUE, the attribute values forming the \r
-   old RDN but not the new RDN are deleted from the entry. If the \r
-   deleteoldrdn field is FALSE, the attribute values forming the old RDN \r
-   will be retained as non-distinguished attribute values of the entry.  \r
-    \r
-   Note that X.500 restricts the ModifyDN operation to only affect \r
-   entries that are contained within a single server. If the LDAP server \r
-   is mapped onto DAP, then this restriction will apply, and the \r
-   affectsMultipleDSAs result code will be returned if this error \r
-   occurred. In general, clients MUST NOT expect to be able to perform \r
-   arbitrary movements of entries and subtrees between servers or \r
-   between naming contexts. \r
-    \r
-    \r
-4.10. Compare Operation \r
-    \r
-   The Compare operation allows a client to compare an assertion value \r
-   with the values of a particular attribute in a particular entry in \r
-   the Directory. The Compare Request is defined as follows: \r
-    \r
-        CompareRequest ::= [APPLICATION 14] SEQUENCE { \r
-             entry           LDAPDN, \r
-             ava             AttributeValueAssertion } \r
-    \r
-   Fields of the Compare Request are: \r
-    \r
-   - entry: the name of the entry to be compared. The server SHALL NOT \r
-     dereference any aliases in locating the entry to be compared. \r
-    \r
-   - ava: holds the attribute value assertion to be compared. \r
-    \r
-   Upon receipt of a Compare Request, a server will attempt to perform \r
-   the requested comparison and return the result in the Compare \r
-   Response, defined as follows: \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 33 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-        CompareResponse ::= [APPLICATION 15] LDAPResult \r
-    \r
-   The resultCode is set to compareTrue, compareFalse, or an appropriate \r
-   error. compareTrue indicates that the assertion value in the ava \r
-   field matches a value of the attribute or subtype according to the \r
-   attribute's EQUALITY matching rule. compareFalse indicates that the \r
-   assertion value in the ava field and the values of the attribute or \r
-   subtype did not match. Other result codes indicate either that the \r
-   result of the comparison was Undefined (Section 4.5.1), or that some \r
-   error occurred. \r
-    \r
-   Note that some directory systems may establish access controls which \r
-   permit the values of certain attributes (such as userPassword) to be \r
-   compared but not interrogated by other means. \r
-    \r
-    \r
-4.11. Abandon Operation \r
-    \r
-   The function of the Abandon operation is to allow a client to request \r
-   that the server abandon an uncompleted operation. The Abandon Request \r
-   is defined as follows: \r
-    \r
-        AbandonRequest ::= [APPLICATION 16] MessageID \r
-    \r
-   The MessageID is that of an operation which was requested earlier at \r
-   this LDAP message layer. The Abandon request itself has its own \r
-   MessageID. This is distinct from the MessageID of the earlier \r
-   operation being abandoned. \r
-    \r
-   There is no response defined in the Abandon operation. Upon receipt \r
-   of an AbandonRequest, the server MAY abandon the operation identified \r
-   by the MessageID. Since the client cannot tell the difference between \r
-   a successfully abandoned operation and an uncompleted operation, the \r
-   application of the Abandon operation is limited to uses where the \r
-   client does not require an indication of its outcome. \r
-    \r
-   Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned.  \r
-    \r
-   In the event that a server receives an Abandon Request on a Search \r
-   operation in the midst of transmitting responses to the Search, that \r
-   server MUST cease transmitting entry responses to the abandoned \r
-   request immediately, and MUST NOT send the SearchResultDone. Of \r
-   course, the server MUST ensure that only properly encoded LDAPMessage \r
-   PDUs are transmitted. \r
-    \r
-   The ability to abandon other (particularly update) operations is at \r
-   the discretion of the server.  \r
-    \r
-   Clients should not send Abandon requests for the same operation \r
-   multiple times, and MUST also be prepared to receive results from \r
-   operations it has abandoned (since these may have been in transit \r
-   when the Abandon was requested, or are not able to be abandoned). \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 34 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   Servers MUST discard Abandon requests for message IDs they do not \r
-   recognize, for operations which cannot be abandoned, and for \r
-   operations which have already been abandoned. \r
-    \r
-    \r
-4.12. Extended Operation \r
-    \r
-   The Extended operation allows additional operations to be defined for \r
-   services not already available in the protocol. For example, to Add \r
-   operations to install transport layer security (see Section 4.14). \r
-    \r
-   The Extended operation allows clients to make requests and receive \r
-   responses with predefined syntaxes and semantics. These may be \r
-   defined in RFCs or be private to particular implementations.  \r
-    \r
-   Each Extended operation consists of an Extended request and an \r
-   Extended response.  \r
-    \r
-        ExtendedRequest ::= [APPLICATION 23] SEQUENCE { \r
-             requestName      [0] LDAPOID, \r
-             requestValue     [1] OCTET STRING OPTIONAL } \r
-    \r
-   The requestName is a dotted-decimal representation of the unique \r
-   OBJECT IDENTIFIER corresponding to the request. The requestValue is \r
-   information in a form defined by that request, encapsulated inside an \r
-   OCTET STRING. \r
-    \r
-   The server will respond to this with an LDAPMessage containing an \r
-   ExtendedResponse. \r
-    \r
-        ExtendedResponse ::= [APPLICATION 24] SEQUENCE { \r
-             COMPONENTS OF LDAPResult, \r
-             responseName     [10] LDAPOID OPTIONAL, \r
-             responseValue    [11] OCTET STRING OPTIONAL } \r
-    \r
-   The responseName field, when present, contains an LDAPOID which is \r
-   unique for this extended operation or response.  This field is \r
-   optional (even when the extension specification specifies an LDAPOID \r
-   to be returned in the field).  The field will be absent whenever the \r
-   server is unable or unwilling to determine the appropriate LDAPOID to \r
-   return, for instance when the requestName cannot be parsed or its \r
-   value is not recognized. \r
-    \r
-   Where the requestName is not recognized, the server returns \r
-   protocolError (The server may return protocolError in other cases). \r
-    \r
-   The requestValue and responseValue fields contain information \r
-   associated with the operation. The format of these fields is defined \r
-   by the specification of the Extended operation. Implementations MUST \r
-   be prepared to handle arbitrary contents of these fields, including \r
-   zero bytes. Values that are defined in terms of ASN.1 and BER encoded \r
-   according to Section 5.1, also follow the extensibility rules in \r
-   Section 4. \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 35 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   Servers list the requestName of Extended Requests they recognize in \r
-   the 'supportedExtension' attribute in the root DSE (Section 5.1 of \r
-   [Models]). \r
\r
-   Extended operations may be specified in other documents. The \r
-   specification of an Extended operation consists of: \r
-    \r
-   - the OBJECT IDENTIFIER assigned to the requestName, \r
-    \r
-   - the OBJECT IDENTIFIER (if any) assigned to the responseName (note \r
-     that the same OBJECT IDENTIFIER may be used for both the \r
-     requestName and responseName), \r
-    \r
-   - the format of the contents of the requestValue and responseValue \r
-     (if any), and \r
-    \r
-   - the semantics of the operation. \r
\r
\r
-4.13. IntermediateResponse Message \r
-    \r
-   While the Search operation provides a mechanism to return multiple \r
-   response messages for a single Search request, other operations, by \r
-   nature, do not provide for multiple response messages. \r
-    \r
-   The IntermediateResponse message provides a general mechanism for \r
-   defining single-request/multiple-response operations in LDAP. This \r
-   message is intended to be used in conjunction with the Extended \r
-   operation to define new single-request/multiple-response operations \r
-   or in conjunction with a control when extending existing LDAP \r
-   operations in a way that requires them to return Intermediate \r
-   response information.  \r
-    \r
-   It is intended that the definitions and descriptions of Extended \r
-   operations and controls that make use of the IntermediateResponse \r
-   message will define the circumstances when an IntermediateResponse \r
-   message can be sent by a server and the associated meaning of an \r
-   IntermediateResponse message sent in a particular circumstance. \r
-    \r
-        IntermediateResponse ::= [APPLICATION 25] SEQUENCE { \r
-                responseName     [0] LDAPOID OPTIONAL, \r
-                responseValue    [1] OCTET STRING OPTIONAL } \r
-    \r
-   IntermediateResponse messages SHALL NOT be returned to the client \r
-   unless the client issues a request that specifically solicits their \r
-   return. This document defines two forms of solicitation: Extended \r
-   operation and request control. IntermediateResponse messages are \r
-   specified in documents describing the manner in which they are \r
-   solicited (i.e. in the Extended operation or request control \r
-   specification that uses them). These specifications include: \r
-        \r
-   - the OBJECT IDENTIFIER (if any) assigned to the responseName, \r
-    \r
-   - the format of the contents of the responseValue (if any), and \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 36 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-   - the semantics associated with the IntermediateResponse message.  \r
-    \r
-   Extensions that allow the return of multiple types of \r
-   IntermediateResponse messages SHALL identify those types using unique \r
-   responseName values (note that one of these may specify no value). \r
-    \r
-   Sections 4.13.1 and 4.13.2 describe additional requirements on the \r
-   inclusion of responseName and responseValue in IntermediateResponse \r
-   messages.  \r
\r
-  \r
-4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse  \r
-     \r
-   A single-request/multiple-response operation may be defined using a \r
-   single ExtendedRequest message to solicit zero or more \r
-   IntermediateResponse messages of one or more kinds followed by an \r
-   ExtendedResponse message. \r
-     \r
-  \r
-4.13.2. Usage with LDAP Request Controls  \r
-     \r
-   A control's semantics may include the return of zero or more \r
-   IntermediateResponse messages prior to returning the final result \r
-   code for the operation.  One or more kinds of IntermediateResponse \r
-   messages may be sent in response to a request control. \r
-    \r
-   All IntermediateResponse messages associated with request controls \r
-   SHALL include a responseName.  This requirement ensures that the \r
-   client can correctly identify the source of IntermediateResponse \r
-   messages when: \r
-    \r
-   - two or more controls using IntermediateResponse messages are \r
-     included in a request for any LDAP operation or   \r
-        \r
-   - one or more controls using IntermediateResponse messages are \r
-     included in a request with an LDAP Extended operation that uses \r
-     IntermediateResponse messages. \r
-    \r
-    \r
-4.14. StartTLS Operation \r
\r
-   The Start Transport Layer Security (StartTLS) operation's purpose is \r
-   to initiate installation of a TLS layer. The StartTLS operation is \r
-   defined using the Extended operation mechanism described in Section \r
-   4.12. \r
-    \r
-    \r
-\r
-\r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 37 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-4.14.1. StartTLS Request \r
\r
-   A client requests TLS establishment by transmitting a StartTLS \r
-   request message to the server. The StartTLS request is defined in \r
-   terms of an ExtendedRequest. The requestName is \r
-   "1.3.6.1.4.1.1466.20037", and the requestValue field is always \r
-   absent.  \r
-    \r
-   The client MUST NOT send any LDAP PDUs at this LDAP message layer \r
-   following this request until it receives a StartTLS Extended response \r
-   and, in the case of a successful response, completes TLS \r
-   negotiations. \r
-    \r
-   Detected sequencing problems (particularly those detailed in Section \r
-   3.1.1 of [AuthMeth]) result in the resultCode being set to \r
-   operationsError. \r
-    \r
-   If the server does not support TLS (whether by design or by current \r
-   configuration), it returns with the resultCode set to protocolError \r
-   as described in Section 4.12. \r
-    \r
-    \r
-4.14.2. StartTLS Response \r
\r
-   When a StartTLS request is received, servers supporting the operation \r
-   MUST return a StartTLS response message to the requestor. The \r
-   responseName is "1.3.6.1.4.1.1466.20037" when provided (See 4.12). \r
-   The responseValue is always absent.  \r
-    \r
-   If the server is willing and able to negotiate TLS, it returns the \r
-   StartTLS response with the resultCode set to success. Upon client \r
-   receipt of a successful StartTLS response, protocol peers may \r
-   commence with TLS negotiation as discussed in Section 3 of \r
-   [AuthMeth]. \r
\r
-   If the server is otherwise unwilling or unable to perform this \r
-   operation, the server is to return an appropriate result code \r
-   indicating the nature of the problem.  For example, if the TLS \r
-   subsystem is not presently available, the server may indicate so by \r
-   returning with the resultCode set to unavailable. In cases where a \r
-   non-success result code is returned, the LDAP session is left without \r
-   a TLS layer. \r
\r
\r
-4.14.3. Removal of the TLS Layer \r
\r
-   Either the client or server MAY remove the TLS layer and leave the \r
-   LDAP message layer intact by sending and receiving a TLS closure \r
-   alert. \r
-    \r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 38 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   The initiating protocol peer sends the TLS closure alert and MUST \r
-   wait until it receives a TLS closure alert from the other peer before \r
-   sending further LDAP PDUs. \r
-    \r
-   When a protocol peer receives the initial TLS closure alert, it may \r
-   choose to allow the LDAP message layer to remain intact. In this \r
-   case, it MUST immediately transmit a TLS closure alert. Following \r
-   this, it MAY send and receive LDAP PDUs. \r
-    \r
-   Protocol peers MAY terminate the LDAP session after sending or \r
-   receiving a TLS closure alert. \r
-    \r
-    \r
-5. Protocol Encoding, Connection, and Transfer \r
-    \r
-   This protocol is designed to run over connection-oriented, reliable \r
-   transports, where the data stream is divided into octets (8-bit \r
-   units), with each octet and each bit being significant. \r
-    \r
-   One underlying service, LDAP over TCP, is defined in Section \r
-   5.2. This service is generally applicable to applications providing \r
-   or consuming X.500-based directory services on the Internet. This \r
-   specification was generally written with the TCP mapping in mind. \r
-   Specifications detailing other mappings may encounter various \r
-   obstacles. \r
-    \r
-   Implementations of LDAP over TCP MUST implement the mapping as \r
-   described in Section 5.2. \r
-    \r
-   This table illustrates the relationship between the different layers \r
-   involved in an exchange between two protocol peers: \r
-    \r
-               +----------------------+ \r
-               |  LDAP message layer  | \r
-               +----------------------+ > LDAP PDUs \r
-               +----------------------+ < data        \r
-               |      SASL layer      |              \r
-               +----------------------+ > SASL-protected data \r
-               +----------------------+ < data     \r
-               |       TLS layer      |           \r
-   Application +----------------------+ > TLS-protected data \r
-   ------------+----------------------+ < data   \r
-     Transport | transport connection | \r
-               +----------------------+  \r
-    \r
\r
-5.1. Protocol Encoding \r
\r
-   The protocol elements of LDAP SHALL be encoded for exchange using the \r
-   Basic Encoding Rules [BER] of [ASN.1] with the following \r
-   restrictions: \r
-    \r
-   - Only the definite form of length encoding is used. \r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 39 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-   - OCTET STRING values are encoded in the primitive form only. \r
-    \r
-   - If the value of a BOOLEAN type is true, the encoding of the value \r
-     octet is set to hex "FF". \r
-    \r
-   - If a value of a type is its default value, it is absent. Only some \r
-     BOOLEAN and INTEGER types have default values in this protocol \r
-     definition. \r
-    \r
-   These restrictions are meant to ease the overhead of encoding and \r
-   decoding certain elements in BER. \r
-    \r
-   These restrictions do not apply to ASN.1 types encapsulated inside of \r
-   OCTET STRING values, such as attribute values, unless otherwise \r
-   stated. \r
-    \r
\r
-5.2. Transmission Control Protocol (TCP) \r
-    \r
-   The encoded LDAPMessage PDUs are mapped directly onto the [TCP] \r
-   bytestream using the BER-based encoding described in Section 5.1. It \r
-   is recommended that server implementations running over the TCP \r
-   provide a protocol listener on the Internet Assigned Numbers \r
-   Authority (IANA)-assigned LDAP port, 389 [PortReg]. Servers may \r
-   instead provide a listener on a different port number. Clients MUST \r
-   support contacting servers on any valid TCP port. \r
-    \r
-    \r
-5.3. Termination of the LDAP session \r
-    \r
-   Termination of the LDAP session is typically initiated by the client \r
-   sending an UnbindRequest (Section 4.3), or by the server sending a \r
-   Notice of Disconnection (Section 4.4.1). In these cases each protocol \r
-   peer gracefully terminates the LDAP session by ceasing exchanges at \r
-   the LDAP message layer, tearing down any SASL layer, tearing down any \r
-   TLS layer, and closing the transport connection. \r
-    \r
-   A protocol peer may determine that the continuation of any \r
-   communication would be pernicious, and in this case may abruptly \r
-   terminate the session by ceasing communication and closing the \r
-   transport connection. \r
-    \r
-   In either case, when the LDAP session is terminated, uncompleted \r
-   operations are handled as specified in Section 3.1. \r
\r
-    \r
-6. Security Considerations \r
-    \r
-   This version of the protocol provides facilities for simple \r
-   authentication using a cleartext password, as well as any [SASL] \r
-   mechanism. Installing SASL and/or TLS layers can provide integrity \r
-   and other data security services. \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 40 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   It is also permitted that the server can return its credentials to \r
-   the client, if it chooses to do so. \r
-    \r
-   Use of cleartext password is strongly discouraged where the \r
-   underlying transport service cannot guarantee confidentiality and may \r
-   result in disclosure of the password to unauthorized parties. \r
-    \r
-   Servers are encouraged to prevent directory modifications by clients \r
-   that have authenticated anonymously [AuthMeth].  \r
-    \r
-   Security considerations for authentication methods, SASL mechanisms, \r
-   and TLS are described in [AuthMeth]. \r
-    \r
-   It should be noted that SASL authentication exchanges do not provide \r
-   data confidentiality nor integrity protection for the version or name \r
-   fields of the BindRequest nor the resultCode, diagnosticMessage, or \r
-   referral fields of the BindResponse nor of any information contained \r
-   in controls attached to Bind requests or responses. Thus information \r
-   contained in these fields SHOULD NOT be relied on unless otherwise \r
-   protected (such as by establishing protections at the transport \r
-   layer). \r
-    \r
-   Implementors should note that various security factors, including \r
-   authentication and authorization information and data security \r
-   services may change during the course of the LDAP session, or even \r
-   during the performance of a particular operation.  For instance, \r
-   credentials could expire, authorization identities or access controls \r
-   could change, or the underlying security layer(s) could be replaced \r
-   or terminated.  Implementations should be robust in the handling of \r
-   changing security factors. \r
-   In some cases, it may be appropriate to continue the operation even \r
-   in light of security factor changes.  For instance, it may be \r
-   appropriate to continue an Abandon operation regardless of the \r
-   change, or to continue an operation when the change upgraded (or \r
-   maintained) the security factor. In other cases, it may be \r
-   appropriate to fail, or alter the processing of the operation. For \r
-   instance, if confidential protections were removed, it would be \r
-   appropriate to either fail a request to return sensitive data, or \r
-   minimally, to exclude the return of sensitive data. \r
-    \r
-   Implementations which cache attributes and entries obtained via LDAP \r
-   MUST ensure that access controls are maintained if that information \r
-   is to be provided to multiple clients, since servers may have access \r
-   control policies which prevent the return of entries or attributes in \r
-   Search results except to particular authenticated clients. For \r
-   example, caches could serve result information only to the client \r
-   whose request caused it to be in the cache. \r
-    \r
-\r
-\r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 41 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   Servers may return referrals or Search result references which \r
-   redirect clients to peer servers. It is possible for a rogue \r
-   application to inject such referrals into the data stream in an \r
-   attempt to redirect a client to a rogue server. Clients are advised \r
-   to be aware of this, and possibly reject referrals when \r
-   confidentiality measures are not in place. Clients are advised to \r
-   reject referrals from the StartTLS operation. \r
-    \r
-   The matchedDN and diagnosticMessage fields, as well as some \r
-   resultCode values (e.g., attributeOrValueExists and \r
-   entryAlreadyExists), could disclose the presence or absence of \r
-   specific data in the directory which is subject to access and other \r
-   administrative controls. Server implementations should restrict \r
-   access to protected information equally under both normal and error \r
-   conditions. \r
-    \r
-   Protocol peers MUST be prepared to handle invalid and arbitrary \r
-   length protocol encodings. Invalid protocol encodings include: BER \r
-   encoding exceptions, format string and UTF-8 encoding exceptions, \r
-   overflow exceptions, integer value exceptions, and binary mode on/off \r
-   flag exceptions. The LDAPv3 PROTOS [PROTOS-LDAP] test suite provides \r
-   excellent examples of these exceptions and test cases used to \r
-   discover flaws. \r
-    \r
-   In the event that a protocol peer senses an attack which in its \r
-   nature could cause damage due to further communication at any layer \r
-   in the LDAP session, the protocol peer should abruptly terminate the \r
-   LDAP session as described in Section 5.3. \r
-    \r
-    \r
-7. Acknowledgements \r
-    \r
-   This document is based on RFC 2251 by Mark Wahl, Tim Howes, and Steve \r
-   Kille. RFC 2251 was a product of the IETF ASID Working Group. \r
-    \r
-   It is also based on RFC 2830 by Jeff Hodges, RL "Bob" Morgan, and \r
-   Mark Wahl. RFC 2830 was a product of the IETF LDAPEXT Working Group. \r
-    \r
-   It is also based on RFC 3771 by Roger Harrison, and Kurt Zeilenga. \r
-   RFC 3771 was an individual submission to the IETF. \r
-    \r
-   This document is a product of the IETF LDAPBIS Working Group. \r
-   Significant contributors of technical review and content include Kurt \r
-   Zeilenga, Steven Legg, and Hallvard Furuseth. \r
-    \r
-    \r
-8. Normative References \r
-      \r
-   [ABNF]    Crocker, D. and P. Overell, "Augmented BNF for Syntax \r
-             Specifications: ABNF", draft-crocker-abnf-rfc2234bis-\r
-             xx.txt, (a work in progress). \r
-    \r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 42 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   [ASN.1]   ITU-T Recommendation X.680 (07/2002) | ISO/IEC 8824-1:2002 \r
-             "Information Technology - Abstract Syntax Notation One \r
-             (ASN.1): Specification of basic notation" \r
-    \r
-   [AuthMeth] Harrison, R., "LDAP: Authentication Methods and Connection \r
-             Level Security Mechanisms", draft-ietf-ldapbis-authmeth-\r
-             xx.txt, (a work in progress). \r
-    \r
-   [BER]     ITU-T Rec. X.690 (07/2002) | ISO/IEC 8825-1:2002, \r
-             "Information technology - ASN.1 encoding rules: \r
-             Specification of Basic Encoding Rules (BER), Canonical \r
-             Encoding Rules (CER) and Distinguished Encoding Rules \r
-             (DER)", 2002. \r
\r
-   [IP]      Postel, J., "Internet Protocol", STD5 and RFC 791, \r
-             September 1981 \r
-    \r
-   [ISO10646] Universal Multiple-Octet Coded Character Set (UCS) - \r
-             Architecture and Basic Multilingual Plane, ISO/IEC 10646-1 \r
-             : 1993. \r
-     \r
-   [Keyword] Bradner, S., "Key words for use in RFCs to Indicate \r
-             Requirement Levels", RFC 2119, March 1997. \r
-     \r
-   [LDAPDN]  Zeilenga, K., "LDAP: String Representation of \r
-             Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, (a \r
-             work in progress). \r
-    \r
-   [LDAPIANA] Zeilenga, K., "IANA Considerations for LDAP", draft-ietf-\r
-             ldapbis-bcp64-xx.txt, (a work in progress). \r
-    \r
-   [LDAPURL] Smith, M., "LDAP: Uniform Resource Locator", draft-ietf-\r
-             ldapbis-url-xx.txt, (a work in progress). \r
-    \r
-   [Models]  Zeilenga, K., "LDAP: Directory Information Models", draft-\r
-             ietf-ldapbis-models-xx.txt (a work in progress). \r
-    \r
-   [Roadmap] Zeilenga, K., "LDAP: Technical Specification Road Map", \r
-             draft-ietf-ldapbis-roadmap-xx.txt (a work in progress). \r
-    \r
-   [SASL]    Melnikov, A., "Simple Authentication and Security Layer", \r
-             draft-ietf-sasl-rfc2222bis-xx.txt (a work in progress). \r
-    \r
-   [SASLPrep] Zeilenga, K., "Stringprep profile for user names and \r
-             passwords", draft-ietf-sasl-saslprep-xx.txt, (a work in \r
-             progress). \r
-    \r
-   [StringPrep] Hoffman P. and M. Blanchet, "Preparation of \r
-             Internationalized Strings ('stringprep')", draft-hoffman-\r
-             rfc3454bis-xx.txt, a work in progress. \r
-    \r
-   [Syntaxes] Legg, S., and K. Dally, "LDAP: Syntaxes and Matching \r
-             Rules", draft-ietf-ldapbis-syntaxes-xx.txt, (a work in \r
-             progress). \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 43 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-   [TCP]     Postel, J., "Transmission Control Protocol", STD7 and RFC \r
-             793, September 1981 \r
-    \r
-   [TLS]     Dierks, T. and C. Allen. "The TLS Protocol Version 1.1", \r
-             draft-ietf-tls-rfc2246-bis-xx.txt, a work in progress. \r
-    \r
-   [Unicode] The Unicode Consortium, "The Unicode Standard, Version \r
-             3.2.0" is defined by "The Unicode Standard, Version 3.0" \r
-             (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5), \r
-             as amended by the "Unicode Standard Annex #27: Unicode \r
-             3.1" (http://www.unicode.org/reports/tr27/) and by the \r
-             "Unicode Standard Annex #28: Unicode 3.2" \r
-             (http://www.unicode.org/reports/tr28/). \r
-    \r
-   [URI]     Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform \r
-             Resource Identifiers (URI): Generic Syntax", RFC 2396, \r
-             August 1998. \r
-    \r
-   [UTF-8]   Yergeau, F., "UTF-8, a transformation format of ISO \r
-             10646", STD63 and RFC3629, November 2003. \r
-    \r
-   [X.500]   ITU-T Rec. X.500, "The Directory: Overview of Concepts, \r
-             Models and Service", 1993. \r
-     \r
-   [X.501]   ITU-T Rec. X.501, "The Directory: Models", 1993. \r
-    \r
-   [X.511]   ITU-T Rec. X.511, "The Directory: Abstract Service \r
-             Definition", 1993. \r
-    \r
-    \r
-9. Informative References \r
-    \r
-   [Glossary] The Unicode Consortium, "Unicode Glossary", \r
-             <http://www.unicode.org/glossary/>. \r
-    \r
-   [CharModel]  Whistler, K. and M. Davis, "Unicode Technical Report \r
-             #17, Character Encoding Model", UTR17, \r
-             <http://www.unicode.org/unicode/reports/tr17/>, August \r
-             2000. \r
-    \r
-   [PROTOS-LDAP] University of Oulu, "PROTOS Test-Suite: c06-ldapv3" \r
-             <http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/l\r
-             dapv3/> \r
-    \r
-   [PortReg] IANA, "Port Numbers", \r
-             http://www.iana.org/assignments/port-numbers \r
\r
\r
-10. IANA Considerations \r
-    \r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 44 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   It is requested that the Internet Assigned Numbers Authority (IANA) \r
-   update the LDAP result code registry to indicate that this document \r
-   provides the definitive technical specification for result codes 0-\r
-   36, 48-54, 64-70, 80-90. It is also noted that one resultCode value \r
-   (strongAuthRequired) has been renamed (to strongerAuthRequired). \r
-    \r
-   It is requested that the IANA update the LDAP Protocol Mechanism \r
-   registry to indicate that this document and [AuthMeth] provides the \r
-   definitive technical specification for the StartTLS \r
-   (1.3.6.1.4.1.1466.20037) Extended operation. \r
-    \r
-   It is requested that the IANA update the occurrence of "RFC XXXX" in \r
-   this section and Appendix B with this RFC number at publication. \r
\r
-   It is requested that IANA assign upon Standards Action an LDAP Object \r
-   Identifier [LDAPIANA] to identify the ASN.1 module defined in this \r
-   document. \r
-    \r
-        Subject: Request for LDAP Object Identifier Registration \r
-        Person & email address to contact for further information: \r
-             Jim Sermersheim <jimse@novell.com> \r
-        Specification: RFC XXXX \r
-        Author/Change Controller: IESG \r
-        Comments:    \r
-             Identifies the LDAP ASN.1 module \r
-    \r
-   [[Note to RFC Editor: please replace the occurrence of <IANA-\r
-   ASSIGNED-DIRECTORY-NUMBER> in Appendix B with the IANA assigned \r
-   OID.]] \r
-    \r
\r
-11. Editor's Address \r
-    \r
-   Jim Sermersheim \r
-   Novell, Inc. \r
-   1800 South Novell Place \r
-   Provo, Utah 84606, USA \r
-   jimse@novell.com \r
-   +1 801 861-3088 \r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 45 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-Appendix A. LDAP Result Codes \r
\r
-   This normative appendix details additional considerations regarding \r
-   LDAP result codes and provides a brief, general description of each \r
-   LDAP result code enumerated in Section 4.1.9. \r
-    \r
-   Additional result codes MAY be defined for use with extensions \r
-   [LDAPIANA]. Client implementations SHALL treat any result code which \r
-   they do not recognize as an unknown error condition. \r
-    \r
-   The descriptions provided here do not fully account for result code \r
-   substitutions used to prevent unauthorized disclosures (such as \r
-   substitution of noSuchObject for insufficientAccessRights, or \r
-   invalidCredentials for insufficientAccessRights). \r
-    \r
-    \r
-A.1. Non-Error Result Codes \r
-    \r
-   These result codes (called "non-error" result codes) do not indicate \r
-   an error condition: \r
-        success (0), \r
-        compareFalse (5), \r
-        compareTrue (6), \r
-        referral (10), and \r
-        saslBindInProgress (14). \r
-    \r
-   The success, compareTrue, and compareFalse result codes indicate \r
-   successful completion (and, hence, are referred to as "successful" \r
-   result codes). \r
-    \r
-   The referral and saslBindInProgress result codes indicate the client \r
-   needs to take additional action to complete the operation. \r
-    \r
-    \r
-A.2. Result Codes \r
-    \r
-   Existing LDAP result codes are described as follows: \r
\r
-        success (0) \r
-           Indicates the successful completion of an operation. Note: \r
-           this code is not used with the Compare operation. See \r
-           compareFalse (5) and compareTrue (6).        \r
-    \r
-        operationsError (1) \r
-           Indicates that the operation is not properly sequenced with \r
-           relation to other operations (of same or different type). \r
\r
-           For example, this code is returned if the client attempts to \r
-           StartTLS [TLS] while there are other uncompleted operations \r
-           or if a TLS layer was already installed. \r
\r
-        protocolError (2) \r
-           Indicates the server received data which is not well-formed. \r
-            \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 46 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-           For Bind operation only, this code is also used to indicate \r
-           that the server does not support the requested protocol \r
-           version. \r
-            \r
-           For Extended operations only, this code is also used to \r
-           indicate that the server does not support (by design or \r
-           configuration) the Extended operation associated with the \r
-           requestName. \r
-            \r
-           For request operations specifying multiple controls, this may \r
-           be used to indicate that the server cannot ignore the order \r
-           of the controls as specified, or that the combination of the \r
-           specified controls is invalid or unspecified. \r
-            \r
-        timeLimitExceeded (3) \r
-           Indicates that the time limit specified by the client was \r
-           exceeded before the operation could be completed. \r
\r
-        sizeLimitExceeded (4) \r
-           Indicates that the size limit specified by the client was \r
-           exceeded before the operation could be completed. \r
-         \r
-        compareFalse (5) \r
-           Indicates that the Compare operation has successfully \r
-           completed and the assertion has evaluated to FALSE or \r
-           Undefined. \r
-         \r
-        compareTrue (6) \r
-           Indicates that the Compare operation has successfully \r
-           completed and the assertion has evaluated to TRUE. \r
-         \r
-        authMethodNotSupported (7) \r
-           Indicates that the authentication method or mechanism is not \r
-           supported. \r
-         \r
-        strongerAuthRequired (8) \r
-           Indicates the server requires strong(er) authentication in \r
-           order to complete the operation. \r
-            \r
-           When used with the Notice of Disconnection operation, this \r
-           code indicates that the server has detected that an \r
-           established security association between the client and \r
-           server has unexpectedly failed or been compromised. \r
-         \r
-        referral (10) \r
-           Indicates that a referral needs to be chased to complete the \r
-           operation (see Section 4.1.10). \r
-         \r
-        adminLimitExceeded (11) \r
-           Indicates that an administrative limit has been exceeded. \r
-         \r
-        unavailableCriticalExtension (12) \r
-           Indicates a critical control is unrecognized (see Section \r
-           4.1.11). \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 47 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-         \r
-        confidentialityRequired (13) \r
-           Indicates that data confidentiality protections are required. \r
-         \r
-        saslBindInProgress (14) \r
-           Indicates the server requires the client to send a new bind \r
-           request, with the same SASL mechanism, to continue the \r
-           authentication process (see Section 4.2). \r
-         \r
-        noSuchAttribute (16) \r
-           Indicates that the named entry does not contain the specified \r
-           attribute or attribute value. \r
-         \r
-        undefinedAttributeType (17) \r
-           Indicates that a request field contains an unrecognized \r
-           attribute description. \r
-         \r
-        inappropriateMatching (18) \r
-           Indicates that an attempt was made (e.g. in an assertion) to \r
-           use a matching rule not defined for the attribute type \r
-           concerned. \r
-         \r
-        constraintViolation (19) \r
-           Indicates that the client supplied an attribute value which \r
-           does not conform to the constraints placed upon it by the \r
-           data model. \r
-         \r
-           For example, this code is returned when multiple values are \r
-           supplied to an attribute which has a SINGLE-VALUE constraint. \r
-         \r
-        attributeOrValueExists (20) \r
-           Indicates that the client supplied an attribute or value to \r
-           be added to an entry, but the attribute or value already \r
-           exists. \r
-         \r
-        invalidAttributeSyntax (21) \r
-           Indicates that a purported attribute value does not conform \r
-           to the syntax of the attribute. \r
-         \r
-        noSuchObject (32) \r
-           Indicates that the object does not exist in the DIT. \r
-         \r
-        aliasProblem (33) \r
-           Indicates that an alias problem has occurred. For example, \r
-           the code may used to indicate an alias has been dereferenced \r
-           which names no object. \r
-         \r
-        invalidDNSyntax (34) \r
-           Indicates that an LDAPDN or RelativeLDAPDN field (e.g. search \r
-           base, target entry, ModifyDN newrdn, etc.) of a request does \r
-           not conform to the required syntax or contains attribute \r
-           values which do not conform to the syntax of the attribute's \r
-           type. \r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 48 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-         \r
-        aliasDereferencingProblem (36) \r
-           Indicates that a problem occurred while dereferencing an \r
-           alias. Typically an alias was encountered in a situation \r
-           where it was not allowed or where access was denied. \r
-         \r
-        inappropriateAuthentication (48) \r
-           Indicates the server requires the client which had attempted \r
-           to bind anonymously or without supplying credentials to \r
-           provide some form of credentials. \r
-         \r
-        invalidCredentials (49) \r
-           Indicates that the provided credentials (e.g. the user's name \r
-           and password) are invalid. \r
-         \r
-        insufficientAccessRights (50) \r
-           Indicates that the client does not have sufficient access \r
-           rights to perform the operation. \r
-         \r
-        busy (51) \r
-           Indicates that the server is too busy to service the \r
-           operation. \r
-         \r
-        unavailable (52) \r
-           Indicates that the server is shutting down or a subsystem \r
-           necessary to complete the operation is offline. \r
-         \r
-        unwillingToPerform (53) \r
-           Indicates that the server is unwilling to perform the \r
-           operation. \r
-         \r
-        loopDetect (54) \r
-           Indicates that the server has detected an internal loop (e.g. \r
-           while dereferencing aliases or chaining an operation). \r
-         \r
-        namingViolation (64) \r
-           Indicates that the entry's name violates naming restrictions. \r
-         \r
-        objectClassViolation (65) \r
-           Indicates that the entry violates object class restrictions. \r
-         \r
-        notAllowedOnNonLeaf (66) \r
-           Indicates that the operation is inappropriately acting upon a \r
-           non-leaf entry. \r
-         \r
-        notAllowedOnRDN (67) \r
-           Indicates that the operation is inappropriately attempting to \r
-           remove a value which forms the entry's relative distinguished \r
-           name. \r
-         \r
-        entryAlreadyExists (68) \r
-           Indicates that the request cannot be fulfilled (added, moved, \r
-           or renamed) as the target entry already exists. \r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 49 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-         \r
-        objectClassModsProhibited (69) \r
-           Indicates that an attempt to modify the object class(es) of \r
-           an entry's 'objectClass' attribute is prohibited. \r
-         \r
-           For example, this code is returned when a client attempts to \r
-           modify the structural object class of an entry. \r
-         \r
-        affectsMultipleDSAs (71) \r
-           Indicates that the operation cannot be performed as it would \r
-           affect multiple servers (DSAs). \r
-         \r
-        other (80) \r
-           Indicates the server has encountered an internal error. \r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 50 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-Appendix B. Complete ASN.1 Definition \r
-    \r
-        This appendix is normative. \r
-    \r
-        Lightweight-Directory-Access-Protocol-V3 {1 3 6 1 1 <IANA-\r
-   ASSIGNED-DIRECTORY-NUMBER>} \r
-        -- Copyright (C) The Internet Society (2005). This version of \r
-        -- this ASN.1 module is part of RFC XXXX; see the RFC itself \r
-        -- for full legal notices. \r
-        DEFINITIONS \r
-        IMPLICIT TAGS \r
-        EXTENSIBILITY IMPLIED ::= \r
-    \r
-        BEGIN \r
-    \r
-        LDAPMessage ::= SEQUENCE { \r
-             messageID       MessageID, \r
-             protocolOp      CHOICE { \r
-                  bindRequest           BindRequest, \r
-                  bindResponse          BindResponse, \r
-                  unbindRequest         UnbindRequest, \r
-                  searchRequest         SearchRequest, \r
-                  searchResEntry        SearchResultEntry, \r
-                  searchResDone         SearchResultDone, \r
-                  searchResRef          SearchResultReference, \r
-                  modifyRequest         ModifyRequest, \r
-                  modifyResponse        ModifyResponse, \r
-                  addRequest            AddRequest, \r
-                  addResponse           AddResponse, \r
-                  delRequest            DelRequest, \r
-                  delResponse           DelResponse, \r
-                  modDNRequest          ModifyDNRequest, \r
-                  modDNResponse         ModifyDNResponse, \r
-                  compareRequest        CompareRequest, \r
-                  compareResponse       CompareResponse, \r
-                  abandonRequest        AbandonRequest, \r
-                  extendedReq           ExtendedRequest, \r
-                  extendedResp          ExtendedResponse, \r
-                  ..., \r
-                  intermediateResponse  IntermediateResponse }, \r
-             controls       [0] Controls OPTIONAL } \r
-    \r
-        MessageID ::= INTEGER (0 .. maxInt) \r
-    \r
-        maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- \r
-    \r
-        LDAPString ::= OCTET STRING -- UTF-8 encoded, \r
-                                    -- [ISO10646] characters \r
-    \r
-        LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] \r
-    \r
-        LDAPDN ::= LDAPString -- Constrained to <distinguishedName> \r
-                              -- [LDAPDN] \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 51 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-        RelativeLDAPDN ::= LDAPString -- Constrained to <name-component> \r
-                                      -- [LDAPDN] \r
-    \r
-        AttributeDescription ::= LDAPString \r
-                                -- Constrained to <attributedescription> \r
-                                -- [Models] \r
-    \r
-        AttributeValue ::= OCTET STRING \r
-    \r
-        AttributeValueAssertion ::= SEQUENCE { \r
-             attributeDesc   AttributeDescription, \r
-             assertionValue  AssertionValue } \r
-    \r
-        AssertionValue ::= OCTET STRING \r
-    \r
-        PartialAttribute ::= SEQUENCE { \r
-             type       AttributeDescription, \r
-             vals       SET OF value AttributeValue } \r
-    \r
-        Attribute ::= PartialAttribute(WITH COMPONENTS { \r
-             ...,  \r
-             vals (SIZE(1..MAX))}) \r
-    \r
-        MatchingRuleId ::= LDAPString \r
-    \r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 52 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-        LDAPResult ::= SEQUENCE { \r
-             resultCode         ENUMERATED { \r
-                  success                      (0), \r
-                  operationsError              (1), \r
-                  protocolError                (2), \r
-                  timeLimitExceeded            (3), \r
-                  sizeLimitExceeded            (4), \r
-                  compareFalse                 (5), \r
-                  compareTrue                  (6), \r
-                  authMethodNotSupported       (7), \r
-                  strongerAuthRequired         (8), \r
-                       -- 9 reserved -- \r
-                  referral                     (10), \r
-                  adminLimitExceeded           (11), \r
-                  unavailableCriticalExtension (12), \r
-                  confidentialityRequired      (13), \r
-                  saslBindInProgress           (14), \r
-                  noSuchAttribute              (16), \r
-                  undefinedAttributeType       (17), \r
-                  inappropriateMatching        (18), \r
-                  constraintViolation          (19), \r
-                  attributeOrValueExists       (20), \r
-                  invalidAttributeSyntax       (21), \r
-                       -- 22-31 unused -- \r
-                  noSuchObject                 (32), \r
-                  aliasProblem                 (33), \r
-                  invalidDNSyntax              (34), \r
-                       -- 35 reserved for undefined isLeaf -- \r
-                  aliasDereferencingProblem    (36), \r
-                       -- 37-47 unused -- \r
-                  inappropriateAuthentication  (48), \r
-                  invalidCredentials           (49), \r
-                  insufficientAccessRights     (50), \r
-                  busy                         (51), \r
-                  unavailable                  (52), \r
-                  unwillingToPerform           (53), \r
-                  loopDetect                   (54), \r
-                       -- 55-63 unused -- \r
-                  namingViolation              (64), \r
-                  objectClassViolation         (65), \r
-                  notAllowedOnNonLeaf          (66), \r
-                  notAllowedOnRDN              (67), \r
-                  entryAlreadyExists           (68), \r
-                  objectClassModsProhibited    (69), \r
-                       -- 70 reserved for CLDAP -- \r
-                  affectsMultipleDSAs          (71), \r
-                       -- 72-79 unused -- \r
-                  other                        (80), \r
-                  ... }, \r
-             matchedDN          LDAPDN, \r
-             diagnosticMessage  LDAPString, \r
-             referral           [3] Referral OPTIONAL } \r
-    \r
-        Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 53 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-        URI ::= LDAPString     -- limited to characters permitted in \r
-                               -- URIs \r
-    \r
-        Controls ::= SEQUENCE OF control Control \r
-    \r
-        Control ::= SEQUENCE { \r
-             controlType             LDAPOID, \r
-             criticality             BOOLEAN DEFAULT FALSE, \r
-             controlValue            OCTET STRING OPTIONAL } \r
-    \r
-        BindRequest ::= [APPLICATION 0] SEQUENCE { \r
-             version                 INTEGER (1 .. 127), \r
-             name                    LDAPDN, \r
-             authentication          AuthenticationChoice } \r
-    \r
-        AuthenticationChoice ::= CHOICE { \r
-             simple                  [0] OCTET STRING, \r
-                                     -- 1 and 2 reserved \r
-             sasl                    [3] SaslCredentials, \r
-             ... } \r
-    \r
-        SaslCredentials ::= SEQUENCE { \r
-             mechanism               LDAPString, \r
-             credentials             OCTET STRING OPTIONAL } \r
-    \r
-        BindResponse ::= [APPLICATION 1] SEQUENCE { \r
-             COMPONENTS OF LDAPResult, \r
-             serverSaslCreds    [7] OCTET STRING OPTIONAL } \r
-    \r
-        UnbindRequest ::= [APPLICATION 2] NULL \r
-    \r
-        SearchRequest ::= [APPLICATION 3] SEQUENCE { \r
-             baseObject      LDAPDN, \r
-             scope           ENUMERATED { \r
-                  baseObject              (0), \r
-                  singleLevel             (1), \r
-                  wholeSubtree            (2), \r
-                  ... }, \r
-             derefAliases    ENUMERATED { \r
-                  neverDerefAliases       (0), \r
-                  derefInSearching        (1), \r
-                  derefFindingBaseObj     (2), \r
-                  derefAlways             (3) }, \r
-             sizeLimit       INTEGER (0 .. maxInt), \r
-             timeLimit       INTEGER (0 .. maxInt), \r
-             typesOnly       BOOLEAN, \r
-             filter          Filter, \r
-             attributes      AttributeSelection } \r
-    \r
-        AttributeSelection ::= SEQUENCE OF selector LDAPString \r
-                       -- The LDAPString is constrained to \r
-                       -- <attributeSelector> in Section 4.5.1.7 \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 54 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-        Filter ::= CHOICE { \r
-             and             [0] SET SIZE (1..MAX) OF filter Filter, \r
-             or              [1] SET SIZE (1..MAX) OF filter Filter, \r
-             not             [2] Filter, \r
-             equalityMatch   [3] AttributeValueAssertion, \r
-             substrings      [4] SubstringFilter, \r
-             greaterOrEqual  [5] AttributeValueAssertion, \r
-             lessOrEqual     [6] AttributeValueAssertion, \r
-             present         [7] AttributeDescription, \r
-             approxMatch     [8] AttributeValueAssertion, \r
-             extensibleMatch [9] MatchingRuleAssertion, \r
-             ... } \r
-    \r
-        SubstringFilter ::= SEQUENCE { \r
-             type           AttributeDescription, \r
-             substrings     SEQUENCE SIZE (1..MAX) OF substring CHOICE { \r
-                  initial [0] AssertionValue,  -- can occur at most once \r
-                  any     [1] AssertionValue, \r
-                  final   [2] AssertionValue } -- can occur at most once  \r
-             } \r
-    \r
-        MatchingRuleAssertion ::= SEQUENCE { \r
-             matchingRule    [1] MatchingRuleId OPTIONAL, \r
-             type            [2] AttributeDescription OPTIONAL, \r
-             matchValue      [3] AssertionValue, \r
-             dnAttributes    [4] BOOLEAN DEFAULT FALSE } \r
-    \r
-        SearchResultEntry ::= [APPLICATION 4] SEQUENCE { \r
-             objectName      LDAPDN, \r
-             attributes      PartialAttributeList } \r
-    \r
-        PartialAttributeList ::= SEQUENCE OF  \r
-                             partialAttribute PartialAttribute   \r
-    \r
-        SearchResultReference ::= [APPLICATION 19] SEQUENCE  \r
-                                  SIZE (1..MAX) OF uri URI \r
-    \r
-        SearchResultDone ::= [APPLICATION 5] LDAPResult \r
-    \r
-        ModifyRequest ::= [APPLICATION 6] SEQUENCE { \r
-             object          LDAPDN, \r
-             changes         SEQUENCE OF change SEQUENCE { \r
-                  operation       ENUMERATED { \r
-                       add     (0), \r
-                       delete  (1), \r
-                       replace (2), \r
-                       ... }, \r
-                  modification    PartialAttribute } } \r
-    \r
-        ModifyResponse ::= [APPLICATION 7] LDAPResult \r
-    \r
-        AddRequest ::= [APPLICATION 8] SEQUENCE { \r
-             entry           LDAPDN, \r
-             attributes      AttributeList } \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 55 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-        AttributeList ::= SEQUENCE OF attribute Attribute \r
-    \r
-        AddResponse ::= [APPLICATION 9] LDAPResult \r
-    \r
-        DelRequest ::= [APPLICATION 10] LDAPDN \r
-    \r
-        DelResponse ::= [APPLICATION 11] LDAPResult \r
-    \r
-        ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { \r
-             entry           LDAPDN, \r
-             newrdn          RelativeLDAPDN, \r
-             deleteoldrdn    BOOLEAN, \r
-             newSuperior     [0] LDAPDN OPTIONAL } \r
-    \r
-        ModifyDNResponse ::= [APPLICATION 13] LDAPResult \r
-    \r
-        CompareRequest ::= [APPLICATION 14] SEQUENCE { \r
-             entry           LDAPDN, \r
-             ava             AttributeValueAssertion } \r
-    \r
-        CompareResponse ::= [APPLICATION 15] LDAPResult \r
-    \r
-        AbandonRequest ::= [APPLICATION 16] MessageID \r
-    \r
-        ExtendedRequest ::= [APPLICATION 23] SEQUENCE { \r
-             requestName      [0] LDAPOID, \r
-             requestValue     [1] OCTET STRING OPTIONAL } \r
-    \r
-        ExtendedResponse ::= [APPLICATION 24] SEQUENCE { \r
-             COMPONENTS OF LDAPResult, \r
-             responseName     [10] LDAPOID OPTIONAL, \r
-             responseValue    [11] OCTET STRING OPTIONAL } \r
-    \r
-        IntermediateResponse ::= [APPLICATION 25] SEQUENCE { \r
-             responseName     [0] LDAPOID OPTIONAL, \r
-             responseValue    [1] OCTET STRING OPTIONAL } \r
-    \r
-        END \r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 56 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-Appendix C. Changes \r
\r
-   This appendix is non-normative. \r
-    \r
-   This appendix summarizes substantive changes made to RFC 2251, RFC \r
-   2830, and RFC 3771. \r
-    \r
-    \r
-C.1. Changes made to RFC 2251: \r
-    \r
-   This section summarizes the substantive changes made to Sections 1, \r
-   2, 3.1, and 4 through the remainder of RFC 2251. Readers should \r
-   consult [Models] and [AuthMeth] for summaries of changes to other \r
-   sections. \r
-    \r
-    \r
-C.1.1. Section 1 (Status of this Memo) \r
-    \r
-   - Removed IESG note. Post publication of RFC 2251, mandatory LDAP \r
-     authentication mechanisms have been standardized which are \r
-     sufficient to remove this note. See [AuthMeth] for authentication \r
-     mechanisms. \r
-    \r
-    \r
-C.1.2. Section 3.1 (Protocol Model) and others \r
\r
-   - Removed notes giving history between LDAP v1, v2 and v3. Instead, \r
-     added sufficient language so that this document can stand on its \r
-     own. \r
-    \r
-    \r
-C.1.3. Section 4 (Elements of Protocol) \r
\r
-   - Clarified where the extensibility features of ASN.1 apply to the \r
-     protocol. This change affected various ASN.1 types by the \r
-     inclusion of ellipses (...) to certain elements. \r
-   - Removed the requirement that servers which implement version 3 or \r
-     later MUST provide the 'supportedLDAPVersion' attribute. This \r
-     statement provided no interoperability advantages. \r
\r
\r
-C.1.4. Section 4.1.1 (Message Envelope) \r
\r
-   - There was a mandatory requirement for the server to return a \r
-     Notice of Disconnection and drop the transport connection when a \r
-     PDU is malformed in a certain way. This has been updated such that \r
-     the server SHOULD return the Notice of Disconnection, and MUST \r
-     terminate the LDAP Session. \r
\r
\r
-C.1.5. Section 4.1.1.1 (Message ID) \r
\r
-   - Required that the messageID of requests MUST be non-zero as the \r
-     zero is reserved for Notice of Disconnection. \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 57 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   - Specified when it is and isn't appropriate to return an already \r
-     used message id. RFC 2251 accidentally imposed synchronous server \r
-     behavior in its wording of this. \r
\r
\r
-C.1.6. Section 4.1.2 (String Types) \r
\r
-   - Stated that LDAPOID is constrained to <numericoid> from [Models]. \r
\r
\r
-C.1.7. Section 4.1.5.1 (Binary Option) and others \r
\r
-   - Removed the Binary Option from the specification. There are \r
-     numerous interoperability problems associated with this method of \r
-     alternate attribute type encoding. Work to specify a suitable \r
-     replacement is ongoing. \r
\r
\r
-C.1.8. Section 4.1.8 (Attribute) \r
\r
-   - Combined the definitions of PartialAttribute and Attribute here, \r
-     and defined Attribute in terms of PartialAttribute. \r
\r
\r
-C.1.9. Section 4.1.10 (Result Message) \r
\r
-   - Renamed "errorMessage" to "diagnosticMessage" as it is allowed to \r
-     be sent for non-error results. \r
-   - Moved some language into Appendix A, and refer the reader there. \r
-   - Allowed matchedDN to be present for other result codes than those \r
-     listed in RFC 2251. \r
-   - renamed the code "strongAuthRequired" to "strongerAuthRequired" to \r
-     clarify that this code may often be returned to indicate that a \r
-     stronger authentication is needed to perform a given operation. \r
\r
\r
-C.1.10. Section 4.1.11 (Referral) \r
\r
-   - Defined referrals in terms of URIs rather than URLs. \r
-   - Removed the requirement that all referral URIs MUST be equally \r
-     capable of progressing the operation. The statement was ambiguous \r
-     and provided no instructions on how to carry it out. \r
-   - Added the requirement that clients MUST NOT loop between servers. \r
-   - Clarified the instructions for using LDAPURLs in referrals, and in \r
-     doing so added a recommendation that the scope part be present. \r
-   - Removed imperatives which required clients to use URLs in specific \r
-     ways to progress an operation. These did nothing for \r
-     interoperability. \r
\r
\r
-C.1.11. Section 4.1.12 (Controls) \r
\r
-   - Specified how control values defined in terms of ASN.1 are to be \r
-     encoded. \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 58 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-   - Noted that the criticality field is only applied to request \r
-     messages (except UnbindRequest), and must be ignored when present \r
-     on response messages and UnbindRequest. \r
-   - Specified that non-critical controls may be ignored at the \r
-     server's discretion. There was confusion in the original wording \r
-     which led some to believe that recognized controls may not be \r
-     ignored as long as they were associated with a proper request. \r
-   - Added language regarding combinations of controls and the ordering \r
-     of controls on a message. \r
-   - Specified that when the semantics of the combination of controls \r
-     is undefined or unknown, it results in a protocolError. \r
-   - Changed "The server MUST be prepared" to "Implementations MUST be \r
-     prepared" in the eighth paragraph to reflect that both client and \r
-     server implementations must be able to handle this (as both parse \r
-     controls). \r
\r
\r
-C.1.12. Section 4.2 (Bind Operation) \r
\r
-   - Mandated that servers return protocolError when the version is not \r
-     supported. \r
-   - Disambiguated behavior when the simple authentication is used, the \r
-     name is empty and the password is non-empty. \r
-   - Required servers to not dereference aliases for Bind. This was \r
-     added for consistency with other operations and to help ensure \r
-     data consistency. \r
-   - Required that textual passwords be transferred as UTF-8 encoded \r
-     Unicode, and added recommendations on string preparation. This was \r
-     to help ensure interoperability of passwords being sent from \r
-     different clients. \r
\r
\r
-C.1.13. Section 4.2.1 (Sequencing of the Bind Request) \r
\r
-   - This section was largely reorganized for readability and language \r
-     was added to clarify the authentication state of failed and \r
-     abandoned Bind operations. \r
-   - Removed: "If a SASL transfer encryption or integrity mechanism has \r
-     been negotiated, that mechanism does not support the changing of \r
-     credentials from one identity to another, then the client MUST \r
-     instead establish a new connection." \r
-     If there are dependencies between multiple negotiations of a \r
-     particular SASL mechanism, the technical specification for that \r
-     SASL mechanism details how applications are to deal with them. \r
-     LDAP should not require any special handling. \r
-   - Dropped MUST imperative in paragraph 3 to align with [Keywords]. \r
-   - Mandated that clients not send non-Bind operations while a Bind is \r
-     in progress, and suggested that servers not process them if they \r
-     are received. This is needed to ensure proper sequencing of the \r
-     Bind in relationship to other operations. \r
-    \r
-    \r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 59 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-C.1.14. Section 4.2.3 (Bind Response) \r
\r
-   - Moved most error-related text to Appendix A, and added text \r
-     regarding certain errors used in conjunction with the Bind \r
-     operation. \r
-   - Prohibited the server from specifying serverSaslCreds when not \r
-     appropriate. \r
-    \r
-    \r
-C.1.15. Section 4.3 (Unbind Operation) \r
\r
-   - Specified that both peers are to cease transmission and terminate \r
-     the LDAP session for the Unbind operation. \r
-    \r
-    \r
-C.1.16. Section 4.4 (Unsolicited Notification) \r
\r
-   - Added instructions for future specifications of Unsolicited \r
-     Notifications. \r
-    \r
-    \r
-C.1.17. Section 4.5.1 (Search Request) \r
\r
-   - SearchRequest attributes is now defined as an AttributeSelection \r
-     type rather than AttributeDescriptionList, and an ABNF is \r
-     provided. \r
-   - SearchRequest attributes may contain duplicate attribute \r
-     descriptions. This was previously prohibited. Now servers are \r
-     instructed to ignore subsequent names when they are duplicated. \r
-     This was relaxed in order to allow different short names and also \r
-     OIDs to be requested for an attribute. \r
-   - The present search filter now evaluates to Undefined when the \r
-     specified attribute is not known to the server. It used to \r
-     evaluate to FALSE, which caused behavior inconsistent with what \r
-     most would expect, especially when the not operator was used. \r
-   - The Filter choice SubstringFilter substrings type is now defined \r
-     with a lower bound of 1. \r
-   - The SubstringFilter substrings 'initial, 'any', and 'final' types \r
-     are now AssertionValue rather than LDAPString. Also, added \r
-     imperatives stating that 'initial' (if present) must be listed \r
-     first, and 'final' (if present) must be listed last. \r
-   - Disambiguated the semantics of the derefAliases choices. There was \r
-     question as to whether derefInSearching applied to the base object \r
-     in a wholeSubtree Search. \r
-   - Added instructions for equalityMatch, substrings, greaterOrEqual, \r
-     lessOrEqual, and approxMatch. \r
-    \r
-    \r
-C.1.18. Section 4.5.2 (Search Result) \r
\r
-   - Recommended that servers not use attribute short names when it \r
-     knows they are ambiguous or may cause interoperability problems. \r
-   - Removed all mention of ExtendedResponse due to lack of \r
-     implementation. \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 60 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-    \r
-C.1.19. Section 4.5.3 (Continuation References in the Search Result) \r
\r
-   - Made changes similar to those made to Section 4.1.11. \r
-    \r
-    \r
-C.1.20. Section 4.5.3.1 (Example) \r
\r
-   - Fixed examples to adhere to changes made to Section 4.5.3. \r
-    \r
-    \r
-C.1.21. Section 4.6 (Modify Operation) \r
-    \r
-   - Replaced AttributeTypeAndValues with Attribute as they are \r
-     equivalent. \r
-   - Specified the types of modification changes which might \r
-     temporarily violate schema. Some readers were under the impression \r
-     that any temporary schema violation was allowed.  \r
-    \r
-    \r
-C.1.22. Section 4.7 (Add Operation) \r
\r
-   - Aligned Add operation with X.511 in that the attributes of the RDN \r
-     are used in conjunction with the listed attributes to create the \r
-     entry. Previously, Add required that the distinguished values be \r
-     present in the listed attributes. \r
-   - Removed requirement that the objectClass attribute MUST be \r
-     specified as some DSE types do not require this attribute. \r
-     Instead, generic wording was added, requiring the added entry to \r
-     adhere to the data model. \r
-   - Removed recommendation regarding placement of objects. This is \r
-     covered in the data model document. \r
-    \r
-    \r
-C.1.23. Section 4.9 (Modify DN Operation) \r
\r
-   - Required servers to not dereference aliases for Modify DN. This \r
-     was added for consistency with other operations and to help ensure \r
-     data consistency. \r
-   - Allow Modify DN to fail when moving between naming contexts. \r
-   - Specified what happens when the attributes of the newrdn are not \r
-     present on the entry. \r
\r
\r
-C.1.24. Section 4.10 (Compare Operation) \r
\r
-   - Specified that compareFalse means that the Compare took place and \r
-     the result is false. There was confusion which lead people to \r
-     believe that an Undefined match resulted in compareFalse. \r
-   - Required servers to not dereference aliases for Compare. This was \r
-     added for consistency with other operations and to help ensure \r
-     data consistency. \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 61 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-    \r
-C.1.25. Section 4.11 (Abandon Operation) \r
\r
-   - Explained that since Abandon returns no response, clients should \r
-     not use it if they need to know the outcome. \r
-   - Specified that Abandon and Unbind cannot be abandoned.  \r
-    \r
\r
-C.1.26. Section 4.12 (Extended Operation) \r
\r
-   - Specified how values of Extended operations defined in terms of \r
-     ASN.1 are to be encoded. \r
-   - Added instructions on what Extended operation specifications \r
-     consist of. \r
-   - Added a recommendation that servers advertise supported Extended \r
-     operations. \r
\r
\r
-C.1.27. Section 5.2 (Transfer Protocols) \r
\r
-   - Moved referral-specific instructions into referral-related \r
-     sections. \r
\r
\r
-C.1.28. Section 7 (Security Considerations) \r
\r
-   - Reworded notes regarding SASL not protecting certain aspects of \r
-     the LDAP Bind messages. \r
-   - Noted that Servers are encouraged to prevent directory \r
-     modifications by clients that have authenticated anonymously \r
-     [AuthMeth].  \r
-   - Added a note regarding the possibility of changes to security \r
-     factors (authentication, authorization, data confidentiality). \r
-   - Warned against following referrals that may have been injected in \r
-     the data stream. \r
-   - Noted that servers should protect information equally, whether in \r
-     an error condition or not, and mentioned specifically; matchedDN, \r
-     diagnosticMessage, and resultCodes.  \r
-   - Added a note regarding malformed and long encodings. \r
\r
\r
-C.1.29. Appendix A (Complete ASN.1 Definition) \r
\r
-   - Added "EXTENSIBILITY IMPLIED" to ASN.1 definition. \r
-   - Removed AttributeType. It is not used. \r
\r
\r
-C.2. Changes made to RFC 2830: \r
-    \r
-   This section summarizes the substantive changes made to Sections of \r
-   RFC 2830. Readers should consult [AuthMeth] for summaries of changes \r
-   to other sections. \r
-    \r
-    \r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 62 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
-C.2.1. Section 2.3 (Response other than "success") \r
\r
-   - Removed wording indicating that referrals can be returned from \r
-     StartTLS. \r
-   - Removed requirement that only a narrow set of result codes can be \r
-     returned. Some result codes are required in certain scenarios, but \r
-     any other may be returned if appropriate. \r
-   - Removed requirement that the ExtendedResponse.responseName MUST be \r
-     present. There are circumstances where this is impossible, and \r
-     requiring this is at odds with language in Section 4.12. \r
-    \r
-    \r
-C.2.1. Section 4 (Closing a TLS Connection) \r
-    \r
-   - Reworded most of this section to align with definitions of the \r
-     LDAP protocol layers. \r
-   - Removed instructions on abrupt closure as this is covered in other \r
-     areas of the document (specifically, Section 5.3) \r
-    \r
\r
-C.3. Changes made to RFC 3771: \r
-    \r
-   - Rewrote to fit into this document. In general, semantics were \r
-     preserved. Supporting and background language seen as redundant \r
-     due to its presence in this document was omitted. \r
-   - Specified that Intermediate responses to a request may be of \r
-     different types, and one of the response types may be specified to \r
-     have no response value. \r
\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 63 \f\r
-              Lightweight Directory Access Protocol Version 3 \r
-                                      \r
\r
-    \r
-    \r
-Intellectual Property Statement \r
-    \r
-   The IETF takes no position regarding the validity or scope of any \r
-   Intellectual Property Rights or other rights that might be claimed to \r
-   pertain to the implementation or use of the technology described in \r
-   this document or the extent to which any license under such rights \r
-   might or might not be available; nor does it represent that it has \r
-   made any independent effort to identify any such rights. Information \r
-   on the procedures with respect to rights in RFC documents can be \r
-   found in BCP 78 and BCP 79.  \r
\r
-   Copies of IPR disclosures made to the IETF Secretariat and any \r
-   assurances of licenses to be made available, or the result of an \r
-   attempt made to obtain a general license or permission for the use of \r
-   such proprietary rights by implementers or users of this \r
-   specification can be obtained from the IETF on-line IPR repository at \r
-   http://www.ietf.org/ipr.  \r
\r
-   The IETF invites any interested party to bring to its attention any \r
-   copyrights, patents or patent applications, or other proprietary \r
-   rights that may cover technology that may be required to implement \r
-   this standard. Please address the information to the IETF at ietf-\r
-   ipr@ietf.org.  \r
\r
-Disclaimer of Validity \r
\r
-   This document and the information contained herein are provided on an \r
-   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS \r
-   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET \r
-   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, \r
-   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE \r
-   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED \r
-   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  \r
\r
-Copyright Statement \r
\r
-   Copyright (C) The Internet Society (2005).  \r
-    \r
-   This document is subject to the rights, licenses and restrictions \r
-   contained in BCP 78, and except as set forth therein, the authors \r
-   retain all their rights.  \r
\r
-Acknowledgement \r
\r
-   Funding for the RFC Editor function is currently provided by the \r
-   Internet Society. \r
-\r
-\r
-\r
-\r
-\r
-  \r
-Sermersheim      Internet-Draft - Expires April 2006             Page 64 \f
\ No newline at end of file
+
+Internet-Draft                                  Editor:  J. Sermersheim 
+Intended Category: Standard Track                           Novell, Inc 
+Document: draft-ietf-ldapbis-protocol-32.txt                   Oct 2005 
+Obsoletes: RFCs 2251, 2830, 3771                                        
+    
+                            LDAP: The Protocol 
+Status of this Memo 
+   By submitting this Internet-Draft, each 
+   author represents that any applicable patent or other IPR claims of 
+   which he or she is aware have been or will be disclosed, and any of 
+   which he or she becomes aware will be disclosed, in accordance with 
+   Section 6 of BCP 79. 
+    
+   Internet-Drafts are working documents of the Internet Engineering 
+   Task Force (IETF), its areas, and its working groups. Note that other 
+   groups may also distribute working documents as Internet-Drafts. 
+    
+   Internet-Drafts are draft documents valid for a maximum of six months 
+   and may be updated, replaced, or obsoleted by other documents at any 
+   time. It is inappropriate to use Internet-Drafts as reference 
+   material or to cite them other than as "work in progress".  
+    
+   The list of current Internet-Drafts can be accessed at 
+   http://www.ietf.org/ietf/1id-abstracts.txt.  
+    
+   The list of Internet-Draft Shadow Directories can be accessed at 
+   http://www.ietf.org/shadow.html.  
+    
+   This Internet-Draft will expire in February 2005.  
+    
+   Technical discussion of this document will take place on the IETF 
+   LDAP Revision Working Group (LDAPbis) mailing list <ietf-
+   ldapbis@openldap.org>. Please send editorial comments directly to the 
+   editor <jimse@novell.com>. 
+    
+Abstract 
+   This document describes the protocol elements, along with their 
+   semantics and encodings, of the Lightweight Directory Access Protocol 
+   (LDAP). LDAP provides access to distributed directory services that 
+   act in accordance with X.500 data and service models. These protocol 
+   elements are based on those described in the X.500 Directory Access 
+   Protocol (DAP). 
+    
+    
+Table of Contents 
+    
+
+Sermersheim      Internet-Draft - Expires April 2006              Page 1 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   1. Introduction....................................................3 
+   1.1. Relationship to Other LDAP Specifications.....................3 
+   2. Conventions.....................................................3 
+   3. Protocol Model..................................................4 
+   3.1 Operation and LDAP Message Layer Relationship..................5 
+   4. Elements of Protocol............................................5 
+   4.1. Common Elements...............................................5 
+   4.1.1. Message Envelope............................................5 
+   4.1.2. String Types................................................7 
+   4.1.3. Distinguished Name and Relative Distinguished Name..........7 
+   4.1.4. Attribute Descriptions......................................8 
+   4.1.5. Attribute Value.............................................8 
+   4.1.6. Attribute Value Assertion...................................8 
+   4.1.7. Attribute and PartialAttribute..............................9 
+   4.1.8. Matching Rule Identifier....................................9 
+   4.1.9. Result Message..............................................9 
+   4.1.10. Referral..................................................11 
+   4.1.11. Controls..................................................13 
+   4.2. Bind Operation...............................................14 
+   4.3. Unbind Operation.............................................17 
+   4.4. Unsolicited Notification.....................................17 
+   4.5. Search Operation.............................................18 
+   4.6. Modify Operation.............................................29 
+   4.7. Add Operation................................................31 
+   4.8. Delete Operation.............................................31 
+   4.9. Modify DN Operation..........................................32 
+   4.10. Compare Operation...........................................33 
+   4.11. Abandon Operation...........................................34 
+   4.12. Extended Operation..........................................35 
+   4.13. IntermediateResponse Message................................36 
+   4.14. StartTLS Operation..........................................37 
+   5. Protocol Encoding, Connection, and Transfer....................39 
+   5.1. Protocol Encoding............................................39 
+   5.2. Transmission Control Protocol (TCP)..........................40 
+   5.3. Termination of the LDAP session..............................40 
+   6. Security Considerations........................................40 
+   7. Acknowledgements...............................................42 
+   8. Normative References...........................................42 
+   9. Informative References.........................................44 
+   10. IANA Considerations...........................................44 
+   11. Editor's Address..............................................45 
+   Appendix A - LDAP Result Codes....................................46 
+   A.1 Non-Error Result Codes........................................46 
+   A.2 Result Codes..................................................46 
+   Appendix B - Complete ASN.1 Definition............................51 
+   Appendix C - Changes..............................................57 
+   C.1 Changes made to RFC 2251:.....................................57 
+   C.2 Changes made to RFC 2830:.....................................62 
+   C.3 Changes made to RFC 3771:.....................................63 
+    
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006              Page 2 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+1. Introduction 
+    
+   The Directory is "a collection of open systems cooperating to provide 
+   directory services" [X.500]. A directory user, which may be a human 
+   or other entity, accesses the Directory through a client (or 
+   Directory User Agent (DUA)). The client, on behalf of the directory 
+   user, interacts with one or more servers (or Directory System Agents 
+   (DSA)). Clients interact with servers using a directory access 
+   protocol.  
+    
+   This document details the protocol elements of the Lightweight 
+   Directory Access Protocol (LDAP), along with their semantics. 
+   Following the description of protocol elements, it describes the way 
+   in which the protocol elements are encoded and transferred. 
+    
+    
+1.1. Relationship to Other LDAP Specifications 
+    
+   This document is an integral part of the LDAP Technical Specification 
+   [Roadmap] which obsoletes the previously defined LDAP technical 
+   specification, RFC 3377, in its entirety. 
+    
+   This document, together with [Roadmap], [AuthMeth], and [Models], 
+   obsoletes RFC 2251 in its entirety. Section 3.3 is obsoleted by 
+   [Roadmap]. Sections 4.2.1 (portions), and 4.2.2 are obsoleted by 
+   [AuthMeth].  Sections 3.2, 3.4, 4.1.3 (last paragraph), 4.1.4, 4.1.5, 
+   4.1.5.1, 4.1.9 (last paragraph), 5.1, 6.1, and 6.2 (last paragraph) 
+   are obsoleted by [Models].  The remainder of RFC 2251 is obsoleted by 
+   this document.  Appendix C.1 summarizes substantive changes in the 
+   remainder. 
+    
+   This document obsoletes RFC 2830, Sections 2 and 4. The remainder of 
+   RFC 2830 is obsoleted by [AuthMeth]. Appendix C.2 summarizes 
+   substantive changes to the remaining sections. 
+    
+   This document also obsoletes RFC 3771 in entirety. 
+    
+    
+2. Conventions 
+    
+   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
+   "SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are 
+   to be interpreted as described in [Keyword]. 
+    
+   Character names in this document use the notation for code points and 
+   names from the Unicode Standard [Unicode].  For example, the letter 
+   "a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>. 
+    
+   Note: a glossary of terms used in Unicode can be found in [Glossary]. 
+   Information on the Unicode character encoding model can be found in 
+   [CharModel]. 
+    
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006              Page 3 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   The term "transport connection" refers to the underlying transport 
+   services used to carry the protocol exchange, as well as associations 
+   established by these services. 
+    
+   The term "TLS layer" refers to TLS services used in providing 
+   security services, as well as associations established by these 
+   services. 
+    
+   The term "SASL layer" refers to SASL services used in providing 
+   security services, as well as associations established by these 
+   services. 
+    
+   The term "LDAP message layer" refers to the LDAP Message Protocol 
+   Data Unit (PDU) services used in providing directory services, as 
+   well as associations established by these services. 
+    
+   The term "LDAP session" refers to combined services (transport 
+   connection, TLS layer, SASL layer, LDAP message layer) and their 
+   associations. 
+    
+   See the table in Section 5 for an illustration of these four terms. 
+3. Protocol Model 
+   The general model adopted by this protocol is one of clients 
+   performing protocol operations against servers. In this model, a 
+   client transmits a protocol request describing the operation to be 
+   performed to a server. The server is then responsible for performing 
+   the necessary operation(s) in the Directory. Upon completion of an 
+   operation, the server typically returns a response containing 
+   appropriate data to the requesting client. 
+    
+   Protocol operations are generally independent of one another. Each 
+   operation is processed as an atomic action, leaving the directory in 
+   a consistent state. 
+    
+   Although servers are required to return responses whenever such 
+   responses are defined in the protocol, there is no requirement for 
+   synchronous behavior on the part of either clients or servers. 
+   Requests and responses for multiple operations generally may be 
+   exchanged between a client and server in any order. If required, 
+   synchronous behavior may be controlled by client applications. 
+   The core protocol operations defined in this document can be mapped 
+   to a subset of the X.500 (1993) Directory Abstract Service [X.511]. 
+   However there is not a one-to-one mapping between LDAP operations and 
+   X.500 Directory Access Protocol (DAP) operations. Server 
+   implementations acting as a gateway to X.500 directories may need to 
+   make multiple DAP requests to service a single LDAP request. 
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006              Page 4 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+3.1. Operation and LDAP Message Layer Relationship 
+    
+   Protocol operations are exchanged at the LDAP message layer. When the 
+   transport connection is closed, any uncompleted operations at the 
+   LDAP message layer, when possible, are abandoned, and when not 
+   possible, are completed without transmission of the response. Also, 
+   when the transport connection is closed, the client MUST NOT assume 
+   that any uncompleted update operations have succeeded or failed. 
+    
+4. Elements of Protocol 
+    
+   The protocol is described using Abstract Syntax Notation One 
+   ([ASN.1]), and is transferred using a subset of ASN.1 Basic Encoding 
+   Rules ([BER]). Section 5 specifies how the protocol elements are 
+   encoded and transferred. 
+   In order to support future extensions to this protocol, extensibility 
+   is implied where it is allowed per ASN.1 (i.e. sequence, set, choice, 
+   and enumerated types are extensible). In addition, ellipses (...) 
+   have been supplied in ASN.1 types that are explicitly extensible as 
+   discussed in [LDAPIANA]. Because of the implied extensibility, 
+   clients and servers MUST (unless otherwise specified) ignore trailing 
+   SEQUENCE components whose tags they do not recognize.  
+    
+   Changes to the protocol other than through the extension mechanisms 
+   described here require a different version number. A client indicates 
+   the version it is using as part of the BindRequest, described in 
+   Section 4.2. If a client has not sent a Bind, the server MUST assume 
+   the client is using version 3 or later. 
+    
+   Clients may attempt to determine the protocol versions a server 
+   supports by reading the 'supportedLDAPVersion' attribute from the 
+   root DSE (DSA-Specific Entry) [Models]. 
+    
+    
+4.1. Common Elements 
+    
+   This section describes the LDAPMessage envelope Protocol Data Unit 
+   (PDU) format, as well as data type definitions, which are used in the 
+   protocol operations. 
+    
+    
+4.1.1. Message Envelope 
+    
+   For the purposes of protocol exchanges, all protocol operations are 
+   encapsulated in a common envelope, the LDAPMessage, which is defined 
+   as follows: 
+    
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006              Page 5 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+        LDAPMessage ::= SEQUENCE { 
+             messageID       MessageID, 
+             protocolOp      CHOICE { 
+                  bindRequest           BindRequest, 
+                  bindResponse          BindResponse, 
+                  unbindRequest         UnbindRequest, 
+                  searchRequest         SearchRequest, 
+                  searchResEntry        SearchResultEntry, 
+                  searchResDone         SearchResultDone, 
+                  searchResRef          SearchResultReference, 
+                  modifyRequest         ModifyRequest, 
+                  modifyResponse        ModifyResponse, 
+                  addRequest            AddRequest, 
+                  addResponse           AddResponse, 
+                  delRequest            DelRequest, 
+                  delResponse           DelResponse, 
+                  modDNRequest          ModifyDNRequest, 
+                  modDNResponse         ModifyDNResponse, 
+                  compareRequest        CompareRequest, 
+                  compareResponse       CompareResponse, 
+                  abandonRequest        AbandonRequest, 
+                  extendedReq           ExtendedRequest, 
+                  extendedResp          ExtendedResponse, 
+                  ..., 
+                  intermediateResponse  IntermediateResponse }, 
+             controls       [0] Controls OPTIONAL } 
+    
+        MessageID ::= INTEGER (0 .. maxInt) 
+    
+        maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- 
+    
+   The ASN.1 type Controls is defined in Section 4.1.11. 
+    
+   The function of the LDAPMessage is to provide an envelope containing 
+   common fields required in all protocol exchanges. At this time the 
+   only common fields are the messageID and the controls. 
+    
+   If the server receives an LDAPMessage from the client in which the 
+   LDAPMessage SEQUENCE tag cannot be recognized, the messageID cannot 
+   be parsed, the tag of the protocolOp is not recognized as a request, 
+   or the encoding structures or lengths of data fields are found to be 
+   incorrect, then the server SHOULD return the Notice of Disconnection 
+   described in Section 4.4.1, with the resultCode set to protocolError, 
+   and MUST immediately terminate the LDAP session as described in 
+   Section 5.3.  
+    
+   In other cases where the client or server cannot parse an LDAP PDU, 
+   it SHOULD abruptly terminate the LDAP session (Section 5.3) where 
+   further communication (including providing notice) would be 
+   pernicious. Otherwise, server implementations MUST return an 
+   appropriate response to the request, with the resultCode set to 
+   protocolError. 
+    
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006              Page 6 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+4.1.1.1. Message ID 
+    
+   All LDAPMessage envelopes encapsulating responses contain the 
+   messageID value of the corresponding request LDAPMessage. 
+    
+   The message ID of a request MUST have a non-zero value different from 
+   the messageID of any other request in progress in the same LDAP 
+   session. The zero value is reserved for the unsolicited notification 
+   message. 
+    
+   Typical clients increment a counter for each request. 
+    
+   A client MUST NOT send a request with the same message ID as an 
+   earlier request in the same LDAP session unless it can be determined 
+   that the server is no longer servicing the earlier request (e.g. 
+   after the final response is received, or a subsequent Bind 
+   completes). Otherwise the behavior is undefined. For this purpose, 
+   note that Abandon and successfully abandoned operations do not send 
+   responses. 
+4.1.2. String Types 
+    
+   The LDAPString is a notational convenience to indicate that, although 
+   strings of LDAPString type encode as ASN.1 OCTET STRING types, the 
+   [ISO10646] character set (a superset of [Unicode]) is used, encoded 
+   following the [UTF-8] algorithm. Note that Unicode characters U+0000 
+   through U+007F are the same as ASCII 0 through 127, respectively, and 
+   have the same single octet UTF-8 encoding.  Other Unicode characters 
+   have a multiple octet UTF-8 encoding. 
+    
+        LDAPString ::= OCTET STRING -- UTF-8 encoded, 
+                                    -- [ISO10646] characters 
+    
+   The LDAPOID is a notational convenience to indicate that the 
+   permitted value of this string is a (UTF-8 encoded) dotted-decimal 
+   representation of an OBJECT IDENTIFIER. Although an LDAPOID is 
+   encoded as an OCTET STRING, values are limited to the definition of 
+   <numericoid> given in Section 1.4 of [Models]. 
+    
+        LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] 
+         
+   For example, 
+    
+        1.3.6.1.4.1.1466.1.2.3 
+    
+    
+4.1.3. Distinguished Name and Relative Distinguished Name 
+    
+   An LDAPDN is defined to be the representation of a Distinguished Name 
+   (DN) after encoding according to the specification in [LDAPDN]. 
+    
+        LDAPDN ::= LDAPString 
+                   -- Constrained to <distinguishedName> [LDAPDN] 
+  
+Sermersheim      Internet-Draft - Expires April 2006              Page 7 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+   A RelativeLDAPDN is defined to be the representation of a Relative 
+   Distinguished Name (RDN) after encoding according to the 
+   specification in [LDAPDN]. 
+    
+        RelativeLDAPDN ::= LDAPString 
+                           -- Constrained to <name-component> [LDAPDN] 
+    
+    
+4.1.4. Attribute Descriptions 
+    
+   The definition and encoding rules for attribute descriptions are 
+   defined in Section 2.5 of [Models]. Briefly, an attribute description 
+   is an attribute type and zero or more options. 
+    
+        AttributeDescription ::= LDAPString 
+                                -- Constrained to <attributedescription> 
+                                -- [Models] 
+         
+4.1.5. Attribute Value 
+    
+   A field of type AttributeValue is an OCTET STRING containing an 
+   encoded attribute value. The attribute value is encoded according to 
+   the LDAP-specific encoding definition of its corresponding syntax. 
+   The LDAP-specific encoding definitions for different syntaxes and 
+   attribute types may be found in other documents and in particular 
+   [Syntaxes]. 
+        AttributeValue ::= OCTET STRING 
+    
+   Note that there is no defined limit on the size of this encoding; 
+   thus protocol values may include multi-megabyte attribute values 
+   (e.g. photographs). 
+    
+   Attribute values may be defined which have arbitrary and non-
+   printable syntax. Implementations MUST NOT display nor attempt to 
+   decode an attribute value if its syntax is not known. The 
+   implementation may attempt to discover the subschema of the source 
+   entry, and retrieve the descriptions of 'attributeTypes' from it 
+   [Models]. 
+    
+   Clients MUST only send attribute values in a request that are valid 
+   according to the syntax defined for the attributes. 
+    
+    
+4.1.6. Attribute Value Assertion 
+    
+   The AttributeValueAssertion (AVA) type definition is similar to the 
+   one in the X.500 Directory standards. It contains an attribute 
+   description and a matching rule ([Models] Section 4.1.3) assertion 
+   value suitable for that type. Elements of this type are typically 
+   used to assert that the value in assertionValue matches a value of an 
+   attribute. 
+  
+Sermersheim      Internet-Draft - Expires April 2006              Page 8 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+        AttributeValueAssertion ::= SEQUENCE { 
+             attributeDesc   AttributeDescription, 
+             assertionValue  AssertionValue } 
+    
+        AssertionValue ::= OCTET STRING 
+    
+   The syntax of the AssertionValue depends on the context of the LDAP 
+   operation being performed. For example, the syntax of the EQUALITY 
+   matching rule for an attribute is used when performing a Compare 
+   operation. Often this is the same syntax used for values of the 
+   attribute type, but in some cases the assertion syntax differs from 
+   the value syntax. See objectIdentiferFirstComponentMatch in 
+   [Syntaxes] for an example. 
+    
+    
+4.1.7. Attribute and PartialAttribute 
+    
+   Attributes and partial attributes consist of an attribute description 
+   and attribute values. A PartialAttribute allows zero values, while 
+   Attribute requires at least one value. 
+    
+        PartialAttribute ::= SEQUENCE { 
+             type       AttributeDescription, 
+             vals       SET OF value AttributeValue } 
+    
+        Attribute ::= PartialAttribute(WITH COMPONENTS { 
+             ...,  
+             vals (SIZE(1..MAX))}) 
+    
+   No two of the attribute values may be equivalent as described by 
+   Section 2.3 of [Models]. The set of attribute values is unordered. 
+   Implementations MUST NOT rely upon the ordering being repeatable. 
+    
+    
+4.1.8. Matching Rule Identifier 
+    
+   Matching rules are defined in Section 4.1.3 of [Models]. A matching 
+   rule is identified in the protocol by the printable representation of 
+   either its <numericoid>, or one of its short name descriptors 
+   [Models], e.g. 'caseIgnoreMatch' or '2.5.13.2'. 
+    
+        MatchingRuleId ::= LDAPString 
+         
+    
+4.1.9. Result Message 
+    
+   The LDAPResult is the construct used in this protocol to return 
+   success or failure indications from servers to clients. To various 
+   requests, servers will return responses containing the elements found 
+   in LDAPResult to indicate the final status of the protocol operation 
+   request. 
+    
+
+  
+Sermersheim      Internet-Draft - Expires April 2006              Page 9 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+        LDAPResult ::= SEQUENCE { 
+             resultCode         ENUMERATED { 
+                  success                      (0), 
+                  operationsError              (1), 
+                  protocolError                (2), 
+                  timeLimitExceeded            (3), 
+                  sizeLimitExceeded            (4), 
+                  compareFalse                 (5), 
+                  compareTrue                  (6), 
+                  authMethodNotSupported       (7), 
+                  strongerAuthRequired         (8), 
+                       -- 9 reserved -- 
+                  referral                     (10), 
+                  adminLimitExceeded           (11), 
+                  unavailableCriticalExtension (12), 
+                  confidentialityRequired      (13), 
+                  saslBindInProgress           (14), 
+                  noSuchAttribute              (16), 
+                  undefinedAttributeType       (17), 
+                  inappropriateMatching        (18), 
+                  constraintViolation          (19), 
+                  attributeOrValueExists       (20), 
+                  invalidAttributeSyntax       (21), 
+                       -- 22-31 unused -- 
+                  noSuchObject                 (32), 
+                  aliasProblem                 (33), 
+                  invalidDNSyntax              (34), 
+                       -- 35 reserved for undefined isLeaf -- 
+                  aliasDereferencingProblem    (36), 
+                       -- 37-47 unused -- 
+                  inappropriateAuthentication  (48), 
+                  invalidCredentials           (49), 
+                  insufficientAccessRights     (50), 
+                  busy                         (51), 
+                  unavailable                  (52), 
+                  unwillingToPerform           (53), 
+                  loopDetect                   (54), 
+                       -- 55-63 unused -- 
+                  namingViolation              (64), 
+                  objectClassViolation         (65), 
+                  notAllowedOnNonLeaf          (66), 
+                  notAllowedOnRDN              (67), 
+                  entryAlreadyExists           (68), 
+                  objectClassModsProhibited    (69), 
+                       -- 70 reserved for CLDAP -- 
+                  affectsMultipleDSAs          (71), 
+                       -- 72-79 unused -- 
+                  other                        (80), 
+                  ... }, 
+             matchedDN          LDAPDN, 
+             diagnosticMessage  LDAPString, 
+             referral           [3] Referral OPTIONAL } 
+    
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 10 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   The resultCode enumeration is extensible as defined in Section 3.6 of 
+   [LDAPIANA]. The meanings of the listed result codes are given in 
+   Appendix A. If a server detects multiple errors for an operation, 
+   only one result code is returned. The server should return the result 
+   code that best indicates the nature of the error encountered. Servers 
+   may return substituted result codes to prevent unauthorized 
+   disclosures. 
+    
+   The diagnosticMessage field of this construct may, at the server's 
+   option, be used to return a string containing a textual, human-
+   readable (terminal control and page formatting characters should be 
+   avoided) diagnostic message. As this diagnostic message is not 
+   standardized, implementations MUST NOT rely on the values returned. 
+   Diagnostic messages typically supplement the resultCode with 
+   additional information. If the server chooses not to return a textual 
+   diagnostic, the diagnosticMessage field MUST be empty. 
+    
+   For certain result codes (typically, but not restricted to 
+   noSuchObject, aliasProblem, invalidDNSyntax and 
+   aliasDereferencingProblem), the matchedDN field is set (subject to 
+   access controls) to the name of the last entry (object or alias) used 
+   in finding the target (or base) object. This will be a truncated form 
+   of the provided name or, if an alias was dereferenced while 
+   attempting to locate the entry, of the resulting name. Otherwise the 
+   matchedDN field is empty. 
+    
+    
+4.1.10. Referral 
+    
+   The referral result code indicates that the contacted server cannot 
+   or will not perform the operation and that one or more other servers 
+   may be able to. Reasons for this include: 
+    
+   - The target entry of the request is not held locally, but the 
+     server has knowledge of its possible existence elsewhere. 
+    
+   - The operation is restricted on this server -- perhaps due to a 
+     read-only copy of an entry to be modified. 
+    
+   The referral field is present in an LDAPResult if the resultCode is 
+   set to referral, and absent with all other result codes. It contains 
+   one or more references to one or more servers or services that may be 
+   accessed via LDAP or other protocols. Referrals can be returned in 
+   response to any operation request (except Unbind and Abandon which do 
+   not have responses). At least one URI MUST be present in the 
+   Referral. 
+    
+   During a Search operation, after the baseObject is located, and 
+   entries are being evaluated, the referral is not returned. Instead, 
+   continuation references, described in Section 4.5.3, are returned 
+   when other servers would need to be contacted to complete the 
+   operation. 
+    
+        Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 11 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+        URI ::= LDAPString     -- limited to characters permitted in 
+                               -- URIs 
+    
+   If the client wishes to progress the operation, it contacts one of 
+   the supported services found in the referral. If multiple URIs are 
+   present, the client assumes that any supported URI may be used to 
+   progress the operation. 
+    
+   Clients that follow referrals MUST ensure that they do not loop 
+   between servers. They MUST NOT repeatedly contact the same server for 
+   the same request with the same parameters. Some clients use a counter 
+   that is incremented each time referral handling occurs for an 
+   operation, and these kinds of clients MUST be able to handle at least 
+   ten nested referrals while progressing the operation. 
+    
+   A URI for a server implementing LDAP and accessible via [TCP]/[IP] 
+   (v4 or v6) is written as an LDAP URL according to [LDAPURL].  
+    
+   Referral values which are LDAP URLs follow these rules: 
+    
+   - If an alias was dereferenced, the <dn> part of the LDAP URL MUST 
+     be present, with the new target object name. 
+    
+   - It is RECOMMENDED that the <dn> part be present to avoid 
+     ambiguity. 
+    
+   - If the <dn> part is present, the client uses this name in its next 
+     request to progress the operation, and if it is not present the 
+     client uses the same name as in the original request.  
+    
+   - Some servers (e.g. participating in distributed indexing) may 
+     provide a different filter in a URL of a referral for a Search 
+     operation. 
+    
+   - If the <filter> part of the LDAP URL is present, the client uses 
+     this filter in its next request to progress this Search, and if it 
+     is not present the client uses the same filter as it used for that 
+     Search. 
+    
+   - For Search, it is RECOMMENDED that the <scope> part be present to 
+     avoid ambiguity. 
+    
+   - If the <scope> part is missing, the scope of the original Search 
+     is used by the client to progress the operation. 
+    
+   - Other aspects of the new request may be the same as or different 
+     from the request which generated the referral. 
+    
+   Other kinds of URIs may be returned. The syntax and semantics of such 
+   URIs is left to future specifications. Clients may ignore URIs that 
+   they do not support. 
+    
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 12 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   UTF-8 encoded characters appearing in the string representation of a 
+   DN, search filter, or other fields of the referral value may not be 
+   legal for URIs (e.g. spaces) and MUST be escaped using the % method 
+   in [URI]. 
+    
+    
+4.1.11. Controls 
+    
+   Controls provide a mechanism whereby the semantics and arguments of 
+   existing LDAP operations may be extended. One or more controls may be 
+   attached to a single LDAP message. A control only affects the 
+   semantics of the message it is attached to. 
+    
+   Controls sent by clients are termed 'request controls' and those sent 
+   by servers are termed 'response controls'. 
+    
+        Controls ::= SEQUENCE OF control Control 
+    
+        Control ::= SEQUENCE { 
+             controlType             LDAPOID, 
+             criticality             BOOLEAN DEFAULT FALSE, 
+             controlValue            OCTET STRING OPTIONAL } 
+    
+   The controlType field is the dotted-decimal representation of an 
+   OBJECT IDENTIFIER which uniquely identifies the control. This 
+   provides unambiguous naming of controls. Often, response control(s) 
+   solicited by a request control share controlType values with the 
+   request control. 
+    
+   The criticality field only has meaning in controls attached to 
+   request messages (except UnbindRequest). For controls attached to 
+   response messages and the UnbindRequest, the criticality field SHOULD 
+   be FALSE, and MUST be ignored by the receiving protocol peer. A value 
+   of TRUE indicates that it is unacceptable to perform the operation 
+   without applying the semantics of the control. Specifically, the 
+   criticality field is applied as follows: 
+    
+   - If the server does not recognize the control type, determines that 
+     it is not appropriate for the operation, or is otherwise unwilling 
+     to perform the operation with the control, and the criticality 
+     field is TRUE, the server MUST NOT perform the operation, and for 
+     operations that have a response message, MUST return with the 
+     resultCode set to unavailableCriticalExtension. 
+    
+   - If the server does not recognize the control type, determines that 
+     it is not appropriate for the operation, or is otherwise unwilling 
+     to perform the operation with the control, and the criticality 
+     field is FALSE, the server MUST ignore the control. 
+    
+   - Regardless of criticality, if a control is applied to an 
+     operation, it is applied consistently and impartially to the 
+     entire operation.  
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 13 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   The controlValue may contain information associated with the 
+   controlType. Its format is defined by the specification of the 
+   control. Implementations MUST be prepared to handle arbitrary 
+   contents of the controlValue octet string, including zero bytes. It 
+   is absent only if there is no value information which is associated 
+   with a control of its type. When a controlValue is defined in terms 
+   of ASN.1, and BER encoded according to Section 5.1, it also follows 
+   the extensibility rules in Section 4. 
+   Servers list the controlType of request controls they recognize in 
+   the 'supportedControl' attribute in the root DSE (Section 5.1 of 
+   [Models]). 
+   Controls SHOULD NOT be combined unless the semantics of the 
+   combination has been specified. The semantics of control 
+   combinations, if specified, are generally found in the control 
+   specification most recently published. When a combination of controls 
+   is encountered whose semantics are invalid, not specified (or not 
+   known), the message is considered to be not well-formed, thus the 
+   operation fails with protocolError. Controls with a criticality of 
+   FALSE may be ignored in order to arrive at a valid combination. 
+   Additionally, unless order-dependent semantics are given in a 
+   specification, the order of a combination of controls in the SEQUENCE 
+   is ignored. Where the order is to be ignored but cannot be ignored by 
+   the server, the message is considered not well-formed and the 
+   operation fails with protocolError. Again, controls with a 
+   criticality of FALSE may be ignored in order to arrive at a valid 
+   combination. 
+    
+   This document does not specify any controls. Controls may be 
+   specified in other documents. Documents detailing control extensions 
+   are to provide for each control: 
+    
+   - the OBJECT IDENTIFIER assigned to the control, 
+    
+   - direction as to what value the sender should provide for the 
+     criticality field (note: the semantics of the criticality field 
+     are defined above should not be altered by the control's 
+     specification),  
+    
+   - whether the controlValue field is present, and if so, the format 
+     of its contents, 
+    
+   - the semantics of the control, and 
+    
+   - optionally, semantics regarding the combination of the control 
+     with other controls. 
+    
+    
+4.2. Bind Operation 
+    
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 14 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   The function of the Bind operation is to allow authentication 
+   information to be exchanged between the client and server. The Bind 
+   operation should be thought of as the "authenticate" operation. 
+   Operational, authentication, and security-related semantics of this 
+   operation are given in [AuthMeth].  
+    
+   The Bind request is defined as follows: 
+    
+        BindRequest ::= [APPLICATION 0] SEQUENCE { 
+             version                 INTEGER (1 .. 127), 
+             name                    LDAPDN, 
+             authentication          AuthenticationChoice } 
+    
+        AuthenticationChoice ::= CHOICE { 
+             simple                  [0] OCTET STRING, 
+                                     -- 1 and 2 reserved 
+             sasl                    [3] SaslCredentials, 
+             ... } 
+    
+        SaslCredentials ::= SEQUENCE { 
+             mechanism               LDAPString, 
+             credentials             OCTET STRING OPTIONAL } 
+    
+   Fields of the BindRequest are: 
+    
+   - version: A version number indicating the version of the protocol 
+     to be used at the LDAP message layer. This document describes 
+     version 3 of the protocol. There is no version negotiation. The 
+     client sets this field to the version it desires. If the server 
+     does not support the specified version, it MUST respond with a 
+     BindResponse where the resultCode is set to protocolError. 
+    
+   - name: If not empty, the name of the Directory object that the 
+     client wishes to bind as. This field may take on a null value (a 
+     zero length string) for the purposes of anonymous binds 
+     ([AuthMeth] Section 5.1) or when using Simple Authentication and 
+     Security Layer [SASL] authentication ([AuthMeth] Section 5.2). 
+     Where the server attempts to locate the named object, it SHALL NOT 
+     perform alias dereferencing. 
+    
+   - authentication: information used in authentication. This type is 
+     extensible as defined in Section 3.7 of [LDAPIANA]. Servers that 
+     do not support a choice supplied by a client return a BindResponse 
+     with the resultCode set to authMethodNotSupported. 
+      
+     Textual passwords (consisting of a character sequence with a known 
+     character set and encoding) transferred to the server using the 
+     simple AuthenticationChoice SHALL be transferred as [UTF-8] 
+     encoded [Unicode]. Prior to transfer, clients SHOULD prepare text 
+     passwords as "query" strings by applying the [SASLprep] profile of 
+     the [Stringprep] algorithm. Passwords consisting of other data 
+     (such as random octets) MUST NOT be altered. The determination of 
+     whether a password is textual is a local client matter. 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 15 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+4.2.1. Processing of the Bind Request 
+    
+   Before processing a BindRequest, all uncompleted operations MUST 
+   either complete or be abandoned. The server may either wait for the 
+   uncompleted operations to complete, or abandon them. The server then 
+   proceeds to authenticate the client in either a single-step, or 
+   multi-step Bind process. Each step requires the server to return a 
+   BindResponse to indicate the status of authentication.  
+    
+   After sending a BindRequest, clients MUST NOT send further LDAP PDUs 
+   until receiving the BindResponse. Similarly, servers SHOULD NOT 
+   process or respond to requests received while processing a 
+   BindRequest. 
+   If the client did not bind before sending a request and receives an 
+   operationsError to that request, it may then send a BindRequest. If 
+   this also fails or the client chooses not to bind on the existing 
+   LDAP session, it may terminate the LDAP session, re-establish it and 
+   begin again by first sending a BindRequest. This will aid in 
+   interoperating with servers implementing other versions of LDAP. 
+    
+   Clients may send multiple Bind requests to change the authentication 
+   and/or security associations or to complete a multi-stage Bind 
+   process. Authentication from earlier binds is subsequently ignored. 
+   For some SASL authentication mechanisms, it may be necessary for the 
+   client to invoke the BindRequest multiple times ([AuthMeth] Section 
+   5.2). Clients MUST NOT invoke operations between two Bind requests 
+   made as part of a multi-stage Bind. 
+    
+   A client may abort a SASL bind negotiation by sending a BindRequest 
+   with a different value in the mechanism field of SaslCredentials, or 
+   an AuthenticationChoice other than sasl. 
+    
+   If the client sends a BindRequest with the sasl mechanism field as an 
+   empty string, the server MUST return a BindResponse with the 
+   resultCode set to authMethodNotSupported. This will allow clients to 
+   abort a negotiation if it wishes to try again with the same SASL 
+   mechanism. 
+    
+    
+4.2.2. Bind Response 
+    
+   The Bind response is defined as follows. 
+    
+        BindResponse ::= [APPLICATION 1] SEQUENCE { 
+             COMPONENTS OF LDAPResult, 
+             serverSaslCreds    [7] OCTET STRING OPTIONAL } 
+    
+   BindResponse consists simply of an indication from the server of the 
+   status of the client's request for authentication. 
+    
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 16 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   A successful Bind operation is indicated by a BindResponse with a 
+   resultCode set to success. Otherwise, an appropriate result code is 
+   set in the BindResponse. For BindResponse, the protocolError result 
+   code may be used to indicate that the version number supplied by the 
+   client is unsupported. 
+   If the client receives a BindResponse where the resultCode is set to 
+   protocolError, it is to assume that the server does not support this 
+   version of LDAP. While the client may be able proceed with another 
+   version of this protocol (this may or may not require closing and re-
+   establishing the transport connection), how to proceed with another 
+   version of this protocol is beyond the scope of this document. 
+   Clients which are unable or unwilling to proceed SHOULD terminate the 
+   LDAP session. 
+    
+   The serverSaslCreds field is used as part of a SASL-defined bind 
+   mechanism to allow the client to authenticate the server to which it 
+   is communicating, or to perform "challenge-response" authentication. 
+   If the client bound with the simple choice, or the SASL mechanism 
+   does not require the server to return information to the client, then 
+   this field SHALL NOT be included in the BindResponse. 
+    
+    
+4.3. Unbind Operation 
+    
+   The function of the Unbind operation is to terminate an LDAP session. 
+   The Unbind operation is not the antithesis of the Bind operation as 
+   the name implies. The naming of these operations are historical. The 
+   Unbind operation should be thought of as the "quit" operation. 
+    
+   The Unbind operation is defined as follows: 
+    
+        UnbindRequest ::= [APPLICATION 2] NULL 
+    
+   The client, upon transmission of the UnbindRequest, and the server, 
+   upon receipt of the UnbindRequest are to gracefully terminate the 
+   LDAP session as described in Section 5.3.  
+   Uncompleted operations are handled as specified in Section 3.1. 
+    
+    
+4.4. Unsolicited Notification 
+    
+   An unsolicited notification is an LDAPMessage sent from the server to 
+   the client which is not in response to any LDAPMessage received by 
+   the server. It is used to signal an extraordinary condition in the 
+   server or in the LDAP session between the client and the server. The 
+   notification is of an advisory nature, and the server will not expect 
+   any response to be returned from the client. 
+    
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 17 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   The unsolicited notification is structured as an LDAPMessage in which 
+   the messageID is zero and protocolOp is set to the extendedResp 
+   choice using the ExtendedResponse type (See Section 4.12). The 
+   responseName field of the ExtendedResponse always contains an LDAPOID 
+   which is unique for this notification. 
+    
+   One unsolicited notification (Notice of Disconnection) is defined in 
+   this document. The specification of an unsolicited notification 
+   consists of: 
+    
+   - the OBJECT IDENTIFIER assigned to the notification (to be 
+     specified in the responseName, 
+    
+   - the format of the contents of the responseValue (if any), 
+    
+   - the circumstances which will cause the notification to be sent, 
+     and 
+    
+   - the semantics of the message. 
+    
+    
+4.4.1. Notice of Disconnection 
+    
+   This notification may be used by the server to advise the client that 
+   the server is about to terminate the LDAP session on its own 
+   initiative. This notification is intended to assist clients in 
+   distinguishing between an exceptional server condition and a 
+   transient network failure. Note that this notification is not a 
+   response to an Unbind requested by the client. Uncompleted operations 
+   are handled as specified in Section 3.1. 
+    
+   The responseName is 1.3.6.1.4.1.1466.20036, the responseValue field 
+   is absent, and the resultCode is used to indicate the reason for the 
+   disconnection. When the strongerAuthRequired resultCode is returned 
+   with this message, it indicates that the server has detected that an 
+   established security association between the client and server has 
+   unexpectedly failed or been compromised. 
+    
+   Upon transmission of the Notice of Disconnection, the server 
+   gracefully terminates the LDAP session as described in Section 5.3.  
+    
+    
+4.5. Search Operation 
+    
+   The Search operation is used to request a server to return, subject 
+   to access controls and other restrictions, a set of entries matching 
+   a complex search criterion. This can be used to read attributes from 
+   a single entry, from entries immediately subordinate to a particular 
+   entry, or a whole subtree of entries. 
+    
+    
+4.5.1. Search Request 
+    
+   The Search request is defined as follows: 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 18 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+        SearchRequest ::= [APPLICATION 3] SEQUENCE { 
+             baseObject      LDAPDN, 
+             scope           ENUMERATED { 
+                  baseObject              (0), 
+                  singleLevel             (1), 
+                  wholeSubtree            (2), 
+                  ... }, 
+             derefAliases    ENUMERATED { 
+                  neverDerefAliases       (0), 
+                  derefInSearching        (1), 
+                  derefFindingBaseObj     (2), 
+                  derefAlways             (3) }, 
+             sizeLimit       INTEGER (0 .. maxInt), 
+             timeLimit       INTEGER (0 .. maxInt), 
+             typesOnly       BOOLEAN, 
+             filter          Filter, 
+             attributes      AttributeSelection } 
+    
+        AttributeSelection ::= SEQUENCE OF selector LDAPString 
+                        -- The LDAPString is constrained to 
+                        -- <attributeSelector> in Section 4.5.1.7 
+    
+        Filter ::= CHOICE { 
+             and             [0] SET SIZE (1..MAX) OF filter Filter, 
+             or              [1] SET SIZE (1..MAX) OF filter Filter, 
+             not             [2] Filter, 
+             equalityMatch   [3] AttributeValueAssertion, 
+             substrings      [4] SubstringFilter, 
+             greaterOrEqual  [5] AttributeValueAssertion, 
+             lessOrEqual     [6] AttributeValueAssertion, 
+             present         [7] AttributeDescription, 
+             approxMatch     [8] AttributeValueAssertion, 
+             extensibleMatch [9] MatchingRuleAssertion, 
+             ... } 
+    
+        SubstringFilter ::= SEQUENCE { 
+             type           AttributeDescription, 
+             substrings     SEQUENCE SIZE (1..MAX) OF substring CHOICE { 
+                  initial [0] AssertionValue,  -- can occur at most once 
+                  any     [1] AssertionValue, 
+                  final   [2] AssertionValue } -- can occur at most once  
+             } 
+    
+        MatchingRuleAssertion ::= SEQUENCE { 
+             matchingRule    [1] MatchingRuleId OPTIONAL, 
+             type            [2] AttributeDescription OPTIONAL, 
+             matchValue      [3] AssertionValue, 
+             dnAttributes    [4] BOOLEAN DEFAULT FALSE } 
+    
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 19 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   Note that an X.500 "list"-like operation can be emulated by the 
+   client requesting a singleLevel Search operation with a filter 
+   checking for the presence of the 'objectClass' attribute, and that an 
+   X.500 "read"-like operation can be emulated by a baseObject Search 
+   operation with the same filter.  A server which provides a gateway to 
+   X.500 is not required to use the Read or List operations, although it 
+   may choose to do so, and if it does, it must provide the same 
+   semantics as the X.500 Search operation. 
+4.5.1.1. SearchRequest.baseObject 
+    
+   The name of the base object entry (or possibly the root) relative to 
+   which the Search is to be performed. 
+    
+    
+4.5.1.2. SearchRequest.scope 
+   Specifies the scope of the Search to be performed. The semantics (as 
+   described in [X.511]) of the defined values of this field are: 
+    
+     baseObject:  The scope is constrained to the entry named by 
+     baseObject. 
+      
+     singleLevel: The scope is constrained to the immediate 
+     subordinates of the entry named by baseObject. 
+      
+     wholeSubtree: the scope is constrained to the entry named by the 
+     baseObject, and all its subordinates. 
+    
+    
+4.5.1.3. SearchRequest.derefAliases 
+   An indicator as to whether or not alias entries (as defined in 
+   [Models]) are to be dereferenced during stages of the Search 
+   operation.  
+    
+   The act of dereferencing an alias includes recursively dereferencing 
+   aliases which refer to aliases. 
+    
+   Servers MUST detect looping while dereferencing aliases in order to 
+   prevent denial of service attacks of this nature. 
+    
+   The semantics of the defined values of this field are: 
+    
+     neverDerefAliases: Do not dereference aliases in searching or in 
+     locating the base object of the Search. 
+      
+
+
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 20 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+     derefInSearching: While searching subordinates of the base object, 
+     dereference any alias within the search scope. Dereferenced 
+     objects become the vertices of further search scopes where the 
+     Search operation is also applied. If the search scope is 
+     wholeSubtree, the Search continues in the subtree(s) of any 
+     dereferenced object. If the search scope is singleLevel, the 
+     search is applied to any dereferenced objects, and is not applied 
+     to their subordinates. Servers SHOULD eliminate duplicate entries 
+     that arise due to alias dereferencing while searching. 
+      
+     derefFindingBaseObj: Dereference aliases in locating the base 
+     object of the Search, but not when searching subordinates of the 
+     base object. 
+      
+     derefAlways: Dereference aliases both in searching and in locating 
+     the base object of the Search. 
+    
+4.5.1.4. SearchRequest.sizeLimit 
+   A size limit that restricts the maximum number of entries to be 
+   returned as a result of the Search. A value of zero in this field 
+   indicates that no client-requested size limit restrictions are in 
+   effect for the Search. Servers may also enforce a maximum number of 
+   entries to return. 
+    
+    
+4.5.1.5. SearchRequest.timeLimit 
+   A time limit that restricts the maximum time (in seconds) allowed for 
+   a Search. A value of zero in this field indicates that no client-
+   requested time limit restrictions are in effect for the Search. 
+   Servers may also enforce a maximum time limit for the Search. 
+    
+    
+4.5.1.6. SearchRequest.typesOnly 
+    
+   An indicator as to whether Search results are to contain both 
+   attribute descriptions and values, or just attribute descriptions. 
+   Setting this field to TRUE causes only attribute descriptions (no 
+   values) to be returned. Setting this field to FALSE causes both 
+   attribute descriptions and values to be returned. 
+    
+    
+
+
+
+
+
+
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 21 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+4.5.1.7. SearchRequest.filter 
+   A filter that defines the conditions that must be fulfilled in order 
+   for the Search to match a given entry. 
+    
+   The 'and', 'or' and 'not' choices can be used to form combinations of 
+   filters. At least one filter element MUST be present in an 'and' or 
+   'or' choice. The others match against individual attribute values of 
+   entries in the scope of the Search. (Implementor's note: the 'not' 
+   filter is an example of a tagged choice in an implicitly-tagged 
+   module. In BER this is treated as if the tag was explicit.) 
+    
+   A server MUST evaluate filters according to the three-valued logic of 
+   [X.511] (1993) Clause 7.8.1. In summary, a filter is evaluated to 
+   either "TRUE", "FALSE" or "Undefined". If the filter evaluates to 
+   TRUE for a particular entry, then the attributes of that entry are 
+   returned as part of the Search result (subject to any applicable 
+   access control restrictions). If the filter evaluates to FALSE or 
+   Undefined, then the entry is ignored for the Search. 
+    
+   A filter of the "and" choice is TRUE if all the filters in the SET OF 
+   evaluate to TRUE, FALSE if at least one filter is FALSE, and 
+   otherwise Undefined. A filter of the "or" choice is FALSE if all of 
+   the filters in the SET OF evaluate to FALSE, TRUE if at least one 
+   filter is TRUE, and Undefined otherwise. A filter of the 'not' choice 
+   is TRUE if the filter being negated is FALSE, FALSE if it is TRUE, 
+   and Undefined if it is Undefined. 
+    
+   A filter item evaluates to Undefined when the server would not be 
+   able to determine whether the assertion value matches an entry. 
+   Examples include: 
+  
+   - An attribute description in an equalityMatch, substrings, 
+     greaterOrEqual, lessOrEqual, approxMatch or extensibleMatch 
+     filter is not recognized by the server. 
+    
+   - The attribute type does not define the appropriate matching 
+     rule. 
+    
+   - A MatchingRuleId in the extensibleMatch is not recognized by 
+     the server or is not valid for the attribute type. 
+    
+   - The type of filtering requested is not implemented. 
+    
+   - The assertion value is invalid.  
+    
+   For example, if a server did not recognize the attribute type 
+   shoeSize, the filters (shoeSize=*), (shoeSize=12), (shoeSize>=12) and 
+   (shoeSize<=12) would each evaluate to Undefined. 
+    
+   Servers MUST NOT return errors if attribute descriptions or matching 
+   rule ids are not recognized, assertion values are invalid, or the 
+   assertion syntax is not supported. More details of filter processing 
+   are given in Clause 7.8 of [X.511]. 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 22 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+4.5.1.7.1. SearchRequest.filter.equalityMatch 
+    
+   The matching rule for an equalityMatch filter is defined by the 
+   EQUALITY matching rule for the attribute type or subtype. The filter 
+   is TRUE when the EQUALITY rule returns TRUE as applied to the 
+   attribute or subtype and the asserted value. 
+    
+    
+4.5.1.7.2. SearchRequest.filter.substrings 
+    
+   There SHALL be at most one 'initial', and at most one 'final' in the 
+   'substrings' of a SubstringFilter. If 'initial' is present, it SHALL 
+   be the first element of 'substrings'. If 'final' is present, it SHALL 
+   be the last element of 'substrings'.  
+    
+   The matching rule for an AssertionValue in a substrings filter item 
+   is defined by the SUBSTR matching rule for the attribute type or 
+   subtype. The filter is TRUE when the SUBSTR rule returns TRUE as 
+   applied to the attribute or subtype and the asserted value. 
+    
+   Note that the AssertionValue in a substrings filter item conforms to 
+   the assertion syntax of the EQUALITY matching rule for the attribute 
+   type rather than the assertion syntax of the SUBSTR matching rule for 
+   the attribute type. Conceptually, the entire SubstringFilter is 
+   converted into an assertion value of the substrings matching rule 
+   prior to applying the rule. 
+    
+    
+4.5.1.7.3. SearchRequest.filter.greaterOrEqual 
+    
+   The matching rule for a greaterOrEqual filter is defined by the 
+   ORDERING matching rule for the attribute type or subtype. The filter 
+   is TRUE when the ORDERING rule returns FALSE as applied to the 
+   attribute or subtype and the asserted value. 
+4.5.1.7.4. SearchRequest.filter.lessOrEqual 
+    
+   The matching rules for a lessOrEqual filter are defined by the 
+   ORDERING and EQUALITY matching rules for the attribute type or 
+   subtype. The filter is TRUE when either the ORDERING or EQUALITY rule 
+   returns TRUE as applied to the attribute or subtype and the asserted 
+   value. 
+    
+    
+4.5.1.7.5. SearchRequest.filter.present 
+    
+   A present filter is TRUE when there is an attribute or subtype of the 
+   specified attribute description present in an entry, FALSE when no 
+   attribute or subtype of the specified attribute description is 
+   present in an entry, and Undefined otherwise. 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 23 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+4.5.1.7.6. SearchRequest.filter.approxMatch 
+    
+   An approxMatch filter is TRUE when there is a value of the attribute 
+   type or subtype for which some locally-defined approximate matching 
+   algorithm (e.g. spelling variations, phonetic match, etc.) returns 
+   TRUE. If a value matches for equality, it also satisfies an 
+   approximate match. If approximate matching is not supported for the 
+   attribute, this filter item should be treated as an equalityMatch. 
+    
+    
+4.5.1.7.7. SearchRequest.filter.extensibleMatch 
+   The fields of the extensibleMatch filter item are evaluated as 
+   follows: 
+    
+   - If the matchingRule field is absent, the type field MUST be 
+     present, and an equality match is performed for that type. 
+      
+   - If the type field is absent and the matchingRule is present, the 
+     matchValue is compared against all attributes in an entry which 
+     support that matchingRule.  
+    
+   - If the type field is present and the matchingRule is present, the 
+     matchValue is compared against the specified attribute type and 
+     its subtypes. 
+   - If the dnAttributes field is set to TRUE, the match is 
+     additionally applied against all the AttributeValueAssertions in 
+     an entry's distinguished name, and evaluates to TRUE if there is 
+     at least one attribute or subtype in the distinguished name for 
+     which the filter item evaluates to TRUE. The dnAttributes field is 
+     present to alleviate the need for multiple versions of generic 
+     matching rules (such as word matching), where one applies to 
+     entries and another applies to entries and DN attributes as well. 
+      
+   The matchingRule used for evaluation determines the syntax for the 
+   assertion value. Once the matchingRule and attribute(s) have been 
+   determined, the filter item evaluates to TRUE if it matches at least 
+   one attribute type or subtype in the entry, FALSE if it does not 
+   match any attribute type or subtype in the entry, and Undefined if 
+   the matchingRule is not recognized, the matchingRule is unsuitable 
+   for use with the specified type, or the assertionValue is invalid. 
+    
+    
+4.5.1.7. SearchRequest.attributes 
+    
+   A selection list of the attributes to be returned from each entry 
+   which matches the search filter. Attributes which are subtypes of 
+   listed attributes are implicitly included. LDAPString values of this 
+   field are constrained to the following Augmented Backus-Naur Form 
+   ([ABNF]): 
+    
+     attributeSelector = attributedescription / selectorspecial 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 24 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+     selectorspecial = noattrs / alluserattrs 
+    
+     noattrs = %x31.2E.31 ; "1.1" 
+    
+     alluserattrs = %x2A ; asterisk ("*") 
+    
+     The <attributedescription> production is defined in Section 2.5 of 
+     [Models]. 
+    
+   There are three special cases which may appear in the attributes 
+   selection list:  
+        
+     - an empty list with no attributes,  
+        
+     - a list containing "*" (with zero or more attribute 
+        descriptions), and  
+                                          
+     - a list containing only "1.1".  
+        
+     An empty list requests the return of all user attributes.   
+        
+     A list containing "*" requests the return of all user attributes 
+     in addition to other listed (operational) attributes.   
+        
+     A list containing only the OID "1.1" indicates that no attributes 
+     are to be returned. If "1.1" is provided with other 
+     attributeSelector values, the "1.1" attributeSelector is ignored. 
+     This OID was chosen because it does not (and can not) correspond 
+     to any attribute in use. 
+   Client implementors should note that even if all user attributes are 
+   requested, some attributes and/or attribute values of the entry may 
+   not be included in Search results due to access controls or other 
+   restrictions. Furthermore, servers will not return operational 
+   attributes, such as objectClasses or attributeTypes, unless they are 
+   listed by name. Operational attributes are described in [Models]. 
+    
+   Attributes are returned at most once in an entry. If an attribute 
+   description is named more than once in the list, the subsequent names 
+   are ignored. If an attribute description in the list is not 
+   recognized, it is ignored by the server. 
+    
+    
+4.5.2. Search Result 
+    
+   The results of the Search operation are returned as zero or more 
+   SearchResultEntry and/or SearchResultReference messages, followed by 
+   a single SearchResultDone message. 
+    
+        SearchResultEntry ::= [APPLICATION 4] SEQUENCE { 
+             objectName      LDAPDN, 
+             attributes      PartialAttributeList } 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 25 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+        PartialAttributeList ::= SEQUENCE OF  
+                             partialAttribute PartialAttribute   
+    
+        SearchResultReference ::= [APPLICATION 19] SEQUENCE  
+                                  SIZE (1..MAX) OF uri URI 
+    
+        SearchResultDone ::= [APPLICATION 5] LDAPResult 
+    
+   Each SearchResultEntry represents an entry found during the Search. 
+   Each SearchResultReference represents an area not yet explored during 
+   the Search. The SearchResultEntry and SearchResultReference messages 
+   may come in any order. Following all the SearchResultReference and 
+   SearchResultEntry responses, the server returns a SearchResultDone 
+   response, which contains an indication of success, or detailing any 
+   errors that have occurred. 
+    
+   Each entry returned in a SearchResultEntry will contain all 
+   appropriate attributes as specified in the attributes field of the 
+   Search Request, subject to access control and other administrative 
+   policy. Note that the PartialAttributeList may hold zero elements. 
+   This may happen when none of the attributes of an entry were 
+   requested, or could be returned. Note also that the partialAttribute 
+   vals set may hold zero elements. This may happen when typesOnly is 
+   requested, access controls prevent the return of values, or other 
+   reasons. 
+    
+   Some attributes may be constructed by the server and appear in a 
+   SearchResultEntry attribute list, although they are not stored 
+   attributes of an entry. Clients SHOULD NOT assume that all attributes 
+   can be modified, even if permitted by access control. 
+    
+   If the server's schema defines short names [Models] for an attribute 
+   type then the server SHOULD use one of those names in attribute 
+   descriptions for that attribute type (in preference to using the 
+   <numericoid> [Models] format of the attribute type's object 
+   identifier). The server SHOULD NOT use the short name if that name is 
+   known by the server to be ambiguous, or otherwise likely to cause 
+   interoperability problems. 
+    
+    
+4.5.3. Continuation References in the Search Result 
+    
+   If the server was able to locate the entry referred to by the 
+   baseObject but was unable or unwilling to search one or more non-
+   local entries, the server may return one or more 
+   SearchResultReference messages, each containing a reference to 
+   another set of servers for continuing the operation. A server MUST 
+   NOT return any SearchResultReference messages if it has not located 
+   the baseObject and thus has not searched any entries; in this case it 
+   would return a SearchResultDone containing either a referral or 
+   noSuchObject result code (depending on the server's knowledge of the 
+   entry named in the baseObject). 
+    
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 26 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   If a server holds a copy or partial copy of the subordinate naming 
+   context (Section 5 of [Models]), it may use the search filter to 
+   determine whether or not to return a SearchResultReference response. 
+   Otherwise SearchResultReference responses are always returned when in 
+   scope. 
+    
+   The SearchResultReference is of the same data type as the Referral.  
+    
+   If the client wishes to progress the Search, it issues a new Search 
+   operation for each SearchResultReference that is returned. If 
+   multiple URIs are present, the client assumes that any supported URI 
+   may be used to progress the operation. 
+    
+   Clients that follow search continuation references MUST ensure that 
+   they do not loop between servers. They MUST NOT repeatedly contact 
+   the same server for the same request with the same parameters. Some 
+   clients use a counter that is incremented each time search result 
+   reference handling occurs for an operation, and these kinds of 
+   clients MUST be able to handle at least ten nested referrals while 
+   progressing the operation. 
+    
+   Note that the Abandon operation described in Section 4.11 applies 
+   only to a particular operation sent at the LDAP message layer between 
+   a client and server. The client must abandon subsequent Search 
+   operations it wishes to individually.  
+    
+   A URI for a server implementing LDAP and accessible via [TCP]/[IP] 
+   (v4 or v6) is written as an LDAP URL according to [LDAPURL].  
+    
+   SearchResultReference values which are LDAP URLs follow these rules: 
+    
+   - The <dn> part of the LDAP URL MUST be present, with the new target 
+     object name. The client uses this name when following the 
+     reference.  
+    
+   - Some servers (e.g. participating in distributed indexing) may 
+     provide a different filter in the LDAP URL. 
+    
+   - If the <filter> part of the LDAP URL is present, the client uses 
+     this filter in its next request to progress this Search, and if it 
+     is not present the client uses the same filter as it used for that 
+     Search.  
+    
+   - If the originating search scope was singleLevel, the <scope> part 
+     of the LDAP URL will be "base". 
+    
+   - It is RECOMMENDED that the <scope> part be present to avoid 
+     ambiguity. In the absence of a <scope> part, the scope of the 
+     original Search request is assumed. 
+    
+   - Other aspects of the new Search request may be the same as or 
+     different from the Search request which generated the 
+     SearchResultReference. 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 27 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   - The name of an unexplored subtree in a SearchResultReference need 
+     not be subordinate to the base object. 
+   Other kinds of URIs may be returned. The syntax and semantics of such 
+   URIs is left to future specifications. Clients may ignore URIs that 
+   they do not support. 
+    
+   UTF-8 encoded characters appearing in the string representation of a 
+   DN, search filter, or other fields of the referral value may not be 
+   legal for URIs (e.g. spaces) and MUST be escaped using the % method 
+   in [URI]. 
+    
+    
+4.5.3.1. Examples 
+    
+   For example, suppose the contacted server (hosta) holds the entry 
+   <DC=Example,DC=NET> and the entry <CN=Manager,DC=Example,DC=NET>. It 
+   knows that both LDAP servers (hostb) and (hostc) hold 
+   <OU=People,DC=Example,DC=NET> (one is the master and the other server 
+   a shadow), and that LDAP-capable server (hostd) holds the subtree 
+   <OU=Roles,DC=Example,DC=NET>. If a wholeSubtree Search of 
+   <DC=Example,DC=NET> is requested to the contacted server, it may 
+   return the following: 
+    
+     SearchResultEntry for DC=Example,DC=NET 
+     SearchResultEntry for CN=Manager,DC=Example,DC=NET 
+     SearchResultReference { 
+       ldap://hostb/OU=People,DC=Example,DC=NET??sub 
+       ldap://hostc/OU=People,DC=Example,DC=NET??sub } 
+     SearchResultReference { 
+       ldap://hostd/OU=Roles,DC=Example,DC=NET??sub } 
+     SearchResultDone (success) 
+    
+   Client implementors should note that when following a 
+   SearchResultReference, additional SearchResultReference may be 
+   generated. Continuing the example, if the client contacted the server 
+   (hostb) and issued the Search request for the subtree 
+   <OU=People,DC=Example,DC=NET>, the server might respond as follows: 
+    
+     SearchResultEntry for OU=People,DC=Example,DC=NET 
+     SearchResultReference { 
+       ldap://hoste/OU=Managers,OU=People,DC=Example,DC=NET??sub } 
+     SearchResultReference { 
+       ldap://hostf/OU=Consultants,OU=People,DC=Example,DC=NET??sub } 
+     SearchResultDone (success) 
+    
+   Similarly, if a singleLevel Search of <DC=Example,DC=NET> is 
+   requested to the contacted server, it may return the following: 
+    
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 28 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+     SearchResultEntry for CN=Manager,DC=Example,DC=NET 
+     SearchResultReference { 
+       ldap://hostb/OU=People,DC=Example,DC=NET??base 
+       ldap://hostc/OU=People,DC=Example,DC=NET??base } 
+     SearchResultReference { 
+       ldap://hostd/OU=Roles,DC=Example,DC=NET??base } 
+     SearchResultDone (success) 
+    
+   If the contacted server does not hold the base object for the Search, 
+   but has knowledge of its possible location, then it may return a 
+   referral to the client. In this case, if the client requests a 
+   subtree Search of <DC=Example,DC=ORG> to hosta, the server returns a 
+   SearchResultDone containing a referral. 
+    
+     SearchResultDone (referral) { 
+       ldap://hostg/DC=Example,DC=ORG??sub } 
+    
+    
+4.6. Modify Operation 
+    
+   The Modify operation allows a client to request that a modification 
+   of an entry be performed on its behalf by a server. The Modify 
+   Request is defined as follows: 
+    
+        ModifyRequest ::= [APPLICATION 6] SEQUENCE { 
+             object          LDAPDN, 
+             changes         SEQUENCE OF change SEQUENCE { 
+                  operation       ENUMERATED { 
+                       add     (0), 
+                       delete  (1), 
+                       replace (2), 
+                       ... }, 
+                  modification    PartialAttribute } } 
+   Fields of the Modify Request are: 
+    
+   - object: The value of this field contains the name of the entry to 
+     be modified. The server SHALL NOT perform any alias dereferencing 
+     in determining the object to be modified. 
+    
+   - changes: A list of modifications to be performed on the entry. The 
+     entire list of modifications MUST be performed in the order they 
+     are listed as a single atomic operation. While individual 
+     modifications may violate certain aspects of the directory schema 
+     (such as the object class definition and DIT content rule), the 
+     resulting entry after the entire list of modifications is 
+     performed MUST conform to the requirements of the directory model 
+     and controlling schema [Models]. 
+         
+     -  operation: Used to specify the type of modification being 
+        performed. Each operation type acts on the following 
+        modification. The values of this field have the following 
+        semantics respectively: 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 29 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+           add: add values listed to the modification attribute, 
+           creating the attribute if necessary; 
+            
+           delete: delete values listed from the modification attribute. 
+           If no values are listed, or if all current values of the 
+           attribute are listed, the entire attribute is removed; 
+            
+           replace: replace all existing values of the modification 
+           attribute with the new values listed, creating the attribute 
+           if it did not already exist. A replace with no value will 
+           delete the entire attribute if it exists, and is ignored if 
+           the attribute does not exist. 
+    
+     -  modification: A PartialAttribute (which may have an empty SET 
+        of vals) used to hold the attribute type or attribute type and 
+        values being modified. 
+    
+   Upon receipt of a Modify Request, the server attempts to perform the 
+   necessary modifications to the DIT and returns the result in a Modify 
+   Response, defined as follows: 
+    
+        ModifyResponse ::= [APPLICATION 7] LDAPResult 
+    
+   The server will return to the client a single Modify Response 
+   indicating either the successful completion of the DIT modification, 
+   or the reason that the modification failed. Due to the requirement 
+   for atomicity in applying the list of modifications in the Modify 
+   Request, the client may expect that no modifications of the DIT have 
+   been performed if the Modify Response received indicates any sort of 
+   error, and that all requested modifications have been performed if 
+   the Modify Response indicates successful completion of the Modify 
+   operation. Whether the modification was applied or not cannot be 
+   determined by the client if the Modify Response was not received 
+   (e.g. the LDAP session was terminated or the Modify operation was 
+   abandoned). 
+    
+   Servers MUST ensure that entries conform to user and system schema 
+   rules or other data model constraints. The Modify operation cannot be 
+   used to remove from an entry any of its distinguished values, i.e. 
+   those values which form the entry's relative distinguished name. An 
+   attempt to do so will result in the server returning the 
+   notAllowedOnRDN result code. The Modify DN operation described in 
+   Section 4.9 is used to rename an entry. 
+    
+   For attribute types which specify no equality matching, the rules in 
+   Section 2.5.1 of [Models] are followed. 
+    
+   Note that due to the simplifications made in LDAP, there is not a 
+   direct mapping of the changes in an LDAP ModifyRequest onto the 
+   changes of a DAP ModifyEntry operation, and different implementations 
+   of LDAP-DAP gateways may use different means of representing the 
+   change. If successful, the final effect of the operations on the 
+   entry MUST be identical. 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 30 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+4.7. Add Operation 
+    
+   The Add operation allows a client to request the addition of an entry 
+   into the Directory. The Add Request is defined as follows: 
+    
+        AddRequest ::= [APPLICATION 8] SEQUENCE { 
+             entry           LDAPDN, 
+             attributes      AttributeList } 
+    
+        AttributeList ::= SEQUENCE OF attribute Attribute 
+    
+   Fields of the Add Request are: 
+    
+   - entry: the name of the entry to be added. The server SHALL NOT 
+     dereference any aliases in locating the entry to be added. 
+    
+   - attributes: the list of attributes that, along with those from the 
+     RDN, make up the content of the entry being added. Clients MAY or 
+     MAY NOT include the RDN attribute(s) in this list. Clients MUST 
+     NOT supply NO-USER-MODIFICATION attributes such as the 
+     createTimestamp or creatorsName attributes, since the server 
+     maintains these automatically. 
+    
+   Servers MUST ensure that entries conform to user and system schema 
+   rules or other data model constraints. For attribute types which 
+   specify no equality matching, the rules in Section 2.5.1 of [Models] 
+   are followed (this applies to the naming attribute in addition to any 
+   multi-valued attributes being added). 
+    
+   The entry named in the entry field of the AddRequest MUST NOT exist 
+   for the AddRequest to succeed. The immediate superior (parent) of an 
+   object or alias entry to be added MUST exist. For example, if the 
+   client attempted to add <CN=JS,DC=Example,DC=NET>, the 
+   <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did 
+   exist, then the server would return the noSuchObject result code with 
+   the matchedDN field containing <DC=NET>.  
+    
+   Upon receipt of an Add Request, a server will attempt to add the 
+   requested entry. The result of the Add attempt will be returned to 
+   the client in the Add Response, defined as follows: 
+    
+        AddResponse ::= [APPLICATION 9] LDAPResult 
+    
+   A response of success indicates that the new entry has been added to 
+   the Directory. 
+    
+    
+4.8. Delete Operation 
+    
+   The Delete operation allows a client to request the removal of an 
+   entry from the Directory. The Delete Request is defined as follows: 
+    
+        DelRequest ::= [APPLICATION 10] LDAPDN 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 31 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+   The Delete Request consists of the name of the entry to be deleted. 
+   The server SHALL NOT dereference aliases while resolving the name of 
+   the target entry to be removed. 
+    
+   Only leaf entries (those with no subordinate entries) can be deleted 
+   with this operation. 
+    
+   Upon receipt of a Delete Request, a server will attempt to perform 
+   the entry removal requested and return the result in the Delete 
+   Response defined as follows: 
+    
+        DelResponse ::= [APPLICATION 11] LDAPResult 
+    
+    
+4.9. Modify DN Operation 
+    
+   The Modify DN operation allows a client to change the Relative 
+   Distinguished Name (RDN) of an entry in the Directory, and/or to move 
+   a subtree of entries to a new location in the Directory. The Modify 
+   DN Request is defined as follows: 
+    
+        ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { 
+             entry           LDAPDN, 
+             newrdn          RelativeLDAPDN, 
+             deleteoldrdn    BOOLEAN, 
+             newSuperior     [0] LDAPDN OPTIONAL } 
+    
+   Fields of the Modify DN Request are: 
+    
+   - entry: the name of the entry to be changed. This entry may or may 
+     not have subordinate entries. 
+    
+   - newrdn: the new RDN of the entry. The value of the old RDN is 
+     supplied when moving the entry to a new superior without changing 
+     its RDN. Attribute values of the new RDN not matching any 
+     attribute value of the entry are added to the entry and an 
+     appropriate error is returned if this fails. 
+     
+   - deleteoldrdn: a boolean field that controls whether the old RDN 
+     attribute values are to be retained as attributes of the entry, or 
+     deleted from the entry. 
+    
+   - newSuperior: if present, this is the name of an existing object 
+     entry which becomes the immediate superior (parent) of the 
+     existing entry. 
+    
+   The server SHALL NOT dereference any aliases in locating the objects 
+   named in entry or newSuperior. 
+    
+   Upon receipt of a ModifyDNRequest, a server will attempt to perform 
+   the name change and return the result in the Modify DN Response, 
+   defined as follows: 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 32 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+        ModifyDNResponse ::= [APPLICATION 13] LDAPResult 
+    
+   For example, if the entry named in the entry field was <cn=John 
+   Smith,c=US>, the newrdn field was <cn=John Cougar Smith>, and the 
+   newSuperior field was absent, then this operation would attempt to 
+   rename the entry to be <cn=John Cougar Smith,c=US>. If there was 
+   already an entry with that name, the operation would fail with the 
+   entryAlreadyExists result code. 
+    
+   Servers MUST ensure that entries conform to user and system schema 
+   rules or other data model constraints. For attribute types which 
+   specify no equality matching, the rules in Section 2.5.1 of [Models] 
+   are followed (this pertains to newrdn and deleteoldrdn). 
+    
+   The object named in newSuperior MUST exist. For example, if the 
+   client attempted to add <CN=JS,DC=Example,DC=NET>, the 
+   <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did 
+   exist, then the server would return the noSuchObject result code with 
+   the matchedDN field containing <DC=NET>. 
+   If the deleteoldrdn field is TRUE, the attribute values forming the 
+   old RDN but not the new RDN are deleted from the entry. If the 
+   deleteoldrdn field is FALSE, the attribute values forming the old RDN 
+   will be retained as non-distinguished attribute values of the entry.  
+    
+   Note that X.500 restricts the ModifyDN operation to only affect 
+   entries that are contained within a single server. If the LDAP server 
+   is mapped onto DAP, then this restriction will apply, and the 
+   affectsMultipleDSAs result code will be returned if this error 
+   occurred. In general, clients MUST NOT expect to be able to perform 
+   arbitrary movements of entries and subtrees between servers or 
+   between naming contexts. 
+    
+    
+4.10. Compare Operation 
+    
+   The Compare operation allows a client to compare an assertion value 
+   with the values of a particular attribute in a particular entry in 
+   the Directory. The Compare Request is defined as follows: 
+    
+        CompareRequest ::= [APPLICATION 14] SEQUENCE { 
+             entry           LDAPDN, 
+             ava             AttributeValueAssertion } 
+    
+   Fields of the Compare Request are: 
+    
+   - entry: the name of the entry to be compared. The server SHALL NOT 
+     dereference any aliases in locating the entry to be compared. 
+    
+   - ava: holds the attribute value assertion to be compared. 
+    
+   Upon receipt of a Compare Request, a server will attempt to perform 
+   the requested comparison and return the result in the Compare 
+   Response, defined as follows: 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 33 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+        CompareResponse ::= [APPLICATION 15] LDAPResult 
+    
+   The resultCode is set to compareTrue, compareFalse, or an appropriate 
+   error. compareTrue indicates that the assertion value in the ava 
+   field matches a value of the attribute or subtype according to the 
+   attribute's EQUALITY matching rule. compareFalse indicates that the 
+   assertion value in the ava field and the values of the attribute or 
+   subtype did not match. Other result codes indicate either that the 
+   result of the comparison was Undefined (Section 4.5.1), or that some 
+   error occurred. 
+    
+   Note that some directory systems may establish access controls which 
+   permit the values of certain attributes (such as userPassword) to be 
+   compared but not interrogated by other means. 
+    
+    
+4.11. Abandon Operation 
+    
+   The function of the Abandon operation is to allow a client to request 
+   that the server abandon an uncompleted operation. The Abandon Request 
+   is defined as follows: 
+    
+        AbandonRequest ::= [APPLICATION 16] MessageID 
+    
+   The MessageID is that of an operation which was requested earlier at 
+   this LDAP message layer. The Abandon request itself has its own 
+   MessageID. This is distinct from the MessageID of the earlier 
+   operation being abandoned. 
+    
+   There is no response defined in the Abandon operation. Upon receipt 
+   of an AbandonRequest, the server MAY abandon the operation identified 
+   by the MessageID. Since the client cannot tell the difference between 
+   a successfully abandoned operation and an uncompleted operation, the 
+   application of the Abandon operation is limited to uses where the 
+   client does not require an indication of its outcome. 
+    
+   Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned.  
+    
+   In the event that a server receives an Abandon Request on a Search 
+   operation in the midst of transmitting responses to the Search, that 
+   server MUST cease transmitting entry responses to the abandoned 
+   request immediately, and MUST NOT send the SearchResultDone. Of 
+   course, the server MUST ensure that only properly encoded LDAPMessage 
+   PDUs are transmitted. 
+    
+   The ability to abandon other (particularly update) operations is at 
+   the discretion of the server.  
+    
+   Clients should not send Abandon requests for the same operation 
+   multiple times, and MUST also be prepared to receive results from 
+   operations it has abandoned (since these may have been in transit 
+   when the Abandon was requested, or are not able to be abandoned). 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 34 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   Servers MUST discard Abandon requests for message IDs they do not 
+   recognize, for operations which cannot be abandoned, and for 
+   operations which have already been abandoned. 
+    
+    
+4.12. Extended Operation 
+    
+   The Extended operation allows additional operations to be defined for 
+   services not already available in the protocol. For example, to Add 
+   operations to install transport layer security (see Section 4.14). 
+    
+   The Extended operation allows clients to make requests and receive 
+   responses with predefined syntaxes and semantics. These may be 
+   defined in RFCs or be private to particular implementations.  
+    
+   Each Extended operation consists of an Extended request and an 
+   Extended response.  
+    
+        ExtendedRequest ::= [APPLICATION 23] SEQUENCE { 
+             requestName      [0] LDAPOID, 
+             requestValue     [1] OCTET STRING OPTIONAL } 
+    
+   The requestName is a dotted-decimal representation of the unique 
+   OBJECT IDENTIFIER corresponding to the request. The requestValue is 
+   information in a form defined by that request, encapsulated inside an 
+   OCTET STRING. 
+    
+   The server will respond to this with an LDAPMessage containing an 
+   ExtendedResponse. 
+    
+        ExtendedResponse ::= [APPLICATION 24] SEQUENCE { 
+             COMPONENTS OF LDAPResult, 
+             responseName     [10] LDAPOID OPTIONAL, 
+             responseValue    [11] OCTET STRING OPTIONAL } 
+    
+   The responseName field, when present, contains an LDAPOID which is 
+   unique for this extended operation or response.  This field is 
+   optional (even when the extension specification specifies an LDAPOID 
+   to be returned in the field).  The field will be absent whenever the 
+   server is unable or unwilling to determine the appropriate LDAPOID to 
+   return, for instance when the requestName cannot be parsed or its 
+   value is not recognized. 
+    
+   Where the requestName is not recognized, the server returns 
+   protocolError (The server may return protocolError in other cases). 
+    
+   The requestValue and responseValue fields contain information 
+   associated with the operation. The format of these fields is defined 
+   by the specification of the Extended operation. Implementations MUST 
+   be prepared to handle arbitrary contents of these fields, including 
+   zero bytes. Values that are defined in terms of ASN.1 and BER encoded 
+   according to Section 5.1, also follow the extensibility rules in 
+   Section 4. 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 35 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   Servers list the requestName of Extended Requests they recognize in 
+   the 'supportedExtension' attribute in the root DSE (Section 5.1 of 
+   [Models]). 
+   Extended operations may be specified in other documents. The 
+   specification of an Extended operation consists of: 
+    
+   - the OBJECT IDENTIFIER assigned to the requestName, 
+    
+   - the OBJECT IDENTIFIER (if any) assigned to the responseName (note 
+     that the same OBJECT IDENTIFIER may be used for both the 
+     requestName and responseName), 
+    
+   - the format of the contents of the requestValue and responseValue 
+     (if any), and 
+    
+   - the semantics of the operation. 
+4.13. IntermediateResponse Message 
+    
+   While the Search operation provides a mechanism to return multiple 
+   response messages for a single Search request, other operations, by 
+   nature, do not provide for multiple response messages. 
+    
+   The IntermediateResponse message provides a general mechanism for 
+   defining single-request/multiple-response operations in LDAP. This 
+   message is intended to be used in conjunction with the Extended 
+   operation to define new single-request/multiple-response operations 
+   or in conjunction with a control when extending existing LDAP 
+   operations in a way that requires them to return Intermediate 
+   response information.  
+    
+   It is intended that the definitions and descriptions of Extended 
+   operations and controls that make use of the IntermediateResponse 
+   message will define the circumstances when an IntermediateResponse 
+   message can be sent by a server and the associated meaning of an 
+   IntermediateResponse message sent in a particular circumstance. 
+    
+        IntermediateResponse ::= [APPLICATION 25] SEQUENCE { 
+                responseName     [0] LDAPOID OPTIONAL, 
+                responseValue    [1] OCTET STRING OPTIONAL } 
+    
+   IntermediateResponse messages SHALL NOT be returned to the client 
+   unless the client issues a request that specifically solicits their 
+   return. This document defines two forms of solicitation: Extended 
+   operation and request control. IntermediateResponse messages are 
+   specified in documents describing the manner in which they are 
+   solicited (i.e. in the Extended operation or request control 
+   specification that uses them). These specifications include: 
+        
+   - the OBJECT IDENTIFIER (if any) assigned to the responseName, 
+    
+   - the format of the contents of the responseValue (if any), and 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 36 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+   - the semantics associated with the IntermediateResponse message.  
+    
+   Extensions that allow the return of multiple types of 
+   IntermediateResponse messages SHALL identify those types using unique 
+   responseName values (note that one of these may specify no value). 
+    
+   Sections 4.13.1 and 4.13.2 describe additional requirements on the 
+   inclusion of responseName and responseValue in IntermediateResponse 
+   messages.  
+  
+4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse  
+     
+   A single-request/multiple-response operation may be defined using a 
+   single ExtendedRequest message to solicit zero or more 
+   IntermediateResponse messages of one or more kinds followed by an 
+   ExtendedResponse message. 
+     
+  
+4.13.2. Usage with LDAP Request Controls  
+     
+   A control's semantics may include the return of zero or more 
+   IntermediateResponse messages prior to returning the final result 
+   code for the operation.  One or more kinds of IntermediateResponse 
+   messages may be sent in response to a request control. 
+    
+   All IntermediateResponse messages associated with request controls 
+   SHALL include a responseName.  This requirement ensures that the 
+   client can correctly identify the source of IntermediateResponse 
+   messages when: 
+    
+   - two or more controls using IntermediateResponse messages are 
+     included in a request for any LDAP operation or   
+        
+   - one or more controls using IntermediateResponse messages are 
+     included in a request with an LDAP Extended operation that uses 
+     IntermediateResponse messages. 
+    
+    
+4.14. StartTLS Operation 
+   The Start Transport Layer Security (StartTLS) operation's purpose is 
+   to initiate installation of a TLS layer. The StartTLS operation is 
+   defined using the Extended operation mechanism described in Section 
+   4.12. 
+    
+    
+
+
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 37 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+4.14.1. StartTLS Request 
+   A client requests TLS establishment by transmitting a StartTLS 
+   request message to the server. The StartTLS request is defined in 
+   terms of an ExtendedRequest. The requestName is 
+   "1.3.6.1.4.1.1466.20037", and the requestValue field is always 
+   absent.  
+    
+   The client MUST NOT send any LDAP PDUs at this LDAP message layer 
+   following this request until it receives a StartTLS Extended response 
+   and, in the case of a successful response, completes TLS 
+   negotiations. 
+    
+   Detected sequencing problems (particularly those detailed in Section 
+   3.1.1 of [AuthMeth]) result in the resultCode being set to 
+   operationsError. 
+    
+   If the server does not support TLS (whether by design or by current 
+   configuration), it returns with the resultCode set to protocolError 
+   as described in Section 4.12. 
+    
+    
+4.14.2. StartTLS Response 
+   When a StartTLS request is received, servers supporting the operation 
+   MUST return a StartTLS response message to the requestor. The 
+   responseName is "1.3.6.1.4.1.1466.20037" when provided (See 4.12). 
+   The responseValue is always absent.  
+    
+   If the server is willing and able to negotiate TLS, it returns the 
+   StartTLS response with the resultCode set to success. Upon client 
+   receipt of a successful StartTLS response, protocol peers may 
+   commence with TLS negotiation as discussed in Section 3 of 
+   [AuthMeth]. 
+   If the server is otherwise unwilling or unable to perform this 
+   operation, the server is to return an appropriate result code 
+   indicating the nature of the problem.  For example, if the TLS 
+   subsystem is not presently available, the server may indicate so by 
+   returning with the resultCode set to unavailable. In cases where a 
+   non-success result code is returned, the LDAP session is left without 
+   a TLS layer. 
+4.14.3. Removal of the TLS Layer 
+   Either the client or server MAY remove the TLS layer and leave the 
+   LDAP message layer intact by sending and receiving a TLS closure 
+   alert. 
+    
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 38 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   The initiating protocol peer sends the TLS closure alert and MUST 
+   wait until it receives a TLS closure alert from the other peer before 
+   sending further LDAP PDUs. 
+    
+   When a protocol peer receives the initial TLS closure alert, it may 
+   choose to allow the LDAP message layer to remain intact. In this 
+   case, it MUST immediately transmit a TLS closure alert. Following 
+   this, it MAY send and receive LDAP PDUs. 
+    
+   Protocol peers MAY terminate the LDAP session after sending or 
+   receiving a TLS closure alert. 
+    
+    
+5. Protocol Encoding, Connection, and Transfer 
+    
+   This protocol is designed to run over connection-oriented, reliable 
+   transports, where the data stream is divided into octets (8-bit 
+   units), with each octet and each bit being significant. 
+    
+   One underlying service, LDAP over TCP, is defined in Section 
+   5.2. This service is generally applicable to applications providing 
+   or consuming X.500-based directory services on the Internet. This 
+   specification was generally written with the TCP mapping in mind. 
+   Specifications detailing other mappings may encounter various 
+   obstacles. 
+    
+   Implementations of LDAP over TCP MUST implement the mapping as 
+   described in Section 5.2. 
+    
+   This table illustrates the relationship between the different layers 
+   involved in an exchange between two protocol peers: 
+    
+               +----------------------+ 
+               |  LDAP message layer  | 
+               +----------------------+ > LDAP PDUs 
+               +----------------------+ < data        
+               |      SASL layer      |              
+               +----------------------+ > SASL-protected data 
+               +----------------------+ < data     
+               |       TLS layer      |           
+   Application +----------------------+ > TLS-protected data 
+   ------------+----------------------+ < data   
+     Transport | transport connection | 
+               +----------------------+  
+    
+5.1. Protocol Encoding 
+   The protocol elements of LDAP SHALL be encoded for exchange using the 
+   Basic Encoding Rules [BER] of [ASN.1] with the following 
+   restrictions: 
+    
+   - Only the definite form of length encoding is used. 
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 39 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+   - OCTET STRING values are encoded in the primitive form only. 
+    
+   - If the value of a BOOLEAN type is true, the encoding of the value 
+     octet is set to hex "FF". 
+    
+   - If a value of a type is its default value, it is absent. Only some 
+     BOOLEAN and INTEGER types have default values in this protocol 
+     definition. 
+    
+   These restrictions are meant to ease the overhead of encoding and 
+   decoding certain elements in BER. 
+    
+   These restrictions do not apply to ASN.1 types encapsulated inside of 
+   OCTET STRING values, such as attribute values, unless otherwise 
+   stated. 
+    
+5.2. Transmission Control Protocol (TCP) 
+    
+   The encoded LDAPMessage PDUs are mapped directly onto the [TCP] 
+   bytestream using the BER-based encoding described in Section 5.1. It 
+   is recommended that server implementations running over the TCP 
+   provide a protocol listener on the Internet Assigned Numbers 
+   Authority (IANA)-assigned LDAP port, 389 [PortReg]. Servers may 
+   instead provide a listener on a different port number. Clients MUST 
+   support contacting servers on any valid TCP port. 
+    
+    
+5.3. Termination of the LDAP session 
+    
+   Termination of the LDAP session is typically initiated by the client 
+   sending an UnbindRequest (Section 4.3), or by the server sending a 
+   Notice of Disconnection (Section 4.4.1). In these cases each protocol 
+   peer gracefully terminates the LDAP session by ceasing exchanges at 
+   the LDAP message layer, tearing down any SASL layer, tearing down any 
+   TLS layer, and closing the transport connection. 
+    
+   A protocol peer may determine that the continuation of any 
+   communication would be pernicious, and in this case may abruptly 
+   terminate the session by ceasing communication and closing the 
+   transport connection. 
+    
+   In either case, when the LDAP session is terminated, uncompleted 
+   operations are handled as specified in Section 3.1. 
+    
+6. Security Considerations 
+    
+   This version of the protocol provides facilities for simple 
+   authentication using a cleartext password, as well as any [SASL] 
+   mechanism. Installing SASL and/or TLS layers can provide integrity 
+   and other data security services. 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 40 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   It is also permitted that the server can return its credentials to 
+   the client, if it chooses to do so. 
+    
+   Use of cleartext password is strongly discouraged where the 
+   underlying transport service cannot guarantee confidentiality and may 
+   result in disclosure of the password to unauthorized parties. 
+    
+   Servers are encouraged to prevent directory modifications by clients 
+   that have authenticated anonymously [AuthMeth].  
+    
+   Security considerations for authentication methods, SASL mechanisms, 
+   and TLS are described in [AuthMeth]. 
+    
+   It should be noted that SASL authentication exchanges do not provide 
+   data confidentiality nor integrity protection for the version or name 
+   fields of the BindRequest nor the resultCode, diagnosticMessage, or 
+   referral fields of the BindResponse nor of any information contained 
+   in controls attached to Bind requests or responses. Thus information 
+   contained in these fields SHOULD NOT be relied on unless otherwise 
+   protected (such as by establishing protections at the transport 
+   layer). 
+    
+   Implementors should note that various security factors, including 
+   authentication and authorization information and data security 
+   services may change during the course of the LDAP session, or even 
+   during the performance of a particular operation.  For instance, 
+   credentials could expire, authorization identities or access controls 
+   could change, or the underlying security layer(s) could be replaced 
+   or terminated.  Implementations should be robust in the handling of 
+   changing security factors. 
+   In some cases, it may be appropriate to continue the operation even 
+   in light of security factor changes.  For instance, it may be 
+   appropriate to continue an Abandon operation regardless of the 
+   change, or to continue an operation when the change upgraded (or 
+   maintained) the security factor. In other cases, it may be 
+   appropriate to fail, or alter the processing of the operation. For 
+   instance, if confidential protections were removed, it would be 
+   appropriate to either fail a request to return sensitive data, or 
+   minimally, to exclude the return of sensitive data. 
+    
+   Implementations which cache attributes and entries obtained via LDAP 
+   MUST ensure that access controls are maintained if that information 
+   is to be provided to multiple clients, since servers may have access 
+   control policies which prevent the return of entries or attributes in 
+   Search results except to particular authenticated clients. For 
+   example, caches could serve result information only to the client 
+   whose request caused it to be in the cache. 
+    
+
+
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 41 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   Servers may return referrals or Search result references which 
+   redirect clients to peer servers. It is possible for a rogue 
+   application to inject such referrals into the data stream in an 
+   attempt to redirect a client to a rogue server. Clients are advised 
+   to be aware of this, and possibly reject referrals when 
+   confidentiality measures are not in place. Clients are advised to 
+   reject referrals from the StartTLS operation. 
+    
+   The matchedDN and diagnosticMessage fields, as well as some 
+   resultCode values (e.g., attributeOrValueExists and 
+   entryAlreadyExists), could disclose the presence or absence of 
+   specific data in the directory which is subject to access and other 
+   administrative controls. Server implementations should restrict 
+   access to protected information equally under both normal and error 
+   conditions. 
+    
+   Protocol peers MUST be prepared to handle invalid and arbitrary 
+   length protocol encodings. Invalid protocol encodings include: BER 
+   encoding exceptions, format string and UTF-8 encoding exceptions, 
+   overflow exceptions, integer value exceptions, and binary mode on/off 
+   flag exceptions. The LDAPv3 PROTOS [PROTOS-LDAP] test suite provides 
+   excellent examples of these exceptions and test cases used to 
+   discover flaws. 
+    
+   In the event that a protocol peer senses an attack which in its 
+   nature could cause damage due to further communication at any layer 
+   in the LDAP session, the protocol peer should abruptly terminate the 
+   LDAP session as described in Section 5.3. 
+    
+    
+7. Acknowledgements 
+    
+   This document is based on RFC 2251 by Mark Wahl, Tim Howes, and Steve 
+   Kille. RFC 2251 was a product of the IETF ASID Working Group. 
+    
+   It is also based on RFC 2830 by Jeff Hodges, RL "Bob" Morgan, and 
+   Mark Wahl. RFC 2830 was a product of the IETF LDAPEXT Working Group. 
+    
+   It is also based on RFC 3771 by Roger Harrison, and Kurt Zeilenga. 
+   RFC 3771 was an individual submission to the IETF. 
+    
+   This document is a product of the IETF LDAPBIS Working Group. 
+   Significant contributors of technical review and content include Kurt 
+   Zeilenga, Steven Legg, and Hallvard Furuseth. 
+    
+    
+8. Normative References 
+      
+   [ABNF]    Crocker, D. and P. Overell, "Augmented BNF for Syntax 
+             Specifications: ABNF", draft-crocker-abnf-rfc2234bis-
+             xx.txt, (a work in progress). 
+    
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 42 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   [ASN.1]   ITU-T Recommendation X.680 (07/2002) | ISO/IEC 8824-1:2002 
+             "Information Technology - Abstract Syntax Notation One 
+             (ASN.1): Specification of basic notation" 
+    
+   [AuthMeth] Harrison, R., "LDAP: Authentication Methods and Connection 
+             Level Security Mechanisms", draft-ietf-ldapbis-authmeth-
+             xx.txt, (a work in progress). 
+    
+   [BER]     ITU-T Rec. X.690 (07/2002) | ISO/IEC 8825-1:2002, 
+             "Information technology - ASN.1 encoding rules: 
+             Specification of Basic Encoding Rules (BER), Canonical 
+             Encoding Rules (CER) and Distinguished Encoding Rules 
+             (DER)", 2002. 
+   [IP]      Postel, J., "Internet Protocol", STD5 and RFC 791, 
+             September 1981 
+    
+   [ISO10646] Universal Multiple-Octet Coded Character Set (UCS) - 
+             Architecture and Basic Multilingual Plane, ISO/IEC 10646-1 
+             : 1993. 
+     
+   [Keyword] Bradner, S., "Key words for use in RFCs to Indicate 
+             Requirement Levels", RFC 2119, March 1997. 
+     
+   [LDAPDN]  Zeilenga, K., "LDAP: String Representation of 
+             Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, (a 
+             work in progress). 
+    
+   [LDAPIANA] Zeilenga, K., "IANA Considerations for LDAP", draft-ietf-
+             ldapbis-bcp64-xx.txt, (a work in progress). 
+    
+   [LDAPURL] Smith, M., "LDAP: Uniform Resource Locator", draft-ietf-
+             ldapbis-url-xx.txt, (a work in progress). 
+    
+   [Models]  Zeilenga, K., "LDAP: Directory Information Models", draft-
+             ietf-ldapbis-models-xx.txt (a work in progress). 
+    
+   [Roadmap] Zeilenga, K., "LDAP: Technical Specification Road Map", 
+             draft-ietf-ldapbis-roadmap-xx.txt (a work in progress). 
+    
+   [SASL]    Melnikov, A., "Simple Authentication and Security Layer", 
+             draft-ietf-sasl-rfc2222bis-xx.txt (a work in progress). 
+    
+   [SASLPrep] Zeilenga, K., "Stringprep profile for user names and 
+             passwords", draft-ietf-sasl-saslprep-xx.txt, (a work in 
+             progress). 
+    
+   [StringPrep] Hoffman P. and M. Blanchet, "Preparation of 
+             Internationalized Strings ('stringprep')", draft-hoffman-
+             rfc3454bis-xx.txt, a work in progress. 
+    
+   [Syntaxes] Legg, S., and K. Dally, "LDAP: Syntaxes and Matching 
+             Rules", draft-ietf-ldapbis-syntaxes-xx.txt, (a work in 
+             progress). 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 43 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+   [TCP]     Postel, J., "Transmission Control Protocol", STD7 and RFC 
+             793, September 1981 
+    
+   [TLS]     Dierks, T. and C. Allen. "The TLS Protocol Version 1.1", 
+             draft-ietf-tls-rfc2246-bis-xx.txt, a work in progress. 
+    
+   [Unicode] The Unicode Consortium, "The Unicode Standard, Version 
+             3.2.0" is defined by "The Unicode Standard, Version 3.0" 
+             (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5), 
+             as amended by the "Unicode Standard Annex #27: Unicode 
+             3.1" (http://www.unicode.org/reports/tr27/) and by the 
+             "Unicode Standard Annex #28: Unicode 3.2" 
+             (http://www.unicode.org/reports/tr28/). 
+    
+   [URI]     Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform 
+             Resource Identifiers (URI): Generic Syntax", RFC 2396, 
+             August 1998. 
+    
+   [UTF-8]   Yergeau, F., "UTF-8, a transformation format of ISO 
+             10646", STD63 and RFC3629, November 2003. 
+    
+   [X.500]   ITU-T Rec. X.500, "The Directory: Overview of Concepts, 
+             Models and Service", 1993. 
+     
+   [X.501]   ITU-T Rec. X.501, "The Directory: Models", 1993. 
+    
+   [X.511]   ITU-T Rec. X.511, "The Directory: Abstract Service 
+             Definition", 1993. 
+    
+    
+9. Informative References 
+    
+   [Glossary] The Unicode Consortium, "Unicode Glossary", 
+             <http://www.unicode.org/glossary/>. 
+    
+   [CharModel]  Whistler, K. and M. Davis, "Unicode Technical Report 
+             #17, Character Encoding Model", UTR17, 
+             <http://www.unicode.org/unicode/reports/tr17/>, August 
+             2000. 
+    
+   [PROTOS-LDAP] University of Oulu, "PROTOS Test-Suite: c06-ldapv3" 
+             <http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/l
+             dapv3/> 
+    
+   [PortReg] IANA, "Port Numbers", 
+             http://www.iana.org/assignments/port-numbers 
+10. IANA Considerations 
+    
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 44 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   It is requested that the Internet Assigned Numbers Authority (IANA) 
+   update the LDAP result code registry to indicate that this document 
+   provides the definitive technical specification for result codes 0-
+   36, 48-54, 64-70, 80-90. It is also noted that one resultCode value 
+   (strongAuthRequired) has been renamed (to strongerAuthRequired). 
+    
+   It is requested that the IANA update the LDAP Protocol Mechanism 
+   registry to indicate that this document and [AuthMeth] provides the 
+   definitive technical specification for the StartTLS 
+   (1.3.6.1.4.1.1466.20037) Extended operation. 
+    
+   It is requested that the IANA update the occurrence of "RFC XXXX" in 
+   this section and Appendix B with this RFC number at publication. 
+   It is requested that IANA assign upon Standards Action an LDAP Object 
+   Identifier [LDAPIANA] to identify the ASN.1 module defined in this 
+   document. 
+    
+        Subject: Request for LDAP Object Identifier Registration 
+        Person & email address to contact for further information: 
+             Jim Sermersheim <jimse@novell.com> 
+        Specification: RFC XXXX 
+        Author/Change Controller: IESG 
+        Comments:    
+             Identifies the LDAP ASN.1 module 
+    
+   [[Note to RFC Editor: please replace the occurrence of <IANA-
+   ASSIGNED-DIRECTORY-NUMBER> in Appendix B with the IANA assigned 
+   OID.]] 
+    
+11. Editor's Address 
+    
+   Jim Sermersheim 
+   Novell, Inc. 
+   1800 South Novell Place 
+   Provo, Utah 84606, USA 
+   jimse@novell.com 
+   +1 801 861-3088 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 45 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+Appendix A. LDAP Result Codes 
+   This normative appendix details additional considerations regarding 
+   LDAP result codes and provides a brief, general description of each 
+   LDAP result code enumerated in Section 4.1.9. 
+    
+   Additional result codes MAY be defined for use with extensions 
+   [LDAPIANA]. Client implementations SHALL treat any result code which 
+   they do not recognize as an unknown error condition. 
+    
+   The descriptions provided here do not fully account for result code 
+   substitutions used to prevent unauthorized disclosures (such as 
+   substitution of noSuchObject for insufficientAccessRights, or 
+   invalidCredentials for insufficientAccessRights). 
+    
+    
+A.1. Non-Error Result Codes 
+    
+   These result codes (called "non-error" result codes) do not indicate 
+   an error condition: 
+        success (0), 
+        compareFalse (5), 
+        compareTrue (6), 
+        referral (10), and 
+        saslBindInProgress (14). 
+    
+   The success, compareTrue, and compareFalse result codes indicate 
+   successful completion (and, hence, are referred to as "successful" 
+   result codes). 
+    
+   The referral and saslBindInProgress result codes indicate the client 
+   needs to take additional action to complete the operation. 
+    
+    
+A.2. Result Codes 
+    
+   Existing LDAP result codes are described as follows: 
+        success (0) 
+           Indicates the successful completion of an operation. Note: 
+           this code is not used with the Compare operation. See 
+           compareFalse (5) and compareTrue (6).        
+    
+        operationsError (1) 
+           Indicates that the operation is not properly sequenced with 
+           relation to other operations (of same or different type). 
+           For example, this code is returned if the client attempts to 
+           StartTLS [TLS] while there are other uncompleted operations 
+           or if a TLS layer was already installed. 
+        protocolError (2) 
+           Indicates the server received data which is not well-formed. 
+            
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 46 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+           For Bind operation only, this code is also used to indicate 
+           that the server does not support the requested protocol 
+           version. 
+            
+           For Extended operations only, this code is also used to 
+           indicate that the server does not support (by design or 
+           configuration) the Extended operation associated with the 
+           requestName. 
+            
+           For request operations specifying multiple controls, this may 
+           be used to indicate that the server cannot ignore the order 
+           of the controls as specified, or that the combination of the 
+           specified controls is invalid or unspecified. 
+            
+        timeLimitExceeded (3) 
+           Indicates that the time limit specified by the client was 
+           exceeded before the operation could be completed. 
+        sizeLimitExceeded (4) 
+           Indicates that the size limit specified by the client was 
+           exceeded before the operation could be completed. 
+         
+        compareFalse (5) 
+           Indicates that the Compare operation has successfully 
+           completed and the assertion has evaluated to FALSE or 
+           Undefined. 
+         
+        compareTrue (6) 
+           Indicates that the Compare operation has successfully 
+           completed and the assertion has evaluated to TRUE. 
+         
+        authMethodNotSupported (7) 
+           Indicates that the authentication method or mechanism is not 
+           supported. 
+         
+        strongerAuthRequired (8) 
+           Indicates the server requires strong(er) authentication in 
+           order to complete the operation. 
+            
+           When used with the Notice of Disconnection operation, this 
+           code indicates that the server has detected that an 
+           established security association between the client and 
+           server has unexpectedly failed or been compromised. 
+         
+        referral (10) 
+           Indicates that a referral needs to be chased to complete the 
+           operation (see Section 4.1.10). 
+         
+        adminLimitExceeded (11) 
+           Indicates that an administrative limit has been exceeded. 
+         
+        unavailableCriticalExtension (12) 
+           Indicates a critical control is unrecognized (see Section 
+           4.1.11). 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 47 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+         
+        confidentialityRequired (13) 
+           Indicates that data confidentiality protections are required. 
+         
+        saslBindInProgress (14) 
+           Indicates the server requires the client to send a new bind 
+           request, with the same SASL mechanism, to continue the 
+           authentication process (see Section 4.2). 
+         
+        noSuchAttribute (16) 
+           Indicates that the named entry does not contain the specified 
+           attribute or attribute value. 
+         
+        undefinedAttributeType (17) 
+           Indicates that a request field contains an unrecognized 
+           attribute description. 
+         
+        inappropriateMatching (18) 
+           Indicates that an attempt was made (e.g. in an assertion) to 
+           use a matching rule not defined for the attribute type 
+           concerned. 
+         
+        constraintViolation (19) 
+           Indicates that the client supplied an attribute value which 
+           does not conform to the constraints placed upon it by the 
+           data model. 
+         
+           For example, this code is returned when multiple values are 
+           supplied to an attribute which has a SINGLE-VALUE constraint. 
+         
+        attributeOrValueExists (20) 
+           Indicates that the client supplied an attribute or value to 
+           be added to an entry, but the attribute or value already 
+           exists. 
+         
+        invalidAttributeSyntax (21) 
+           Indicates that a purported attribute value does not conform 
+           to the syntax of the attribute. 
+         
+        noSuchObject (32) 
+           Indicates that the object does not exist in the DIT. 
+         
+        aliasProblem (33) 
+           Indicates that an alias problem has occurred. For example, 
+           the code may used to indicate an alias has been dereferenced 
+           which names no object. 
+         
+        invalidDNSyntax (34) 
+           Indicates that an LDAPDN or RelativeLDAPDN field (e.g. search 
+           base, target entry, ModifyDN newrdn, etc.) of a request does 
+           not conform to the required syntax or contains attribute 
+           values which do not conform to the syntax of the attribute's 
+           type. 
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 48 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+         
+        aliasDereferencingProblem (36) 
+           Indicates that a problem occurred while dereferencing an 
+           alias. Typically an alias was encountered in a situation 
+           where it was not allowed or where access was denied. 
+         
+        inappropriateAuthentication (48) 
+           Indicates the server requires the client which had attempted 
+           to bind anonymously or without supplying credentials to 
+           provide some form of credentials. 
+         
+        invalidCredentials (49) 
+           Indicates that the provided credentials (e.g. the user's name 
+           and password) are invalid. 
+         
+        insufficientAccessRights (50) 
+           Indicates that the client does not have sufficient access 
+           rights to perform the operation. 
+         
+        busy (51) 
+           Indicates that the server is too busy to service the 
+           operation. 
+         
+        unavailable (52) 
+           Indicates that the server is shutting down or a subsystem 
+           necessary to complete the operation is offline. 
+         
+        unwillingToPerform (53) 
+           Indicates that the server is unwilling to perform the 
+           operation. 
+         
+        loopDetect (54) 
+           Indicates that the server has detected an internal loop (e.g. 
+           while dereferencing aliases or chaining an operation). 
+         
+        namingViolation (64) 
+           Indicates that the entry's name violates naming restrictions. 
+         
+        objectClassViolation (65) 
+           Indicates that the entry violates object class restrictions. 
+         
+        notAllowedOnNonLeaf (66) 
+           Indicates that the operation is inappropriately acting upon a 
+           non-leaf entry. 
+         
+        notAllowedOnRDN (67) 
+           Indicates that the operation is inappropriately attempting to 
+           remove a value which forms the entry's relative distinguished 
+           name. 
+         
+        entryAlreadyExists (68) 
+           Indicates that the request cannot be fulfilled (added, moved, 
+           or renamed) as the target entry already exists. 
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 49 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+         
+        objectClassModsProhibited (69) 
+           Indicates that an attempt to modify the object class(es) of 
+           an entry's 'objectClass' attribute is prohibited. 
+         
+           For example, this code is returned when a client attempts to 
+           modify the structural object class of an entry. 
+         
+        affectsMultipleDSAs (71) 
+           Indicates that the operation cannot be performed as it would 
+           affect multiple servers (DSAs). 
+         
+        other (80) 
+           Indicates the server has encountered an internal error. 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 50 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+Appendix B. Complete ASN.1 Definition 
+    
+        This appendix is normative. 
+    
+        Lightweight-Directory-Access-Protocol-V3 {1 3 6 1 1 <IANA-
+   ASSIGNED-DIRECTORY-NUMBER>} 
+        -- Copyright (C) The Internet Society (2005). This version of 
+        -- this ASN.1 module is part of RFC XXXX; see the RFC itself 
+        -- for full legal notices. 
+        DEFINITIONS 
+        IMPLICIT TAGS 
+        EXTENSIBILITY IMPLIED ::= 
+    
+        BEGIN 
+    
+        LDAPMessage ::= SEQUENCE { 
+             messageID       MessageID, 
+             protocolOp      CHOICE { 
+                  bindRequest           BindRequest, 
+                  bindResponse          BindResponse, 
+                  unbindRequest         UnbindRequest, 
+                  searchRequest         SearchRequest, 
+                  searchResEntry        SearchResultEntry, 
+                  searchResDone         SearchResultDone, 
+                  searchResRef          SearchResultReference, 
+                  modifyRequest         ModifyRequest, 
+                  modifyResponse        ModifyResponse, 
+                  addRequest            AddRequest, 
+                  addResponse           AddResponse, 
+                  delRequest            DelRequest, 
+                  delResponse           DelResponse, 
+                  modDNRequest          ModifyDNRequest, 
+                  modDNResponse         ModifyDNResponse, 
+                  compareRequest        CompareRequest, 
+                  compareResponse       CompareResponse, 
+                  abandonRequest        AbandonRequest, 
+                  extendedReq           ExtendedRequest, 
+                  extendedResp          ExtendedResponse, 
+                  ..., 
+                  intermediateResponse  IntermediateResponse }, 
+             controls       [0] Controls OPTIONAL } 
+    
+        MessageID ::= INTEGER (0 .. maxInt) 
+    
+        maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- 
+    
+        LDAPString ::= OCTET STRING -- UTF-8 encoded, 
+                                    -- [ISO10646] characters 
+    
+        LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] 
+    
+        LDAPDN ::= LDAPString -- Constrained to <distinguishedName> 
+                              -- [LDAPDN] 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 51 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+        RelativeLDAPDN ::= LDAPString -- Constrained to <name-component> 
+                                      -- [LDAPDN] 
+    
+        AttributeDescription ::= LDAPString 
+                                -- Constrained to <attributedescription> 
+                                -- [Models] 
+    
+        AttributeValue ::= OCTET STRING 
+    
+        AttributeValueAssertion ::= SEQUENCE { 
+             attributeDesc   AttributeDescription, 
+             assertionValue  AssertionValue } 
+    
+        AssertionValue ::= OCTET STRING 
+    
+        PartialAttribute ::= SEQUENCE { 
+             type       AttributeDescription, 
+             vals       SET OF value AttributeValue } 
+    
+        Attribute ::= PartialAttribute(WITH COMPONENTS { 
+             ...,  
+             vals (SIZE(1..MAX))}) 
+    
+        MatchingRuleId ::= LDAPString 
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 52 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+        LDAPResult ::= SEQUENCE { 
+             resultCode         ENUMERATED { 
+                  success                      (0), 
+                  operationsError              (1), 
+                  protocolError                (2), 
+                  timeLimitExceeded            (3), 
+                  sizeLimitExceeded            (4), 
+                  compareFalse                 (5), 
+                  compareTrue                  (6), 
+                  authMethodNotSupported       (7), 
+                  strongerAuthRequired         (8), 
+                       -- 9 reserved -- 
+                  referral                     (10), 
+                  adminLimitExceeded           (11), 
+                  unavailableCriticalExtension (12), 
+                  confidentialityRequired      (13), 
+                  saslBindInProgress           (14), 
+                  noSuchAttribute              (16), 
+                  undefinedAttributeType       (17), 
+                  inappropriateMatching        (18), 
+                  constraintViolation          (19), 
+                  attributeOrValueExists       (20), 
+                  invalidAttributeSyntax       (21), 
+                       -- 22-31 unused -- 
+                  noSuchObject                 (32), 
+                  aliasProblem                 (33), 
+                  invalidDNSyntax              (34), 
+                       -- 35 reserved for undefined isLeaf -- 
+                  aliasDereferencingProblem    (36), 
+                       -- 37-47 unused -- 
+                  inappropriateAuthentication  (48), 
+                  invalidCredentials           (49), 
+                  insufficientAccessRights     (50), 
+                  busy                         (51), 
+                  unavailable                  (52), 
+                  unwillingToPerform           (53), 
+                  loopDetect                   (54), 
+                       -- 55-63 unused -- 
+                  namingViolation              (64), 
+                  objectClassViolation         (65), 
+                  notAllowedOnNonLeaf          (66), 
+                  notAllowedOnRDN              (67), 
+                  entryAlreadyExists           (68), 
+                  objectClassModsProhibited    (69), 
+                       -- 70 reserved for CLDAP -- 
+                  affectsMultipleDSAs          (71), 
+                       -- 72-79 unused -- 
+                  other                        (80), 
+                  ... }, 
+             matchedDN          LDAPDN, 
+             diagnosticMessage  LDAPString, 
+             referral           [3] Referral OPTIONAL } 
+    
+        Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 53 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+        URI ::= LDAPString     -- limited to characters permitted in 
+                               -- URIs 
+    
+        Controls ::= SEQUENCE OF control Control 
+    
+        Control ::= SEQUENCE { 
+             controlType             LDAPOID, 
+             criticality             BOOLEAN DEFAULT FALSE, 
+             controlValue            OCTET STRING OPTIONAL } 
+    
+        BindRequest ::= [APPLICATION 0] SEQUENCE { 
+             version                 INTEGER (1 .. 127), 
+             name                    LDAPDN, 
+             authentication          AuthenticationChoice } 
+    
+        AuthenticationChoice ::= CHOICE { 
+             simple                  [0] OCTET STRING, 
+                                     -- 1 and 2 reserved 
+             sasl                    [3] SaslCredentials, 
+             ... } 
+    
+        SaslCredentials ::= SEQUENCE { 
+             mechanism               LDAPString, 
+             credentials             OCTET STRING OPTIONAL } 
+    
+        BindResponse ::= [APPLICATION 1] SEQUENCE { 
+             COMPONENTS OF LDAPResult, 
+             serverSaslCreds    [7] OCTET STRING OPTIONAL } 
+    
+        UnbindRequest ::= [APPLICATION 2] NULL 
+    
+        SearchRequest ::= [APPLICATION 3] SEQUENCE { 
+             baseObject      LDAPDN, 
+             scope           ENUMERATED { 
+                  baseObject              (0), 
+                  singleLevel             (1), 
+                  wholeSubtree            (2), 
+                  ... }, 
+             derefAliases    ENUMERATED { 
+                  neverDerefAliases       (0), 
+                  derefInSearching        (1), 
+                  derefFindingBaseObj     (2), 
+                  derefAlways             (3) }, 
+             sizeLimit       INTEGER (0 .. maxInt), 
+             timeLimit       INTEGER (0 .. maxInt), 
+             typesOnly       BOOLEAN, 
+             filter          Filter, 
+             attributes      AttributeSelection } 
+    
+        AttributeSelection ::= SEQUENCE OF selector LDAPString 
+                       -- The LDAPString is constrained to 
+                       -- <attributeSelector> in Section 4.5.1.7 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 54 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+        Filter ::= CHOICE { 
+             and             [0] SET SIZE (1..MAX) OF filter Filter, 
+             or              [1] SET SIZE (1..MAX) OF filter Filter, 
+             not             [2] Filter, 
+             equalityMatch   [3] AttributeValueAssertion, 
+             substrings      [4] SubstringFilter, 
+             greaterOrEqual  [5] AttributeValueAssertion, 
+             lessOrEqual     [6] AttributeValueAssertion, 
+             present         [7] AttributeDescription, 
+             approxMatch     [8] AttributeValueAssertion, 
+             extensibleMatch [9] MatchingRuleAssertion, 
+             ... } 
+    
+        SubstringFilter ::= SEQUENCE { 
+             type           AttributeDescription, 
+             substrings     SEQUENCE SIZE (1..MAX) OF substring CHOICE { 
+                  initial [0] AssertionValue,  -- can occur at most once 
+                  any     [1] AssertionValue, 
+                  final   [2] AssertionValue } -- can occur at most once  
+             } 
+    
+        MatchingRuleAssertion ::= SEQUENCE { 
+             matchingRule    [1] MatchingRuleId OPTIONAL, 
+             type            [2] AttributeDescription OPTIONAL, 
+             matchValue      [3] AssertionValue, 
+             dnAttributes    [4] BOOLEAN DEFAULT FALSE } 
+    
+        SearchResultEntry ::= [APPLICATION 4] SEQUENCE { 
+             objectName      LDAPDN, 
+             attributes      PartialAttributeList } 
+    
+        PartialAttributeList ::= SEQUENCE OF  
+                             partialAttribute PartialAttribute   
+    
+        SearchResultReference ::= [APPLICATION 19] SEQUENCE  
+                                  SIZE (1..MAX) OF uri URI 
+    
+        SearchResultDone ::= [APPLICATION 5] LDAPResult 
+    
+        ModifyRequest ::= [APPLICATION 6] SEQUENCE { 
+             object          LDAPDN, 
+             changes         SEQUENCE OF change SEQUENCE { 
+                  operation       ENUMERATED { 
+                       add     (0), 
+                       delete  (1), 
+                       replace (2), 
+                       ... }, 
+                  modification    PartialAttribute } } 
+    
+        ModifyResponse ::= [APPLICATION 7] LDAPResult 
+    
+        AddRequest ::= [APPLICATION 8] SEQUENCE { 
+             entry           LDAPDN, 
+             attributes      AttributeList } 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 55 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+        AttributeList ::= SEQUENCE OF attribute Attribute 
+    
+        AddResponse ::= [APPLICATION 9] LDAPResult 
+    
+        DelRequest ::= [APPLICATION 10] LDAPDN 
+    
+        DelResponse ::= [APPLICATION 11] LDAPResult 
+    
+        ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { 
+             entry           LDAPDN, 
+             newrdn          RelativeLDAPDN, 
+             deleteoldrdn    BOOLEAN, 
+             newSuperior     [0] LDAPDN OPTIONAL } 
+    
+        ModifyDNResponse ::= [APPLICATION 13] LDAPResult 
+    
+        CompareRequest ::= [APPLICATION 14] SEQUENCE { 
+             entry           LDAPDN, 
+             ava             AttributeValueAssertion } 
+    
+        CompareResponse ::= [APPLICATION 15] LDAPResult 
+    
+        AbandonRequest ::= [APPLICATION 16] MessageID 
+    
+        ExtendedRequest ::= [APPLICATION 23] SEQUENCE { 
+             requestName      [0] LDAPOID, 
+             requestValue     [1] OCTET STRING OPTIONAL } 
+    
+        ExtendedResponse ::= [APPLICATION 24] SEQUENCE { 
+             COMPONENTS OF LDAPResult, 
+             responseName     [10] LDAPOID OPTIONAL, 
+             responseValue    [11] OCTET STRING OPTIONAL } 
+    
+        IntermediateResponse ::= [APPLICATION 25] SEQUENCE { 
+             responseName     [0] LDAPOID OPTIONAL, 
+             responseValue    [1] OCTET STRING OPTIONAL } 
+    
+        END 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 56 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+Appendix C. Changes 
+   This appendix is non-normative. 
+    
+   This appendix summarizes substantive changes made to RFC 2251, RFC 
+   2830, and RFC 3771. 
+    
+    
+C.1. Changes made to RFC 2251: 
+    
+   This section summarizes the substantive changes made to Sections 1, 
+   2, 3.1, and 4 through the remainder of RFC 2251. Readers should 
+   consult [Models] and [AuthMeth] for summaries of changes to other 
+   sections. 
+    
+    
+C.1.1. Section 1 (Status of this Memo) 
+    
+   - Removed IESG note. Post publication of RFC 2251, mandatory LDAP 
+     authentication mechanisms have been standardized which are 
+     sufficient to remove this note. See [AuthMeth] for authentication 
+     mechanisms. 
+    
+    
+C.1.2. Section 3.1 (Protocol Model) and others 
+   - Removed notes giving history between LDAP v1, v2 and v3. Instead, 
+     added sufficient language so that this document can stand on its 
+     own. 
+    
+    
+C.1.3. Section 4 (Elements of Protocol) 
+   - Clarified where the extensibility features of ASN.1 apply to the 
+     protocol. This change affected various ASN.1 types by the 
+     inclusion of ellipses (...) to certain elements. 
+   - Removed the requirement that servers which implement version 3 or 
+     later MUST provide the 'supportedLDAPVersion' attribute. This 
+     statement provided no interoperability advantages. 
+C.1.4. Section 4.1.1 (Message Envelope) 
+   - There was a mandatory requirement for the server to return a 
+     Notice of Disconnection and drop the transport connection when a 
+     PDU is malformed in a certain way. This has been updated such that 
+     the server SHOULD return the Notice of Disconnection, and MUST 
+     terminate the LDAP Session. 
+C.1.5. Section 4.1.1.1 (Message ID) 
+   - Required that the messageID of requests MUST be non-zero as the 
+     zero is reserved for Notice of Disconnection. 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 57 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   - Specified when it is and isn't appropriate to return an already 
+     used message id. RFC 2251 accidentally imposed synchronous server 
+     behavior in its wording of this. 
+C.1.6. Section 4.1.2 (String Types) 
+   - Stated that LDAPOID is constrained to <numericoid> from [Models]. 
+C.1.7. Section 4.1.5.1 (Binary Option) and others 
+   - Removed the Binary Option from the specification. There are 
+     numerous interoperability problems associated with this method of 
+     alternate attribute type encoding. Work to specify a suitable 
+     replacement is ongoing. 
+C.1.8. Section 4.1.8 (Attribute) 
+   - Combined the definitions of PartialAttribute and Attribute here, 
+     and defined Attribute in terms of PartialAttribute. 
+C.1.9. Section 4.1.10 (Result Message) 
+   - Renamed "errorMessage" to "diagnosticMessage" as it is allowed to 
+     be sent for non-error results. 
+   - Moved some language into Appendix A, and refer the reader there. 
+   - Allowed matchedDN to be present for other result codes than those 
+     listed in RFC 2251. 
+   - renamed the code "strongAuthRequired" to "strongerAuthRequired" to 
+     clarify that this code may often be returned to indicate that a 
+     stronger authentication is needed to perform a given operation. 
+C.1.10. Section 4.1.11 (Referral) 
+   - Defined referrals in terms of URIs rather than URLs. 
+   - Removed the requirement that all referral URIs MUST be equally 
+     capable of progressing the operation. The statement was ambiguous 
+     and provided no instructions on how to carry it out. 
+   - Added the requirement that clients MUST NOT loop between servers. 
+   - Clarified the instructions for using LDAPURLs in referrals, and in 
+     doing so added a recommendation that the scope part be present. 
+   - Removed imperatives which required clients to use URLs in specific 
+     ways to progress an operation. These did nothing for 
+     interoperability. 
+C.1.11. Section 4.1.12 (Controls) 
+   - Specified how control values defined in terms of ASN.1 are to be 
+     encoded. 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 58 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+   - Noted that the criticality field is only applied to request 
+     messages (except UnbindRequest), and must be ignored when present 
+     on response messages and UnbindRequest. 
+   - Specified that non-critical controls may be ignored at the 
+     server's discretion. There was confusion in the original wording 
+     which led some to believe that recognized controls may not be 
+     ignored as long as they were associated with a proper request. 
+   - Added language regarding combinations of controls and the ordering 
+     of controls on a message. 
+   - Specified that when the semantics of the combination of controls 
+     is undefined or unknown, it results in a protocolError. 
+   - Changed "The server MUST be prepared" to "Implementations MUST be 
+     prepared" in the eighth paragraph to reflect that both client and 
+     server implementations must be able to handle this (as both parse 
+     controls). 
+C.1.12. Section 4.2 (Bind Operation) 
+   - Mandated that servers return protocolError when the version is not 
+     supported. 
+   - Disambiguated behavior when the simple authentication is used, the 
+     name is empty and the password is non-empty. 
+   - Required servers to not dereference aliases for Bind. This was 
+     added for consistency with other operations and to help ensure 
+     data consistency. 
+   - Required that textual passwords be transferred as UTF-8 encoded 
+     Unicode, and added recommendations on string preparation. This was 
+     to help ensure interoperability of passwords being sent from 
+     different clients. 
+C.1.13. Section 4.2.1 (Sequencing of the Bind Request) 
+   - This section was largely reorganized for readability and language 
+     was added to clarify the authentication state of failed and 
+     abandoned Bind operations. 
+   - Removed: "If a SASL transfer encryption or integrity mechanism has 
+     been negotiated, that mechanism does not support the changing of 
+     credentials from one identity to another, then the client MUST 
+     instead establish a new connection." 
+     If there are dependencies between multiple negotiations of a 
+     particular SASL mechanism, the technical specification for that 
+     SASL mechanism details how applications are to deal with them. 
+     LDAP should not require any special handling. 
+   - Dropped MUST imperative in paragraph 3 to align with [Keywords]. 
+   - Mandated that clients not send non-Bind operations while a Bind is 
+     in progress, and suggested that servers not process them if they 
+     are received. This is needed to ensure proper sequencing of the 
+     Bind in relationship to other operations. 
+    
+    
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 59 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+C.1.14. Section 4.2.3 (Bind Response) 
+   - Moved most error-related text to Appendix A, and added text 
+     regarding certain errors used in conjunction with the Bind 
+     operation. 
+   - Prohibited the server from specifying serverSaslCreds when not 
+     appropriate. 
+    
+    
+C.1.15. Section 4.3 (Unbind Operation) 
+   - Specified that both peers are to cease transmission and terminate 
+     the LDAP session for the Unbind operation. 
+    
+    
+C.1.16. Section 4.4 (Unsolicited Notification) 
+   - Added instructions for future specifications of Unsolicited 
+     Notifications. 
+    
+    
+C.1.17. Section 4.5.1 (Search Request) 
+   - SearchRequest attributes is now defined as an AttributeSelection 
+     type rather than AttributeDescriptionList, and an ABNF is 
+     provided. 
+   - SearchRequest attributes may contain duplicate attribute 
+     descriptions. This was previously prohibited. Now servers are 
+     instructed to ignore subsequent names when they are duplicated. 
+     This was relaxed in order to allow different short names and also 
+     OIDs to be requested for an attribute. 
+   - The present search filter now evaluates to Undefined when the 
+     specified attribute is not known to the server. It used to 
+     evaluate to FALSE, which caused behavior inconsistent with what 
+     most would expect, especially when the not operator was used. 
+   - The Filter choice SubstringFilter substrings type is now defined 
+     with a lower bound of 1. 
+   - The SubstringFilter substrings 'initial, 'any', and 'final' types 
+     are now AssertionValue rather than LDAPString. Also, added 
+     imperatives stating that 'initial' (if present) must be listed 
+     first, and 'final' (if present) must be listed last. 
+   - Disambiguated the semantics of the derefAliases choices. There was 
+     question as to whether derefInSearching applied to the base object 
+     in a wholeSubtree Search. 
+   - Added instructions for equalityMatch, substrings, greaterOrEqual, 
+     lessOrEqual, and approxMatch. 
+    
+    
+C.1.18. Section 4.5.2 (Search Result) 
+   - Recommended that servers not use attribute short names when it 
+     knows they are ambiguous or may cause interoperability problems. 
+   - Removed all mention of ExtendedResponse due to lack of 
+     implementation. 
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 60 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+    
+C.1.19. Section 4.5.3 (Continuation References in the Search Result) 
+   - Made changes similar to those made to Section 4.1.11. 
+    
+    
+C.1.20. Section 4.5.3.1 (Example) 
+   - Fixed examples to adhere to changes made to Section 4.5.3. 
+    
+    
+C.1.21. Section 4.6 (Modify Operation) 
+    
+   - Replaced AttributeTypeAndValues with Attribute as they are 
+     equivalent. 
+   - Specified the types of modification changes which might 
+     temporarily violate schema. Some readers were under the impression 
+     that any temporary schema violation was allowed.  
+    
+    
+C.1.22. Section 4.7 (Add Operation) 
+   - Aligned Add operation with X.511 in that the attributes of the RDN 
+     are used in conjunction with the listed attributes to create the 
+     entry. Previously, Add required that the distinguished values be 
+     present in the listed attributes. 
+   - Removed requirement that the objectClass attribute MUST be 
+     specified as some DSE types do not require this attribute. 
+     Instead, generic wording was added, requiring the added entry to 
+     adhere to the data model. 
+   - Removed recommendation regarding placement of objects. This is 
+     covered in the data model document. 
+    
+    
+C.1.23. Section 4.9 (Modify DN Operation) 
+   - Required servers to not dereference aliases for Modify DN. This 
+     was added for consistency with other operations and to help ensure 
+     data consistency. 
+   - Allow Modify DN to fail when moving between naming contexts. 
+   - Specified what happens when the attributes of the newrdn are not 
+     present on the entry. 
+C.1.24. Section 4.10 (Compare Operation) 
+   - Specified that compareFalse means that the Compare took place and 
+     the result is false. There was confusion which lead people to 
+     believe that an Undefined match resulted in compareFalse. 
+   - Required servers to not dereference aliases for Compare. This was 
+     added for consistency with other operations and to help ensure 
+     data consistency. 
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 61 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+C.1.25. Section 4.11 (Abandon Operation) 
+   - Explained that since Abandon returns no response, clients should 
+     not use it if they need to know the outcome. 
+   - Specified that Abandon and Unbind cannot be abandoned.  
+    
+C.1.26. Section 4.12 (Extended Operation) 
+   - Specified how values of Extended operations defined in terms of 
+     ASN.1 are to be encoded. 
+   - Added instructions on what Extended operation specifications 
+     consist of. 
+   - Added a recommendation that servers advertise supported Extended 
+     operations. 
+C.1.27. Section 5.2 (Transfer Protocols) 
+   - Moved referral-specific instructions into referral-related 
+     sections. 
+C.1.28. Section 7 (Security Considerations) 
+   - Reworded notes regarding SASL not protecting certain aspects of 
+     the LDAP Bind messages. 
+   - Noted that Servers are encouraged to prevent directory 
+     modifications by clients that have authenticated anonymously 
+     [AuthMeth].  
+   - Added a note regarding the possibility of changes to security 
+     factors (authentication, authorization, data confidentiality). 
+   - Warned against following referrals that may have been injected in 
+     the data stream. 
+   - Noted that servers should protect information equally, whether in 
+     an error condition or not, and mentioned specifically; matchedDN, 
+     diagnosticMessage, and resultCodes.  
+   - Added a note regarding malformed and long encodings. 
+C.1.29. Appendix A (Complete ASN.1 Definition) 
+   - Added "EXTENSIBILITY IMPLIED" to ASN.1 definition. 
+   - Removed AttributeType. It is not used. 
+C.2. Changes made to RFC 2830: 
+    
+   This section summarizes the substantive changes made to Sections of 
+   RFC 2830. Readers should consult [AuthMeth] for summaries of changes 
+   to other sections. 
+    
+    
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 62 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+C.2.1. Section 2.3 (Response other than "success") 
+   - Removed wording indicating that referrals can be returned from 
+     StartTLS. 
+   - Removed requirement that only a narrow set of result codes can be 
+     returned. Some result codes are required in certain scenarios, but 
+     any other may be returned if appropriate. 
+   - Removed requirement that the ExtendedResponse.responseName MUST be 
+     present. There are circumstances where this is impossible, and 
+     requiring this is at odds with language in Section 4.12. 
+    
+    
+C.2.1. Section 4 (Closing a TLS Connection) 
+    
+   - Reworded most of this section to align with definitions of the 
+     LDAP protocol layers. 
+   - Removed instructions on abrupt closure as this is covered in other 
+     areas of the document (specifically, Section 5.3) 
+    
+C.3. Changes made to RFC 3771: 
+    
+   - Rewrote to fit into this document. In general, semantics were 
+     preserved. Supporting and background language seen as redundant 
+     due to its presence in this document was omitted. 
+   - Specified that Intermediate responses to a request may be of 
+     different types, and one of the response types may be specified to 
+     have no response value. 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 63 \f
+              Lightweight Directory Access Protocol Version 3 
+                                      
+    
+    
+Intellectual Property Statement 
+    
+   The IETF takes no position regarding the validity or scope of any 
+   Intellectual Property Rights or other rights that might be claimed to 
+   pertain to the implementation or use of the technology described in 
+   this document or the extent to which any license under such rights 
+   might or might not be available; nor does it represent that it has 
+   made any independent effort to identify any such rights. Information 
+   on the procedures with respect to rights in RFC documents can be 
+   found in BCP 78 and BCP 79.  
+   Copies of IPR disclosures made to the IETF Secretariat and any 
+   assurances of licenses to be made available, or the result of an 
+   attempt made to obtain a general license or permission for the use of 
+   such proprietary rights by implementers or users of this 
+   specification can be obtained from the IETF on-line IPR repository at 
+   http://www.ietf.org/ipr.  
+   The IETF invites any interested party to bring to its attention any 
+   copyrights, patents or patent applications, or other proprietary 
+   rights that may cover technology that may be required to implement 
+   this standard. Please address the information to the IETF at ietf-
+   ipr@ietf.org.  
+Disclaimer of Validity 
+   This document and the information contained herein are provided on an 
+   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS 
+   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET 
+   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, 
+   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE 
+   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 
+   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
+Copyright Statement 
+   Copyright (C) The Internet Society (2005).  
+    
+   This document is subject to the rights, licenses and restrictions 
+   contained in BCP 78, and except as set forth therein, the authors 
+   retain all their rights.  
+Acknowledgement 
+   Funding for the RFC Editor function is currently provided by the 
+   Internet Society. 
+
+
+
+
+
+  
+Sermersheim      Internet-Draft - Expires April 2006             Page 64 
diff --git a/doc/drafts/draft-zeilenga-ldap-managedit-xx.txt b/doc/drafts/draft-zeilenga-ldap-managedit-xx.txt
new file mode 100644 (file)
index 0000000..f73f2a3
--- /dev/null
@@ -0,0 +1,675 @@
+
+
+
+
+
+
+INTERNET-DRAFT                                   Kurt D. Zeilenga
+Intended Category: Experimental                  OpenLDAP Foundation
+Expires in six months                            27 February 2006
+
+
+
+            The LDAP Manage Directory Information Tree Control
+                  <draft-zeilenga-ldap-managedit-00.txt>
+
+
+Status of this Memo
+
+  This document is intended to be, after appropriate review and
+  revision, submitted to the RFC Editor for publication as an
+  Experimental document.   Distribution of this memo is unlimited.
+  Technical discussion of this document will take place on the IETF LDAP
+  Extensions mailing list <ldapext@ietf.org>.  Please send editorial
+  comments directly to the author <Kurt@OpenLDAP.org>.
+
+  By submitting this Internet-Draft, each author represents that any
+  applicable patent or other IPR claims of which he or she is aware have
+  been or will be disclosed, and any of which he or she becomes aware
+  will be disclosed, in accordance with Section 6 of BCP 79.
+
+  Internet-Drafts are working documents of the Internet Engineering Task
+  Force (IETF), its areas, and its working groups. Note that other
+  groups may also distribute working documents as Internet-Drafts.
+
+  Internet-Drafts are draft documents valid for a maximum of six months
+  and may be updated, replaced, or obsoleted by other documents at any
+  time. It is inappropriate to use Internet-Drafts as reference material
+  or to cite them other than as "work in progress."
+
+  The list of current Internet-Drafts can be accessed at
+  http://www.ietf.org/1id-abstracts.html
+
+  The list of Internet-Draft Shadow Directories can be accessed at
+  http://www.ietf.org/shadow.html
+
+
+  Copyright (C) The Internet Society (2006).  All Rights Reserved.
+
+  Please see the Full Copyright section near the end of this document
+  for more information.
+
+
+
+
+
+
+
+Zeilenga                 LDAP Manage DIT Control                [Page 1]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+Abstract
+
+  This document defines the Lightweight Directory Access Protocol (LDAP)
+  Manage Directory Information Tree (DIT) Control which allows a
+  directory user agent (a client) to request the directory service
+  temporarily relax enforcement of constraints of the X.500 models.
+
+
+1.  Background and Intended Use
+
+  Directory servers accessible via Lightweight Directory Access Protocol
+  (LDAP) [Roadmap] are expected to act in accordance with the X.500
+  series of ITU-T Recommendations.  In particular, servers are expected
+  to ensure the X.500 data and service models are not violated.
+
+  An LDAP server is expected to prevent modification of the structural
+  object class of an object [Models].  That is, the X.500 models do not
+  allow a 'person' object to be transformed into an
+  'organizationalPerson' object through modification of the object.
+  Instead, the 'person' object must be deleted and then a new
+  'organizationalPerson' object created in its place.  This approach,
+  aside from being inconvient, is problematic for a number reasons.
+  First, as LDAP does not have a standardized method for performing the
+  two operations in a single transaction, the intermediate directory
+  state (after the delete, before the add) is visible to other clients,
+  which may lead to undesirable client behavior.  Second, attributes
+  such as entryUUID [entryUUID] will reflect the object was replaced,
+  not transformed.
+
+  An LDAP server is expected to prevent clients from modifying values of
+  NO-USER-MODIFICATION attributes [Models].  For instance, an entry is
+  not allowed to assign or modify the value of the entryUUID attribute.
+  However, where an administrator is restoring a previously existing
+  object, for instance when repartitioning data between directory
+  servers or when migrating from one vendor server product to another,
+  it may be desirable to allow the client to assign or modify the value
+  of the entryUUID attribute.
+
+  This document specifies the Manage Directory Information Tree (DIT)
+  control.  The Manage DIT control may be attached to LDAP requests to
+  update the DIT to request DIT restrictions be temporarily relaxed
+  during the performance of the requested DIT update.  The server is
+  however to ensure the resulting directory state is valid.
+
+  Use of this control is expected that use of this extension will be
+  restricted by administrative and/or access controls.  It is intended
+  to be used by directory administrators.
+
+
+
+
+Zeilenga                 LDAP Manage DIT Control                [Page 2]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+  This extension is considered experimental as it is not yet clear
+  whether it adequately addresses directory administrators' needs for
+  flexible mechanisms for managing directory objects.  It is hoped that
+  after suitable amount of time, either this extension or a suitable
+  replacement will be standardization.
+
+
+1.1. Terminology
+
+  Protocol elements are described using ASN.1 [X.680] with implicit
+  tags.  The term "BER-encoded" means the element is to be encoded using
+  the Basic Encoding Rules [X.690] under the restrictions detailed in
+  Section 5.2 of [Protocol].
+
+  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+  "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+  document are to be interpreted as described in BCP 14 [RFC2119].
+
+  DSA stands for Directory System Agent, a server.  DSE stands for DSA-
+  specific Entry.
+
+
+2.  The Manage DIT Control
+
+  The Manage DIT control is an LDAP Control [Protocol] whose controlType
+  is IANA-ASSIGNED-OID, controlValue is empty, and the criticality of
+  TRUE.
+
+  There is no corresponding response control.
+
+  The control is appropriate for all LDAP update requests, including
+  add, delete, modify, and modifyDN (rename) [Protocol].
+
+  The presence of the Manage DIT control in an LDAP update request
+  indicates the server temporarily relax X.500 model contraints during
+  performance of the directory update.
+
+  The server may restrict use of this control and/or limit the extent of
+  the relaxation provided based upon local policy or factors.
+
+  The server is obligated to ensure the resulting directory state is
+  consistent with the X.500 models.  For instance, the server ensure
+  that values of attributes conform to the value syntax.
+
+  It is noted that while this extension may be used to add or modify
+  objects in a manner which violate the controlling subschema, the
+  presence of objects in the DIT is not inconsistent with the X.500
+  models.  For instance, an object created prior to establshment of a
+
+
+
+Zeilenga                 LDAP Manage DIT Control                [Page 3]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+  DIT content rule may contain an attribute now precluded by the current
+  controlling DIT Content Rule.
+
+  Servers implementing this technical specification SHOULD publish the
+  object identifier IANA-ASSIGNED-OID as a value of the
+  'supportedControl' attribute [Models] in their root DSE.  A server MAY
+  choose to advertise this extension only when the client is authorized
+  to use it.
+
+
+3.  Use Cases
+
+3.1. Object metamorphism
+
+  In absence of this control, an attempt to modify an object's
+  'objectClass' in a manner which cause a change in the structural
+  object class of the object would normally lead to an
+  objectClassModsProhibited error [Protocol].  The presence of the
+  Manage DIT control in the modify request requests the change be
+  allowed.  If the server is willing and able to allow the change in the
+  structural object class of the object.
+
+  For instance, to change an 'organization' object into an
+  'organizationalUnit' object, a client could issue the following LDAP
+  request:
+
+      dn: o=Unit,dc=example,dc=net
+      control: IANA-ASSIGNED-OID
+      changetype: modify
+      delete: objectClass
+      objectClass: organization
+      -
+      add: objectClass
+      objectClass: organizationalUnit
+      -
+
+  In this case, the server is expected to either effect the requested
+  change in the structural object class, including updating of the value
+  of the structural object class, or fail the operation.
+
+
+3.2. Inactive Attribute Types
+
+  In absence of the Manage DIT control, an attempt to add or modify
+  values to an attribute whose type has been marked inactive in the
+  controlling subschema (its attribute type description contains the
+  OBSOLETE field) [Models] normally results in a failure.
+
+
+
+
+Zeilenga                 LDAP Manage DIT Control                [Page 4]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+  In the presence of the Manage DIT control, the server performs the
+  update operation as if the attribute's type is marked active in the
+  controlling subschema (its attribute type description does not contain
+  the OBSOLETE field).
+
+
+3.3. DIT Content Rules
+
+  In absence of the Manage DIT control, an attempt to include the name
+  (or OID) of an auxiliary class to an object's 'objectClass' which is
+  not allowed by the controlling DIT Content Rule would be disallowed
+  [Models].   Additionally, an attempt to add values of an attribute not
+  allowed (or explicitly precluded) by the DIT Content Rule would fail.
+
+  In presence of the Manage DIT control, the server performs the update
+  operation as if the controlling DIT Content Rule allowed any and all
+  known auxiliary classses to be present and allowed any and all known
+  attributes to be present (and precluded no attributes).
+
+
+3.4. DIT Structure Rules and Name Forms
+
+  In absence of the Manage DIT control, the service enforces DIT
+  structure rules and name form requirements of the controlling
+  subschema [Models].
+
+  In the presence of the Manage DIT control, the server performs the
+  update operation ignoring all DIT structure rules and name forms in
+  the controlling subschema.
+
+
+3.5. Modification of Nonconformant Objects
+
+  It is also noted that in absense of this control, modification of an
+  object which presently violates the controlling subschema will fail
+  unless the modification would result in the object conforming to the
+  controlling subschema.  That is, modifications of an non-conformant
+  object should result in a conformant object.
+
+  In the presence of this control, modifications of a non-conformant
+  object need not result in a conformant object.
+
+
+3.6. NO-USER-MODIFICATION attribute modification
+
+  In absence of this control, an attempt to modify values of a
+  NO-USER-MODIFICATION attribute would normally lead to a
+  constraintViolation or other appropriate error [Protocol].  In the
+
+
+
+Zeilenga                 LDAP Manage DIT Control                [Page 5]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+  presence of the Manage DIT control in the update request requests the
+  modification be allowed.
+
+  Relaxation of the NO-USER-MODIFICATION constraint is not appropriate
+  for some operational attribute types. For instance, as the value of
+  the 'structuralObjectClass' is derived by the values of the
+  'objectClass' attribute, the 'structuralObjectClass' attribute type's
+  NO-USER-MODIFICATION contraint MUST NOT be relaxed.  To effect a
+  change in the structuralObjectClass class, values of objectClass
+  should be changed as discussed in Section 3.1.  Other attributes for
+  which the NO-USER-MODIFICATION constraint should not be relaxed
+  include 'entryDN' [EntryDN], 'subschemaSubentry' [Models], and
+  'collectiveAttributeSubentries' [RFC3671].
+
+  The subsections of this section discuss modification of various
+  operational attributes where their NO-USER-MODIFICATION constraint may
+  be relaxed.  Future documents may specify where NO-USER-MODIFICATION
+  constraints on other operational attribute may be relaxed.  In absence
+  of a document detailing that the NO-USER-MODIFICATION constraint on a
+  particular operational attribute may be relaxed, implementors SHOULD
+  assume relaxation of the constraint is not appropriate for that
+  attribute.
+
+
+3.1.1. entryUUID
+
+  To provide a value for the 'entryUUID' attribute on entry creation,
+  the client should issue an LDAP Add request with a Manage DIT control
+  providing the desired value.  For instance:
+
+      dn: ou=Unit,dc=example,dc=net
+      control: IANA-ASSIGNED-OID
+      changetype: add
+      objectClass: organizationalUnit
+      ou: Unit
+      entryUUID: 597ae2f6-16a6-1027-98f4-d28b5365dc14
+
+  In this case, the server is either to add the entry using the
+  provided 'entryUUID' value or fail the request.
+
+  To provide a replacement value for the 'entryUUID' after entry
+  creation, the client should issue an LDAP Modify request with a
+  Manage DIT control including an approrpiate change.  For instance:
+
+      dn: ou=Unit,dc=example,dc=net
+      control: IANA-ASSIGNED-OID
+      changetype: modify
+      replace: entryUUID
+
+
+
+Zeilenga                 LDAP Manage DIT Control                [Page 6]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+      entryUUID: 597ae2f6-16a6-1027-98f4-d28b5365dc14
+      -
+
+  In this case, the server is either to replace the 'entryUUID' value
+  as requested or fail the request.
+
+
+3.2.2. createTimestamp
+
+  To provide a value for the 'createTimestamp' attribute on entry
+  creation, the client should issue an LDAP Add request with a Manage
+  DIT control providing the desired 'createTimestamp' value.  For
+  instance:
+
+      dn: ou=Unit,dc=example,dc=net
+      control: IANA-ASSIGNED-OID
+      changetype: add
+      objectClass: organizationalUnit
+      ou: Unit
+      createTimestamp: 20060101000000Z
+
+  In this case, the server is either to add the entry using the
+  provided 'createTimestamp' value or fail the request.
+
+  To provide a replacement value for the 'createTimestamp' after
+  entry creation, the client should issue an LDAP Modify request with
+  a Manage DIT control including an approrpiate change.  For instance:
+
+      dn: ou=Unit,dc=example,dc=net
+      control: IANA-ASSIGNED-OID
+      changetype: modify
+      replace: createTimestamp
+      createTimestamp: 20060101000000Z
+      -
+
+  In this case, the server is either to replace the 'createTimestamp'
+  value as requested or fail the request.
+
+  The server should ensure the requested 'createTimestamp' value is
+  appropriate.  In particular, it should fail the request if the
+  requested 'createTimestamp' value is in the future or is greater
+  than the value of the 'modifyTimestamp' attribute.
+
+
+3.2.3. modifyTimestamp
+
+  To provide a value for the 'modifyTimestamp' attribute on entry
+  creation, the client should issue an LDAP Add request with a Manage
+
+
+
+Zeilenga                 LDAP Manage DIT Control                [Page 7]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+  DIT control providing the desired 'modifyTimestamp' value.  For
+  instance:
+
+      dn: ou=Unit,dc=example,dc=net
+      control: IANA-ASSIGNED-OID
+      changetype: add
+      objectClass: organizationalUnit
+      ou: Unit
+      modifyTimestamp: 20060101000000Z
+
+  In this case, the server is either to add the entry using
+  the provided 'modifyTimestamp' value or fail the request.
+
+  To provide a replacement value for the 'modifyTimestamp' after
+  entry creation, the client should issue an LDAP Modify
+  request with a Manage DIT control including an approrpiate
+  change.  For instance:
+
+      dn: ou=Unit,dc=example,dc=net
+      control: IANA-ASSIGNED-OID
+      changetype: modify
+      replace: modifyTimestamp
+      modifyTimestamp: 20060101000000Z
+      -
+
+  In this case, the server is either to replace the 'modifyTimestamp'
+  value as requested or fail the request.
+
+  The server should ensure the requested 'modifyTimestamp' value is
+  appropriate.  In particular, it should fail the request if the
+  requested 'modifyTimestamp' value is in the future or is less than
+  the value of the 'createTimestamp' attribute.
+
+
+  3.2.3. creatorsName and modifiersName
+
+  To provide a value for the 'creatorsName' and/or 'modifiersName'
+  attribute on entry creation, the client should issue an LDAP Add
+  request with a Manage DIT control providing the desired values.
+  For instance:
+
+      dn: ou=Unit,dc=example,dc=net
+      control: IANA-ASSIGNED-OID
+      changetype: add
+      objectClass: organizationalUnit
+      ou: Unit
+      creatorsName: cn=Jane Doe,dc=example,net
+      modifiersName: cn=Jane Doe,dc=example,net
+
+
+
+Zeilenga                 LDAP Manage DIT Control                [Page 8]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+  In this case, the server is either to add the entry using
+  the provided values or fail the request.
+
+  To provide a replacement values after entry creation for either of
+  the 'creatorsName' or 'modifiersName' attributes or both, the
+  client should issue an LDAP Modify request with a Manage DIT control
+  including the approrpiate changes.  For instance:
+
+      dn: ou=Unit,dc=example,dc=net
+      control: IANA-ASSIGNED-OID
+      changetype: modify
+      replace: creatorsName
+      creatorsName: cn=Jane Doe,dc=example,net
+      -
+      replace: modifiersName
+      modifiersName: cn=Jane Doe,dc=example,net
+      -
+
+  In this case, the server is either to replace the provided
+  values as requested or fail the request.
+
+
+4.  Security Considerations
+
+  Use of this extension should be subject to appropriate administrative
+  and access controls.  Use of this mechanism is intended to be
+  restricted to directory administrators.
+
+  Security considerations for the base operations [Protocol] extended
+  by this control, as well as general LDAP security considerations
+  [Roadmap], generally apply to implementation and use of this
+  extension.
+
+
+5.  IANA Considerations
+
+5.1.  Object Identifier
+
+  It is requested that IANA assign a LDAP Object Identifier [BCP64bis]
+  to identify the LDAP Assertion Control defined in this document.
+
+      Subject: Request for LDAP Object Identifier Registration
+      Person & email address to contact for further information:
+          Kurt Zeilenga <kurt@OpenLDAP.org>
+      Specification: RFC XXXX
+      Author/Change Controller: Kurt Zeilenga <kurt@openldap.org>
+      Comments: Identifies the LDAP Manage DIT Control
+
+
+
+
+Zeilenga                 LDAP Manage DIT Control                [Page 9]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+5.2  LDAP Protocol Mechanism
+
+  Registration of this protocol mechanism [BCP64bis] is requested.
+
+      Subject: Request for LDAP Protocol Mechanism Registration
+      Object Identifier: IANA-ASSIGNED-OID
+      Description: Manage DIT Control
+      Person & email address to contact for further information:
+          Kurt Zeilenga <kurt@openldap.org>
+      Usage: Control
+      Specification: RFC XXXX
+      Author/Change Controller: Kurt Zeilenga <kurt@openldap.org>
+      Comments: none
+
+
+6.  Author's Address
+
+  Kurt D. Zeilenga
+  OpenLDAP Foundation
+
+  Email: Kurt@OpenLDAP.org
+
+
+7. References
+
+  [[Note to the RFC Editor: please replace the citation tags used in
+  referencing Internet-Drafts with tags of the form RFCnnnn where
+  possible.]]
+
+
+7.1. Normative References
+
+  [RFC2119]     Bradner, S., "Key words for use in RFCs to Indicate
+                Requirement Levels", BCP 14 (also RFC 2119), March 1997.
+
+  [Roadmap]     Zeilenga, K. (editor), "LDAP: Technical Specification
+                Road Map", draft-ietf-ldapbis-roadmap-xx.txt, a work in
+                progress.
+
+  [Models]      Zeilenga, K. (editor), "LDAP: Directory Information
+                Models", draft-ietf-ldapbis-models-xx.txt, a work in
+                progress.
+
+
+
+7.2. Informative References
+
+  [BCP64bis]    Zeilenga, K., "IANA Considerations for LDAP",
+
+
+
+Zeilenga                 LDAP Manage DIT Control               [Page 10]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+                draft-ietf-ldapbis-bcp64-xx.txt, a work in progress.
+
+  [EntryUUID]   Zeilenga, K., "The LDAP EntryUUID Operational
+                Attribute", draft-zeilenga-ldap-uuid-xx.txt, a work in
+                progress.
+
+  [RFC2849]     Good, G., "The LDAP Data Interchange Format (LDIF) -
+                Technical Specification", RFC 2849, June 2000.
+
+
+
+Intellectual Property Rights
+
+  The IETF takes no position regarding the validity or scope of any
+  Intellectual Property Rights or other rights that might be claimed to
+  pertain to the implementation or use of the technology described in
+  this document or the extent to which any license under such rights
+  might or might not be available; nor does it represent that it has
+  made any independent effort to identify any such rights.  Information
+  on the procedures with respect to rights in RFC documents can be found
+  in BCP 78 and BCP 79.
+
+  Copies of IPR disclosures made to the IETF Secretariat and any
+  assurances of licenses to be made available, or the result of an
+  attempt made to obtain a general license or permission for the use of
+  such proprietary rights by implementers or users of this specification
+  can be obtained from the IETF on-line IPR repository at
+  http://www.ietf.org/ipr.
+
+  The IETF invites any interested party to bring to its attention any
+  copyrights, patents or patent applications, or other proprietary
+  rights that may cover technology that may be required to implement
+  this standard.  Please address the information to the IETF at
+  ietf-ipr@ietf.org.
+
+
+
+Full Copyright
+
+  Copyright (C) The Internet Society (2006).
+
+  This document is subject to the rights, licenses and restrictions
+  contained in BCP 78, and except as set forth therein, the authors
+  retain all their rights.
+
+  This document and the information contained herein are provided on an
+  "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
+  OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
+
+
+
+Zeilenga                 LDAP Manage DIT Control               [Page 11]
+\f
+INTERNET-DRAFT      draft-zeilenga-ldap-managedit-00    27 February 2006
+
+
+  ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
+  INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+  INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+  WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Zeilenga                 LDAP Manage DIT Control               [Page 12]
+\f