From 6bd5c856529984b35c7a8afdb4254acdf018d44f Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga <kurt@openldap.org> Date: Tue, 4 Apr 2006 03:12:37 +0000 Subject: [PATCH] Sync with HEAD --- doc/drafts/draft-ietf-ldapbis-protocol-xx.txt | 7418 ++++++++--------- .../draft-zeilenga-ldap-dontusecopy-xx.txt | 24 +- .../draft-zeilenga-ldap-grouping-xx.txt | 843 -- .../draft-zeilenga-ldap-managedit-xx.txt | 675 ++ doc/drafts/draft-zeilenga-ldap-noop-xx.txt | 18 +- doc/drafts/draft-zeilenga-ldap-txn-xx.txt | 512 +- doc/rfc/INDEX | 1 + doc/rfc/rfc4403.txt | 2355 ++++++ 8 files changed, 7073 insertions(+), 4773 deletions(-) delete mode 100644 doc/drafts/draft-zeilenga-ldap-grouping-xx.txt create mode 100644 doc/drafts/draft-zeilenga-ldap-managedit-xx.txt create mode 100644 doc/rfc/rfc4403.txt diff --git a/doc/drafts/draft-ietf-ldapbis-protocol-xx.txt b/doc/drafts/draft-ietf-ldapbis-protocol-xx.txt index a04954d258..575f1dc529 100644 --- a/doc/drafts/draft-ietf-ldapbis-protocol-xx.txt +++ b/doc/drafts/draft-ietf-ldapbis-protocol-xx.txt @@ -1,3709 +1,3709 @@ - - -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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 \ 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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-dontusecopy-xx.txt b/doc/drafts/draft-zeilenga-ldap-dontusecopy-xx.txt index 495ea5cc93..84065c8dfc 100644 --- a/doc/drafts/draft-zeilenga-ldap-dontusecopy-xx.txt +++ b/doc/drafts/draft-zeilenga-ldap-dontusecopy-xx.txt @@ -6,12 +6,12 @@ INTERNET-DRAFT Kurt D. Zeilenga Intended Category: Standard Track OpenLDAP Foundation -Expires in six months 17 July 2005 +Expires in six months 5 March 2006 The LDAP Don't Use Copy Control - <draft-zeilenga-ldap-dontusecopy-01.txt> + <draft-zeilenga-ldap-dontusecopy-02.txt> Status of this Memo @@ -44,7 +44,7 @@ Status of this Memo http://www.ietf.org/shadow.html - Copyright (C) The Internet Society (2005). All Rights Reserved. + Copyright (C) The Internet Society (2006). All Rights Reserved. Please see the Full Copyright section near the end of this document for more information. @@ -57,7 +57,7 @@ Status of this Memo Zeilenga LDAP Don't Use Copy Control [Page 1] -INTERNET-DRAFT draft-zeilenga-ldap-dontusecopy-01 17 July 2005 +INTERNET-DRAFT draft-zeilenga-ldap-dontusecopy-02 5 March 2006 Abstract @@ -96,8 +96,7 @@ Abstract The Don't Use Copy control is an LDAP Control [Protocol] whose controlType is IANA-ASSIGNED-OID and controlValue is absent. The - criticality may be TRUE or FALSE. There is no corresponding response - control. + criticality MUST be TRUE. There is no corresponding response control. The control is appropriate for both LDAP interrogation operations, including Compare and Search operations [Protocol]. It is @@ -108,15 +107,15 @@ Abstract operation MUST NOT be performed on copied information. That is, the requested operation MUST be performed on original information. + If original information for the target or base object of the operation Zeilenga LDAP Don't Use Copy Control [Page 2] -INTERNET-DRAFT draft-zeilenga-ldap-dontusecopy-01 17 July 2005 +INTERNET-DRAFT draft-zeilenga-ldap-dontusecopy-02 5 March 2006 - If original information for the target or base object of the operation is not available (either locally or through chaining), the server MUST either return a referral directing the client to a server believed to be better able to service the request or return an appropriate result @@ -164,15 +163,15 @@ INTERNET-DRAFT draft-zeilenga-ldap-dontusecopy-01 17 July 2005 Person & email address to contact for further information: Kurt Zeilenga <kurt@openldap.org> Usage: Control + Specification: RFC XXXX Zeilenga LDAP Don't Use Copy Control [Page 3] -INTERNET-DRAFT draft-zeilenga-ldap-dontusecopy-01 17 July 2005 +INTERNET-DRAFT draft-zeilenga-ldap-dontusecopy-02 5 March 2006 - Specification: RFC XXXX Author/Change Controller: IESG Comments: none @@ -223,9 +222,10 @@ INTERNET-DRAFT draft-zeilenga-ldap-dontusecopy-01 17 July 2005 + Zeilenga LDAP Don't Use Copy Control [Page 4] -INTERNET-DRAFT draft-zeilenga-ldap-dontusecopy-01 17 July 2005 +INTERNET-DRAFT draft-zeilenga-ldap-dontusecopy-02 5 March 2006 Intellectual Property Rights @@ -256,7 +256,7 @@ Intellectual Property Rights Full Copyright - Copyright (C) The Internet Society (2005). + 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 diff --git a/doc/drafts/draft-zeilenga-ldap-grouping-xx.txt b/doc/drafts/draft-zeilenga-ldap-grouping-xx.txt deleted file mode 100644 index 76717f42c6..0000000000 --- a/doc/drafts/draft-zeilenga-ldap-grouping-xx.txt +++ /dev/null @@ -1,843 +0,0 @@ - - - - - - -INTERNET-DRAFT Kurt D. Zeilenga -Intended Category: Standard Track OpenLDAP Foundation -Expires in six months 3 May 2003 - - - - LDAP: Grouping of Related Operations - <draft-zeilenga-ldap-grouping-06.txt> - - -Status of Memo - - This document is an Internet-Draft and is in full conformance with all - provisions of Section 10 of RFC2026. - - This document is intended to be, after appropriate review and - revision, submitted to the RFC Editor as a Standard Track document. - Distribution of this memo is unlimited. Technical discussion of this - document will take place on the IETF LDAP Extension Working Group - mailing list <ldapext@ietf.org>. Please send editorial comments - directly to the author <Kurt@OpenLDAP.org>. - - 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>. - - Copyright 2003, The Internet Society. All Rights Reserved. - - Please see the Copyright section near the end of this document for - more information. - - -Abstract - - This document provides a general mechanism for grouping related - Lightweight Directory Access Protocol (LDAP) operations. Grouping of - operations can be used to support replication, proxies, and - transactions. - - - - -Zeilenga LDAP Grouping [Page 1] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - -Conventions - - Schema definitions are provided using LDAP description formats - [RFC2252]. Definitions provided here are formatted (line wrapped) for - readability. - - Protocol elements are described using ASN.1 [X.680]. 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.1 - of [RFC2251]. - - 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]. - - -1. Introduction - - This document provides a general mechanism for grouping related - Lightweight Directory Access Protocol (LDAP) [RFC3377] operations. - Grouping of operations can be used to support replication, proxies, - and high level operations such as transactions [TXNGRP]. - - This document describes a set of LDAP extended operations [RFC2251] - and other protocol and schema elements to support grouping of related - operations. Uses of this grouping mechanism will be detailed in - separate documents. - - A group of operations is defined as a set of operations within a - common session identified by a unique cookie. All requests which are - initiated with the same cookie belong to the same grouping. The - cookie is obtained using the create group operation and is normally - valid until the end group operation is completed. A group can end - prematurely as described below. - - Operations can be intermixed regardless of their grouping (or lack of - grouping). Groups can be nested. - - Each group is of a particular type specified when the group is - created. This type defines the semantics of the group. - - -2. Protocol Elements - - This document describes three extended operations, two unsolicited - notification, and one control. Extended operations and controls are - described by LDAP [RFC2251] and provide here for convenience: - - - - -Zeilenga LDAP Grouping [Page 2] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - ExtendedRequest ::= [APPLICATION 23] SEQUENCE { - requestName [0] LDAPOID, - requestValue [1] OCTET STRING OPTIONAL - } - - ExtendedResponse ::= [APPLICATION 24] SEQUENCE { - COMPONENTS of LDAPResult, - responseName [10] LDAPOID OPTIONAL, - response [11] OCTET STRING OPTIONAL - } - - Control ::= SEQUENCE { - controlType LDAPOID, - criticality BOOLEAN DEFAULT FALSE, - controlValue OCTET STRING OPTIONAL - } - - -2.1 Common Protocol Elements - - groupCookie ::= OCTET STRING - - A groupCookie is an octet string used to uniquely identify a grouping - of related operations within the session. A groupCookie is a - notational convenience. - - -2.2 Create Grouping Operation - - The Create Grouping extended operation is used to create or start a - grouping of related operations. The operation consists of the - createGroupingRequest and the createGroupingResponse. The object - identifier createGroupingOID identifies this operation and SHOULD be - listed as a value of supportedExtension in the root DSE of servers - which support this operation. - - createGroupingOID ::= "IANA-ASSIGNED-OID.1" - - -2.2.1 createGroupingRequest - - The client initiates this operation by sending a - createGroupingRequest. This request is an ExtendedRequest where the - requestName is the object identifier createGroupOID and requestValue - is BER-encoded createGroupingRequestValue: - - createGroupingRequestValue ::= SEQUENCE { - createGroupType [0] LDAPOID, - - - -Zeilenga LDAP Grouping [Page 3] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - createGroupValue [1] OCTET STRING OPTIONAL - } - - where createGroupType is an object identifier that describes the - specific type of grouping and createGroupValue contains a type - specific payload. - - -2.2.2 createGroupingResponse - - The createGroupingResponse is sent in response to a - createGroupingRequest. This response is an ExtendedResponse where the - responseName MUST be the value of the requestName provided in the - request and the response is a BER-encoded createGroupingResponseValue: - - createGroupingResponseValue ::= SEQUENCE { - createGroupCookie [0] groupCookie OPTIONAL, - createGroupValue [1] OCTET STRING OPTIONAL - } - - where createGroupCookie, if present, is a cookie uniquely identifying - the new grouping and createGroupValue is a type specific payload. The - createGroupCookie only when the operation results in the creation of a - group. Otherwise, it is absent. - - -2.3 End Grouping Operation - - The End Grouping extended operation is used to end or stop a grouping - of related operations. The operation consists of the - endGroupingRequest and the endGroupingResponse. The object identifier - endGroupingOID identifies this operation and SHOULD be listed as a - value of supportedExtension in the root DSE of servers which support - this operation. - - endGroupingOID ::= "IANA-ASSIGNED-OID.2" - - -2.3.1 endGroupingRequest - - The client initiates this operation by sending an endGroupingRequest. - This request is an ExtendedRequest where the requestName is the object - identifier endGroupOID and requestValue is BER-encoded - endGroupingRequestValue: - - endGroupingRequestValue ::= SEQUENCE { - endGroupCookie [0] groupCookie, - endGroupValue [1] OCTET STRING OPTIONAL - - - -Zeilenga LDAP Grouping [Page 4] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - } - - where endGroupCookie is a cookie identifying the grouping and - endGroupValue contains a type specific payload. - - -2.3.2 endGroupingResponse - - The endGroupingResponse is sent in response to a endGroupingRequest. - This response is an ExtendedResponse where the responseName MUST be - the value of the requestName provided in request and the response is a - BER-encoded endGroupingResponseValue: - - endGroupingResponseValue ::= SEQUENCE { - endGroupValue [1] OCTET STRING OPTIONAL - } - - where endGroupValue is a type specific payload. - - -2.4 endGroupingNotice - - The endGroupingNotice is an LDAP unsolicited notification. The - notification may be sent to the client to end a grouping which the - server is unable or unwilling to continue to process. The notice is - an extendedResponse where the responseName is the object identifier - endGroupingNoticeOID and the response is a BER-encoded - endGroupingNoticeValue: - - endGroupingNoticeOID ::= "IANA-ASSIGNED-OID.3" - - endGroupingNoticeValue ::= SEQUENCE { - endGroupingCookie [0] groupCookie, - endGroupValue [1] OCTET STRING OPTIONAL - } - - where endGroupingCookie is a cookie uniquely identifying the grouping - and endGroupValue contains a type specific payload. - - -2.5 Action Grouping Operation - - The Action Grouping extended operation is used to take an action - affecting a grouping of related operations. The operation consists of - the actionGroupingRequest and the actionGroupingResponse. The object - identifier actionGroupingOID identifies this operation and SHOULD be - listed as a value of supportedExtension in the root DSE of servers - which support this operation. - - - -Zeilenga LDAP Grouping [Page 5] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - actionGroupingOID ::= "IANA-ASSIGNED-OID.4" - - -2.5.1 actionGroupingRequest - - The client initiates this operation by sending an - actionGroupingRequest. This request is an ExtendedRequest where the - requestName is the object identifier actionGroupOID and requestValue - is BER-encoded actionGroupingRequestValue: - - actionGroupingRequestValue ::= SEQUENCE { - actionGroupCookie [0] groupCookie, - actionGroupValue [1] OCTET STRING OPTIONAL - } - - where actionGroupCookie is a cookie identifying the grouping and - actionGroupValue contains a type specific payload. - - -2.5.2 actionGroupingResponse - - The actionGroupingResponse is sent in response to a - actionGroupingRequest. This response is an ExtendedResponse where the - responseName MUST be the value of the requestName provided in request - and the response is a BER-encoded actionGroupingResponseValue: - - actionGroupingResponseValue ::= SEQUENCE { - actionGroupValue [1] OCTET STRING OPTIONAL - } - - where actionGroupValue is a type specific payload. - - -2.6 infoGroupingNotice - - The infoGroupingNotice is an LDAP unsolicited notification. The - notice may be sent to the client to provide additional grouping type - specific information. The notice is an extendedResponse where the - responseName is the object identifier infoGroupingNoticeOID and the - response is a BER-encoded infoGroupingNoticeValue: - - infoGroupingNoticeOID ::= "IANA-ASSIGNED-OID.5" - - infoGroupingNoticeValue ::= SEQUENCE { - infoGroupingCookie [0] groupCookie, - infoGroupValue [1] OCTET STRING OPTIONAL - } - - - - -Zeilenga LDAP Grouping [Page 6] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - where infoGroupingCookie is a cookie uniquely identifying the grouping - and infoGroupValue contains a type specific payload. - - -2.7 groupingControl - - The groupingControl is used to identify requests and responses as - belonging to a grouping of operations. The groupingControl is a - Control where the controlType is the object identifier - groupingControlOID, the criticality is TRUE, and the controlValue is a - BER-encoded groupingControlValue: - - groupingControlOID ::= "IANA-ASSIGNED-OID.6" - - groupingControlValue ::= SEQUENCE { - groupingCookie [0] groupCookie, - groupValue [1] OCTET STRING OPTIONAL - } - - where groupingCookie is a cookie uniquely identifying the grouping and - groupingValue contains a type specific payload. - - The value groupingControlOID SHOULD be listed as a value of - supportedControl in the root DSE by servers which support this - control. - - The control SHALL NOT appear multiple times in the same LDAP PDU. If - multiple occurrences of the control are detected, the PDU SHALL be - treated as a protocol error. - - -3. Schema Elements - - The document describes one attribute type. - - -3.1. supportedGroupingTypes - - Servers SHOULD publish grouping types they support listing group type - object identifiers as values of the supportedGroupingTypes attribute - type in the root DSE. The supportedGroupingTypes attribute type is - defined as: - - ( IANA-ASSIGNED-OID.7 NAME 'supportedGroupingTypes' - DESC 'supported types of groupings of operations' - EQUALITY objectIdentifierMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 USAGE dSAOperation ) - - - - -Zeilenga LDAP Grouping [Page 7] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - The objectIdentifierMatch and OBJECT IDENTIFIER - (1.3.6.1.4.1.1466.115.121.1.38) are defined in [RFC2252]. - - Servers MUST be capable of recognizing this attribute type by the name - 'supportedGroupingTypes'. Servers MAY recognize the attribute type by - other names. - - -4. Operational Semantics - - This section details the common semantics of groups of related - operations. Additional semantics may be associated with each - grouping type as described by other documents. - - -4.1 Grouping Semantics - - This subsection details semantics of the protocol elements introduced - in Section 2. - - -4.1.1 Create Grouping - - To group related operations, the client MUST request a groupCookie - from the server by sending a createGroupingRequest as described in - Section 2.2.1. The client SHALL provide type specific payload in - createGroupValue if so required by the grouping type. - - The server SHALL respond with a createGroupingResponse as described in - Section 2.2.2. If the server is willing and able to create the - grouping as requested (and per type requirements), it SHALL respond - with success, provide a session-unique groupCookie and, if - appropriate, a type specific payload. Otherwise the server SHALL - respond with a non-successful response containing no groupCookie, but - MAY, if appropriate, provide a type specific payload. - - -4.1.2 End Grouping - - When the client wishes to end the grouping, the client SHALL send a - endGroupingRequest as described in Section 2.3.1. The client SHALL - provide the groupCookie of the grouping to end and MAY provided a type - specific payload. If the grouping to end contains active nested - groupings, these are implicitly ended as well without notice. The - server SHALL respond with an endGroupingResponse as described in - Section 2.3.2. - - - - - -Zeilenga LDAP Grouping [Page 8] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - -4.1.3 End Group Notice - - The server MAY end a group without solicitation for any reason. The - server SHALL notify the client of this action by sending a endGrouping - Notice, as described in Section 2.4. The server SHALL provide the - groupCookie of the group it terminated and MAY provide a type specific - payload. The notice SHALL have a non-success resultCode. - - If the group contains nested groups, the nested groups are implicitly - ended as well without additional notice. - - -4.1.4 Action Grouping - - To perform an action within a group of related operations, the client - sends to the server actionGroupingRequest as described in Section - 2.5.1. The client SHALL provide the groupCookie of the group the - operation is requested upon and, if required by the grouping type, a - type specific payload. - - The server SHALL respond with a actionGroupingResponse as described in - Section 2.5.2. The server SHALL, if required by the grouping type, - provide type specific payload. - - -4.1.5 Info Grouping Notice - - As allowed by the grouping type, the server MAY provide to the client - a notice regarding the grouping of related operations in an - infoGroupingNotice as described in Section 2.6. The server SHALL, if - required by the grouping type, provide type specific payload. - - -4.2 Nested groupings - - Groups of the same or different types MAY be nested. A nested group - is instantiated by providing a groupingControl containing the parent - group's cookie with the createGroupingRequest. - - Group type specifications MAY restrict the types of groupings which - may be nested. Servers MAY also place additional restrictions upon - nesting. Clients SHOULD NOT assume support for arbitrary nesting. - - -4.3 Intermixing of unrelated operations - - LDAP is designed to allow clients to perform unrelated tasks - concurrently. In keeping with this design, operations which unrelated - - - -Zeilenga LDAP Grouping [Page 9] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - to the grouping are generally allowed be intermixed with grouped - operations. (See Section 4.5 for specific exceptions to this general - rule.) It is noted that undue restrictions often unrelated operation - cause unnecessary serialization of independent tasks, place - unnecessary burden upon implementors, and can limit extensibility. - - Group type specifications SHOULD NOT disallow unrelated operations - from being intermixed with grouped operations. - - Note: a grouping which disallows unrelated operatoins from being - intermixed with grouped operations can be viewed as providing - "framing" semantics. - - -4.4 Grouped operations - - Interrogation (compare, search) and update (add, delete, modify, - rename) MAY be grouped. Certain extended operations MAY also be - grouped, but those which affect the session as a whole, such as Start - TLS, MUST NOT be grouped. - - Requests and Responses associated with grouped operations contain a - groupingControl control as described in Section 2.7. - - Group type specifications MAY restrict the kind and/or number of - operations which may be related. Servers MAY place additional - restrictions upon groupings. Clients SHOULD NOT assume support for - arbitrary grouping. - - -4.5 Other Operations - - Upon issuing any grouping operation, the semantics of following - operations listed is modified as described below. - - -4.5.1 abandon - - The abandon operation SHOULD NOT be used to cancel grouped operations. - The Cancel operation is to be used instead (as discussed in 4.5.3). - - -4.5.2 bind - - The client SHOULD end all outstanding groupings before issuing a bind - request. The server SHALL, in addition to the behavior described in - [RFC2251] and [RFC2829], abandon all outstanding groups. No - endGroupingNotice notification is sent upon such abandonment. - - - -Zeilenga LDAP Grouping [Page 10] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - A Bind operation cannot be related to other operations using this - grouping mechanism. The bind messages SHOULD NOT contain - groupingControl controls and, if present, SHALL be treated as a a - protocol error. - - -4.5.3 cancel - - The cancel operation [CANCEL] MAY be used to cancel grouped operations - but SHOULD NOT contain a groupingControl control unless the group type - calls for a type specific payload to be provided. The groupingCookie - in the provided groupingControl control MUST be the same associated - with the operation to be canceled, otherwise the cancel request SHALL - be treated as an error. - - -4.5.4 Start TLS - - The client SHOULD end all outstanding groupings before issuing a Start - TLS [RFC2930] request. If there are any outstanding groupings, the - server MUST return operationsError in response to a StartTLS request. - Start TLS operation cannot be related to other operations using this - grouping mechanism and the Start TLS request and response PDUs SHALL - NOT contain a groupingControl control. - - -4.5.5 unbind - - The server SHALL, in addition to the behavior described in [RFC2251], - abandon all outstanding groups. No endGroupingNotice is sent upon - such abandonment. An unbind operation cannot be related to other - operations using this grouping mechanism. The unbind request SHOULD - NOT contain a groupingControl control and, if present, SHALL be - ignored. - - -5. Profiling Requirements - - Documents detailing extensions using the grouping mechanism MUST - provide a profile of its use of the mechanism. - - The profile SHALL specify the object identifier to be used to uniquely - identify each grouping type it defines. Object identifiers used to - identity group types, like other protocol elements, SHALL be delegated - in accordance with BCP 64 [RFC3383] and registered as LDAP Protocol - Mechanisms [RFC3383] as detailed in Section 7.1 of this document. - - The profile SHALL state which protocol elements of the mechanism it - - - -Zeilenga LDAP Grouping [Page 11] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - uses. - - Each of the grouping protocol elements defined in this document allow - transfer of type specific payloads. For each protocol element used, - the profile SHALL state whether the element is to carry a type - specific payload or not and SHALL fully describe the syntax and - semantics associated with each type specific payload. - - The profile MAY define grouping type specific semantics which place - further restrictions upon the grouping related operations. - - -6. Security Considerations - - This mechanism can be used to support complex groupings of related - operations. With such complexity comes inherit risk. Specifications - of uses of this mechanism should take special care to address security - issues. In particular, denial of service and authentication, - authorization, and access-control issues should be addressed in - documents detailing uses of this grouping mechanism. - - -7. IANA Considerations - -7.1. Future Registration of Grouping Types - - Future specifications which detail LDAP grouping types are to register - each grouping type as a LDAP Protocol Mechanism per guidance given in - BCP 64 [RFC3383]. A usage of "Grouping Type" in a Protocol Mechanism - registration template indicates that the value to be registered is - associated with an LDAP Grouping Type. - - -7.2. Object Identifier Registration - - It is requested that IANA register upon Standards Action an LDAP - Object Identifier to identify protocol elements defined in this - technical specification. The following registration template is - suggested: - - Subject: Request for LDAP OID Registration - Person & email address to contact for further information: - Kurt Zeilenga <kurt@OpenLDAP.org> - Specification: RFCXXXX - Author/Change Controller: IESG - Comments: - Identifies elements of the LDAP Grouping Operation - - - - -Zeilenga LDAP Grouping [Page 12] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - -7.3. LDAP Protocol Mechanism - - It is requested that IANA register upon Standards Action the LDAP - protocol mechanism described in this document. The following - registration template is suggested: - - Subject: Request for LDAP Protocol Mechansism Registration - Object Identifier: IANA-ASSIGNED-OID - Description: See comments - Person & email address to contact for further information: - Kurt Zeilenga <kurt@openldap.org> - Usage: Extended Operation - Specification: RFCXXXX - Author/Change Controller: IESG - Comments: none - - Object Identifier Type Description - ------------------- ---- ------------------------- - IANA-ASSIGNED-OID.1 E Create Grouping Operation - IANA-ASSIGNED-OID.2 E End Grouping Operation - IANA-ASSIGNED-OID.4 E Action Grouping Operation - - in 2 - - -7.4. supportedGroupingTypes Registration - - It is requested that IANA register upon Standards Action the LDAP - 'supportedGroupingTypes' descriptor. The following registration - template is suggested: - - Subject: Request for LDAP Descriptor Registration - Descriptor (short name): supportedGroupingTypes - Object Identifier: IANA-ASSIGNED-OID.7 - Person & email address to contact for further information: - Kurt Zeilenga <kurt@OpenLDAP.org> - Usage: Attribute Type - Specification: RFCXXXX - Author/Change Controller: IESG - - -8. Acknowledgments - - The author gratefully acknowledges the contributions of the IETF - LDAPext and LDUP working groups. In particular, Roger Harrison - provided many useful suggestions. Also, the author notes that this - document builds upon the early works "Extended Operations for Framing - LDAP Operations" by Ellen Stokes, Roger Harrison, and Gordon Good and - - - -Zeilenga LDAP Grouping [Page 13] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - "Profile for Framing LDAPv3 Operations" by Roger Harrison. - - -9. Author's Address - - Kurt D. Zeilenga - OpenLDAP Foundation - <Kurt@OpenLDAP.org> - - -10. References - -10.1 Normative References - - [RFC2119] S. Bradner, "Key Words for use in RFCs to Indicate - Requirement Levels", BCP 14 (also RFC 2119), March 1997. - - [RFC2251] M. Wahl, S. Kille, T. Howes, "Lightweight Directory Access - Protocol (v3)", RFC 2251, December 1997. - - [RFC2252] M. Wahl, A. Coulbeck, T. Howes, S. Kille, "Lightweight - Directory Access Protocol (v3): Attribute Syntax - Definitions", RFC 2252, December 1997. - - [RFC2829] M. Wahl, H. Alvestrand, J. Hodges, R. Morgan, - "Authentication Methods for LDAP", RFC 2829, May 2000. - - [RFC2830] J. Hodges, R. Morgan, M. Wahl, "Lightweight Directory - Access Protocol (v3): Extension for Transport Layer - Security", RFC 2830, May 2000. - - [RFC3377] J. Hodges, R. Morgan, "Lightweight Directory Access - Protocol (v3): Technical Specification", RFC 3377, - September 2002. - - [RFC3383] K. Zeilenga, "IANA Considerations for LDAP", BCP 64 (also - RFC 3383), September 2002. - - [X.680] ITU-T, "Abstract Syntax Notation One (ASN.1) - - Specification of Basic Notation", X.680, 1994. - - [X.690] ITU-T, "Specification of ASN.1 encoding rules: Basic, - Canonical, and Distinguished Encoding Rules", X.690, 1994. - - -10.2. Informative References - - [TXNGRP] K. Zeilenga, "LDAP Transactions" (a work in progress), - - - -Zeilenga LDAP Grouping [Page 14] - -INTERNET-DRAFT draft-zeilenga-ldap-grouping-06 3 May 2003 - - - draft-zeilenga-ldap-txn-xx.txt. - - -Copyright 2003, The Internet Society. All Rights Reserved. - - This document and translations of it may be copied and furnished to - others, and derivative works that comment on or otherwise explain it - or assist in its implementation may be prepared, copied, published and - distributed, in whole or in part, without restriction of any kind, - provided that the above copyright notice and this paragraph are - included on all such copies and derivative works. However, this - document itself may not be modified in any way, such as by removing - the copyright notice or references to the Internet Society or other - Internet organizations, except as needed for the purpose of - developing Internet standards in which case the procedures for - copyrights defined in the Internet Standards process must be followed, - or as required to translate it into languages other than English. - - The limited permissions granted above are perpetual and will not be - revoked by the Internet Society or its successors or assigns. - - This document and the information contained herein is provided on an - "AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET - ENGINEERING TASK FORCE DISCLAIMS 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 Grouping [Page 15] - diff --git a/doc/drafts/draft-zeilenga-ldap-managedit-xx.txt b/doc/drafts/draft-zeilenga-ldap-managedit-xx.txt new file mode 100644 index 0000000000..f73f2a3ff4 --- /dev/null +++ b/doc/drafts/draft-zeilenga-ldap-managedit-xx.txt @@ -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] + +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] + +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] + +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] + +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] + +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] + +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] + +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] + +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] + +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] + +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] + +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] + diff --git a/doc/drafts/draft-zeilenga-ldap-noop-xx.txt b/doc/drafts/draft-zeilenga-ldap-noop-xx.txt index c0a30b58be..100a845bb6 100644 --- a/doc/drafts/draft-zeilenga-ldap-noop-xx.txt +++ b/doc/drafts/draft-zeilenga-ldap-noop-xx.txt @@ -6,12 +6,12 @@ INTERNET-DRAFT Kurt D. Zeilenga Intended Category: Standard Track OpenLDAP Foundation -Expires in six months 28 October 2005 +Expires in six months 5 March 2006 The LDAP No-Op Control - <draft-zeilenga-ldap-noop-07.txt> + <draft-zeilenga-ldap-noop-08.txt> Status of this Memo @@ -44,7 +44,7 @@ Status of this Memo http://www.ietf.org/shadow.html - Copyright (C) The Internet Society (2005). All Rights Reserved. + Copyright (C) The Internet Society (2006). All Rights Reserved. Please see the Full Copyright section near the end of this document for more information. @@ -57,7 +57,7 @@ Status of this Memo Zeilenga LDAP No-Op Control [Page 1] -INTERNET-DRAFT draft-zeilenga-ldap-noop-07 28 October 2005 +INTERNET-DRAFT draft-zeilenga-ldap-noop-08 5 March 2006 Abstract @@ -113,7 +113,7 @@ Abstract Zeilenga LDAP No-Op Control [Page 2] -INTERNET-DRAFT draft-zeilenga-ldap-noop-07 28 October 2005 +INTERNET-DRAFT draft-zeilenga-ldap-noop-08 5 March 2006 2. No-Op Control @@ -169,7 +169,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-noop-07 28 October 2005 Zeilenga LDAP No-Op Control [Page 3] -INTERNET-DRAFT draft-zeilenga-ldap-noop-07 28 October 2005 +INTERNET-DRAFT draft-zeilenga-ldap-noop-08 5 March 2006 4. IANA Considerations @@ -225,7 +225,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-noop-07 28 October 2005 Zeilenga LDAP No-Op Control [Page 4] -INTERNET-DRAFT draft-zeilenga-ldap-noop-07 28 October 2005 +INTERNET-DRAFT draft-zeilenga-ldap-noop-08 5 March 2006 Email: Kurt@OpenLDAP.org @@ -281,7 +281,7 @@ Intellectual Property Rights Zeilenga LDAP No-Op Control [Page 5] -INTERNET-DRAFT draft-zeilenga-ldap-noop-07 28 October 2005 +INTERNET-DRAFT draft-zeilenga-ldap-noop-08 5 March 2006 Intellectual Property Rights or other rights that might be claimed to @@ -309,7 +309,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-noop-07 28 October 2005 Full Copyright - Copyright (C) The Internet Society (2005). + 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 diff --git a/doc/drafts/draft-zeilenga-ldap-txn-xx.txt b/doc/drafts/draft-zeilenga-ldap-txn-xx.txt index a9683c5d29..639ce0208b 100644 --- a/doc/drafts/draft-zeilenga-ldap-txn-xx.txt +++ b/doc/drafts/draft-zeilenga-ldap-txn-xx.txt @@ -5,179 +5,258 @@ INTERNET-DRAFT Kurt D. Zeilenga -Intended Category: Experimental OpenLDAP Foundation -Expires in six months 3 May 2003 +Intended Category: Standard Track OpenLDAP Foundation +Expires in six months 5 March 2006 LDAP Transactions - <draft-zeilenga-ldap-txn-06.txt> + <draft-zeilenga-ldap-txn-07.txt> Status of Memo - This document is an Internet-Draft and is in full conformance with all - provisions of Section 10 of RFC2026. - This document is intended to be, after appropriate review and - revision, submitted to the RFC Editor as an Experimental document. - Distribution of this memo is unlimited. Technical discussion of this - document will take place on the IETF LDAP Extension Working Group - mailing list <ldapext@ietf.org>. Please send editorial comments - directly to the author <Kurt@OpenLDAP.org>. + revision, submitted to the IESG for consideration as a Proposed + Standard. 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 + 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.'' + 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>. + http://www.ietf.org/1id-abstracts.html - Copyright 2003, The Internet Society. All Rights Reserved. + The list of Internet-Draft Shadow Directories can be accessed at + http://www.ietf.org/shadow.html - Please see the Copyright section near the end of this document for - more information. + + Copyright (C) The Internet Society (2006). All Rights Reserved. + + Please see the Full Copyright section near the end of this document + for more information. Abstract - Lightweight Directory Access Protocol (LDAP) update operations acting - upon entries have atomic, consistency, isolation, durability (ACID) - properties. However, it is often desirable to update two or more - entries as one unit of interaction, a transaction. Transactions are - necessary to support a number of applications including resource - provisioning and information replication. This document defines an + Lightweight Directory Access Protocol (LDAP) update operations, such Zeilenga LDAP Transactions [Page 1] -INTERNET-DRAFT draft-zeilenga-ldap-txn-06 3 May 2003 - +INTERNET-DRAFT draft-zeilenga-ldap-txn-07 5 March 2006 - LDAP extension to support transactions. - - -Conventions - - 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]. - Protocol elements are described using ASN.1 [X.680]. 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.1 - of [RFC2251]. + as Add, Delete, and Modify operations, have atomic, consistency, + isolation, durability (ACID) properties. Each of these update + operations act upon an entry. However, It is often desirable to + update two or more entries in a single unit of interaction, a + transaction. Transactions are necessary to support a number of + applications including resource provisioning and information + replication. This document defines an LDAP extension to support + transactions. 1. Overview This document extends the Lightweight Directory Access Protocol (LDAP) - [RFC3377] to allow clients to group a number of related update - operations [RFC2251] and have them preformed as one unit of + [Roadmap] to allow clients to group a number of related update + operations [Protocol] and have them preformed as one unit of interaction, a transaction. As with distinct update operations, each transaction has atomic, consistency, isolation, and durability ([ACID]) properties. - This extension uses the grouping mechanism provided by [GROUP] to - relate operations of the transaction. The createGrouping operation is - used to obtain a group cookie which is used to identify operations - which are apart of the transaction. The group cookie can be viewed as - a transaction identifier. The endGrouping operation is used to settle - (commit or abort) the transaction. + This extension consists of two extended operations, one control, and + one unsolicited notification message. The Start Transaction operation + is used to obtain a transaction identifier. This identifier is then + attached to multiple update operations to indicate that they belong to + transaction using the Transaction Specification control. The End + Transaction is used to settle (commit or abort) the transaction. The + Aborted Tranaction Notice is used notify the client the server is no + longer willing or able to process an outstanding transaction. -2. Specification of a Transaction +1.1. Conventions and Terminology + + 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]. + + 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]. + + DSA stands for "Directory System Agent" (a server). DSE stands for + "DSA-specific entry". - Servers implementing this specification SHOULD publish the - transactionGroupingType as a value of the 'supportedGroupingTypes' - attribute contained within the Root DSE. - transactionGroupingType ::= IANA-ASSIGNED-OID +2. Elements of an LDAP Transaction + +2.1. Start Transaction Request and Response - A client wishing to preform a transaction issues a - createGroupingRequest with a createGroupType of - transactionGroupingType and no createGroupValue. A server which is - willing and able to support transactions returns a - createGroupingResponse with a success result code, a - createGroupCookie, and no createGroupValue. Otherwise the server - returns a non-success result code, no createGroupCookie, and no - createGroupValue. Zeilenga LDAP Transactions [Page 2] -INTERNET-DRAFT draft-zeilenga-ldap-txn-06 3 May 2003 +INTERNET-DRAFT draft-zeilenga-ldap-txn-07 5 March 2006 - The client then issues may issue one or more update (add, delete, - modify, rename) requests, each with a GroupingControl indicating they - are to processed as part of the transaction grouping. If the server - is willing and able to attempt to process operation as part of the - transaction, the server returns success. As further processing of the - operation is be deferred until settlement, the operation is considered - still outstanding and its messageID cannot to be reused until after - settlement. If the server is unwilling or unable to attempt to - process the operation as part of the transaction, the server returns a - non-successful result code. + A Start Transaction Request is an LDAPMessage of CHOICE extendedReq + where the requestName is IANA-ASSIGNED-OID.1 and the requestValue is + absent. - If the server becomes unwilling or unable to continue the - specification of a transaction, the server return the canceled - resultCode for each deferred operation and then issue a endGroupNotice - with a non-success resultCode. Any future use of cookie by the client - will result in a response containing a non-success result code. Upon - receipt of a endGroupingNotice, the client is to discontinue all use - of the grouping cookie as the transaction is null and void. + A Start Transaction Response is an LDAPMessage of CHOICE extendedRes + sent in response to a Start Transaction Request. Its responesName is + absent. When the resultCode is success, responseValue is present and + contains a transaction identifier. Otherwise, the responseValue is + absent. - A client requests settling of transaction by issuing an - endGroupingRequest where the groupingCookie is the group cookie - identify the transaction. The absence of any endGroupingValue - indicates a commit request. The presence of an empty endGroupValue - indicates an abort request. The endGroupValue MUST be empty if - provided. - If the commit response indicates failure, the server may return an - endGroupingValue with the endGroupingResponse. If so, it contains the - BER-encoding of a MessageID [RFC2251] of the update operation - associated with the failure. +2.2. Transaction Specification Control + A Transaction Specification Control is an LDAPControl where the + controlType is IANA-ASSIGNED-OID.2, the criticality is TRUE, and the + controlValue is a transaction identifer. The control is appropriate + for update requests including Add, Delete, Modify, and ModifyDN + requests [Protocol]. -3. Settling of the Transaction +2.3. End Transactions Request and Response - Upon receipt of a request to abort the transaction, the server is to - abort the transaction and then return an endGroupingResponse - indicating success. + An End Transaction Request is an LDAPMessage of CHOICE extendedReq + where the requestName is IANA-ASSIGNED-OID.3 and the requestValue is + present and contains a BER-encoded settlementValue. - Upon receipt of a request to commit the transaction, the server - processes the group of update operations as one atomic, isolated - action with each update request being processed in turn. Either all - of the requested updates SHALL be successfully applied or none of the - requested SHALL be applied. If all are applied, the server returns an - endGroupingResponse indicating success. Otherwise, the server returns - an endGroupingResponse indicating the nature of the failure. If the - failure is associated with a particular update operation, the message - ID is returned an attached endGroupingValue. If the failure was not - associated with any particular update operation, no endGroupingValue + settlementValue ::= SEQUENCE { + commit BOOLEAN DEFAULT TRUE, + identifier OCTET STRING } + + A commit value of TRUE indicates a request to commit the transaction + identified by the identifier. A commit value of FALSE indicates a + request to abort the identified transaction. + + An End Transaction Response is an LDAPMessage sent in response to a + End Transaction Request. Its response name is absent. The + responseValue when present contains a BER-encoded MessageID. + + +2.5. Aborted Transaction Notice + + The Aborted Transaction Notice is an Unsolicited Notification message + where the responseName is IANA-ASSIGNED-OID.4 and responseValue is + present and contains a transaction identifier. + + +3. An LDAP Transaction + +3.1. Extension Discovery Zeilenga LDAP Transactions [Page 3] -INTERNET-DRAFT draft-zeilenga-ldap-txn-06 3 May 2003 +INTERNET-DRAFT draft-zeilenga-ldap-txn-07 5 March 2006 + + + To allow clients to discover support for this extension, servers + implementing this specification SHOULD publish IANA-ASSIGNED-OID.1 and + IANA-ASSIGNED-OID.3 as values of the 'supportedExtension' attribute + [Models] within the Root DSE, and publish the IANA-ASSIGNED-OID.2 as a + value of the 'supportedControl' attribute [Models] of the Root DSE. + + A server MAY choose to advertise this extension only when the client + is authorized to use it. + + +3.2. Starting an Transactions + A client wishing to preform a sequence of directory updates as an + transaction issues a Start Transaction Request. A server which is + willing and able to support transactions responds to this request with + a Start Transaction Response providing a transaction identifier and + with a resultCode of success. Otherwise, the server responds with a + Start Transaction Response wth a result code other than success + indicating the nature of the failure. + + The transaction identifier provided upon successful start of a + transaction is used in subseqent protocol messages to identify this + transaction. + + +3.3. Specification of a Transaction + + The client then may issue may issue one or more update (add, delete, + modify, modifyDN) requests, each with a Transaction Specification + control containing the transaction identifier indicating the updates + are to processed as part of the transaction. Each of these update + request MUST have a different MessageId value. If the server is + unwilling or unable to attempt to process the requested update + operation as part of the transaction, the server immediately returns + the approrpiate response to the request with a resultCode indicating + the nature of the failure. Otherwise, the server immediately returns + success and the defers further processing of the operation is then + deferred until settlement. + + If the server becomes unwilling or unable to continue the + specification of a transaction, the server issues an Aborted + Transaction Notice with a non-success resultCode indicating the nature + of the failure. All operations that were to be processed as part of + the transaction are implicitly abandoned. Upon receipt of an Aborted + Transaction Notice, the client is to discontinue all use of the + transaction identifier as the transaction is null and void. Any + future use of identifier by the client will result in a response + containing a non-success resultCode. + + + +Zeilenga LDAP Transactions [Page 4] + +INTERNET-DRAFT draft-zeilenga-ldap-txn-07 5 March 2006 - is to be provided. - There is no requirement that a server serialize transactions. That - is, a server MAY process multiple transactions commit requests (from - one or more clients) acting upon different sets of entries - concurrently. A server MUST avoid deadlock. +3.4. Transaction Settlement + + A client requests settlement of transaction by issuing an End + Transaction request for the transaction indicating whether it desires + the transaction to be committed or aborted. + + Upon receipt of a request to abort the transaction, the server is to + abort the identified transaction (abandoning all operations which are + part of the transaction) and indicate that it has done so by returning + an End Transaction response with a resultCode of success. + + Upon receipt of a request to commit the transaction, the server + processes all update operations of the transaction as one atomic, + isolated action with each requested update being processed in turn. + Either all of the requested updates are to be successfully applied or + none of the requested are to be applied. The server returns an End + Transaction Response with a resultCode of success and no responseValue + to indicate all the requested updates were applied. Otherwise, the + server returns an End Transaction with an non-success resultCode + indicating the nature of the failure. If the failure is associated + with a particular update request, a responseValue containing its + MessageID is returned. If the failure was not associated with any + particular update request, no responseValue is returned. + + There is no requirement that a server serialize transactions, or + updates requested outside of a transaction. That is, a server MAY + process multiple commit requests (from one or more clients) acting + upon different sets of entries concurrently. A server MUST avoid + deadlock. 4. Distributed Directory Considerations @@ -185,23 +264,30 @@ INTERNET-DRAFT draft-zeilenga-ldap-txn-06 3 May 2003 The LDAP/X.500 models provide for distributed directory operations including server-side chaining and client-side chasing of operations. - This document does not disallow servers from chaining operations which + This document does not preclude servers from chaining operations which are part of a transaction. However, if a server does allow such - chaining, it MUST ensure that transaction semantics detailed above are - provided. + chaining, it MUST ensure that transaction semantics are provided. This mechanism defined by this document does not support client-side chasing. Grouping cookies used to identify the transaction are specific to a particular client/server session. - The LDAP/X.500 models provide for a single-master/multiple-slave + The LDAP/X.500 models provide for a single-master/multiple-shadow replication architecture. This document states no requirement that changes made to the directory based upon processing a transaction be replicated as one atomic action. That is, the client SHOULD NOT - assume tight data consistency nor fast data convergence at slave - servers unless they have prior knowledge that such is provided. - Though this mechanism could be used to support replication, such use - is not described in this document. + + + +Zeilenga LDAP Transactions [Page 5] + +INTERNET-DRAFT draft-zeilenga-ldap-txn-07 5 March 2006 + + + assume tight data consistency nor fast data convergence at shadow + servers unless they have prior knowledge that such service is + provided. Though this mechanism could be used to support replication, + use in replication is not described in this document. The LDAP/X.500 models do not currently support a multi-master replication architecture and, hence, not considered by this @@ -210,159 +296,185 @@ INTERNET-DRAFT draft-zeilenga-ldap-txn-06 3 May 2003 5. Security Considerations - Transactions mechanisms and related grouping operations may be the - target of denial of service attacks. Implementors should provide - safeguards to ensure these mechanisms are not abused. + Transactions mechanisms may be the target of denial of service + attacks. Implementors should provide safeguards to ensure these + mechanisms are not abused. + + General security considerations [Roadmap], especially associated with + update operations [Protocol], apply to this extension. 6. IANA Considerations - In accordance with [RFC3383], it is requested that Internet Assigned + In accordance with [BCP64bis], it is requested that Internet Assigned Numbers Authority (IANA) make the following assignments. - - -Zeilenga LDAP Transactions [Page 4] - -INTERNET-DRAFT draft-zeilenga-ldap-txn-06 3 May 2003 - - 6.1. Object Identifier - An LDAP Object Identifier to identify the grouping type defined in - this document is requested. - - The following registration template is suggested: + Assignment of an LDAP Object Identifier to identify the protocol + elements specified in this document this document is requested. Subject: Request for LDAP Object Identifier Registration Person & email address to contact for further information: Kurt Zeilenga <kurt@OpenLDAP.org> - Specification: RFCXXXX + Specification: RFC XXXX Author/Change Controller: IESG - Comments: - Identifies the LDAP Transactions Grouping Type + Comments: Identifies protocol elements for LDAP Transactions 6.2. LDAP Protocol Mechanism - Registration of the protocol mechanisms defined in this document is + Registration of the protocol mechanisms specified in this document is requested. - Subject: Request for LDAP Protocol Mechansism Registration - - Object Identifier: IANA-ASSIGNED-OID - Description: LDAP Transaction Grouping Type + Subject: Request for LDAP Protocol Mechanism Registration + Object Identifier: see table + Description: see table Person & email address to contact for further information: - Kurt Zeilenga <kurt@openldap.org> - Usage: Grouping - Specification: RFCxxxx - Author/Change Controller: IESG - Comments: none -7. Acknowledgments - The author gratefully acknowledges the contributions made by members - of the Internet Engineering Task Force. +Zeilenga LDAP Transactions [Page 6] + +INTERNET-DRAFT draft-zeilenga-ldap-txn-07 5 March 2006 -8. Author's Address + Kurt Zeilenga <kurt@openldap.org> + Specification: RFC XXXX + Author/Change Controller: IESG + Comments: - Kurt D. Zeilenga - OpenLDAP Foundation - <Kurt@OpenLDAP.org> + Object Identifier Type Description + ------------------- ---- ----------------------------------------- + IANA-ASSIGNED-OID.1 E Start Transaction Extended Request + IANA-ASSIGNED-OID.2 C Transaction Specification Control + IANA-ASSIGNED-OID.3 E End Transaction Extended Request -9. Normative References +7. Acknowledgments + The author gratefully acknowledges the contributions made by members + of the Internet Engineering Task Force. +8. Author's Address -Zeilenga LDAP Transactions [Page 5] - -INTERNET-DRAFT draft-zeilenga-ldap-txn-06 3 May 2003 + Kurt D. Zeilenga + OpenLDAP Foundation + Email: Kurt@OpenLDAP.org - [RFC2119] S. Bradner, "Key Words for use in RFCs to Indicate - Requirement Levels", BCP 14 (also RFC 2119), March 1997. - [RFC2251] M. Wahl, S. Kille, T. Howes, "Lightweight Directory Access - Protocol (v3)", RFC 2251, December 1997. +9. References - [RFC3377] J. Hodges, R. Morgan, "Lightweight Directory Access - Protocol (v3): Technical Specification", RFC 3377, September 2002. + [[Note to the RFC Editor: please replace the citation tags used in + referencing Internet-Drafts with tags of the form RFCnnnn where + possible.]] - [GROUP] K. Zeilenga, "LDAP: Grouping of Related Operations", - draft-zeilenga-ldap-grouping-xx.txt, a work in progress. - [X.680] ITU-T, "Abstract Syntax Notation One (ASN.1) - Specification - of Basic Notation", X.680, 1994. +9.1. Normative References - [X.690] ITU-T, "Specification of ASN.1 encoding rules: Basic, - Canonical, and Distinguished Encoding Rules", X.690, 1994. + [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. -10. Informative References + [Protocol] Sermersheim, J. (editor), "LDAP: The Protocol", + draft-ietf-ldapbis-protocol-xx.txt, a work in progress. - [ACID] Section 4 of ISO/IEC 10026-1:1992. + [Models] Zeilenga, K. (editor), "LDAP: Directory Information + Models", draft-ietf-ldapbis-models-xx.txt, a work in + progress. - [RFC3383] K. Zeilenga, "IANA Considerations for LDAP", BCP 64 (also - RFC 3383), September 2002. - [X.500] ITU-T, "The Directory: Overview of Concepts, Models, and - Services", X.500, 1993. - [X.501] ITU-T, "The Directory: Models", X.501, 1993. +Zeilenga LDAP Transactions [Page 7] + +INTERNET-DRAFT draft-zeilenga-ldap-txn-07 5 March 2006 -Copyright 2003, The Internet Society. All Rights Reserved. + [X.680] International Telecommunication Union - + Telecommunication Standardization Sector, "Abstract + Syntax Notation One (ASN.1) - Specification of Basic + Notation", X.680(2002) (also ISO/IEC 8824-1:2002). - This document and translations of it may be copied and furnished - to others, and derivative works that comment on or otherwise explain - it or assist in its implementation may be prepared, copied, published - and distributed, in whole or in part, without restriction of any - kind, provided that the above copyright notice and this paragraph - are included on all such copies and derivative works. However, - this document itself may not be modified in any way, such as by - removing the copyright notice or references to the Internet Society - or other Internet organizations, except as needed for the purpose - of developing Internet standards in which case the procedures for - copyrights defined in the Internet Standards process must be followed, - or as required to translate it into languages other than English. + [X.690] International Telecommunication Union - + Telecommunication Standardization Sector, "Specification + of ASN.1 encoding rules: Basic Encoding Rules (BER), + Canonical Encoding Rules (CER), and Distinguished + Encoding Rules (DER)", X.690(2002) (also ISO/IEC + 8825-1:2002). - The limited permissions granted above are perpetual and will not +9.2. Informative References + [ACID] Section 4 of ISO/IEC 10026-1:1992. -Zeilenga LDAP Transactions [Page 6] - -INTERNET-DRAFT draft-zeilenga-ldap-txn-06 3 May 2003 + [BCP64bis] Zeilenga, K., "IANA Considerations for LDAP", + draft-ietf-ldapbis-bcp64-xx.txt, a work in progress. + [X.500] International Telecommunication Union - + Telecommunication Standardization Sector, "The Directory + -- Overview of concepts, models and services," + X.500(1993) (also ISO/IEC 9594-1:1994). - be revoked by the Internet Society or its successors or assigns. + [X.501] International Telecommunication Union - + Telecommunication Standardization Sector, "The Directory + -- Models," X.501(1993) (also ISO/IEC 9594-2:1994). - This document and the information contained herein is provided on - an "AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE - INTERNET ENGINEERING TASK FORCE DISCLAIMS 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. +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. +Zeilenga LDAP Transactions [Page 8] + +INTERNET-DRAFT draft-zeilenga-ldap-txn-07 5 March 2006 + 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 + 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. @@ -391,5 +503,5 @@ INTERNET-DRAFT draft-zeilenga-ldap-txn-06 3 May 2003 -Zeilenga LDAP Transactions [Page 7] +Zeilenga LDAP Transactions [Page 9] diff --git a/doc/rfc/INDEX b/doc/rfc/INDEX index 4929ee1903..8c1aecd8d2 100644 --- a/doc/rfc/INDEX +++ b/doc/rfc/INDEX @@ -51,6 +51,7 @@ rfc3928.txt LDAP Client Update Protocol (PS) rfc4013.txt SASLprep (PS) rfc4370.txt LDAP Proxied Authorization Control (PS) rfc4373.txt LBURP (I) +rfc4404.txt LDAP Schema for UDDI (I) Legend: STD Standard diff --git a/doc/rfc/rfc4403.txt b/doc/rfc/rfc4403.txt new file mode 100644 index 0000000000..bcf5bfe58a --- /dev/null +++ b/doc/rfc/rfc4403.txt @@ -0,0 +1,2355 @@ + + + + + + +Network Working Group B. Bergeson +Request for Comments: 4403 K. Boogert +Category: Informational Novell, Inc. + V. Nanjundaswamy + Oracle India Pvt. Ltd. + February 2006 + + + Lightweight Directory Access Protocol (LDAP) Schema for + Universal Description, Discovery, and Integration version 3 (UDDIv3) + +Status of This Memo + + This memo provides information for the Internet community. It does + not specify an Internet standard of any kind. Distribution of this + memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2006). + +Abstract + + This document defines the Lightweight Directory Access Protocol + (LDAPv3) schema for representing Universal Description, Discovery, + and Integration (UDDI) data types in an LDAP directory. It defines + the LDAP object class and attribute definitions and containment rules + to model UDDI entities, defined in the UDDI version 3 information + model, in an LDAPv3-compliant directory. + +Table of Contents + + 1. Introduction ....................................................2 + 2. Conventions Used in This Document ...............................2 + 3. Representation of UDDI Data Structures ..........................2 + 4. Attribute Type Definitions ......................................6 + 5. Object Class Definitions .......................................28 + 6. Name Forms .....................................................32 + 7. DIT Structure Rules ............................................35 + 8. Security Considerations ........................................37 + 9. IANA Considerations ............................................37 + 10. Normative References ..........................................40 + + + + + + + + + +Bergeson, et al. Informational [Page 1] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +1. Introduction + + This document defines the Lightweight Directory Access Protocol + [LDAPv3] schema elements to represent the core data structures + identified in the Universal Description, Discovery, and Integration + version 3 [UDDIv3] information model. This includes a + businessEntity, a businessService, a bindingTemplate, a tModel, a + publisherAssertion, and a Subscription. Portions of [UDDIv3] are + repeated here for clarity. + +2. Conventions Used in This Document + + The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in RFC 2119 [RFC2119]. + + All schema definitions are provided using [RFC2252] descriptions, and + are line-wrapped for readability only. + +3. Representation of UDDI Data Structures + + The information that makes up a registration in a UDDI registry + consists of these data structure types. This division by information + type provides simple partitions to assist in the rapid location and + understanding of the different information that makes up a + registration. + + The individual instance data managed by a UDDI registry is sensitive + to the parent/child relationships found in the schema. A + businessEntity object contains one or more unique businessService + objects. Similarly, individual businessService objects contain + specific instances of bindingTemplate, which in turn contains + information that includes pointers to specific instances of tModel + objects. + + It is important to note that no single instance of a core schema type + is ever "contained" by more than one parent instance. This means + that only one specific businessEntity object (identified by its + unique key value) will ever contain or be used to express information + about a specific instance of a businessService object (also + identified by its own unique key value). + +3.1. businessEntity + + The businessEntity object represents all known information about a + business or entity that publishes descriptive information about the + entity as well as the services that it offers. The businessEntity is + the top-level container that accommodates holding descriptive + + + +Bergeson, et al. Informational [Page 2] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + information about a business or entity. Service descriptions and + technical information are expressed within a businessEntity by a + containment relationship. + +3.1.1. Representation in the Directory + + A businessEntity is represented in the directory by the attributes + uddiBusinessKey, uddiAuthorizedName, uddiOperator, uddiDiscoveryURLs, + uddiName, uddiDescription, uddiIdentifierBag, uddiCategoryBag, and + uddiv3DigitalSignature, along with corresponding v3 keys viz. + uddiv3BusinessKey, as defined in Section 4. A businessEntity may + contain zero or more instances of uddiContact and + uddiBusinessService. + + A mandatory attribute, uddiBusinessKey, contains the unique + identifier for a given instance of a businessEntity. + + businessEntity's definition is given in Section 5. + +3.2. businessService + + The businessService instances represent a logical business service. + Each businessService object is the logical child of a single + businessEntity object. Each businessService element contains + descriptive information in business terms outlining the type of + technical services found within each businessService instance. + + In some cases, businesses would like to share or reuse services, + e.g., when a large enterprise publishes separate businessEntity + structures. This can be established by using the businessService + instance as a projection to an already published businessService. + +3.2.1. Representation in the Directory + + A businessService is represented in the directory by the attributes + uddiBusinessKey, uddiServiceKey, uddiName, uddiDescription, + uddiCategoryBag, uddiIsProjection, and uddiv3DigitalSignature, along + with corresponding v3 keys viz. uddiv3BusinessKey, and + uddiv3ServiceKey, as defined in Section 4. A businessService may + contain zero or more instances of uddiBindingTemplate. + + The mandatory attribute, uddiServiceKey, contains the unique + identifier for a given instance of a businessService. + + businessService's definition is given in Section 5. + + + + + + +Bergeson, et al. Informational [Page 3] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +3.3. bindingTemplate + + Technical descriptions of Web services are accommodated via + individual contained instances of bindingTemplate objects. These + instances provide support for determining a technical entry point or + optionally support remotely hosted services, as well as a lightweight + facility for describing unique technical characteristics of a given + implementation. Support for technology and application specific + parameters and settings files are also supported. + + Since UDDI's main purpose is to enable description and discovery of + Web service information, it is the bindingTemplate that provides the + most interesting technical data. With UDDIv3, bindingTemplates also + can have categorization information. + + Each bindingTemplate instance has a single logical businessService + parent, which in turn has a single logical businessEntity parent. + +3.3.1. Representation in the Directory + + A bindingTemplate is represented in the directory by the attributes + uddiBindingKey, uddiServiceKey, uddiDescription, uddiAccessPoint, + uddiHostingRedirector, uddiCategoryBag, and uddiv3DigitalSignature, + along with corresponding v3 keys viz. uddiv3ServiceKey and + uddiv3BindingKey, as defined in Section 4. A bindingTemplate may + contain zero or more instances of uddiTModelInstanceDetails. + + The mandatory attribute, uddiBindingKey, contains the unique + identifier for a given instance of a bindingTemplate. + + BindingTemplate's definition is given in Section 5. + +3.4. tModel + + The tModel object takes the form of keyed metadata (data about data). + In a general sense, the purpose of a tModel within the UDDI registry + is to provide a reference system based on abstraction. Thus, the + kind of data that a tModel represents is pretty nebulous. In other + words, a tModel registration can define just about anything, but in + the current revision, two conventions have been applied for using + tModels: as sources for determining compatibility and as keyed + namespace references. + + The information that makes up a tModel is quite simple. There are a + key, a name, an optional description, and a Uniform Resource Locator + [URL] that points somewhere--presumably somewhere where the curious + can go to find out more about the actual concept represented by the + metadata in the tModel itself. + + + +Bergeson, et al. Informational [Page 4] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +3.4.1. Representation in the Directory + + A tModel is represented in the directory by the attributes + uddiTModelKey, uddiAuthorizedName, uddiOperator, uddiName, + uddiDescription, uddiOverviewDescription, uddiOverviewURL, + uddiIdentifierBag, uddiCategoryBag, uddiIsHidden, and + uddiv3DigitalSignature, along with the corresponding v3 key viz. + uddiv3tModelKey, as defined in Section 4. A tModel may also contain + a uddiHidden to logically delete a tModel. + + A mandatory attribute, uddiTModelKey, contains the unique identifier + for a given instance of a tModel. + + tModel's definition is given in Section 5. + +3.5. publisherAssertion + + Many businesses, such as large enterprises or marketplaces, are not + effectively represented by a single businessEntity, since their + description and discovery are likely to be diverse. As a + consequence, several businessEntity instances can be published, + representing individual subsidiaries of a large enterprise or + individual participants of a marketplace. Nevertheless, they still + represent a more or less coupled community and would like to make + some of their relationships visible in their UDDI registrations. + +3.5.1. Representation in the Directory + + A publisherAssertion is represented in the directory by the + attributes uddiFromKey, uddiToKey, uddiKeyedReference, and uddiUUID, + and uddiv3DigitalSignature, as defined in Section 5. + + A mandatory attribute, uddiUUID, contains the unique identifier for a + given instance of a publisherAssertion. + + publisherAssertion's definition is given in Section 5. + +3.6. Operational Information: + + With UDDIv3, the operational information associated with the core + UDDI data structures is maintained in a separate OperationalInfo + structure, so that the digital signature specified by the publisher + remains valid. + + The operationalInfo structure is used to convey the operational + information for the UDDIv3 core data structures, that is, the + businessEntity, businessService, bindingTemplate, and tModel + + + + +Bergeson, et al. Informational [Page 5] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + structures. UDDIv3 OperationalInfo consists of 5 elements: created, + Modified, modifiedIncludingChildren, nodeId, and authorizedName. + + Depending on the specific UDDIv3 core data structure, the + operationalInformation is represented in the directory as a + combination of implicit LDAP Standard Operational attributes: + createTimestamp and modifyTimestamp, and the following explicit + attributes: uddiAuthorizedName, uddiv3EntityCreationTime, + uddiv3EntityModificationTime, and uddiv3NodeId. + +4. Attribute Type Definitions + + The OIDs for the attribute types in this document have been + registered by the IANA. + +4.1. uddiBusinessKey + + This is used in uddiBusinessEntity and uddiBusinessService. + + The uddiBusinessKey is the unique identifier for a given instance of + a uddiBusinessEntity. The attribute is optional for businessService + instances contained within a fully expressed parent that already + contains a businessKey value. + + If the businessService instance is rendered into the Extensible + Markup Language [XML] and has no containing parent that has within + its data a businessKey, the value of the businessKey that is the + parent of the businessService is required to be provided. This + behavior supports the ability to browse through the parent-child + relationships given any of the core elements as a starting point. + The businessKey may differ from the publishing businessEntity's + businessKey to allow service projections. + + ( 1.3.6.1.1.10.4.1 NAME 'uddiBusinessKey' + DESC 'businessEntity unique identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.2. uddiAuthorizedName + + The uddiAuthorizedName is the recorded name of the individual who + published the uddiBusinessEntity or uddiTModel data. This data is + generated by the controlling operator and should not be supplied + within save_business operations. + + With UDDIv3, this attribute is part of the "operationalInformation" + + + +Bergeson, et al. Informational [Page 6] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + metadata associated with core data structures. + + ( 1.3.6.1.1.10.4.2 NAME 'uddiAuthorizedName' + DESC 'businessEntity publisher name' + EQUALITY distinguishedNameMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 + SINGLE-VALUE + ) + +4.3. uddiOperator + + The uddiOperator is the certified name of the UDDI registry site + operator that manages the master copy of the uddiBusinessEntity or + uddiTModel. The controlling operator records this data at the time + data is saved. This data is generated and should not be supplied + within save_business or save_tModel operations. + + With UDDIv3, this field is no longer used -- it is replaced by the + nodeId (uddiv3NodeId) attribute that is part of the + "operationalInformation" metadata. + + ( 1.3.6.1.1.10.4.3 NAME 'uddiOperator' + DESC 'registry site operator of businessEntitys master copy' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.4. uddiName + + This is used in uddiBusinessEntity, uddiBusinessService, and + uddiTModel. + + These are the human-readable names recorded for the + uddiBusinessEntity, uddiBusinessService, or uddiTModel, adorned with + a unique xml:lang value to signify the language that they are + expressed in. Name search is provided via find_business, + find_service, or find_tModel calls. + + The publishing of several names, e.g., for romanization purposes, is + supported. In order to signify the language that the names are + expressed in, they carry unique xml:lang values. Not more than one + name element may omit specifying its language. Names passed in this + way will be assigned the default language code of the registering + party. This default language code is established at the time that + publishing credentials are established with an individual Operator + + + + + +Bergeson, et al. Informational [Page 7] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + Site. If no default language is provisioned at the time a publisher + signs up, the operator can adopt an appropriate default language + code. + + With UDDIv3, multiple values with the same language code are + permitted. + + ( 1.3.6.1.1.10.4.4 NAME 'uddiName' + DESC 'human readable name' + EQUALITY caseIgnoreMatch + ORDERING caseIgnoreOrderingMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The xml:lang value precedes the name value, with the "#" character + used as the separator. + +4.5. uddiDescription + + The uddiDescription is an optional repeating element of one or more + descriptions. One description is allowed per national language code + supplied. With UDDIv3, there is no restriction on the number of + descriptions or on what xml:lang value that they may have. + + ( 1.3.6.1.1.10.4.5 NAME 'uddiDescription' + DESC 'short description' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The xml:lang value precedes the name value, with the "#" character + used as the separator. + +4.6. uddiDiscoveryURLs + + This is a list of Uniform Resource Locators (URLs) that point to + alternate, file-based service discovery mechanisms. Each recorded + uddiBusinessEntity structure is automatically assigned a URL that + returns the individual uddiBusinessEntity structure. A URL search is + provided via find_business call. + + The uddiDiscoveryURLs attribute is used to hold pointers to URL- + addressable discovery documents. The expected retrieval mechanism + for URLs referenced in the data within this structure is via the + Hypertext Transfer Protocol [HTTP] HTTP-GET operation. The expected + return document is not defined. Rather, a framework for establishing + conventions is provided, and two such conventions are defined within + + + +Bergeson, et al. Informational [Page 8] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + UDDI behaviors. It is hoped that other conventions come about and + use this structure to accommodate alternate means of discovery. With + UDDIv3, a new convention is defined with useType as "homepage". + Further, a UDDIv3 server need not generate/add a discoveryURL itself, + since this can invalidate the digital signature of signed the + Business Entity saved by publishers. + + ( 1.3.6.1.1.10.4.6 NAME 'uddiDiscoveryURLs' + DESC 'URL to retrieve a businessEntity instance' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The useType value precedes the URL value, with the "#" character used + as the separator. + +4.7. uddiUseType + + The uddiUseType is used to describe the type of contact or address in + freeform text. Suggested examples for contact include "technical + questions", "technical contact", "establish account", "sales + contact", etc. Suggested examples for address include + "headquarters", "sales office", "billing department", etc. + + ( 1.3.6.1.1.10.4.7 NAME 'uddiUseType' + DESC 'name of convention the referenced document follows' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.8. uddiPersonName + + The uddiPersonName should list the name of the person or name of the + job role that will be available behind the contact. Examples of + roles include "administrator" or "webmaster". + + ( 1.3.6.1.1.10.4.8 NAME 'uddiPersonName' + DESC 'name of person or job role available for contact' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + + With UDDIv3, uddiPersonName becomes multi-valued and each name can + have an xml:lang attribute. The xml:lang value precedes the name + value with the "#" character used as the separator. + + + + +Bergeson, et al. Informational [Page 9] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.9. uddiPhone + + This is used to hold telephone numbers for the contact. This element + can be adorned with an optional uddiUseType attribute for descriptive + purposes. If more than one phone element is saved, uddiUseType + attributes are required on each. + + ( 1.3.6.1.1.10.4.9 NAME 'uddiPhone' + DESC 'telephone number for contact' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The useType precedes the telephone number by a separating '#' (e.g., + "Work Number#123 456-7890") . + +4.10. uddiEMail + + This is used to hold email addresses for the contact. This element + can be adorned with an optional uddiUseType attribute for descriptive + purposes. If more than one email element is saved, uddiUseType + attributes are required on each. + + ( 1.3.6.1.1.10.4.10 NAME 'uddiEMail' + DESC 'e-mail address for contact' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The useType precedes the email address by a separating '#' (e.g., + "President of the United States #president@whitehouse.gov"). + +4.11. uddiSortCode + + The uddiSortCode is used to drive the behavior of external display + mechanisms that sort addresses. The suggested values for + uddiSortCode include numeric ordering values (e.g., 1, 2, 3), + alphabetic character ordering values (e.g., a, b, c), or the first n + positions of relevant data within the address. + + ( 1.3.6.1.1.10.4.11 NAME 'uddiSortCode' + DESC 'specifies an external display mechanism' + EQUALITY caseIgnoreMatch + ORDERING caseIgnoreOrderingMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + + + + +Bergeson, et al. Informational [Page 10] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + With UDDIv3, the sortCode attribute is deprecated because of the + guarantee of preserving the document Order. + +4.12. uddiTModelKey + + The uddiTModelKey is the unique identifier for a given instance of an + uddiTModel. + + It is also used in a KeyedReference and in Address structures. When + used with a keyed reference, this is the unique key to identify a + value set and implies that the keyName keyValue pair in a + uddiIdentifier or uddiCategory Bag are to be interpreted by the value + set referenced by the tModelKey. + + When used with Addressline elements, it implies that the keyName + keyValue pair given by subsequent uddiAddressLine elements are to be + interpreted by the address structure associated with the tModel that + is referenced. + + ( 1.3.6.1.1.10.4.12 NAME 'uddiTModelKey' + DESC 'tModel unique identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.13. uddiAddressLine + + The uddiAddressLine contains the actual address in freeform text. If + the address element contains a uddiTModelKey, these uddiAddressLine + elements are to be adorned, each with an optional keyName keyValue + attribute pair. Together with the uddiTModelKey, keyName and + keyValue qualify the uddiAddressLine in order to describe its + meaning. + + The uddiAddressLine elements contain string data with a line length + limit of 80 character positions. Each uddiAddressLine element can be + adorned with two optional descriptive attributes, keyName and + keyValue. Both attributes must be present in each address line if a + uddiTModelKey is assigned to the address structure. By doing this, + the otherwise arbitrary use of address lines becomes structured. + Together with the address' uddiTModelKey, keyName and keyValue + virtually build a uddiKeyedReference that represents an address line + qualifier, given by the referenced uddiTModel. + + When no uddiTModelKey is provided for the address structure, the + keyName and keyValue attributes can be used without restrictions, for + example, to provide descriptive information for each uddiAddressLine + + + +Bergeson, et al. Informational [Page 11] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + by using the keyName attribute. Since both the keyName and the + keyValue attributes are optional, address line order is significant + and will always be returned by the UDDI-compliant registry in the + order originally provided during a call to save_business. + + ( 1.3.6.1.1.10.4.13 NAME 'uddiAddressLine' + DESC 'address' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The keyName, keyValue, and addressData of this attribute are + separated by "#" (e.g., "#"<keyName>"#"<keyValue>"#"<addressData>). + The addressData is the only required portion of the attribute. + +4.14. uddiIdentifierBag + + The uddiIdentifierBag element allows uddiBusinessEntity or uddiTModel + structures to include information about common forms of + identification such as D-U-N-S_ numbers, tax identifiers, etc. This + data can be used to signify the identity of the uddiBusinessEntity or + can be used to signify the identity of the publishing party. + Including data of this sort is optional, but when used greatly + enhances the search behaviors exposed via the find_xx messages + defined in the UDDI Version 2.0 API Specification [UDDIapi]. For a + full description of the structures involved in establishing an + identity, see UDDI Version 2.0 Data Structure Specification - + Appendix A: Using Identifiers [UDDIdsr]. + + ( 1.3.6.1.1.10.4.14 NAME 'uddiIdentifierBag' + DESC 'identification information' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The tModel, keyName, and keyValue of this attribute are separated by + "#" (e.g., <tModel>"#"<keyName>"#"<keyValue>). The keyValue is the + only required portion of the attribute. + +4.15. uddiCategoryBag + + The uddiCategoryBag element allows uddiBusinessEntity, + uddiBusinessService, and uddiTModel structures to be categorized + according to any of several available taxonomy-based classification + schemes. Operator Sites automatically provide validated + categorization support for three taxonomies that cover industry codes + (via NAICS), product and service classifications (via UNSPC), and + geography (via ISO 3166). Including data of this sort is optional, + + + +Bergeson, et al. Informational [Page 12] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + but when used, it greatly enhances the search behaviors exposed by + the find_xx messages defined in the UDDI Version 2.0 API + Specification [UDDIapi]. For a full description of structures + involved in establishing categorization information, see UDDI Version + 2.03 Data Structure Specification--Appendix B: Using Categorization + [UDDIdsr]. + + ( 1.3.6.1.1.10.4.15 NAME 'uddiCategoryBag' + DESC 'categorization information' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The tModel, keyName, and keyValue of this attribute are separated by + "#" (e.g., <tModel>"#"<keyName>"#"<keyValue>). The keyValue is the + only required portion of the attribute. + + With UDDIv3, uddiBindingTemplates also supports the uddiCategoryBag + element and they can also be categorized according to any of several + available taxonomy-based classification schemes. + +4.16. uddiKeyedReference + + The uddiKeyedReference is a general-purpose attribute for a name- + value pair, with an additional reference to a tModel. + + ( 1.3.6.1.1.10.4.16 NAME 'uddiKeyedReference' + DESC 'categorization information' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The tModel, keyName, and keyValue of this attribute are separated by + "#" (e.g., <tModel>"#"<keyName>"#"<keyValue>). The keyValue is the + only required portion of the attribute. With UDDIv3, the tModelKey + also becomes a mandatory part of the attribute. + + Also, UDDIv3 defines KeyedReferenceGroups for CategoryBags. A + keyedReferenceGroup contains a tModelKey and a simple list of + KeyedReference structures. The uddiKeyedReference attribute will + support KeyedReferenceGroups by suffixing the tModelKey for + KeyedReferenceGroup to each of the keyedReference values associated + with the group. + + For example, to represent a keyedReference group containing a list of + 2 keyed references, the attribute will hold the following 2 strings + as its values: + + + + +Bergeson, et al. Informational [Page 13] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + tModelKey1#KeyName1#KeyValue1#KeyedReferenceGroup1_tModelKey + tModelKey2#KeyName2#KeyValue2#KeyedReferenceGroup1_tModelKey + +4.17. uddiServiceKey + + This is the unique key for a given uddiBusinessService. When saving + a new uddiBusinessService structure, pass an empty uddiServiceKey + value. This signifies that a UUID value is to be generated. To + update an existing uddiBusinessService structure, pass the UUID value + that corresponds to the existing service. If a uddiServiceKey is + received via an inquiry operation, the key values may not be blank. + When saving a new or updated service projection, pass the + uddiServiceKey of the referenced uddiBusinessService structure. + + This attribute is optional when the uddiBindingTemplate data is + contained within a fully expressed parent that already contains a + uddiServiceKey value. If the uddiBindingTemplate data is rendered + into XML and has no containing parent that has within its data a + uddiServiceKey, the value of the uddiServiceKey that is the ultimate + containing parent of the uddiBindingTemplate is required to be + provided. This behavior supports the ability to browse through the + parent-child relationships given any of the core elements as a + starting point. + + ( 1.3.6.1.1.10.4.17 NAME 'uddiServiceKey' + DESC 'businessService unique identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.18. uddiBindingKey + + This is the unique key for a given uddiBindingTemplate. When saving + a new uddiBindingTemplate structure, pass an empty uddiBindingKey + value. This signifies that a UUID value is to be generated. To + update an existing uddiBindingTemplate, pass the UUID value that + corresponds to the existing uddiBindingTemplate instance. If a + uddiBindingKey is received via an inquiry operation, the key values + may not be blank. + + ( 1.3.6.1.1.10.4.18 NAME 'uddiBindingKey' + DESC 'bindingTemplate unique identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + + + + +Bergeson, et al. Informational [Page 14] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.19. uddiAccessPoint + + The uddiAccessPoint element is an attribute-qualified pointer to a + service entry point. The notion of service at the metadata level + seen here is fairly abstract and many types of entry points are + accommodated. A single attribute is provided named URLType. + + Required attribute-qualified element8: This element is a text field + that is used to convey the entry point address suitable for calling a + particular Web service. This may be a URL, an electronic mail + address, or even a telephone number. No assumptions about the type + of data in this field can be made without first understanding the + technical requirements associated with the Web service. + + ( 1.3.6.1.1.10.4.19 NAME 'uddiAccessPoint' + DESC 'entry point address to call a web service' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + + The URLType value precedes the accessPoint value by a separating '#'. + + With UDDIv3, the "URLType" attribute is replaced by a "UseType" + attribute. Using this UseType attribute, the accessPoint attribute + can model a hostingRedirector or support indirection to indicate that + the accesspoint is specified within a remotely hosted WSDL document. + + For a UDDIv3 registry that needs to support UDDIv2 clients, the + attribute must allow the representation of URLType and UseType values + independently. + + The UDDIv3 spec specifies the following logic for mapping values + between URLType and UseType: If an entity is saved with the v3 + namespace and a v2 inquiry is made, the URLType will be returned as + "other". In the case when a v3 inquiry is made on an entity + published with the v2 namespace, the v3 useType attribute will be + returned as "endPoint". + + For implementations that need to explicitly model both forms, the + recommended format is as follows: v2URLType#v3UseType#Address + +4.20. uddiHostingRedirector + + The uddiHostingRedirector element is used to designate that a + uddiBindingTemplate entry is a pointer to a different + uddiBindingTemplate entry. The value in providing this facility is + seen when a business or entity wants to expose a service description + + + +Bergeson, et al. Informational [Page 15] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + (e.g., advertise that it has a service available that suits a + specific purpose) that is actually a service described in a separate + uddiBindingTemplate record. This might occur when a service is + remotely hosted (hence the name of this element), or when many + service descriptions could benefit from a single service description. + + The uddiHostingRedirector element has a single attribute and no + element content. The attribute is a uddiBindingKey value that is + suitable within the same UDDI registry instance for querying and + obtaining the uddiBindingDetail data that is to be used. + + More on the uddiHostingRedirector can be found in the appendices for + the UDDI Version 2.0 API Specification [UDDIapi]. + + Required element if uddiAccessPoint is not provided: This element is + adorned with a uddiBindingKey attribute, giving the redirected + reference to a different uddiBindingTemplate. If you query a + uddiBindingTemplate and find a uddiHostingRedirector value, you + should retrieve that uddiBindingTemplate and use it in place of the + one containing the uddiHostingRedirector data. + + ( 1.3.6.1.1.10.4.20 NAME 'uddiHostingRedirector' + DESC 'designates a pointer to another bindingTemplate' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + + With UDDIv3, the hostingRedirector is a deprecated element, since its + functionality is now covered by the accessPoint. For backward- + compatibility, it can still be used, but it is not recommended. + +4.21. uddiInstanceDescription + + This is an optional repeating element. This is one or more + language-qualified text descriptions that designate what role a + uddiTModel reference plays in the overall service description. + + ( 1.3.6.1.1.10.4.21 NAME 'uddiInstanceDescription' + DESC 'instance details description' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The xml:lang value precedes the name value, with the "#" character + used as the separator. + + + + + +Bergeson, et al. Informational [Page 16] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.22. uddiInstanceParms + + The uddiInstanceParms is an optional element of the uddiInstance. It + is used to contain settings parameters or a URL reference to a file + that contains settings or parameters required to use a specific facet + of a uddiBindingTemplate description. If used to house the + parameters themselves, the suggested content is a namespace-qualified + XML string using a namespace outside of the UDDI schema. If used to + house a URL pointer to a file, the suggested format is a URL that is + suitable for retrieving the settings or parameters via HTTP-GET. + + ( 1.3.6.1.1.10.4.22 NAME 'uddiInstanceParms' + DESC 'URL reference to required settings' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.23. uddiOverviewDescription + + This is an optional repeating element. This language-qualified + string is intended to hold a short descriptive overview of how a + particular uddiTModel is to be used. + + ( 1.3.6.1.1.10.4.23 NAME 'uddiOverviewDescription' + DESC 'outlines tModel usage' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + The xml:lang value precedes the name value, with the "#" character + used as the separator. + + + + + + + + + + + + + + + + + + + +Bergeson, et al. Informational [Page 17] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.24. uddiOverviewURL + + This is an optional element. This string data element is to be used + to hold a URL reference to a long form of an overview document that + covers the way a particular uddiTModel specific reference is used as + a component of an overall Web service description. The recommended + format for the overviewURL is a URI that is suitable for retrieving + the actual overview document with an HTTP-GET operation, for example, + via a Web browser. + + ( 1.3.6.1.1.10.4.24 NAME 'uddiOverviewURL' + DESC 'URL reference to overview document' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + + With UDDIv3, uddiOverviewURL becomes multi-valued to allow the + representation of multiple OverviewDocs within a single + InstanceDetail element. + + Modeling multiple OverviewDocs within an InstanceDetail element: + + In UDDIv3, the InstanceDetails element in TmodelInstanceInfo can have + multiple OverviewDoc's. In UDDIv2, we could have only 1 OverviewDoc. + To retain the grouping between a set of overviewDescriptions and + overviewURL, we can make both OverviewDoc and OverviewURL multi- + valued, and have a "group ID" Prefix to each value (to group + OverviewDescriptions and OverviewURL). + + An example is shown below: + + Overview Description OverviewURL + 1#xml:lang#overviewDescription1 1#UseType#overviewURL + 1#xml:lang#overviewDescription2 2#UseType#overviewURL + 1#xml:lang#overviewDescription3 4#UseType#overviewURL + 3#xml:lang#overviewDescription1 + 3#xml:lang#overviewDescription2 + 4#xml:lang#overviewDescription1 + + This implies that OverviewDoc1 has 3 overview descriptions and an + overviewURL. OverviewDoc2 has only an overviewURL. OverviewDoc3 has + only 2 overviewDescriptions. OverviewDoc4 also has 1 overview + description and an overviewURL. + + + + + + + +Bergeson, et al. Informational [Page 18] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.25. uddiFromKey + + The uddiFromKey is a required element. This is the unique key + reference to the first uddiBusinessEntity for which the assertion is + made. + + ( 1.3.6.1.1.10.4.25 NAME 'uddiFromKey' + DESC 'unique businessEntity key reference' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.26. uddiToKey + + The uddiToKey is a required element. This is the unique key + reference to the second uddiBusinessEntity for which the assertion is + made. + + ( 1.3.6.1.1.10.4.26 NAME 'uddiToKey' + DESC 'unique businessEntity key reference' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.27. uddiUUID + + The uddiUUID is a required element. This is to ensure unique + identification of uddiContact, uddiAddress, and + uddiPublisherAssertion objects. + + ( 1.3.6.1.1.10.4.27 NAME 'uddiUUID' + DESC 'unique attribute' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + + With UDDIv3, this attribute will also be used for unique + identification of Subscription-feature-related entities. + + + + + + + + + + +Bergeson, et al. Informational [Page 19] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.28. uddiIsHidden + + This is used to provide functionality for the delete_tModel + operation. Logical deletion hides the deleted tModels from + find_tModel result sets but does not physically delete it. + + ( 1.3.6.1.1.10.4.28 NAME 'uddiIsHidden' + DESC 'isHidden attribute' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 + SINGLE-VALUE + ) + + In case of UDDIv3, this attribute will represent the "deleted" + attribute value. + +4.29. uddiIsProjection + + This is used to identify a Business Service that has a Service + Projection. + + ( 1.3.6.1.1.10.4.29 NAME 'uddiIsProjection' + DESC 'isServiceProjection attribute' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 + SINGLE-VALUE + ) + +4.30. uddiLang + + This is used to model the xml:lang value for the Address structure in + UDDIv3. + + ( 1.3.6.1.1.10.4.30 NAME 'uddiLang' + DESC 'xml:lang value in v3 Address structure' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + + The following are attribute definitions to model new elements/fields + in UDDIv3 information model. These attribute definitions have the + "uddiv3" prefix to indicate that these attributes represent UDDI + information model elements unique to UDDIv3. + + + + + + + +Bergeson, et al. Informational [Page 20] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.31. uddiv3BusinessKey + + This is the unique UDDIv3 identifier for a given instance of + uddiBusinessEntity. It is used in uddiBusinessEntity and + uddiBusinessService. + + A uddiBusinessEntity will include the uddiBusinessKey (the v2 form) + for unique identification by UDDIv2 clients. The uddiBusinessKey + (36-char) will also be the LDAP naming attribute for the + uddiBusinessEntity. The uddiBusinessEntity entry MAY also include + the uddiv3BusinessKey, the explicit v3 form key, which can be 255 + characters long. + + ( 1.3.6.1.1.10.4.31 NAME 'uddiv3BusinessKey' + DESC 'UDDIv3 businessEntity unique identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.32. uddiv3ServiceKey + + This is the unique UDDIv3 identifier for a given instance of + uddiBusinessService. It is used in uddiBusinessService and + uddiBindingTemplate. + + A uddiBusinessService will include the uddiServiceKey (the v2 form) + for unique identification by UDDIv2 clients. The uddiServiceKey + (36-char) will also be the LDAP naming attribute for the + uddiBusinessService entry. The uddiBusinessService entry MAY also + include the uddiv3ServiceKey, the explicit v3 form key, which can be + 255 characters long. + + ( 1.3.6.1.1.10.4.32 NAME 'uddiv3ServiceKey' + DESC 'UDDIv3 businessService unique identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.33. uddiv3BindingKey + + This is the unique UDDIv3 identifier for a given instance of + uddiBindingTemplate. + + A uddiBindingTemplate will include the uddiBindingKey (the v2 form) + for unique identification by UDDIv2 clients. The uddiBindingKey + (36-char) will also be the LDAP naming attribute for the + + + +Bergeson, et al. Informational [Page 21] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + uddiBindingTemplate entry. The uddiBindingTemplate entry MAY also + include the uddiv3BindingKey, the explicit v3 form key, which can be + 255 characters long. + + ( 1.3.6.1.1.10.4.33 NAME 'uddiv3BindingKey' + DESC 'UDDIv3 BindingTemplate unique identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.34. uddiv3TModelKey + + This is the unique UDDIv3 identifier for a given instance of a + uddiTModel. + + A uddiTModel will include the uddiTModelKey (the v2 form) for unique + identification by UDDIv2 clients. The uddiTModelKey (41-char) will + also be the LDAP naming attribute for the uddiTModel entry. The + uddiTModel entry MAY also include the uddiv3TModelKey, the explicit + v3 form key, which can be 255 characters long. + + ( 1.3.6.1.1.10.4.34 NAME 'uddiv3TModelKey' + DESC 'UDDIv3 TModel unique identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + + The tModelKey is also used in a KeyedReference and in Address + structures. In all instances where a tModelKey is used as a + reference to tModel, the v3 form of the tModel key (viz. + uddiv3TModelKey) will be the form used, since using the v2 form key + will require translating it to the v3 key by the UDDI Server, which + may invalidate the digital signature of the entity. + +4.35. uddiv3DigitalSignature + + The UDDIv3 v3 schema supports the signing of the following UDDI + elements using "XML-Signature Syntax and Processing" (see + http://www.w3.org/TR/xmldsig-core/). + + ..businessEntity + ..businessService + ..bindingTemplate + ..tModel + ..publisherAssertion + + + + +Bergeson, et al. Informational [Page 22] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + This uddiv3DigitalSignature attribute holds the digital signature for + the corresponding UDDI entity. + + ( 1.3.6.1.1.10.4.35 NAME 'uddiv3DigitalSignature' + DESC 'UDDIv3 entity digital signature' + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + ) + + A Signature element SHOULD be generated according to the required + steps of "Core Generation" in XML-Signature Syntax and Processing. + The signature should be calculated on the top-level element that will + be stored by the registry as a result of the Publication API call. + This element, referred to as the data object in the XML-Signature and + Syntax specification, is the businessEntity element for save_business + API calls, the businessService element for save_service API calls, + the bindingTemplate for save_binding API calls, the tModel for + save_tModel API calls, and the publisherAssertion for + set_publisherAssertions and add_publisherAssertion API calls. + + The signature should be generated on the elements before they are + added to the body of an API call. Also, according to the signature + generation, all children of the element being signed are included in + the generation of the signature unless first excluded by application + of a transform. Due to the containment of service projections as + businessService elements within a businessEntity element, this also + means that changes to the projected service will render a signature + of the businessEntity containing the projection invalid, unless a + businessService element representing a service projection is excluded + using a transform. + + Due to the location of the sequence of Signature elements within an + element that is to be signed, the signature is "enveloped". As a + result of the enveloping of the signature, it is necessary to apply + at least one transformation on the signed entity to exclude the + signature or signature(s). The transformation selected by a + publisher or the XML-Signature tool is specified in a Transform + element inside the Signature element. + + + + + + + + + + + + + +Bergeson, et al. Informational [Page 23] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.36. uddiv3NodeId + + This attribute contains the Node Identity for a UDDIv3 node. + + ( 1.3.6.1.1.10.4.36 NAME 'uddiv3NodeId' + DESC 'UDDIv3 Node Identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.37. uddiv3EntityModificationTime + + This attribute is used to maintain the last modification time for a + UDDI entity. It is needed in the context of maintaining the + modifiedIncludingChildren element. When a child entity (e.g., + uddiBindingTemplate) is updated, the parent entity (e.g., + uddiBusinessService) LDAP timestamp also gets updated. The + uddiv3EntityModificationTime attribute saves the last modification + time of the parent entity (uddiBusinessService in this case). + + ( 1.3.6.1.1.10.4.37 NAME 'uddiv3EntityModificationTime' + DESC 'UDDIv3 Last Modified Time for Entity' + EQUALITY generalizedTimeMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 + SINGLE-VALUE + ) + + The following attribute definitions define attributes related to the + modeling of UDDIv3 subscription-related entities in the LDAP + directory. + + Subscription provides clients, known as subscribers, with the ability + to register their interest in receiving information concerning + changes made in a UDDI registry. These changes can be scoped based + on preferences provided with the request. The uddiv3Subscription + object class is used to model registered UDDIv3 subscriptions. + + + + + + + + + + + + + + +Bergeson, et al. Informational [Page 24] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.38. uddiv3SubscriptionKey + + This is the unique UDDIv3 identifier for a given instance of a + uddiv3Subscription entity. + + ( 1.3.6.1.1.10.4.38 NAME 'uddiv3SubscriptionKey' + DESC 'UDDIv3 Subscription unique identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.39. uddiv3SubscriptionFilter + + This attribute contains the UDDIv3 Subscription Filter, specified as + part of the save_subscription API, i.e., the Inquiry API specified as + filtering criteria with a registered subscription. The filtering + criteria limits the scope of a subscription to a subset of registry + records. The get_xx and find_xx APIs are all valid choices for use + as a subscriptionFilter. Only one of these can be chosen for each + subscription. + + ( 1.3.6.1.1.10.4.39 NAME 'uddiv3SubscriptionFilter' + DESC 'UDDIv3 Subscription Filter' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.40. uddiv3NotificationInterval + + This attribute contains the Notification Interval string. It is of + the type xsd:duration and specifies how often Asynchronous change + notifications are to be provided to a subscriber. + + ( 1.3.6.1.1.10.4.40 NAME 'uddiv3NotificationInterval' + DESC 'UDDIv3 Notification Interval' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + + + + + + + + + + +Bergeson, et al. Informational [Page 25] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.41. uddiv3MaxEntities + + This attribute contains the maximum number of entities to be returned + as part of a subscription notification. It is an integer and + specifies the maximum number of entities in a notification returned + to a subscription listener. + + ( 1.3.6.1.1.10.4.41 NAME 'uddiv3MaxEntities' + DESC 'UDDIv3 Subscription maxEntities field' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 + SINGLE-VALUE + ) + +4.42. uddiv3ExpiresAfter + + This attribute specifies the Expiry Time associated with a + subscription. It is of the XML Schema type xsd:dateTime. + + ( 1.3.6.1.1.10.4.42 NAME 'uddiv3ExpiresAfter' + DESC 'UDDIv3 Subscription ExpiresAfter field' + EQUALITY generalizedTimeMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 + SINGLE-VALUE + ) + +4.43. uddiv3BriefResponse + + This attribute is a Boolean flag for Brief Response associated with a + subscription entity. It controls the level of detail returned to a + subscription listener. The default is "false" when omitted. When + set to "true", it indicates that the subscription results are to be + returned to the subscriber in the form of a keyBag, listing all of + the entities that matched the subscriptionFilter. + + ( 1.3.6.1.1.10.4.43 NAME 'uddiv3BriefResponse' + DESC 'UDDIv3 Subscription ExpiresAfter field' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 + SINGLE-VALUE + ) + + + + + + + + + + +Bergeson, et al. Informational [Page 26] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +4.44. uddiv3EntityKey + + This is the unique UDDIv3 identifier for a given instance of a core + UDDI data structure that is to be logged as an Obituary entry + uddiv3EntityObituary. When a core UDDIv3 Entity is deleted and there + is an active subscription registered against this UDDI Entity, an + Obituary entry is created, in which the v3 key of the deleted entry + is logged as part of the uddiv3EntityKey attribute. + + ( 1.3.6.1.1.10.4.44 NAME 'uddiv3EntityKey' + DESC 'UDDIv3 Entity unique identifier' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) + +4.45. uddiv3EntityCreationTime + + This attribute is used to log the original Creation Time for a UDDI + Entity that is deleted in the uddiv3EntityObituary entry. + + It is also used in uddiBusinessService and uddiBindingTemplate. A + Move BS operation needs to delete and recreate BT sub-tree due to + lack of support for moving a sub-tree in many LDAPv3 servers. This + attribute is used to save the original creation time of the BT during + a Move BS. + + ( 1.3.6.1.1.10.4.45 NAME 'uddiv3EntityCreationTime' + DESC 'UDDIv3 Entity Creation Time' + EQUALITY generalizedTimeMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 + SINGLE-VALUE + ) + +4.46. uddiv3EntityDeletionTime + + This attribute is used to log the entity deletion time for a UDDI + Entity that is deleted in the uddiv3EntityObituary entry. + + ( 1.3.6.1.1.10.4.46 NAME 'uddiv3EntityDeletionTime' + DESC 'UDDIv3 Entity Deletion Time' + EQUALITY generalizedTimeMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 + SINGLE-VALUE + ) + + + + + + +Bergeson, et al. Informational [Page 27] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +5. Object Class Definitions + + The OIDs for the object classes in this document have been registered + by the IANA. + +5.1. uddiBusinessEntity + + This structural object class represents a businessEntity. + + ( 1.3.6.1.1.10.6.1 NAME 'uddiBusinessEntity' + SUP top + STRUCTURAL + MUST ( uddiBusinessKey $ + uddiName) + MAY ( uddiAuthorizedName $ + uddiOperator $ + uddiDiscoveryURLs $ + uddiDescription $ + uddiIdentifierBag $ + uddiCategoryBag $ + uddiv3BusinessKey $ + uddiv3DigitalSignature $ + uddiv3EntityModificationTime $ + uddiv3NodeId) + ) + +5.2. uddiContact + + This structural object class represents a contact. It is contained + by a uddiBusinessEntity. + + ( 1.3.6.1.1.10.6.2 NAME 'uddiContact' + SUP top + STRUCTURAL + MUST ( uddiPersonName $ + uddiUUID ) + MAY ( uddiUseType $ + uddiDescription $ + uddiPhone $ + uddiEMail ) + ) + + + + + + + + + + +Bergeson, et al. Informational [Page 28] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +5.3. uddiAddress + + This structural object class represents an address. It is contained + by a uddiContact. + + ( 1.3.6.1.1.10.6.3 NAME 'uddiAddress' + SUP top + STRUCTURAL + MUST ( uddiUUID ) + MAY ( uddiUseType $ + uddiSortCode $ + uddiTModelKey $ + uddiv3TmodelKey $ + uddiAddressLine $ + uddiLang) + ) + +5.4. uddiBusinessService + + This structural object class represents a businessService. + + ( 1.3.6.1.1.10.6.4 NAME 'uddiBusinessService' + SUP top + STRUCTURAL + MUST ( uddiServiceKey ) + MAY ( uddiName $ + uddiBusinessKey $ + uddiDescription $ + uddiCategoryBag $ + uddiIsProjection $ + uddiv3ServiceKey $ + uddiv3BusinessKey $ + uddiv3DigitalSignature $ + uddiv3EntityCreationTime $ + uddiv3EntityModificationTime $ + uddiv3NodeId) + ) + + + + + + + + + + + + + + +Bergeson, et al. Informational [Page 29] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +5.5. uddiBindingTemplate + + This structural object class represents a bindingTemplate. + + ( 1.3.6.1.1.10.6.5 NAME 'uddiBindingTemplate' + SUP top + STRUCTURAL + MUST ( uddiBindingKey ) + MAY ( uddiServiceKey $ + uddiDescription $ + uddiAccessPoint $ + uddiHostingRedirector + uddiCategoryBag $ + uddiv3BindingKey $ + uddiv3ServiceKey $ + uddiv3DigitalSignature $ + uddiv3EntityCreationTime $ + uddiv3NodeId) + ) + +5.6. uddiTModelInstanceInfo + + This structural object class represents a tModelInstanceInfo. It is + contained by a uddiBindingTemplate. + + ( 1.3.6.1.1.10.6.6 NAME 'uddiTModelInstanceInfo' + SUP top + STRUCTURAL + MUST ( uddiTModelKey ) + MAY ( uddiDescription $ + uddiInstanceDescription $ + uddiInstanceParms $ + uddiOverviewDescription $ + uddiOverviewURL $ + uddiv3TmodelKey) + ) + + + + + + + + + + + + + + + +Bergeson, et al. Informational [Page 30] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +5.7. uddiTModel + + This structural object class represents a tModel. + + ( 1.3.6.1.1.10.6.7 NAME 'uddiTModel' + SUP top + STRUCTURAL + MUST ( uddiTModelKey $ + uddiName ) + MAY ( uddiAuthorizedName $ + uddiOperator $ + uddiDescription $ + uddiOverviewDescription $ + uddiOverviewURL $ + uddiIdentifierBag $ + uddiCategoryBag $ + uddiIsHidden + uddiv3TModelKey $ + uddiv3DigitalSignature $ + uddiv3NodeId) + ) + +5.8. uddiPublisherAssertion + + This structural object class represents a publisherAssertion. + + ( 1.3.6.1.1.10.6.8 NAME 'uddiPublisherAssertion' + SUP top + STRUCTURAL + MUST ( uddiFromKey $ + uddiToKey $ + uddiKeyedReference $ + uddiUUID ) + MAY ( uddiv3DigitalSignature $ + uddiv3NodeId) + ) + + The following are object class definitions to model new data + structures needed to implement the UDDIv3 information model. These + object class definitions have the "uddiv3" prefix to indicate that + these attributes represent UDDI information model elements unique to + UDDIv3. + + + + + + + + + +Bergeson, et al. Informational [Page 31] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +5.9. uddiv3Subscription + + This structural object class represents a Subscription entity. + + ( 1.3.6.1.1.10.6.9 NAME 'uddiv3Subscription' + SUP top + STRUCTURAL + MUST ( uddiv3SubscriptionFilter $ + uddiUUID) + MAY ( uddiAuthorizedName $ + uddiv3SubscriptionKey $ + uddiv3BindingKey $ + uddiv3NotificationInterval $ + uddiv3MaxEntities $ + uddiv3ExpiresAfter $ + uddiv3BriefResponse $ + uddiv3NodeId) + ) + +5.10. uddiv3EntityObituary + + This structural object class represents an Obituary entry for and + stores obituary information for deleted UDDIv3 entities needed for + handling subscriptions. + + ( 1.3.6.1.1.10.6.10 NAME 'uddiv3EntityObituary' + SUP top + STRUCTURAL + MUST ( uddiv3EntityKey $ + uddiUUID) + MAY ( uddiAuthorizedName $ + uddiv3EntityCreationTime $ + uddiv3EntityDeletionTime $ + uddiv3NodeId) + ) + +6. Name Forms + + This section defines the required hierarchical structure rules and + naming attributes for the object classes defined in Section 6. + + The OIDs for the structure rules in this document have been + registered by the IANA. + + + + + + + + +Bergeson, et al. Informational [Page 32] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +6.1. uddiBusinessEntityNameForm + + This name form defines the naming attribute for a businessEntity. + + ( 1.3.6.1.1.10.15.1 NAME 'uddiBusinessEntityNameForm' + OC uddiBusinessEntity + MUST ( uddiBusinessKey ) + ) + +6.2. uddiContactNameForm + + This name form defines the naming attribute for a contact. + + ( 1.3.6.1.1.10.15.2 NAME 'uddiContactNameForm' + OC uddiContact + MUST ( uddiUUID ) + ) + +6.3. uddiAddressNameForm + + This name form defines the naming attribute for an address. + + ( 1.3.6.1.1.10.15.3 NAME 'uddiAddressNameForm' + OC uddiAddress + MUST ( uddiUUID ) + ) + +6.4. uddiBusinessServiceNameForm + + This name form defines the naming attribute for a businessService. + + ( 1.3.6.1.1.10.15.4 NAME 'uddiBusinessServiceNameForm' + OC uddiBusinessService + MUST ( uddiServiceKey ) + ) + +6.5. uddiBindingTemplateNameForm + + This name form defines the naming attribute for a bindingTemplate. + + ( 1.3.6.1.1.10.15.5 NAME 'uddiBindingTemplateNameForm' + OC uddiBindingTemplate + MUST ( uddiBindingKey ) + ) + + + + + + + +Bergeson, et al. Informational [Page 33] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +6.6. uddiTModelInstanceInfoNameForm + + This name form defines the naming attribute for a tModelInstanceInfo. + + ( 1.3.6.1.1.10.15.6 NAME 'uddiTModelInstanceInfoNameForm' + OC uddiTModelInstanceInfo + MUST ( uddiTModelKey ) + ) + +6.7. uddiTModelNameForm + + This name form defines the naming attribute for a tModel. + + ( 1.3.6.1.1.10.15.7 NAME 'uddiTModelNameForm' + OC uddiTModel + MUST ( uddiTModelKey ) + ) + +6.8. uddiPublisherAssertionNameForm + + This name form defines the naming attribute for a publisherAssertion. + + ( 1.3.6.1.1.10.15.8 NAME 'uddiPublisherAssertionNameForm' + OC uddiPublisherAssertion + MUST ( uddiUUID ) + ) + +6.9. uddiv3SubscriptionNameForm + + This name form defines the naming attribute for a Subscription. + + ( 1.3.6.1.1.10.15.9 NAME 'uddiv3SubscriptionNameForm' + OC uddiv3Subscription + MUST ( uddiUUID ) + ) + +6.10. uddiv3EntityObituaryNameForm + + This name form defines the naming attribute for an Entity Obituary. + + ( 1.3.6.1.1.10.15.10 NAME 'uddiv3EntityObituaryNameForm' + OC uddiv3EntityObituary + MUST ( uddiUUID ) + ) + + + + + + + +Bergeson, et al. Informational [Page 34] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +7. DIT Structure Rules + + This section defines the required hierarchical structure rules for + the object classes defined in Section 6. + + Note that rule identifiers defined here show the relationship between + structure rules. Implementations may use different identifiers but + must follow the same hierarchical model. + +7.1. uddiBusinessEntityStructureRule + + ( 1 + NAME 'uddiBusinessEntityStructureRule' + FORM uddiBusinessEntityNameForm + ) + +7.2. uddiContactStructureRule + + This structure rule defines the object class containment for a + contact. + + ( 2 + NAME 'uddiContactStructureRule' + FORM uddiContactNameForm + SUP ( 1 ) + ) + +7.3. uddiAddressStructureRule + + This structure rule defines the object class containment for an + address. + + ( 3 + NAME 'uddiAddressStructureRule' + FORM uddiAddressNameForm + SUP ( 2 ) + ) + +7.4. uddiBusinessServiceStructureRule + + This structure rule defines the object class containment for a + businessService. + + ( 4 + NAME 'uddiBusinessServiceStructureRule' + FORM uddiBusinessServiceNameForm + SUP ( 1 ) + ) + + + +Bergeson, et al. Informational [Page 35] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + +7.5. uddiBindingTemplateStructureRule + + This structure rule defines the object class containment for a + bindingTemplate. + + ( 5 + NAME 'uddiBindingTemplateStructureRule' + FORM uddiBindingTemplateNameForm + SUP ( 4 ) + ) + +7.6. uddiTModelInstanceInfoStructureRule + + This structure rule defines the object class containment for a + tModelInstanceInfo. + + ( 6 + NAME 'uddiTModelInstanceInfoStructureRule' + FORM uddiTModelInstanceInfoNameForm + SUP ( 5 ) + ) + +7.7. uddiTModelStructureRule + + ( 7 + NAME 'uddiTModelStructureRule' + FORM uddiTModelNameForm + ) + +7.8. uddiPublisherAssertion + + ( 8 + NAME 'uddiPublisherAssertionStructureRule' + FORM uddiPublisherAssertionNameForm + ) + +7.9. uddiv3SubscriptionStructureRule + + ( 9 + NAME 'uddiv3SubscriptionStructureRule' + FORM uddiv3SubscriptionNameForm + ) + + + + + + + + +Bergeson, et al. Informational [Page 36] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +7.10. uddiv3EntityObituaryStructureRule + + ( 10 + NAME 'uddiv3EntityObituaryStructureRule' + FORM uddiv3EntityObituaryNameForm + ) + +8. Security Considerations + + Storing UDDI data into the directory enables the data to be examined + and used outside the environment in which it was originally created. + The directory entry containing the UDDI data could be read and + modified within the constraints imposed by the access control + mechanisms of the directory. With UDDIv3 [UDDIv3], publishers can + digitally sign UDDI Entities enabling registry clients to validate + the integrity of entries read from the UDDIv3 registry by verifying + the digital signature. + + Each UDDI Entity has a uddiAuthorizedName attribute that contains an + LDAP DN identifying the publisher/owner. The referenced LDAP object + can provide the public key of the signer to a registry client for + integrity validation of the UDDI Entity. + + Other general LDAP [LDAPv3] security considerations apply. Some of + the UDDI attributes such as AccessPoints for services may contain + sensitive information. Use of strong authentication mechanisms and + data integrity/confidentiality services [RFC2829][RFC2830] is + advised. + +9. IANA Considerations + + Refer to RFC 3383, "Internet Assigned Numbers Authority (IANA) + Considerations for the Lightweight Directory Access Protocol (LDAP)" + [RFC3383]. + + + + + + + + + + + + + + + + + +Bergeson, et al. Informational [Page 37] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +9.1. Object Identifier Registration + + The IANA has registered an LDAP Object Identifier for use in this + technical specification, according to the following template: + + Subject: Request for LDAP OID Registration + Person & email address to contact for further information: + Bruce Bergeson (bruce.bergeson@novell.com) + Specification: RFC 4403 + Author/Change Controller: IESG + Comments: + The assigned OID (10) will be used as a base for identifying + a number of UDDI schema elements defined in this document. + +9.2. Object Identifier Descriptors + + The IANA has registered the LDAP Descriptors used in this technical + specification as detailed in the following template: + + Subject: Request for LDAP Descriptor Registration Update + Descriptor (short name): see table + Object Identifier: see table + Person & email address to contact for further information: + Bruce Bergeson (bruce.bergeson@novell.com) + Usage: see table + Specification: RFC 4403 + Author/Change Controller: IESG + Table: + + The following descriptors have been added: + + NAME Type OID + -------------- ---- ------------ + uddiBusinessKey A 1.3.6.1.1.10.4.1 + uddiAuthorizedName A 1.3.6.1.1.10.4.2 + uddiOperator A 1.3.6.1.1.10.4.3 + uddiName A 1.3.6.1.1.10.4.4 + uddiDescription A 1.3.6.1.1.10.4.5 + uddiDiscoveryURLs A 1.3.6.1.1.10.4.6 + uddiUseType A 1.3.6.1.1.10.4.7 + uddiPersonName A 1.3.6.1.1.10.4.8 + uddiPhone A 1.3.6.1.1.10.4.9 + uddiEMail A 1.3.6.1.1.10.4.10 + uddiSortCode A 1.3.6.1.1.10.4.11 + uddiTModelKey A 1.3.6.1.1.10.4.12 + uddiAddressLine A 1.3.6.1.1.10.4.13 + + + + + +Bergeson, et al. Informational [Page 38] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + NAME Type OID + -------------- ---- ------------ + uddiIdentifierBag A 1.3.6.1.1.10.4.14 + uddiCategoryBag A 1.3.6.1.1.10.4.15 + uddiKeyedReference A 1.3.6.1.1.10.4.16 + uddiServiceKey A 1.3.6.1.1.10.4.17 + uddiBindingKey A 1.3.6.1.1.10.4.18 + uddiAccessPoint A 1.3.6.1.1.10.4.19 + uddiHostingRedirector A 1.3.6.1.1.10.4.20 + uddiInstanceDescription A 1.3.6.1.1.10.4.21 + uddiInstanceParms A 1.3.6.1.1.10.4.22 + uddiOverviewDescription A 1.3.6.1.1.10.4.23 + uddiOverviewURL A 1.3.6.1.1.10.4.24 + uddiFromKey A 1.3.6.1.1.10.4.25 + uddiToKey A 1.3.6.1.1.10.4.26 + uddiUUID A 1.3.6.1.1.10.4.27 + uddiIsHidden A 1.3.6.1.1.10.4.28 + uddiIsProjection A 1.3.6.1.1.10.4.29 + uddiLang A 1.3.6.1.1.10.4.30 + uddiv3BusinessKey A 1.3.6.1.1.10.4.31 + uddiv3ServiceKey A 1.3.6.1.1.10.4.32 + uddiv3BindingKey A 1.3.6.1.1.10.4.33 + uddiv3TmodelKey A 1.3.6.1.1.10.4.34 + uddiv3DigitalSignature A 1.3.6.1.1.10.4.35 + uddiv3NodeId A 1.3.6.1.1.10.4.36 + uddiv3EntityModificationTime A 1.3.6.1.1.10.4.37 + uddiv3SubscriptionKey A 1.3.6.1.1.10.4.38 + uddiv3SubscriptionFilter A 1.3.6.1.1.10.4.39 + uddiv3NotificationInterval A 1.3.6.1.1.10.4.40 + uddiv3MaxEntities A 1.3.6.1.1.10.4.41 + uddiv3ExpiresAfter A 1.3.6.1.1.10.4.42 + uddiv3BriefResponse A 1.3.6.1.1.10.4.43 + uddiv3EntityKey A 1.3.6.1.1.10.4.44 + uddiv3EntityCreationTime A 1.3.6.1.1.10.4.45 + uddiv3EntityDeletionTime A 1.3.6.1.1.10.4.46 + uddiBusinessEntity O 1.3.6.1.1.10.6.1 + uddiContact O 1.3.6.1.1.10.6.2 + uddiAddress O 1.3.6.1.1.10.6.3 + uddiBusinessService O 1.3.6.1.1.10.6.4 + uddiBindingTemplate O 1.3.6.1.1.10.6.5 + uddiTModelInstanceInfo O 1.3.6.1.1.10.6.6 + uddiTModel O 1.3.6.1.1.10.6.7 + uddiPublisherAssertion O 1.3.6.1.1.10.6.8 + uddiv3Subscription O 1.3.6.1.1.10.6.9 + uddiv3EntityObituary O 1.3.6.1.1.10.6.10 + uddiBusinessEntityNameForm N 1.3.6.1.1.10.15.1 + uddiContactNameForm N 1.3.6.1.1.10.15.2 + uddiAddressNameForm N 1.3.6.1.1.10.15.3 + + + +Bergeson, et al. Informational [Page 39] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + NAME Type OID + -------------- ---- ------------ + uddiBusinessServiceNameForm N 1.3.6.1.1.10.15.4 + uddiBindingTemplateNameForm N 1.3.6.1.1.10.15.5 + uddiTModelInstanceInfoNameForm N 1.3.6.1.1.10.15.6 + uddiTModelNameForm N 1.3.6.1.1.10.15.7 + uddiPublisherAssertionNameForm N 1.3.6.1.1.10.15.8 + uddiv3SubscriptionNameForm N 1.3.6.1.1.10.15.9 + uddiv3EntityObituaryNameForm N 1.3.6.1.1.10.15.10 + + where Type A is Attribute, Type O is ObjectClass, Type N is NameForm + + These assignments have been recorded in the following registry: + + http://www.iana.org/assignments/ldap-parameters + +10. Normative References + + [LDAPv3] Hodges, J. and R. Morgan, "Lightweight Directory Access + Protocol (v3): Technical Specification", RFC 3377, + September 2002. + + [RFC2252] Wahl, M., Coulbeck, A., Howes, T., and S. Kille, + "Lightweight Directory Access Protocol (v3): Attribute + Syntax Definitions", RFC 2252, December 1997. + + [UDDIdsr] UDDI.ORG, "UDDI version 2.03 Data Structure Reference," + http://uddi.org/pubs/DataStructure-V2.03-Published- + 20020719.htm + + [UDDIapi] "UDDI Version 2.04 API Specification", + http://uddi.org/pubs/ProgrammersAPI-V2.04-Published- + 20020719.htm + + [UDDIv3] UDDI Version 3.0, Published Specification, 19 July 2002 + http://uddi.org/pubs/uddi-v3.00-published-20020719.htm + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC2829] Wahl, M., Alvestrand, H., Hodges, J., and R. Morgan, + "Authentication Methods for LDAP", RFC 2829, May 2000. + + [RFC2830] Hodges, J., Morgan, R., and M. Wahl, "Lightweight Directory + Access Protocol (v3): Extension for Transport Layer + Security", RFC 2830, May 2000. + + + + + +Bergeson, et al. Informational [Page 40] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + + [RFC3383] Zeilenga, K., "Internet Assigned Numbers Authority (IANA) + Considerations for the Lightweight Directory Access + Protocol (LDAP)", BCP 64, RFC 3383, September 2002. + + [XML] Extensible Markup Language (XML) 1.0 (Second Edition) W3C + Recommendation 6 October 2000 http://www.w3.org/TR/REC-xml + + [URL] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform + Resource Identifier (URI): Generic Syntax", STD 66, RFC + 3986, January 2005. + + [HTTP] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., + Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext + Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. + +Authors' Addresses + + Bruce Bergeson + Novell, Inc. + 1800 S Novell Place + Provo, UT 84606 + + Phone: +1 801 861 3854 + EMail: bruce.bergeson@novell.com + + + Kent Boogert + Novell, Inc. + 1800 S Novell Place + Provo, UT 84606 + + Phone: +1 801 861 3212 + EMail: kent.boogert@novell.com + + + Vijay Nanjundaswamy + Oracle India Pvt. Ltd. + Lexington Towers, Prestige St. John's Woods + #18, 2nd Cross Road, + Chikka Audugodi, + Bangalore 560029 + India + + Phone: +11 9180 4108 5000 + EMail: vijay.nanjundaswamy@oracle.com + + + + + + +Bergeson, et al. Informational [Page 41] + +RFC 4403 LDAP Schema for UDDIv3 February 2006 + + +Full Copyright Statement + + 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 + 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. + +Intellectual Property + + 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. + +Acknowledgement + + Funding for the RFC Editor function is provided by the IETF + Administrative Support Activity (IASA). + + + + + + + +Bergeson, et al. Informational [Page 42] + -- GitLab