]> git.sur5r.net Git - openldap/blob - doc/drafts/draft-ietf-ldapbis-protocol-xx.txt
Sync with HEAD
[openldap] / doc / drafts / draft-ietf-ldapbis-protocol-xx.txt
1  
2
3 Internet-Draft                                  Editor:  J. Sermersheim 
4 Intended Category: Standard Track                           Novell, Inc 
5 Document: draft-ietf-ldapbis-protocol-32.txt                   Oct 2005 
6 Obsoletes: RFCs 2251, 2830, 3771                                        
7  
8     
9                             LDAP: The Protocol 
10  
11  
12 Status of this Memo 
13  
14    By submitting this Internet-Draft, each 
15    author represents that any applicable patent or other IPR claims of 
16    which he or she is aware have been or will be disclosed, and any of 
17    which he or she becomes aware will be disclosed, in accordance with 
18    Section 6 of BCP 79. 
19     
20    Internet-Drafts are working documents of the Internet Engineering 
21    Task Force (IETF), its areas, and its working groups. Note that other 
22    groups may also distribute working documents as Internet-Drafts. 
23     
24    Internet-Drafts are draft documents valid for a maximum of six months 
25    and may be updated, replaced, or obsoleted by other documents at any 
26    time. It is inappropriate to use Internet-Drafts as reference 
27    material or to cite them other than as "work in progress".  
28     
29    The list of current Internet-Drafts can be accessed at 
30    http://www.ietf.org/ietf/1id-abstracts.txt.  
31     
32    The list of Internet-Draft Shadow Directories can be accessed at 
33    http://www.ietf.org/shadow.html.  
34     
35    This Internet-Draft will expire in February 2005.  
36     
37    Technical discussion of this document will take place on the IETF 
38    LDAP Revision Working Group (LDAPbis) mailing list <ietf-
39    ldapbis@openldap.org>. Please send editorial comments directly to the 
40    editor <jimse@novell.com>. 
41     
42  
43 Abstract 
44  
45    This document describes the protocol elements, along with their 
46    semantics and encodings, of the Lightweight Directory Access Protocol 
47    (LDAP). LDAP provides access to distributed directory services that 
48    act in accordance with X.500 data and service models. These protocol 
49    elements are based on those described in the X.500 Directory Access 
50    Protocol (DAP). 
51     
52     
53 Table of Contents 
54     
55
56  
57 Sermersheim      Internet-Draft - Expires April 2006              Page 1 \f
58               Lightweight Directory Access Protocol Version 3 
59                                       
60    1. Introduction....................................................3 
61    1.1. Relationship to Other LDAP Specifications.....................3 
62    2. Conventions.....................................................3 
63    3. Protocol Model..................................................4 
64    3.1 Operation and LDAP Message Layer Relationship..................5 
65    4. Elements of Protocol............................................5 
66    4.1. Common Elements...............................................5 
67    4.1.1. Message Envelope............................................5 
68    4.1.2. String Types................................................7 
69    4.1.3. Distinguished Name and Relative Distinguished Name..........7 
70    4.1.4. Attribute Descriptions......................................8 
71    4.1.5. Attribute Value.............................................8 
72    4.1.6. Attribute Value Assertion...................................8 
73    4.1.7. Attribute and PartialAttribute..............................9 
74    4.1.8. Matching Rule Identifier....................................9 
75    4.1.9. Result Message..............................................9 
76    4.1.10. Referral..................................................11 
77    4.1.11. Controls..................................................13 
78    4.2. Bind Operation...............................................14 
79    4.3. Unbind Operation.............................................17 
80    4.4. Unsolicited Notification.....................................17 
81    4.5. Search Operation.............................................18 
82    4.6. Modify Operation.............................................29 
83    4.7. Add Operation................................................31 
84    4.8. Delete Operation.............................................31 
85    4.9. Modify DN Operation..........................................32 
86    4.10. Compare Operation...........................................33 
87    4.11. Abandon Operation...........................................34 
88    4.12. Extended Operation..........................................35 
89    4.13. IntermediateResponse Message................................36 
90    4.14. StartTLS Operation..........................................37 
91    5. Protocol Encoding, Connection, and Transfer....................39 
92    5.1. Protocol Encoding............................................39 
93    5.2. Transmission Control Protocol (TCP)..........................40 
94    5.3. Termination of the LDAP session..............................40 
95    6. Security Considerations........................................40 
96    7. Acknowledgements...............................................42 
97    8. Normative References...........................................42 
98    9. Informative References.........................................44 
99    10. IANA Considerations...........................................44 
100    11. Editor's Address..............................................45 
101    Appendix A - LDAP Result Codes....................................46 
102    A.1 Non-Error Result Codes........................................46 
103    A.2 Result Codes..................................................46 
104    Appendix B - Complete ASN.1 Definition............................51 
105    Appendix C - Changes..............................................57 
106    C.1 Changes made to RFC 2251:.....................................57 
107    C.2 Changes made to RFC 2830:.....................................62 
108    C.3 Changes made to RFC 3771:.....................................63 
109     
110  
111
112
113
114   
115 Sermersheim      Internet-Draft - Expires April 2006              Page 2 \f
116               Lightweight Directory Access Protocol Version 3 
117                                       
118 1. Introduction 
119     
120    The Directory is "a collection of open systems cooperating to provide 
121    directory services" [X.500]. A directory user, which may be a human 
122    or other entity, accesses the Directory through a client (or 
123    Directory User Agent (DUA)). The client, on behalf of the directory 
124    user, interacts with one or more servers (or Directory System Agents 
125    (DSA)). Clients interact with servers using a directory access 
126    protocol.  
127     
128    This document details the protocol elements of the Lightweight 
129    Directory Access Protocol (LDAP), along with their semantics. 
130    Following the description of protocol elements, it describes the way 
131    in which the protocol elements are encoded and transferred. 
132     
133     
134 1.1. Relationship to Other LDAP Specifications 
135     
136    This document is an integral part of the LDAP Technical Specification 
137    [Roadmap] which obsoletes the previously defined LDAP technical 
138    specification, RFC 3377, in its entirety. 
139     
140    This document, together with [Roadmap], [AuthMeth], and [Models], 
141    obsoletes RFC 2251 in its entirety. Section 3.3 is obsoleted by 
142    [Roadmap]. Sections 4.2.1 (portions), and 4.2.2 are obsoleted by 
143    [AuthMeth].  Sections 3.2, 3.4, 4.1.3 (last paragraph), 4.1.4, 4.1.5, 
144    4.1.5.1, 4.1.9 (last paragraph), 5.1, 6.1, and 6.2 (last paragraph) 
145    are obsoleted by [Models].  The remainder of RFC 2251 is obsoleted by 
146    this document.  Appendix C.1 summarizes substantive changes in the 
147    remainder. 
148     
149    This document obsoletes RFC 2830, Sections 2 and 4. The remainder of 
150    RFC 2830 is obsoleted by [AuthMeth]. Appendix C.2 summarizes 
151    substantive changes to the remaining sections. 
152     
153    This document also obsoletes RFC 3771 in entirety. 
154     
155     
156 2. Conventions 
157     
158    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
159    "SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are 
160    to be interpreted as described in [Keyword]. 
161     
162    Character names in this document use the notation for code points and 
163    names from the Unicode Standard [Unicode].  For example, the letter 
164    "a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>. 
165     
166    Note: a glossary of terms used in Unicode can be found in [Glossary]. 
167    Information on the Unicode character encoding model can be found in 
168    [CharModel]. 
169     
170
171
172   
173 Sermersheim      Internet-Draft - Expires April 2006              Page 3 \f
174               Lightweight Directory Access Protocol Version 3 
175                                       
176    The term "transport connection" refers to the underlying transport 
177    services used to carry the protocol exchange, as well as associations 
178    established by these services. 
179     
180    The term "TLS layer" refers to TLS services used in providing 
181    security services, as well as associations established by these 
182    services. 
183     
184    The term "SASL layer" refers to SASL services used in providing 
185    security services, as well as associations established by these 
186    services. 
187     
188    The term "LDAP message layer" refers to the LDAP Message Protocol 
189    Data Unit (PDU) services used in providing directory services, as 
190    well as associations established by these services. 
191     
192    The term "LDAP session" refers to combined services (transport 
193    connection, TLS layer, SASL layer, LDAP message layer) and their 
194    associations. 
195     
196    See the table in Section 5 for an illustration of these four terms. 
197  
198  
199 3. Protocol Model 
200  
201    The general model adopted by this protocol is one of clients 
202    performing protocol operations against servers. In this model, a 
203    client transmits a protocol request describing the operation to be 
204    performed to a server. The server is then responsible for performing 
205    the necessary operation(s) in the Directory. Upon completion of an 
206    operation, the server typically returns a response containing 
207    appropriate data to the requesting client. 
208     
209    Protocol operations are generally independent of one another. Each 
210    operation is processed as an atomic action, leaving the directory in 
211    a consistent state. 
212     
213    Although servers are required to return responses whenever such 
214    responses are defined in the protocol, there is no requirement for 
215    synchronous behavior on the part of either clients or servers. 
216    Requests and responses for multiple operations generally may be 
217    exchanged between a client and server in any order. If required, 
218    synchronous behavior may be controlled by client applications. 
219  
220    The core protocol operations defined in this document can be mapped 
221    to a subset of the X.500 (1993) Directory Abstract Service [X.511]. 
222    However there is not a one-to-one mapping between LDAP operations and 
223    X.500 Directory Access Protocol (DAP) operations. Server 
224    implementations acting as a gateway to X.500 directories may need to 
225    make multiple DAP requests to service a single LDAP request. 
226  
227
228
229
230   
231 Sermersheim      Internet-Draft - Expires April 2006              Page 4 \f
232               Lightweight Directory Access Protocol Version 3 
233                                       
234  
235 3.1. Operation and LDAP Message Layer Relationship 
236     
237    Protocol operations are exchanged at the LDAP message layer. When the 
238    transport connection is closed, any uncompleted operations at the 
239    LDAP message layer, when possible, are abandoned, and when not 
240    possible, are completed without transmission of the response. Also, 
241    when the transport connection is closed, the client MUST NOT assume 
242    that any uncompleted update operations have succeeded or failed. 
243     
244  
245 4. Elements of Protocol 
246     
247    The protocol is described using Abstract Syntax Notation One 
248    ([ASN.1]), and is transferred using a subset of ASN.1 Basic Encoding 
249    Rules ([BER]). Section 5 specifies how the protocol elements are 
250    encoded and transferred. 
251  
252    In order to support future extensions to this protocol, extensibility 
253    is implied where it is allowed per ASN.1 (i.e. sequence, set, choice, 
254    and enumerated types are extensible). In addition, ellipses (...) 
255    have been supplied in ASN.1 types that are explicitly extensible as 
256    discussed in [LDAPIANA]. Because of the implied extensibility, 
257    clients and servers MUST (unless otherwise specified) ignore trailing 
258    SEQUENCE components whose tags they do not recognize.  
259     
260    Changes to the protocol other than through the extension mechanisms 
261    described here require a different version number. A client indicates 
262    the version it is using as part of the BindRequest, described in 
263    Section 4.2. If a client has not sent a Bind, the server MUST assume 
264    the client is using version 3 or later. 
265     
266    Clients may attempt to determine the protocol versions a server 
267    supports by reading the 'supportedLDAPVersion' attribute from the 
268    root DSE (DSA-Specific Entry) [Models]. 
269     
270     
271 4.1. Common Elements 
272     
273    This section describes the LDAPMessage envelope Protocol Data Unit 
274    (PDU) format, as well as data type definitions, which are used in the 
275    protocol operations. 
276     
277     
278 4.1.1. Message Envelope 
279     
280    For the purposes of protocol exchanges, all protocol operations are 
281    encapsulated in a common envelope, the LDAPMessage, which is defined 
282    as follows: 
283     
284
285
286
287
288   
289 Sermersheim      Internet-Draft - Expires April 2006              Page 5 \f
290               Lightweight Directory Access Protocol Version 3 
291                                       
292         LDAPMessage ::= SEQUENCE { 
293              messageID       MessageID, 
294              protocolOp      CHOICE { 
295                   bindRequest           BindRequest, 
296                   bindResponse          BindResponse, 
297                   unbindRequest         UnbindRequest, 
298                   searchRequest         SearchRequest, 
299                   searchResEntry        SearchResultEntry, 
300                   searchResDone         SearchResultDone, 
301                   searchResRef          SearchResultReference, 
302                   modifyRequest         ModifyRequest, 
303                   modifyResponse        ModifyResponse, 
304                   addRequest            AddRequest, 
305                   addResponse           AddResponse, 
306                   delRequest            DelRequest, 
307                   delResponse           DelResponse, 
308                   modDNRequest          ModifyDNRequest, 
309                   modDNResponse         ModifyDNResponse, 
310                   compareRequest        CompareRequest, 
311                   compareResponse       CompareResponse, 
312                   abandonRequest        AbandonRequest, 
313                   extendedReq           ExtendedRequest, 
314                   extendedResp          ExtendedResponse, 
315                   ..., 
316                   intermediateResponse  IntermediateResponse }, 
317              controls       [0] Controls OPTIONAL } 
318     
319         MessageID ::= INTEGER (0 .. maxInt) 
320     
321         maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- 
322     
323    The ASN.1 type Controls is defined in Section 4.1.11. 
324     
325    The function of the LDAPMessage is to provide an envelope containing 
326    common fields required in all protocol exchanges. At this time the 
327    only common fields are the messageID and the controls. 
328     
329    If the server receives an LDAPMessage from the client in which the 
330    LDAPMessage SEQUENCE tag cannot be recognized, the messageID cannot 
331    be parsed, the tag of the protocolOp is not recognized as a request, 
332    or the encoding structures or lengths of data fields are found to be 
333    incorrect, then the server SHOULD return the Notice of Disconnection 
334    described in Section 4.4.1, with the resultCode set to protocolError, 
335    and MUST immediately terminate the LDAP session as described in 
336    Section 5.3.  
337     
338    In other cases where the client or server cannot parse an LDAP PDU, 
339    it SHOULD abruptly terminate the LDAP session (Section 5.3) where 
340    further communication (including providing notice) would be 
341    pernicious. Otherwise, server implementations MUST return an 
342    appropriate response to the request, with the resultCode set to 
343    protocolError. 
344     
345     
346   
347 Sermersheim      Internet-Draft - Expires April 2006              Page 6 \f
348               Lightweight Directory Access Protocol Version 3 
349                                       
350 4.1.1.1. Message ID 
351     
352    All LDAPMessage envelopes encapsulating responses contain the 
353    messageID value of the corresponding request LDAPMessage. 
354     
355    The message ID of a request MUST have a non-zero value different from 
356    the messageID of any other request in progress in the same LDAP 
357    session. The zero value is reserved for the unsolicited notification 
358    message. 
359     
360    Typical clients increment a counter for each request. 
361     
362    A client MUST NOT send a request with the same message ID as an 
363    earlier request in the same LDAP session unless it can be determined 
364    that the server is no longer servicing the earlier request (e.g. 
365    after the final response is received, or a subsequent Bind 
366    completes). Otherwise the behavior is undefined. For this purpose, 
367    note that Abandon and successfully abandoned operations do not send 
368    responses. 
369  
370  
371 4.1.2. String Types 
372     
373    The LDAPString is a notational convenience to indicate that, although 
374    strings of LDAPString type encode as ASN.1 OCTET STRING types, the 
375    [ISO10646] character set (a superset of [Unicode]) is used, encoded 
376    following the [UTF-8] algorithm. Note that Unicode characters U+0000 
377    through U+007F are the same as ASCII 0 through 127, respectively, and 
378    have the same single octet UTF-8 encoding.  Other Unicode characters 
379    have a multiple octet UTF-8 encoding. 
380     
381         LDAPString ::= OCTET STRING -- UTF-8 encoded, 
382                                     -- [ISO10646] characters 
383     
384    The LDAPOID is a notational convenience to indicate that the 
385    permitted value of this string is a (UTF-8 encoded) dotted-decimal 
386    representation of an OBJECT IDENTIFIER. Although an LDAPOID is 
387    encoded as an OCTET STRING, values are limited to the definition of 
388    <numericoid> given in Section 1.4 of [Models]. 
389     
390         LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] 
391          
392    For example, 
393     
394         1.3.6.1.4.1.1466.1.2.3 
395     
396     
397 4.1.3. Distinguished Name and Relative Distinguished Name 
398     
399    An LDAPDN is defined to be the representation of a Distinguished Name 
400    (DN) after encoding according to the specification in [LDAPDN]. 
401     
402         LDAPDN ::= LDAPString 
403                    -- Constrained to <distinguishedName> [LDAPDN] 
404   
405 Sermersheim      Internet-Draft - Expires April 2006              Page 7 \f
406               Lightweight Directory Access Protocol Version 3 
407                                       
408     
409    A RelativeLDAPDN is defined to be the representation of a Relative 
410    Distinguished Name (RDN) after encoding according to the 
411    specification in [LDAPDN]. 
412     
413         RelativeLDAPDN ::= LDAPString 
414                            -- Constrained to <name-component> [LDAPDN] 
415     
416     
417 4.1.4. Attribute Descriptions 
418     
419    The definition and encoding rules for attribute descriptions are 
420    defined in Section 2.5 of [Models]. Briefly, an attribute description 
421    is an attribute type and zero or more options. 
422     
423         AttributeDescription ::= LDAPString 
424                                 -- Constrained to <attributedescription> 
425                                 -- [Models] 
426          
427  
428 4.1.5. Attribute Value 
429     
430    A field of type AttributeValue is an OCTET STRING containing an 
431    encoded attribute value. The attribute value is encoded according to 
432    the LDAP-specific encoding definition of its corresponding syntax. 
433    The LDAP-specific encoding definitions for different syntaxes and 
434    attribute types may be found in other documents and in particular 
435    [Syntaxes]. 
436  
437         AttributeValue ::= OCTET STRING 
438     
439    Note that there is no defined limit on the size of this encoding; 
440    thus protocol values may include multi-megabyte attribute values 
441    (e.g. photographs). 
442     
443    Attribute values may be defined which have arbitrary and non-
444    printable syntax. Implementations MUST NOT display nor attempt to 
445    decode an attribute value if its syntax is not known. The 
446    implementation may attempt to discover the subschema of the source 
447    entry, and retrieve the descriptions of 'attributeTypes' from it 
448    [Models]. 
449     
450    Clients MUST only send attribute values in a request that are valid 
451    according to the syntax defined for the attributes. 
452     
453     
454 4.1.6. Attribute Value Assertion 
455     
456    The AttributeValueAssertion (AVA) type definition is similar to the 
457    one in the X.500 Directory standards. It contains an attribute 
458    description and a matching rule ([Models] Section 4.1.3) assertion 
459    value suitable for that type. Elements of this type are typically 
460    used to assert that the value in assertionValue matches a value of an 
461    attribute. 
462   
463 Sermersheim      Internet-Draft - Expires April 2006              Page 8 \f
464               Lightweight Directory Access Protocol Version 3 
465                                       
466     
467         AttributeValueAssertion ::= SEQUENCE { 
468              attributeDesc   AttributeDescription, 
469              assertionValue  AssertionValue } 
470     
471         AssertionValue ::= OCTET STRING 
472     
473    The syntax of the AssertionValue depends on the context of the LDAP 
474    operation being performed. For example, the syntax of the EQUALITY 
475    matching rule for an attribute is used when performing a Compare 
476    operation. Often this is the same syntax used for values of the 
477    attribute type, but in some cases the assertion syntax differs from 
478    the value syntax. See objectIdentiferFirstComponentMatch in 
479    [Syntaxes] for an example. 
480     
481     
482 4.1.7. Attribute and PartialAttribute 
483     
484    Attributes and partial attributes consist of an attribute description 
485    and attribute values. A PartialAttribute allows zero values, while 
486    Attribute requires at least one value. 
487     
488         PartialAttribute ::= SEQUENCE { 
489              type       AttributeDescription, 
490              vals       SET OF value AttributeValue } 
491     
492         Attribute ::= PartialAttribute(WITH COMPONENTS { 
493              ...,  
494              vals (SIZE(1..MAX))}) 
495     
496    No two of the attribute values may be equivalent as described by 
497    Section 2.3 of [Models]. The set of attribute values is unordered. 
498    Implementations MUST NOT rely upon the ordering being repeatable. 
499     
500     
501 4.1.8. Matching Rule Identifier 
502     
503    Matching rules are defined in Section 4.1.3 of [Models]. A matching 
504    rule is identified in the protocol by the printable representation of 
505    either its <numericoid>, or one of its short name descriptors 
506    [Models], e.g. 'caseIgnoreMatch' or '2.5.13.2'. 
507     
508         MatchingRuleId ::= LDAPString 
509          
510     
511 4.1.9. Result Message 
512     
513    The LDAPResult is the construct used in this protocol to return 
514    success or failure indications from servers to clients. To various 
515    requests, servers will return responses containing the elements found 
516    in LDAPResult to indicate the final status of the protocol operation 
517    request. 
518     
519
520   
521 Sermersheim      Internet-Draft - Expires April 2006              Page 9 \f
522               Lightweight Directory Access Protocol Version 3 
523                                       
524         LDAPResult ::= SEQUENCE { 
525              resultCode         ENUMERATED { 
526                   success                      (0), 
527                   operationsError              (1), 
528                   protocolError                (2), 
529                   timeLimitExceeded            (3), 
530                   sizeLimitExceeded            (4), 
531                   compareFalse                 (5), 
532                   compareTrue                  (6), 
533                   authMethodNotSupported       (7), 
534                   strongerAuthRequired         (8), 
535                        -- 9 reserved -- 
536                   referral                     (10), 
537                   adminLimitExceeded           (11), 
538                   unavailableCriticalExtension (12), 
539                   confidentialityRequired      (13), 
540                   saslBindInProgress           (14), 
541                   noSuchAttribute              (16), 
542                   undefinedAttributeType       (17), 
543                   inappropriateMatching        (18), 
544                   constraintViolation          (19), 
545                   attributeOrValueExists       (20), 
546                   invalidAttributeSyntax       (21), 
547                        -- 22-31 unused -- 
548                   noSuchObject                 (32), 
549                   aliasProblem                 (33), 
550                   invalidDNSyntax              (34), 
551                        -- 35 reserved for undefined isLeaf -- 
552                   aliasDereferencingProblem    (36), 
553                        -- 37-47 unused -- 
554                   inappropriateAuthentication  (48), 
555                   invalidCredentials           (49), 
556                   insufficientAccessRights     (50), 
557                   busy                         (51), 
558                   unavailable                  (52), 
559                   unwillingToPerform           (53), 
560                   loopDetect                   (54), 
561                        -- 55-63 unused -- 
562                   namingViolation              (64), 
563                   objectClassViolation         (65), 
564                   notAllowedOnNonLeaf          (66), 
565                   notAllowedOnRDN              (67), 
566                   entryAlreadyExists           (68), 
567                   objectClassModsProhibited    (69), 
568                        -- 70 reserved for CLDAP -- 
569                   affectsMultipleDSAs          (71), 
570                        -- 72-79 unused -- 
571                   other                        (80), 
572                   ... }, 
573              matchedDN          LDAPDN, 
574              diagnosticMessage  LDAPString, 
575              referral           [3] Referral OPTIONAL } 
576     
577
578   
579 Sermersheim      Internet-Draft - Expires April 2006             Page 10 \f
580               Lightweight Directory Access Protocol Version 3 
581                                       
582    The resultCode enumeration is extensible as defined in Section 3.6 of 
583    [LDAPIANA]. The meanings of the listed result codes are given in 
584    Appendix A. If a server detects multiple errors for an operation, 
585    only one result code is returned. The server should return the result 
586    code that best indicates the nature of the error encountered. Servers 
587    may return substituted result codes to prevent unauthorized 
588    disclosures. 
589     
590    The diagnosticMessage field of this construct may, at the server's 
591    option, be used to return a string containing a textual, human-
592    readable (terminal control and page formatting characters should be 
593    avoided) diagnostic message. As this diagnostic message is not 
594    standardized, implementations MUST NOT rely on the values returned. 
595    Diagnostic messages typically supplement the resultCode with 
596    additional information. If the server chooses not to return a textual 
597    diagnostic, the diagnosticMessage field MUST be empty. 
598     
599    For certain result codes (typically, but not restricted to 
600    noSuchObject, aliasProblem, invalidDNSyntax and 
601    aliasDereferencingProblem), the matchedDN field is set (subject to 
602    access controls) to the name of the last entry (object or alias) used 
603    in finding the target (or base) object. This will be a truncated form 
604    of the provided name or, if an alias was dereferenced while 
605    attempting to locate the entry, of the resulting name. Otherwise the 
606    matchedDN field is empty. 
607     
608     
609 4.1.10. Referral 
610     
611    The referral result code indicates that the contacted server cannot 
612    or will not perform the operation and that one or more other servers 
613    may be able to. Reasons for this include: 
614     
615    - The target entry of the request is not held locally, but the 
616      server has knowledge of its possible existence elsewhere. 
617     
618    - The operation is restricted on this server -- perhaps due to a 
619      read-only copy of an entry to be modified. 
620     
621    The referral field is present in an LDAPResult if the resultCode is 
622    set to referral, and absent with all other result codes. It contains 
623    one or more references to one or more servers or services that may be 
624    accessed via LDAP or other protocols. Referrals can be returned in 
625    response to any operation request (except Unbind and Abandon which do 
626    not have responses). At least one URI MUST be present in the 
627    Referral. 
628     
629    During a Search operation, after the baseObject is located, and 
630    entries are being evaluated, the referral is not returned. Instead, 
631    continuation references, described in Section 4.5.3, are returned 
632    when other servers would need to be contacted to complete the 
633    operation. 
634     
635         Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI 
636   
637 Sermersheim      Internet-Draft - Expires April 2006             Page 11 \f
638               Lightweight Directory Access Protocol Version 3 
639                                       
640     
641         URI ::= LDAPString     -- limited to characters permitted in 
642                                -- URIs 
643     
644    If the client wishes to progress the operation, it contacts one of 
645    the supported services found in the referral. If multiple URIs are 
646    present, the client assumes that any supported URI may be used to 
647    progress the operation. 
648     
649    Clients that follow referrals MUST ensure that they do not loop 
650    between servers. They MUST NOT repeatedly contact the same server for 
651    the same request with the same parameters. Some clients use a counter 
652    that is incremented each time referral handling occurs for an 
653    operation, and these kinds of clients MUST be able to handle at least 
654    ten nested referrals while progressing the operation. 
655     
656    A URI for a server implementing LDAP and accessible via [TCP]/[IP] 
657    (v4 or v6) is written as an LDAP URL according to [LDAPURL].  
658     
659    Referral values which are LDAP URLs follow these rules: 
660     
661    - If an alias was dereferenced, the <dn> part of the LDAP URL MUST 
662      be present, with the new target object name. 
663     
664    - It is RECOMMENDED that the <dn> part be present to avoid 
665      ambiguity. 
666     
667    - If the <dn> part is present, the client uses this name in its next 
668      request to progress the operation, and if it is not present the 
669      client uses the same name as in the original request.  
670     
671    - Some servers (e.g. participating in distributed indexing) may 
672      provide a different filter in a URL of a referral for a Search 
673      operation. 
674     
675    - If the <filter> part of the LDAP URL is present, the client uses 
676      this filter in its next request to progress this Search, and if it 
677      is not present the client uses the same filter as it used for that 
678      Search. 
679     
680    - For Search, it is RECOMMENDED that the <scope> part be present to 
681      avoid ambiguity. 
682     
683    - If the <scope> part is missing, the scope of the original Search 
684      is used by the client to progress the operation. 
685     
686    - Other aspects of the new request may be the same as or different 
687      from the request which generated the referral. 
688     
689    Other kinds of URIs may be returned. The syntax and semantics of such 
690    URIs is left to future specifications. Clients may ignore URIs that 
691    they do not support. 
692     
693
694   
695 Sermersheim      Internet-Draft - Expires April 2006             Page 12 \f
696               Lightweight Directory Access Protocol Version 3 
697                                       
698    UTF-8 encoded characters appearing in the string representation of a 
699    DN, search filter, or other fields of the referral value may not be 
700    legal for URIs (e.g. spaces) and MUST be escaped using the % method 
701    in [URI]. 
702     
703     
704 4.1.11. Controls 
705     
706    Controls provide a mechanism whereby the semantics and arguments of 
707    existing LDAP operations may be extended. One or more controls may be 
708    attached to a single LDAP message. A control only affects the 
709    semantics of the message it is attached to. 
710     
711    Controls sent by clients are termed 'request controls' and those sent 
712    by servers are termed 'response controls'. 
713     
714         Controls ::= SEQUENCE OF control Control 
715     
716         Control ::= SEQUENCE { 
717              controlType             LDAPOID, 
718              criticality             BOOLEAN DEFAULT FALSE, 
719              controlValue            OCTET STRING OPTIONAL } 
720     
721    The controlType field is the dotted-decimal representation of an 
722    OBJECT IDENTIFIER which uniquely identifies the control. This 
723    provides unambiguous naming of controls. Often, response control(s) 
724    solicited by a request control share controlType values with the 
725    request control. 
726     
727    The criticality field only has meaning in controls attached to 
728    request messages (except UnbindRequest). For controls attached to 
729    response messages and the UnbindRequest, the criticality field SHOULD 
730    be FALSE, and MUST be ignored by the receiving protocol peer. A value 
731    of TRUE indicates that it is unacceptable to perform the operation 
732    without applying the semantics of the control. Specifically, the 
733    criticality field is applied as follows: 
734     
735    - If the server does not recognize the control type, determines that 
736      it is not appropriate for the operation, or is otherwise unwilling 
737      to perform the operation with the control, and the criticality 
738      field is TRUE, the server MUST NOT perform the operation, and for 
739      operations that have a response message, MUST return with the 
740      resultCode set to unavailableCriticalExtension. 
741     
742    - If the server does not recognize the control type, determines that 
743      it is not appropriate for the operation, or is otherwise unwilling 
744      to perform the operation with the control, and the criticality 
745      field is FALSE, the server MUST ignore the control. 
746     
747    - Regardless of criticality, if a control is applied to an 
748      operation, it is applied consistently and impartially to the 
749      entire operation.  
750
751
752   
753 Sermersheim      Internet-Draft - Expires April 2006             Page 13 \f
754               Lightweight Directory Access Protocol Version 3 
755                                       
756    The controlValue may contain information associated with the 
757    controlType. Its format is defined by the specification of the 
758    control. Implementations MUST be prepared to handle arbitrary 
759    contents of the controlValue octet string, including zero bytes. It 
760    is absent only if there is no value information which is associated 
761    with a control of its type. When a controlValue is defined in terms 
762    of ASN.1, and BER encoded according to Section 5.1, it also follows 
763    the extensibility rules in Section 4. 
764  
765    Servers list the controlType of request controls they recognize in 
766    the 'supportedControl' attribute in the root DSE (Section 5.1 of 
767    [Models]). 
768  
769    Controls SHOULD NOT be combined unless the semantics of the 
770    combination has been specified. The semantics of control 
771    combinations, if specified, are generally found in the control 
772    specification most recently published. When a combination of controls 
773    is encountered whose semantics are invalid, not specified (or not 
774    known), the message is considered to be not well-formed, thus the 
775    operation fails with protocolError. Controls with a criticality of 
776    FALSE may be ignored in order to arrive at a valid combination. 
777    Additionally, unless order-dependent semantics are given in a 
778    specification, the order of a combination of controls in the SEQUENCE 
779    is ignored. Where the order is to be ignored but cannot be ignored by 
780    the server, the message is considered not well-formed and the 
781    operation fails with protocolError. Again, controls with a 
782    criticality of FALSE may be ignored in order to arrive at a valid 
783    combination. 
784     
785    This document does not specify any controls. Controls may be 
786    specified in other documents. Documents detailing control extensions 
787    are to provide for each control: 
788     
789    - the OBJECT IDENTIFIER assigned to the control, 
790     
791    - direction as to what value the sender should provide for the 
792      criticality field (note: the semantics of the criticality field 
793      are defined above should not be altered by the control's 
794      specification),  
795     
796    - whether the controlValue field is present, and if so, the format 
797      of its contents, 
798     
799    - the semantics of the control, and 
800     
801    - optionally, semantics regarding the combination of the control 
802      with other controls. 
803     
804     
805 4.2. Bind Operation 
806     
807
808
809
810   
811 Sermersheim      Internet-Draft - Expires April 2006             Page 14 \f
812               Lightweight Directory Access Protocol Version 3 
813                                       
814    The function of the Bind operation is to allow authentication 
815    information to be exchanged between the client and server. The Bind 
816    operation should be thought of as the "authenticate" operation. 
817    Operational, authentication, and security-related semantics of this 
818    operation are given in [AuthMeth].  
819     
820    The Bind request is defined as follows: 
821     
822         BindRequest ::= [APPLICATION 0] SEQUENCE { 
823              version                 INTEGER (1 .. 127), 
824              name                    LDAPDN, 
825              authentication          AuthenticationChoice } 
826     
827         AuthenticationChoice ::= CHOICE { 
828              simple                  [0] OCTET STRING, 
829                                      -- 1 and 2 reserved 
830              sasl                    [3] SaslCredentials, 
831              ... } 
832     
833         SaslCredentials ::= SEQUENCE { 
834              mechanism               LDAPString, 
835              credentials             OCTET STRING OPTIONAL } 
836     
837    Fields of the BindRequest are: 
838     
839    - version: A version number indicating the version of the protocol 
840      to be used at the LDAP message layer. This document describes 
841      version 3 of the protocol. There is no version negotiation. The 
842      client sets this field to the version it desires. If the server 
843      does not support the specified version, it MUST respond with a 
844      BindResponse where the resultCode is set to protocolError. 
845     
846    - name: If not empty, the name of the Directory object that the 
847      client wishes to bind as. This field may take on a null value (a 
848      zero length string) for the purposes of anonymous binds 
849      ([AuthMeth] Section 5.1) or when using Simple Authentication and 
850      Security Layer [SASL] authentication ([AuthMeth] Section 5.2). 
851      Where the server attempts to locate the named object, it SHALL NOT 
852      perform alias dereferencing. 
853     
854    - authentication: information used in authentication. This type is 
855      extensible as defined in Section 3.7 of [LDAPIANA]. Servers that 
856      do not support a choice supplied by a client return a BindResponse 
857      with the resultCode set to authMethodNotSupported. 
858       
859      Textual passwords (consisting of a character sequence with a known 
860      character set and encoding) transferred to the server using the 
861      simple AuthenticationChoice SHALL be transferred as [UTF-8] 
862      encoded [Unicode]. Prior to transfer, clients SHOULD prepare text 
863      passwords as "query" strings by applying the [SASLprep] profile of 
864      the [Stringprep] algorithm. Passwords consisting of other data 
865      (such as random octets) MUST NOT be altered. The determination of 
866      whether a password is textual is a local client matter. 
867     
868   
869 Sermersheim      Internet-Draft - Expires April 2006             Page 15 \f
870               Lightweight Directory Access Protocol Version 3 
871                                       
872     
873 4.2.1. Processing of the Bind Request 
874     
875    Before processing a BindRequest, all uncompleted operations MUST 
876    either complete or be abandoned. The server may either wait for the 
877    uncompleted operations to complete, or abandon them. The server then 
878    proceeds to authenticate the client in either a single-step, or 
879    multi-step Bind process. Each step requires the server to return a 
880    BindResponse to indicate the status of authentication.  
881     
882    After sending a BindRequest, clients MUST NOT send further LDAP PDUs 
883    until receiving the BindResponse. Similarly, servers SHOULD NOT 
884    process or respond to requests received while processing a 
885    BindRequest. 
886  
887    If the client did not bind before sending a request and receives an 
888    operationsError to that request, it may then send a BindRequest. If 
889    this also fails or the client chooses not to bind on the existing 
890    LDAP session, it may terminate the LDAP session, re-establish it and 
891    begin again by first sending a BindRequest. This will aid in 
892    interoperating with servers implementing other versions of LDAP. 
893     
894    Clients may send multiple Bind requests to change the authentication 
895    and/or security associations or to complete a multi-stage Bind 
896    process. Authentication from earlier binds is subsequently ignored. 
897  
898    For some SASL authentication mechanisms, it may be necessary for the 
899    client to invoke the BindRequest multiple times ([AuthMeth] Section 
900    5.2). Clients MUST NOT invoke operations between two Bind requests 
901    made as part of a multi-stage Bind. 
902     
903    A client may abort a SASL bind negotiation by sending a BindRequest 
904    with a different value in the mechanism field of SaslCredentials, or 
905    an AuthenticationChoice other than sasl. 
906     
907    If the client sends a BindRequest with the sasl mechanism field as an 
908    empty string, the server MUST return a BindResponse with the 
909    resultCode set to authMethodNotSupported. This will allow clients to 
910    abort a negotiation if it wishes to try again with the same SASL 
911    mechanism. 
912     
913     
914 4.2.2. Bind Response 
915     
916    The Bind response is defined as follows. 
917     
918         BindResponse ::= [APPLICATION 1] SEQUENCE { 
919              COMPONENTS OF LDAPResult, 
920              serverSaslCreds    [7] OCTET STRING OPTIONAL } 
921     
922    BindResponse consists simply of an indication from the server of the 
923    status of the client's request for authentication. 
924     
925
926   
927 Sermersheim      Internet-Draft - Expires April 2006             Page 16 \f
928               Lightweight Directory Access Protocol Version 3 
929                                       
930    A successful Bind operation is indicated by a BindResponse with a 
931    resultCode set to success. Otherwise, an appropriate result code is 
932    set in the BindResponse. For BindResponse, the protocolError result 
933    code may be used to indicate that the version number supplied by the 
934    client is unsupported. 
935  
936    If the client receives a BindResponse where the resultCode is set to 
937    protocolError, it is to assume that the server does not support this 
938    version of LDAP. While the client may be able proceed with another 
939    version of this protocol (this may or may not require closing and re-
940    establishing the transport connection), how to proceed with another 
941    version of this protocol is beyond the scope of this document. 
942    Clients which are unable or unwilling to proceed SHOULD terminate the 
943    LDAP session. 
944     
945    The serverSaslCreds field is used as part of a SASL-defined bind 
946    mechanism to allow the client to authenticate the server to which it 
947    is communicating, or to perform "challenge-response" authentication. 
948    If the client bound with the simple choice, or the SASL mechanism 
949    does not require the server to return information to the client, then 
950    this field SHALL NOT be included in the BindResponse. 
951     
952     
953 4.3. Unbind Operation 
954     
955    The function of the Unbind operation is to terminate an LDAP session. 
956    The Unbind operation is not the antithesis of the Bind operation as 
957    the name implies. The naming of these operations are historical. The 
958    Unbind operation should be thought of as the "quit" operation. 
959     
960    The Unbind operation is defined as follows: 
961     
962         UnbindRequest ::= [APPLICATION 2] NULL 
963     
964    The client, upon transmission of the UnbindRequest, and the server, 
965    upon receipt of the UnbindRequest are to gracefully terminate the 
966    LDAP session as described in Section 5.3.  
967  
968    Uncompleted operations are handled as specified in Section 3.1. 
969     
970     
971 4.4. Unsolicited Notification 
972     
973    An unsolicited notification is an LDAPMessage sent from the server to 
974    the client which is not in response to any LDAPMessage received by 
975    the server. It is used to signal an extraordinary condition in the 
976    server or in the LDAP session between the client and the server. The 
977    notification is of an advisory nature, and the server will not expect 
978    any response to be returned from the client. 
979     
980
981
982
983
984   
985 Sermersheim      Internet-Draft - Expires April 2006             Page 17 \f
986               Lightweight Directory Access Protocol Version 3 
987                                       
988    The unsolicited notification is structured as an LDAPMessage in which 
989    the messageID is zero and protocolOp is set to the extendedResp 
990    choice using the ExtendedResponse type (See Section 4.12). The 
991    responseName field of the ExtendedResponse always contains an LDAPOID 
992    which is unique for this notification. 
993     
994    One unsolicited notification (Notice of Disconnection) is defined in 
995    this document. The specification of an unsolicited notification 
996    consists of: 
997     
998    - the OBJECT IDENTIFIER assigned to the notification (to be 
999      specified in the responseName, 
1000     
1001    - the format of the contents of the responseValue (if any), 
1002     
1003    - the circumstances which will cause the notification to be sent, 
1004      and 
1005     
1006    - the semantics of the message. 
1007     
1008     
1009 4.4.1. Notice of Disconnection 
1010     
1011    This notification may be used by the server to advise the client that 
1012    the server is about to terminate the LDAP session on its own 
1013    initiative. This notification is intended to assist clients in 
1014    distinguishing between an exceptional server condition and a 
1015    transient network failure. Note that this notification is not a 
1016    response to an Unbind requested by the client. Uncompleted operations 
1017    are handled as specified in Section 3.1. 
1018     
1019    The responseName is 1.3.6.1.4.1.1466.20036, the responseValue field 
1020    is absent, and the resultCode is used to indicate the reason for the 
1021    disconnection. When the strongerAuthRequired resultCode is returned 
1022    with this message, it indicates that the server has detected that an 
1023    established security association between the client and server has 
1024    unexpectedly failed or been compromised. 
1025     
1026    Upon transmission of the Notice of Disconnection, the server 
1027    gracefully terminates the LDAP session as described in Section 5.3.  
1028     
1029     
1030 4.5. Search Operation 
1031     
1032    The Search operation is used to request a server to return, subject 
1033    to access controls and other restrictions, a set of entries matching 
1034    a complex search criterion. This can be used to read attributes from 
1035    a single entry, from entries immediately subordinate to a particular 
1036    entry, or a whole subtree of entries. 
1037     
1038     
1039 4.5.1. Search Request 
1040     
1041    The Search request is defined as follows: 
1042   
1043 Sermersheim      Internet-Draft - Expires April 2006             Page 18 \f
1044               Lightweight Directory Access Protocol Version 3 
1045                                       
1046     
1047         SearchRequest ::= [APPLICATION 3] SEQUENCE { 
1048              baseObject      LDAPDN, 
1049              scope           ENUMERATED { 
1050                   baseObject              (0), 
1051                   singleLevel             (1), 
1052                   wholeSubtree            (2), 
1053                   ... }, 
1054              derefAliases    ENUMERATED { 
1055                   neverDerefAliases       (0), 
1056                   derefInSearching        (1), 
1057                   derefFindingBaseObj     (2), 
1058                   derefAlways             (3) }, 
1059              sizeLimit       INTEGER (0 .. maxInt), 
1060              timeLimit       INTEGER (0 .. maxInt), 
1061              typesOnly       BOOLEAN, 
1062              filter          Filter, 
1063              attributes      AttributeSelection } 
1064     
1065         AttributeSelection ::= SEQUENCE OF selector LDAPString 
1066                         -- The LDAPString is constrained to 
1067                         -- <attributeSelector> in Section 4.5.1.7 
1068     
1069         Filter ::= CHOICE { 
1070              and             [0] SET SIZE (1..MAX) OF filter Filter, 
1071              or              [1] SET SIZE (1..MAX) OF filter Filter, 
1072              not             [2] Filter, 
1073              equalityMatch   [3] AttributeValueAssertion, 
1074              substrings      [4] SubstringFilter, 
1075              greaterOrEqual  [5] AttributeValueAssertion, 
1076              lessOrEqual     [6] AttributeValueAssertion, 
1077              present         [7] AttributeDescription, 
1078              approxMatch     [8] AttributeValueAssertion, 
1079              extensibleMatch [9] MatchingRuleAssertion, 
1080              ... } 
1081     
1082         SubstringFilter ::= SEQUENCE { 
1083              type           AttributeDescription, 
1084              substrings     SEQUENCE SIZE (1..MAX) OF substring CHOICE { 
1085                   initial [0] AssertionValue,  -- can occur at most once 
1086                   any     [1] AssertionValue, 
1087                   final   [2] AssertionValue } -- can occur at most once  
1088              } 
1089     
1090         MatchingRuleAssertion ::= SEQUENCE { 
1091              matchingRule    [1] MatchingRuleId OPTIONAL, 
1092              type            [2] AttributeDescription OPTIONAL, 
1093              matchValue      [3] AssertionValue, 
1094              dnAttributes    [4] BOOLEAN DEFAULT FALSE } 
1095     
1096
1097
1098
1099
1100   
1101 Sermersheim      Internet-Draft - Expires April 2006             Page 19 \f
1102               Lightweight Directory Access Protocol Version 3 
1103                                       
1104    Note that an X.500 "list"-like operation can be emulated by the 
1105    client requesting a singleLevel Search operation with a filter 
1106    checking for the presence of the 'objectClass' attribute, and that an 
1107    X.500 "read"-like operation can be emulated by a baseObject Search 
1108    operation with the same filter.  A server which provides a gateway to 
1109    X.500 is not required to use the Read or List operations, although it 
1110    may choose to do so, and if it does, it must provide the same 
1111    semantics as the X.500 Search operation. 
1112  
1113  
1114 4.5.1.1. SearchRequest.baseObject 
1115     
1116    The name of the base object entry (or possibly the root) relative to 
1117    which the Search is to be performed. 
1118     
1119     
1120 4.5.1.2. SearchRequest.scope 
1121  
1122    Specifies the scope of the Search to be performed. The semantics (as 
1123    described in [X.511]) of the defined values of this field are: 
1124     
1125      baseObject:  The scope is constrained to the entry named by 
1126      baseObject. 
1127       
1128      singleLevel: The scope is constrained to the immediate 
1129      subordinates of the entry named by baseObject. 
1130       
1131      wholeSubtree: the scope is constrained to the entry named by the 
1132      baseObject, and all its subordinates. 
1133     
1134     
1135 4.5.1.3. SearchRequest.derefAliases 
1136  
1137    An indicator as to whether or not alias entries (as defined in 
1138    [Models]) are to be dereferenced during stages of the Search 
1139    operation.  
1140     
1141    The act of dereferencing an alias includes recursively dereferencing 
1142    aliases which refer to aliases. 
1143     
1144    Servers MUST detect looping while dereferencing aliases in order to 
1145    prevent denial of service attacks of this nature. 
1146     
1147    The semantics of the defined values of this field are: 
1148     
1149      neverDerefAliases: Do not dereference aliases in searching or in 
1150      locating the base object of the Search. 
1151       
1152
1153
1154
1155
1156
1157
1158   
1159 Sermersheim      Internet-Draft - Expires April 2006             Page 20 \f
1160               Lightweight Directory Access Protocol Version 3 
1161                                       
1162      derefInSearching: While searching subordinates of the base object, 
1163      dereference any alias within the search scope. Dereferenced 
1164      objects become the vertices of further search scopes where the 
1165      Search operation is also applied. If the search scope is 
1166      wholeSubtree, the Search continues in the subtree(s) of any 
1167      dereferenced object. If the search scope is singleLevel, the 
1168      search is applied to any dereferenced objects, and is not applied 
1169      to their subordinates. Servers SHOULD eliminate duplicate entries 
1170      that arise due to alias dereferencing while searching. 
1171       
1172      derefFindingBaseObj: Dereference aliases in locating the base 
1173      object of the Search, but not when searching subordinates of the 
1174      base object. 
1175       
1176      derefAlways: Dereference aliases both in searching and in locating 
1177      the base object of the Search. 
1178  
1179     
1180 4.5.1.4. SearchRequest.sizeLimit 
1181  
1182    A size limit that restricts the maximum number of entries to be 
1183    returned as a result of the Search. A value of zero in this field 
1184    indicates that no client-requested size limit restrictions are in 
1185    effect for the Search. Servers may also enforce a maximum number of 
1186    entries to return. 
1187     
1188     
1189 4.5.1.5. SearchRequest.timeLimit 
1190  
1191    A time limit that restricts the maximum time (in seconds) allowed for 
1192    a Search. A value of zero in this field indicates that no client-
1193    requested time limit restrictions are in effect for the Search. 
1194    Servers may also enforce a maximum time limit for the Search. 
1195     
1196     
1197 4.5.1.6. SearchRequest.typesOnly 
1198     
1199    An indicator as to whether Search results are to contain both 
1200    attribute descriptions and values, or just attribute descriptions. 
1201    Setting this field to TRUE causes only attribute descriptions (no 
1202    values) to be returned. Setting this field to FALSE causes both 
1203    attribute descriptions and values to be returned. 
1204     
1205     
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216   
1217 Sermersheim      Internet-Draft - Expires April 2006             Page 21 \f
1218               Lightweight Directory Access Protocol Version 3 
1219                                       
1220 4.5.1.7. SearchRequest.filter 
1221  
1222    A filter that defines the conditions that must be fulfilled in order 
1223    for the Search to match a given entry. 
1224     
1225    The 'and', 'or' and 'not' choices can be used to form combinations of 
1226    filters. At least one filter element MUST be present in an 'and' or 
1227    'or' choice. The others match against individual attribute values of 
1228    entries in the scope of the Search. (Implementor's note: the 'not' 
1229    filter is an example of a tagged choice in an implicitly-tagged 
1230    module. In BER this is treated as if the tag was explicit.) 
1231     
1232    A server MUST evaluate filters according to the three-valued logic of 
1233    [X.511] (1993) Clause 7.8.1. In summary, a filter is evaluated to 
1234    either "TRUE", "FALSE" or "Undefined". If the filter evaluates to 
1235    TRUE for a particular entry, then the attributes of that entry are 
1236    returned as part of the Search result (subject to any applicable 
1237    access control restrictions). If the filter evaluates to FALSE or 
1238    Undefined, then the entry is ignored for the Search. 
1239     
1240    A filter of the "and" choice is TRUE if all the filters in the SET OF 
1241    evaluate to TRUE, FALSE if at least one filter is FALSE, and 
1242    otherwise Undefined. A filter of the "or" choice is FALSE if all of 
1243    the filters in the SET OF evaluate to FALSE, TRUE if at least one 
1244    filter is TRUE, and Undefined otherwise. A filter of the 'not' choice 
1245    is TRUE if the filter being negated is FALSE, FALSE if it is TRUE, 
1246    and Undefined if it is Undefined. 
1247     
1248    A filter item evaluates to Undefined when the server would not be 
1249    able to determine whether the assertion value matches an entry. 
1250    Examples include: 
1251   
1252    - An attribute description in an equalityMatch, substrings, 
1253      greaterOrEqual, lessOrEqual, approxMatch or extensibleMatch 
1254      filter is not recognized by the server. 
1255     
1256    - The attribute type does not define the appropriate matching 
1257      rule. 
1258     
1259    - A MatchingRuleId in the extensibleMatch is not recognized by 
1260      the server or is not valid for the attribute type. 
1261     
1262    - The type of filtering requested is not implemented. 
1263     
1264    - The assertion value is invalid.  
1265     
1266    For example, if a server did not recognize the attribute type 
1267    shoeSize, the filters (shoeSize=*), (shoeSize=12), (shoeSize>=12) and 
1268    (shoeSize<=12) would each evaluate to Undefined. 
1269     
1270    Servers MUST NOT return errors if attribute descriptions or matching 
1271    rule ids are not recognized, assertion values are invalid, or the 
1272    assertion syntax is not supported. More details of filter processing 
1273    are given in Clause 7.8 of [X.511]. 
1274   
1275 Sermersheim      Internet-Draft - Expires April 2006             Page 22 \f
1276               Lightweight Directory Access Protocol Version 3 
1277                                       
1278  
1279  
1280 4.5.1.7.1. SearchRequest.filter.equalityMatch 
1281     
1282    The matching rule for an equalityMatch filter is defined by the 
1283    EQUALITY matching rule for the attribute type or subtype. The filter 
1284    is TRUE when the EQUALITY rule returns TRUE as applied to the 
1285    attribute or subtype and the asserted value. 
1286     
1287     
1288 4.5.1.7.2. SearchRequest.filter.substrings 
1289     
1290    There SHALL be at most one 'initial', and at most one 'final' in the 
1291    'substrings' of a SubstringFilter. If 'initial' is present, it SHALL 
1292    be the first element of 'substrings'. If 'final' is present, it SHALL 
1293    be the last element of 'substrings'.  
1294     
1295    The matching rule for an AssertionValue in a substrings filter item 
1296    is defined by the SUBSTR matching rule for the attribute type or 
1297    subtype. The filter is TRUE when the SUBSTR rule returns TRUE as 
1298    applied to the attribute or subtype and the asserted value. 
1299     
1300    Note that the AssertionValue in a substrings filter item conforms to 
1301    the assertion syntax of the EQUALITY matching rule for the attribute 
1302    type rather than the assertion syntax of the SUBSTR matching rule for 
1303    the attribute type. Conceptually, the entire SubstringFilter is 
1304    converted into an assertion value of the substrings matching rule 
1305    prior to applying the rule. 
1306     
1307     
1308 4.5.1.7.3. SearchRequest.filter.greaterOrEqual 
1309     
1310    The matching rule for a greaterOrEqual filter is defined by the 
1311    ORDERING matching rule for the attribute type or subtype. The filter 
1312    is TRUE when the ORDERING rule returns FALSE as applied to the 
1313    attribute or subtype and the asserted value. 
1314  
1315  
1316 4.5.1.7.4. SearchRequest.filter.lessOrEqual 
1317     
1318    The matching rules for a lessOrEqual filter are defined by the 
1319    ORDERING and EQUALITY matching rules for the attribute type or 
1320    subtype. The filter is TRUE when either the ORDERING or EQUALITY rule 
1321    returns TRUE as applied to the attribute or subtype and the asserted 
1322    value. 
1323     
1324     
1325 4.5.1.7.5. SearchRequest.filter.present 
1326     
1327    A present filter is TRUE when there is an attribute or subtype of the 
1328    specified attribute description present in an entry, FALSE when no 
1329    attribute or subtype of the specified attribute description is 
1330    present in an entry, and Undefined otherwise. 
1331     
1332   
1333 Sermersheim      Internet-Draft - Expires April 2006             Page 23 \f
1334               Lightweight Directory Access Protocol Version 3 
1335                                       
1336     
1337 4.5.1.7.6. SearchRequest.filter.approxMatch 
1338     
1339    An approxMatch filter is TRUE when there is a value of the attribute 
1340    type or subtype for which some locally-defined approximate matching 
1341    algorithm (e.g. spelling variations, phonetic match, etc.) returns 
1342    TRUE. If a value matches for equality, it also satisfies an 
1343    approximate match. If approximate matching is not supported for the 
1344    attribute, this filter item should be treated as an equalityMatch. 
1345     
1346     
1347 4.5.1.7.7. SearchRequest.filter.extensibleMatch 
1348  
1349    The fields of the extensibleMatch filter item are evaluated as 
1350    follows: 
1351     
1352    - If the matchingRule field is absent, the type field MUST be 
1353      present, and an equality match is performed for that type. 
1354       
1355    - If the type field is absent and the matchingRule is present, the 
1356      matchValue is compared against all attributes in an entry which 
1357      support that matchingRule.  
1358     
1359    - If the type field is present and the matchingRule is present, the 
1360      matchValue is compared against the specified attribute type and 
1361      its subtypes. 
1362  
1363    - If the dnAttributes field is set to TRUE, the match is 
1364      additionally applied against all the AttributeValueAssertions in 
1365      an entry's distinguished name, and evaluates to TRUE if there is 
1366      at least one attribute or subtype in the distinguished name for 
1367      which the filter item evaluates to TRUE. The dnAttributes field is 
1368      present to alleviate the need for multiple versions of generic 
1369      matching rules (such as word matching), where one applies to 
1370      entries and another applies to entries and DN attributes as well. 
1371       
1372    The matchingRule used for evaluation determines the syntax for the 
1373    assertion value. Once the matchingRule and attribute(s) have been 
1374    determined, the filter item evaluates to TRUE if it matches at least 
1375    one attribute type or subtype in the entry, FALSE if it does not 
1376    match any attribute type or subtype in the entry, and Undefined if 
1377    the matchingRule is not recognized, the matchingRule is unsuitable 
1378    for use with the specified type, or the assertionValue is invalid. 
1379     
1380     
1381 4.5.1.7. SearchRequest.attributes 
1382     
1383    A selection list of the attributes to be returned from each entry 
1384    which matches the search filter. Attributes which are subtypes of 
1385    listed attributes are implicitly included. LDAPString values of this 
1386    field are constrained to the following Augmented Backus-Naur Form 
1387    ([ABNF]): 
1388     
1389      attributeSelector = attributedescription / selectorspecial 
1390   
1391 Sermersheim      Internet-Draft - Expires April 2006             Page 24 \f
1392               Lightweight Directory Access Protocol Version 3 
1393                                       
1394     
1395      selectorspecial = noattrs / alluserattrs 
1396     
1397      noattrs = %x31.2E.31 ; "1.1" 
1398     
1399      alluserattrs = %x2A ; asterisk ("*") 
1400     
1401      The <attributedescription> production is defined in Section 2.5 of 
1402      [Models]. 
1403     
1404    There are three special cases which may appear in the attributes 
1405    selection list:  
1406         
1407      - an empty list with no attributes,  
1408         
1409      - a list containing "*" (with zero or more attribute 
1410         descriptions), and  
1411                                           
1412      - a list containing only "1.1".  
1413         
1414      An empty list requests the return of all user attributes.   
1415         
1416      A list containing "*" requests the return of all user attributes 
1417      in addition to other listed (operational) attributes.   
1418         
1419      A list containing only the OID "1.1" indicates that no attributes 
1420      are to be returned. If "1.1" is provided with other 
1421      attributeSelector values, the "1.1" attributeSelector is ignored. 
1422      This OID was chosen because it does not (and can not) correspond 
1423      to any attribute in use. 
1424  
1425    Client implementors should note that even if all user attributes are 
1426    requested, some attributes and/or attribute values of the entry may 
1427    not be included in Search results due to access controls or other 
1428    restrictions. Furthermore, servers will not return operational 
1429    attributes, such as objectClasses or attributeTypes, unless they are 
1430    listed by name. Operational attributes are described in [Models]. 
1431     
1432    Attributes are returned at most once in an entry. If an attribute 
1433    description is named more than once in the list, the subsequent names 
1434    are ignored. If an attribute description in the list is not 
1435    recognized, it is ignored by the server. 
1436     
1437     
1438 4.5.2. Search Result 
1439     
1440    The results of the Search operation are returned as zero or more 
1441    SearchResultEntry and/or SearchResultReference messages, followed by 
1442    a single SearchResultDone message. 
1443     
1444         SearchResultEntry ::= [APPLICATION 4] SEQUENCE { 
1445              objectName      LDAPDN, 
1446              attributes      PartialAttributeList } 
1447     
1448   
1449 Sermersheim      Internet-Draft - Expires April 2006             Page 25 \f
1450               Lightweight Directory Access Protocol Version 3 
1451                                       
1452         PartialAttributeList ::= SEQUENCE OF  
1453                              partialAttribute PartialAttribute   
1454     
1455         SearchResultReference ::= [APPLICATION 19] SEQUENCE  
1456                                   SIZE (1..MAX) OF uri URI 
1457     
1458         SearchResultDone ::= [APPLICATION 5] LDAPResult 
1459     
1460    Each SearchResultEntry represents an entry found during the Search. 
1461    Each SearchResultReference represents an area not yet explored during 
1462    the Search. The SearchResultEntry and SearchResultReference messages 
1463    may come in any order. Following all the SearchResultReference and 
1464    SearchResultEntry responses, the server returns a SearchResultDone 
1465    response, which contains an indication of success, or detailing any 
1466    errors that have occurred. 
1467     
1468    Each entry returned in a SearchResultEntry will contain all 
1469    appropriate attributes as specified in the attributes field of the 
1470    Search Request, subject to access control and other administrative 
1471    policy. Note that the PartialAttributeList may hold zero elements. 
1472    This may happen when none of the attributes of an entry were 
1473    requested, or could be returned. Note also that the partialAttribute 
1474    vals set may hold zero elements. This may happen when typesOnly is 
1475    requested, access controls prevent the return of values, or other 
1476    reasons. 
1477     
1478    Some attributes may be constructed by the server and appear in a 
1479    SearchResultEntry attribute list, although they are not stored 
1480    attributes of an entry. Clients SHOULD NOT assume that all attributes 
1481    can be modified, even if permitted by access control. 
1482     
1483    If the server's schema defines short names [Models] for an attribute 
1484    type then the server SHOULD use one of those names in attribute 
1485    descriptions for that attribute type (in preference to using the 
1486    <numericoid> [Models] format of the attribute type's object 
1487    identifier). The server SHOULD NOT use the short name if that name is 
1488    known by the server to be ambiguous, or otherwise likely to cause 
1489    interoperability problems. 
1490     
1491     
1492 4.5.3. Continuation References in the Search Result 
1493     
1494    If the server was able to locate the entry referred to by the 
1495    baseObject but was unable or unwilling to search one or more non-
1496    local entries, the server may return one or more 
1497    SearchResultReference messages, each containing a reference to 
1498    another set of servers for continuing the operation. A server MUST 
1499    NOT return any SearchResultReference messages if it has not located 
1500    the baseObject and thus has not searched any entries; in this case it 
1501    would return a SearchResultDone containing either a referral or 
1502    noSuchObject result code (depending on the server's knowledge of the 
1503    entry named in the baseObject). 
1504     
1505
1506   
1507 Sermersheim      Internet-Draft - Expires April 2006             Page 26 \f
1508               Lightweight Directory Access Protocol Version 3 
1509                                       
1510    If a server holds a copy or partial copy of the subordinate naming 
1511    context (Section 5 of [Models]), it may use the search filter to 
1512    determine whether or not to return a SearchResultReference response. 
1513    Otherwise SearchResultReference responses are always returned when in 
1514    scope. 
1515     
1516    The SearchResultReference is of the same data type as the Referral.  
1517     
1518    If the client wishes to progress the Search, it issues a new Search 
1519    operation for each SearchResultReference that is returned. If 
1520    multiple URIs are present, the client assumes that any supported URI 
1521    may be used to progress the operation. 
1522     
1523    Clients that follow search continuation references MUST ensure that 
1524    they do not loop between servers. They MUST NOT repeatedly contact 
1525    the same server for the same request with the same parameters. Some 
1526    clients use a counter that is incremented each time search result 
1527    reference handling occurs for an operation, and these kinds of 
1528    clients MUST be able to handle at least ten nested referrals while 
1529    progressing the operation. 
1530     
1531    Note that the Abandon operation described in Section 4.11 applies 
1532    only to a particular operation sent at the LDAP message layer between 
1533    a client and server. The client must abandon subsequent Search 
1534    operations it wishes to individually.  
1535     
1536    A URI for a server implementing LDAP and accessible via [TCP]/[IP] 
1537    (v4 or v6) is written as an LDAP URL according to [LDAPURL].  
1538     
1539    SearchResultReference values which are LDAP URLs follow these rules: 
1540     
1541    - The <dn> part of the LDAP URL MUST be present, with the new target 
1542      object name. The client uses this name when following the 
1543      reference.  
1544     
1545    - Some servers (e.g. participating in distributed indexing) may 
1546      provide a different filter in the LDAP URL. 
1547     
1548    - If the <filter> part of the LDAP URL is present, the client uses 
1549      this filter in its next request to progress this Search, and if it 
1550      is not present the client uses the same filter as it used for that 
1551      Search.  
1552     
1553    - If the originating search scope was singleLevel, the <scope> part 
1554      of the LDAP URL will be "base". 
1555     
1556    - It is RECOMMENDED that the <scope> part be present to avoid 
1557      ambiguity. In the absence of a <scope> part, the scope of the 
1558      original Search request is assumed. 
1559     
1560    - Other aspects of the new Search request may be the same as or 
1561      different from the Search request which generated the 
1562      SearchResultReference. 
1563     
1564   
1565 Sermersheim      Internet-Draft - Expires April 2006             Page 27 \f
1566               Lightweight Directory Access Protocol Version 3 
1567                                       
1568    - The name of an unexplored subtree in a SearchResultReference need 
1569      not be subordinate to the base object. 
1570  
1571    Other kinds of URIs may be returned. The syntax and semantics of such 
1572    URIs is left to future specifications. Clients may ignore URIs that 
1573    they do not support. 
1574     
1575    UTF-8 encoded characters appearing in the string representation of a 
1576    DN, search filter, or other fields of the referral value may not be 
1577    legal for URIs (e.g. spaces) and MUST be escaped using the % method 
1578    in [URI]. 
1579     
1580  
1581     
1582 4.5.3.1. Examples 
1583     
1584    For example, suppose the contacted server (hosta) holds the entry 
1585    <DC=Example,DC=NET> and the entry <CN=Manager,DC=Example,DC=NET>. It 
1586    knows that both LDAP servers (hostb) and (hostc) hold 
1587    <OU=People,DC=Example,DC=NET> (one is the master and the other server 
1588    a shadow), and that LDAP-capable server (hostd) holds the subtree 
1589    <OU=Roles,DC=Example,DC=NET>. If a wholeSubtree Search of 
1590    <DC=Example,DC=NET> is requested to the contacted server, it may 
1591    return the following: 
1592     
1593      SearchResultEntry for DC=Example,DC=NET 
1594      SearchResultEntry for CN=Manager,DC=Example,DC=NET 
1595      SearchResultReference { 
1596        ldap://hostb/OU=People,DC=Example,DC=NET??sub 
1597        ldap://hostc/OU=People,DC=Example,DC=NET??sub } 
1598      SearchResultReference { 
1599        ldap://hostd/OU=Roles,DC=Example,DC=NET??sub } 
1600      SearchResultDone (success) 
1601     
1602    Client implementors should note that when following a 
1603    SearchResultReference, additional SearchResultReference may be 
1604    generated. Continuing the example, if the client contacted the server 
1605    (hostb) and issued the Search request for the subtree 
1606    <OU=People,DC=Example,DC=NET>, the server might respond as follows: 
1607     
1608      SearchResultEntry for OU=People,DC=Example,DC=NET 
1609      SearchResultReference { 
1610        ldap://hoste/OU=Managers,OU=People,DC=Example,DC=NET??sub } 
1611      SearchResultReference { 
1612        ldap://hostf/OU=Consultants,OU=People,DC=Example,DC=NET??sub } 
1613      SearchResultDone (success) 
1614     
1615    Similarly, if a singleLevel Search of <DC=Example,DC=NET> is 
1616    requested to the contacted server, it may return the following: 
1617     
1618
1619
1620
1621
1622   
1623 Sermersheim      Internet-Draft - Expires April 2006             Page 28 \f
1624               Lightweight Directory Access Protocol Version 3 
1625                                       
1626      SearchResultEntry for CN=Manager,DC=Example,DC=NET 
1627      SearchResultReference { 
1628        ldap://hostb/OU=People,DC=Example,DC=NET??base 
1629        ldap://hostc/OU=People,DC=Example,DC=NET??base } 
1630      SearchResultReference { 
1631        ldap://hostd/OU=Roles,DC=Example,DC=NET??base } 
1632      SearchResultDone (success) 
1633     
1634    If the contacted server does not hold the base object for the Search, 
1635    but has knowledge of its possible location, then it may return a 
1636    referral to the client. In this case, if the client requests a 
1637    subtree Search of <DC=Example,DC=ORG> to hosta, the server returns a 
1638    SearchResultDone containing a referral. 
1639     
1640      SearchResultDone (referral) { 
1641        ldap://hostg/DC=Example,DC=ORG??sub } 
1642     
1643     
1644 4.6. Modify Operation 
1645     
1646    The Modify operation allows a client to request that a modification 
1647    of an entry be performed on its behalf by a server. The Modify 
1648    Request is defined as follows: 
1649     
1650         ModifyRequest ::= [APPLICATION 6] SEQUENCE { 
1651              object          LDAPDN, 
1652              changes         SEQUENCE OF change SEQUENCE { 
1653                   operation       ENUMERATED { 
1654                        add     (0), 
1655                        delete  (1), 
1656                        replace (2), 
1657                        ... }, 
1658                   modification    PartialAttribute } } 
1659  
1660    Fields of the Modify Request are: 
1661     
1662    - object: The value of this field contains the name of the entry to 
1663      be modified. The server SHALL NOT perform any alias dereferencing 
1664      in determining the object to be modified. 
1665     
1666    - changes: A list of modifications to be performed on the entry. The 
1667      entire list of modifications MUST be performed in the order they 
1668      are listed as a single atomic operation. While individual 
1669      modifications may violate certain aspects of the directory schema 
1670      (such as the object class definition and DIT content rule), the 
1671      resulting entry after the entire list of modifications is 
1672      performed MUST conform to the requirements of the directory model 
1673      and controlling schema [Models]. 
1674          
1675      -  operation: Used to specify the type of modification being 
1676         performed. Each operation type acts on the following 
1677         modification. The values of this field have the following 
1678         semantics respectively: 
1679     
1680   
1681 Sermersheim      Internet-Draft - Expires April 2006             Page 29 \f
1682               Lightweight Directory Access Protocol Version 3 
1683                                       
1684            add: add values listed to the modification attribute, 
1685            creating the attribute if necessary; 
1686             
1687            delete: delete values listed from the modification attribute. 
1688            If no values are listed, or if all current values of the 
1689            attribute are listed, the entire attribute is removed; 
1690             
1691            replace: replace all existing values of the modification 
1692            attribute with the new values listed, creating the attribute 
1693            if it did not already exist. A replace with no value will 
1694            delete the entire attribute if it exists, and is ignored if 
1695            the attribute does not exist. 
1696     
1697      -  modification: A PartialAttribute (which may have an empty SET 
1698         of vals) used to hold the attribute type or attribute type and 
1699         values being modified. 
1700     
1701    Upon receipt of a Modify Request, the server attempts to perform the 
1702    necessary modifications to the DIT and returns the result in a Modify 
1703    Response, defined as follows: 
1704     
1705         ModifyResponse ::= [APPLICATION 7] LDAPResult 
1706     
1707    The server will return to the client a single Modify Response 
1708    indicating either the successful completion of the DIT modification, 
1709    or the reason that the modification failed. Due to the requirement 
1710    for atomicity in applying the list of modifications in the Modify 
1711    Request, the client may expect that no modifications of the DIT have 
1712    been performed if the Modify Response received indicates any sort of 
1713    error, and that all requested modifications have been performed if 
1714    the Modify Response indicates successful completion of the Modify 
1715    operation. Whether the modification was applied or not cannot be 
1716    determined by the client if the Modify Response was not received 
1717    (e.g. the LDAP session was terminated or the Modify operation was 
1718    abandoned). 
1719     
1720    Servers MUST ensure that entries conform to user and system schema 
1721    rules or other data model constraints. The Modify operation cannot be 
1722    used to remove from an entry any of its distinguished values, i.e. 
1723    those values which form the entry's relative distinguished name. An 
1724    attempt to do so will result in the server returning the 
1725    notAllowedOnRDN result code. The Modify DN operation described in 
1726    Section 4.9 is used to rename an entry. 
1727     
1728    For attribute types which specify no equality matching, the rules in 
1729    Section 2.5.1 of [Models] are followed. 
1730     
1731    Note that due to the simplifications made in LDAP, there is not a 
1732    direct mapping of the changes in an LDAP ModifyRequest onto the 
1733    changes of a DAP ModifyEntry operation, and different implementations 
1734    of LDAP-DAP gateways may use different means of representing the 
1735    change. If successful, the final effect of the operations on the 
1736    entry MUST be identical. 
1737     
1738   
1739 Sermersheim      Internet-Draft - Expires April 2006             Page 30 \f
1740               Lightweight Directory Access Protocol Version 3 
1741                                       
1742     
1743 4.7. Add Operation 
1744     
1745    The Add operation allows a client to request the addition of an entry 
1746    into the Directory. The Add Request is defined as follows: 
1747     
1748         AddRequest ::= [APPLICATION 8] SEQUENCE { 
1749              entry           LDAPDN, 
1750              attributes      AttributeList } 
1751     
1752         AttributeList ::= SEQUENCE OF attribute Attribute 
1753     
1754    Fields of the Add Request are: 
1755     
1756    - entry: the name of the entry to be added. The server SHALL NOT 
1757      dereference any aliases in locating the entry to be added. 
1758     
1759    - attributes: the list of attributes that, along with those from the 
1760      RDN, make up the content of the entry being added. Clients MAY or 
1761      MAY NOT include the RDN attribute(s) in this list. Clients MUST 
1762      NOT supply NO-USER-MODIFICATION attributes such as the 
1763      createTimestamp or creatorsName attributes, since the server 
1764      maintains these automatically. 
1765     
1766    Servers MUST ensure that entries conform to user and system schema 
1767    rules or other data model constraints. For attribute types which 
1768    specify no equality matching, the rules in Section 2.5.1 of [Models] 
1769    are followed (this applies to the naming attribute in addition to any 
1770    multi-valued attributes being added). 
1771     
1772    The entry named in the entry field of the AddRequest MUST NOT exist 
1773    for the AddRequest to succeed. The immediate superior (parent) of an 
1774    object or alias entry to be added MUST exist. For example, if the 
1775    client attempted to add <CN=JS,DC=Example,DC=NET>, the 
1776    <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did 
1777    exist, then the server would return the noSuchObject result code with 
1778    the matchedDN field containing <DC=NET>.  
1779     
1780    Upon receipt of an Add Request, a server will attempt to add the 
1781    requested entry. The result of the Add attempt will be returned to 
1782    the client in the Add Response, defined as follows: 
1783     
1784         AddResponse ::= [APPLICATION 9] LDAPResult 
1785     
1786    A response of success indicates that the new entry has been added to 
1787    the Directory. 
1788     
1789     
1790 4.8. Delete Operation 
1791     
1792    The Delete operation allows a client to request the removal of an 
1793    entry from the Directory. The Delete Request is defined as follows: 
1794     
1795         DelRequest ::= [APPLICATION 10] LDAPDN 
1796   
1797 Sermersheim      Internet-Draft - Expires April 2006             Page 31 \f
1798               Lightweight Directory Access Protocol Version 3 
1799                                       
1800     
1801    The Delete Request consists of the name of the entry to be deleted. 
1802    The server SHALL NOT dereference aliases while resolving the name of 
1803    the target entry to be removed. 
1804     
1805    Only leaf entries (those with no subordinate entries) can be deleted 
1806    with this operation. 
1807     
1808    Upon receipt of a Delete Request, a server will attempt to perform 
1809    the entry removal requested and return the result in the Delete 
1810    Response defined as follows: 
1811     
1812         DelResponse ::= [APPLICATION 11] LDAPResult 
1813     
1814     
1815 4.9. Modify DN Operation 
1816     
1817    The Modify DN operation allows a client to change the Relative 
1818    Distinguished Name (RDN) of an entry in the Directory, and/or to move 
1819    a subtree of entries to a new location in the Directory. The Modify 
1820    DN Request is defined as follows: 
1821     
1822         ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { 
1823              entry           LDAPDN, 
1824              newrdn          RelativeLDAPDN, 
1825              deleteoldrdn    BOOLEAN, 
1826              newSuperior     [0] LDAPDN OPTIONAL } 
1827     
1828    Fields of the Modify DN Request are: 
1829     
1830    - entry: the name of the entry to be changed. This entry may or may 
1831      not have subordinate entries. 
1832     
1833    - newrdn: the new RDN of the entry. The value of the old RDN is 
1834      supplied when moving the entry to a new superior without changing 
1835      its RDN. Attribute values of the new RDN not matching any 
1836      attribute value of the entry are added to the entry and an 
1837      appropriate error is returned if this fails. 
1838      
1839    - deleteoldrdn: a boolean field that controls whether the old RDN 
1840      attribute values are to be retained as attributes of the entry, or 
1841      deleted from the entry. 
1842     
1843    - newSuperior: if present, this is the name of an existing object 
1844      entry which becomes the immediate superior (parent) of the 
1845      existing entry. 
1846     
1847    The server SHALL NOT dereference any aliases in locating the objects 
1848    named in entry or newSuperior. 
1849     
1850    Upon receipt of a ModifyDNRequest, a server will attempt to perform 
1851    the name change and return the result in the Modify DN Response, 
1852    defined as follows: 
1853     
1854   
1855 Sermersheim      Internet-Draft - Expires April 2006             Page 32 \f
1856               Lightweight Directory Access Protocol Version 3 
1857                                       
1858         ModifyDNResponse ::= [APPLICATION 13] LDAPResult 
1859     
1860    For example, if the entry named in the entry field was <cn=John 
1861    Smith,c=US>, the newrdn field was <cn=John Cougar Smith>, and the 
1862    newSuperior field was absent, then this operation would attempt to 
1863    rename the entry to be <cn=John Cougar Smith,c=US>. If there was 
1864    already an entry with that name, the operation would fail with the 
1865    entryAlreadyExists result code. 
1866     
1867    Servers MUST ensure that entries conform to user and system schema 
1868    rules or other data model constraints. For attribute types which 
1869    specify no equality matching, the rules in Section 2.5.1 of [Models] 
1870    are followed (this pertains to newrdn and deleteoldrdn). 
1871     
1872    The object named in newSuperior MUST exist. For example, if the 
1873    client attempted to add <CN=JS,DC=Example,DC=NET>, the 
1874    <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did 
1875    exist, then the server would return the noSuchObject result code with 
1876    the matchedDN field containing <DC=NET>. 
1877  
1878    If the deleteoldrdn field is TRUE, the attribute values forming the 
1879    old RDN but not the new RDN are deleted from the entry. If the 
1880    deleteoldrdn field is FALSE, the attribute values forming the old RDN 
1881    will be retained as non-distinguished attribute values of the entry.  
1882     
1883    Note that X.500 restricts the ModifyDN operation to only affect 
1884    entries that are contained within a single server. If the LDAP server 
1885    is mapped onto DAP, then this restriction will apply, and the 
1886    affectsMultipleDSAs result code will be returned if this error 
1887    occurred. In general, clients MUST NOT expect to be able to perform 
1888    arbitrary movements of entries and subtrees between servers or 
1889    between naming contexts. 
1890     
1891     
1892 4.10. Compare Operation 
1893     
1894    The Compare operation allows a client to compare an assertion value 
1895    with the values of a particular attribute in a particular entry in 
1896    the Directory. The Compare Request is defined as follows: 
1897     
1898         CompareRequest ::= [APPLICATION 14] SEQUENCE { 
1899              entry           LDAPDN, 
1900              ava             AttributeValueAssertion } 
1901     
1902    Fields of the Compare Request are: 
1903     
1904    - entry: the name of the entry to be compared. The server SHALL NOT 
1905      dereference any aliases in locating the entry to be compared. 
1906     
1907    - ava: holds the attribute value assertion to be compared. 
1908     
1909    Upon receipt of a Compare Request, a server will attempt to perform 
1910    the requested comparison and return the result in the Compare 
1911    Response, defined as follows: 
1912   
1913 Sermersheim      Internet-Draft - Expires April 2006             Page 33 \f
1914               Lightweight Directory Access Protocol Version 3 
1915                                       
1916     
1917         CompareResponse ::= [APPLICATION 15] LDAPResult 
1918     
1919    The resultCode is set to compareTrue, compareFalse, or an appropriate 
1920    error. compareTrue indicates that the assertion value in the ava 
1921    field matches a value of the attribute or subtype according to the 
1922    attribute's EQUALITY matching rule. compareFalse indicates that the 
1923    assertion value in the ava field and the values of the attribute or 
1924    subtype did not match. Other result codes indicate either that the 
1925    result of the comparison was Undefined (Section 4.5.1), or that some 
1926    error occurred. 
1927     
1928    Note that some directory systems may establish access controls which 
1929    permit the values of certain attributes (such as userPassword) to be 
1930    compared but not interrogated by other means. 
1931     
1932     
1933 4.11. Abandon Operation 
1934     
1935    The function of the Abandon operation is to allow a client to request 
1936    that the server abandon an uncompleted operation. The Abandon Request 
1937    is defined as follows: 
1938     
1939         AbandonRequest ::= [APPLICATION 16] MessageID 
1940     
1941    The MessageID is that of an operation which was requested earlier at 
1942    this LDAP message layer. The Abandon request itself has its own 
1943    MessageID. This is distinct from the MessageID of the earlier 
1944    operation being abandoned. 
1945     
1946    There is no response defined in the Abandon operation. Upon receipt 
1947    of an AbandonRequest, the server MAY abandon the operation identified 
1948    by the MessageID. Since the client cannot tell the difference between 
1949    a successfully abandoned operation and an uncompleted operation, the 
1950    application of the Abandon operation is limited to uses where the 
1951    client does not require an indication of its outcome. 
1952     
1953    Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned.  
1954     
1955    In the event that a server receives an Abandon Request on a Search 
1956    operation in the midst of transmitting responses to the Search, that 
1957    server MUST cease transmitting entry responses to the abandoned 
1958    request immediately, and MUST NOT send the SearchResultDone. Of 
1959    course, the server MUST ensure that only properly encoded LDAPMessage 
1960    PDUs are transmitted. 
1961     
1962    The ability to abandon other (particularly update) operations is at 
1963    the discretion of the server.  
1964     
1965    Clients should not send Abandon requests for the same operation 
1966    multiple times, and MUST also be prepared to receive results from 
1967    operations it has abandoned (since these may have been in transit 
1968    when the Abandon was requested, or are not able to be abandoned). 
1969     
1970   
1971 Sermersheim      Internet-Draft - Expires April 2006             Page 34 \f
1972               Lightweight Directory Access Protocol Version 3 
1973                                       
1974    Servers MUST discard Abandon requests for message IDs they do not 
1975    recognize, for operations which cannot be abandoned, and for 
1976    operations which have already been abandoned. 
1977     
1978     
1979 4.12. Extended Operation 
1980     
1981    The Extended operation allows additional operations to be defined for 
1982    services not already available in the protocol. For example, to Add 
1983    operations to install transport layer security (see Section 4.14). 
1984     
1985    The Extended operation allows clients to make requests and receive 
1986    responses with predefined syntaxes and semantics. These may be 
1987    defined in RFCs or be private to particular implementations.  
1988     
1989    Each Extended operation consists of an Extended request and an 
1990    Extended response.  
1991     
1992         ExtendedRequest ::= [APPLICATION 23] SEQUENCE { 
1993              requestName      [0] LDAPOID, 
1994              requestValue     [1] OCTET STRING OPTIONAL } 
1995     
1996    The requestName is a dotted-decimal representation of the unique 
1997    OBJECT IDENTIFIER corresponding to the request. The requestValue is 
1998    information in a form defined by that request, encapsulated inside an 
1999    OCTET STRING. 
2000     
2001    The server will respond to this with an LDAPMessage containing an 
2002    ExtendedResponse. 
2003     
2004         ExtendedResponse ::= [APPLICATION 24] SEQUENCE { 
2005              COMPONENTS OF LDAPResult, 
2006              responseName     [10] LDAPOID OPTIONAL, 
2007              responseValue    [11] OCTET STRING OPTIONAL } 
2008     
2009    The responseName field, when present, contains an LDAPOID which is 
2010    unique for this extended operation or response.  This field is 
2011    optional (even when the extension specification specifies an LDAPOID 
2012    to be returned in the field).  The field will be absent whenever the 
2013    server is unable or unwilling to determine the appropriate LDAPOID to 
2014    return, for instance when the requestName cannot be parsed or its 
2015    value is not recognized. 
2016     
2017    Where the requestName is not recognized, the server returns 
2018    protocolError (The server may return protocolError in other cases). 
2019     
2020    The requestValue and responseValue fields contain information 
2021    associated with the operation. The format of these fields is defined 
2022    by the specification of the Extended operation. Implementations MUST 
2023    be prepared to handle arbitrary contents of these fields, including 
2024    zero bytes. Values that are defined in terms of ASN.1 and BER encoded 
2025    according to Section 5.1, also follow the extensibility rules in 
2026    Section 4. 
2027     
2028   
2029 Sermersheim      Internet-Draft - Expires April 2006             Page 35 \f
2030               Lightweight Directory Access Protocol Version 3 
2031                                       
2032    Servers list the requestName of Extended Requests they recognize in 
2033    the 'supportedExtension' attribute in the root DSE (Section 5.1 of 
2034    [Models]). 
2035  
2036    Extended operations may be specified in other documents. The 
2037    specification of an Extended operation consists of: 
2038     
2039    - the OBJECT IDENTIFIER assigned to the requestName, 
2040     
2041    - the OBJECT IDENTIFIER (if any) assigned to the responseName (note 
2042      that the same OBJECT IDENTIFIER may be used for both the 
2043      requestName and responseName), 
2044     
2045    - the format of the contents of the requestValue and responseValue 
2046      (if any), and 
2047     
2048    - the semantics of the operation. 
2049  
2050  
2051 4.13. IntermediateResponse Message 
2052     
2053    While the Search operation provides a mechanism to return multiple 
2054    response messages for a single Search request, other operations, by 
2055    nature, do not provide for multiple response messages. 
2056     
2057    The IntermediateResponse message provides a general mechanism for 
2058    defining single-request/multiple-response operations in LDAP. This 
2059    message is intended to be used in conjunction with the Extended 
2060    operation to define new single-request/multiple-response operations 
2061    or in conjunction with a control when extending existing LDAP 
2062    operations in a way that requires them to return Intermediate 
2063    response information.  
2064     
2065    It is intended that the definitions and descriptions of Extended 
2066    operations and controls that make use of the IntermediateResponse 
2067    message will define the circumstances when an IntermediateResponse 
2068    message can be sent by a server and the associated meaning of an 
2069    IntermediateResponse message sent in a particular circumstance. 
2070     
2071         IntermediateResponse ::= [APPLICATION 25] SEQUENCE { 
2072                 responseName     [0] LDAPOID OPTIONAL, 
2073                 responseValue    [1] OCTET STRING OPTIONAL } 
2074     
2075    IntermediateResponse messages SHALL NOT be returned to the client 
2076    unless the client issues a request that specifically solicits their 
2077    return. This document defines two forms of solicitation: Extended 
2078    operation and request control. IntermediateResponse messages are 
2079    specified in documents describing the manner in which they are 
2080    solicited (i.e. in the Extended operation or request control 
2081    specification that uses them). These specifications include: 
2082         
2083    - the OBJECT IDENTIFIER (if any) assigned to the responseName, 
2084     
2085    - the format of the contents of the responseValue (if any), and 
2086   
2087 Sermersheim      Internet-Draft - Expires April 2006             Page 36 \f
2088               Lightweight Directory Access Protocol Version 3 
2089                                       
2090     
2091    - the semantics associated with the IntermediateResponse message.  
2092     
2093    Extensions that allow the return of multiple types of 
2094    IntermediateResponse messages SHALL identify those types using unique 
2095    responseName values (note that one of these may specify no value). 
2096     
2097    Sections 4.13.1 and 4.13.2 describe additional requirements on the 
2098    inclusion of responseName and responseValue in IntermediateResponse 
2099    messages.  
2100  
2101   
2102 4.13.1. Usage with LDAP ExtendedRequest and ExtendedResponse  
2103      
2104    A single-request/multiple-response operation may be defined using a 
2105    single ExtendedRequest message to solicit zero or more 
2106    IntermediateResponse messages of one or more kinds followed by an 
2107    ExtendedResponse message. 
2108      
2109   
2110 4.13.2. Usage with LDAP Request Controls  
2111      
2112    A control's semantics may include the return of zero or more 
2113    IntermediateResponse messages prior to returning the final result 
2114    code for the operation.  One or more kinds of IntermediateResponse 
2115    messages may be sent in response to a request control. 
2116     
2117    All IntermediateResponse messages associated with request controls 
2118    SHALL include a responseName.  This requirement ensures that the 
2119    client can correctly identify the source of IntermediateResponse 
2120    messages when: 
2121     
2122    - two or more controls using IntermediateResponse messages are 
2123      included in a request for any LDAP operation or   
2124         
2125    - one or more controls using IntermediateResponse messages are 
2126      included in a request with an LDAP Extended operation that uses 
2127      IntermediateResponse messages. 
2128     
2129     
2130 4.14. StartTLS Operation 
2131  
2132    The Start Transport Layer Security (StartTLS) operation's purpose is 
2133    to initiate installation of a TLS layer. The StartTLS operation is 
2134    defined using the Extended operation mechanism described in Section 
2135    4.12. 
2136     
2137     
2138
2139
2140
2141
2142
2143
2144   
2145 Sermersheim      Internet-Draft - Expires April 2006             Page 37 \f
2146               Lightweight Directory Access Protocol Version 3 
2147                                       
2148 4.14.1. StartTLS Request 
2149  
2150    A client requests TLS establishment by transmitting a StartTLS 
2151    request message to the server. The StartTLS request is defined in 
2152    terms of an ExtendedRequest. The requestName is 
2153    "1.3.6.1.4.1.1466.20037", and the requestValue field is always 
2154    absent.  
2155     
2156    The client MUST NOT send any LDAP PDUs at this LDAP message layer 
2157    following this request until it receives a StartTLS Extended response 
2158    and, in the case of a successful response, completes TLS 
2159    negotiations. 
2160     
2161    Detected sequencing problems (particularly those detailed in Section 
2162    3.1.1 of [AuthMeth]) result in the resultCode being set to 
2163    operationsError. 
2164     
2165    If the server does not support TLS (whether by design or by current 
2166    configuration), it returns with the resultCode set to protocolError 
2167    as described in Section 4.12. 
2168     
2169     
2170 4.14.2. StartTLS Response 
2171  
2172    When a StartTLS request is received, servers supporting the operation 
2173    MUST return a StartTLS response message to the requestor. The 
2174    responseName is "1.3.6.1.4.1.1466.20037" when provided (See 4.12). 
2175    The responseValue is always absent.  
2176     
2177    If the server is willing and able to negotiate TLS, it returns the 
2178    StartTLS response with the resultCode set to success. Upon client 
2179    receipt of a successful StartTLS response, protocol peers may 
2180    commence with TLS negotiation as discussed in Section 3 of 
2181    [AuthMeth]. 
2182  
2183    If the server is otherwise unwilling or unable to perform this 
2184    operation, the server is to return an appropriate result code 
2185    indicating the nature of the problem.  For example, if the TLS 
2186    subsystem is not presently available, the server may indicate so by 
2187    returning with the resultCode set to unavailable. In cases where a 
2188    non-success result code is returned, the LDAP session is left without 
2189    a TLS layer. 
2190  
2191  
2192 4.14.3. Removal of the TLS Layer 
2193  
2194    Either the client or server MAY remove the TLS layer and leave the 
2195    LDAP message layer intact by sending and receiving a TLS closure 
2196    alert. 
2197     
2198
2199
2200   
2201 Sermersheim      Internet-Draft - Expires April 2006             Page 38 \f
2202               Lightweight Directory Access Protocol Version 3 
2203                                       
2204    The initiating protocol peer sends the TLS closure alert and MUST 
2205    wait until it receives a TLS closure alert from the other peer before 
2206    sending further LDAP PDUs. 
2207     
2208    When a protocol peer receives the initial TLS closure alert, it may 
2209    choose to allow the LDAP message layer to remain intact. In this 
2210    case, it MUST immediately transmit a TLS closure alert. Following 
2211    this, it MAY send and receive LDAP PDUs. 
2212     
2213    Protocol peers MAY terminate the LDAP session after sending or 
2214    receiving a TLS closure alert. 
2215     
2216     
2217 5. Protocol Encoding, Connection, and Transfer 
2218     
2219    This protocol is designed to run over connection-oriented, reliable 
2220    transports, where the data stream is divided into octets (8-bit 
2221    units), with each octet and each bit being significant. 
2222     
2223    One underlying service, LDAP over TCP, is defined in Section 
2224    5.2. This service is generally applicable to applications providing 
2225    or consuming X.500-based directory services on the Internet. This 
2226    specification was generally written with the TCP mapping in mind. 
2227    Specifications detailing other mappings may encounter various 
2228    obstacles. 
2229     
2230    Implementations of LDAP over TCP MUST implement the mapping as 
2231    described in Section 5.2. 
2232     
2233    This table illustrates the relationship between the different layers 
2234    involved in an exchange between two protocol peers: 
2235     
2236                +----------------------+ 
2237                |  LDAP message layer  | 
2238                +----------------------+ > LDAP PDUs 
2239                +----------------------+ < data        
2240                |      SASL layer      |              
2241                +----------------------+ > SASL-protected data 
2242                +----------------------+ < data     
2243                |       TLS layer      |           
2244    Application +----------------------+ > TLS-protected data 
2245    ------------+----------------------+ < data   
2246      Transport | transport connection | 
2247                +----------------------+  
2248     
2249  
2250 5.1. Protocol Encoding 
2251  
2252    The protocol elements of LDAP SHALL be encoded for exchange using the 
2253    Basic Encoding Rules [BER] of [ASN.1] with the following 
2254    restrictions: 
2255     
2256    - Only the definite form of length encoding is used. 
2257
2258   
2259 Sermersheim      Internet-Draft - Expires April 2006             Page 39 \f
2260               Lightweight Directory Access Protocol Version 3 
2261                                       
2262     
2263    - OCTET STRING values are encoded in the primitive form only. 
2264     
2265    - If the value of a BOOLEAN type is true, the encoding of the value 
2266      octet is set to hex "FF". 
2267     
2268    - If a value of a type is its default value, it is absent. Only some 
2269      BOOLEAN and INTEGER types have default values in this protocol 
2270      definition. 
2271     
2272    These restrictions are meant to ease the overhead of encoding and 
2273    decoding certain elements in BER. 
2274     
2275    These restrictions do not apply to ASN.1 types encapsulated inside of 
2276    OCTET STRING values, such as attribute values, unless otherwise 
2277    stated. 
2278     
2279  
2280 5.2. Transmission Control Protocol (TCP) 
2281     
2282    The encoded LDAPMessage PDUs are mapped directly onto the [TCP] 
2283    bytestream using the BER-based encoding described in Section 5.1. It 
2284    is recommended that server implementations running over the TCP 
2285    provide a protocol listener on the Internet Assigned Numbers 
2286    Authority (IANA)-assigned LDAP port, 389 [PortReg]. Servers may 
2287    instead provide a listener on a different port number. Clients MUST 
2288    support contacting servers on any valid TCP port. 
2289     
2290     
2291 5.3. Termination of the LDAP session 
2292     
2293    Termination of the LDAP session is typically initiated by the client 
2294    sending an UnbindRequest (Section 4.3), or by the server sending a 
2295    Notice of Disconnection (Section 4.4.1). In these cases each protocol 
2296    peer gracefully terminates the LDAP session by ceasing exchanges at 
2297    the LDAP message layer, tearing down any SASL layer, tearing down any 
2298    TLS layer, and closing the transport connection. 
2299     
2300    A protocol peer may determine that the continuation of any 
2301    communication would be pernicious, and in this case may abruptly 
2302    terminate the session by ceasing communication and closing the 
2303    transport connection. 
2304     
2305    In either case, when the LDAP session is terminated, uncompleted 
2306    operations are handled as specified in Section 3.1. 
2307  
2308     
2309 6. Security Considerations 
2310     
2311    This version of the protocol provides facilities for simple 
2312    authentication using a cleartext password, as well as any [SASL] 
2313    mechanism. Installing SASL and/or TLS layers can provide integrity 
2314    and other data security services. 
2315     
2316   
2317 Sermersheim      Internet-Draft - Expires April 2006             Page 40 \f
2318               Lightweight Directory Access Protocol Version 3 
2319                                       
2320    It is also permitted that the server can return its credentials to 
2321    the client, if it chooses to do so. 
2322     
2323    Use of cleartext password is strongly discouraged where the 
2324    underlying transport service cannot guarantee confidentiality and may 
2325    result in disclosure of the password to unauthorized parties. 
2326     
2327    Servers are encouraged to prevent directory modifications by clients 
2328    that have authenticated anonymously [AuthMeth].  
2329     
2330    Security considerations for authentication methods, SASL mechanisms, 
2331    and TLS are described in [AuthMeth]. 
2332     
2333    It should be noted that SASL authentication exchanges do not provide 
2334    data confidentiality nor integrity protection for the version or name 
2335    fields of the BindRequest nor the resultCode, diagnosticMessage, or 
2336    referral fields of the BindResponse nor of any information contained 
2337    in controls attached to Bind requests or responses. Thus information 
2338    contained in these fields SHOULD NOT be relied on unless otherwise 
2339    protected (such as by establishing protections at the transport 
2340    layer). 
2341     
2342    Implementors should note that various security factors, including 
2343    authentication and authorization information and data security 
2344    services may change during the course of the LDAP session, or even 
2345    during the performance of a particular operation.  For instance, 
2346    credentials could expire, authorization identities or access controls 
2347    could change, or the underlying security layer(s) could be replaced 
2348    or terminated.  Implementations should be robust in the handling of 
2349    changing security factors. 
2350    In some cases, it may be appropriate to continue the operation even 
2351    in light of security factor changes.  For instance, it may be 
2352    appropriate to continue an Abandon operation regardless of the 
2353    change, or to continue an operation when the change upgraded (or 
2354    maintained) the security factor. In other cases, it may be 
2355    appropriate to fail, or alter the processing of the operation. For 
2356    instance, if confidential protections were removed, it would be 
2357    appropriate to either fail a request to return sensitive data, or 
2358    minimally, to exclude the return of sensitive data. 
2359     
2360    Implementations which cache attributes and entries obtained via LDAP 
2361    MUST ensure that access controls are maintained if that information 
2362    is to be provided to multiple clients, since servers may have access 
2363    control policies which prevent the return of entries or attributes in 
2364    Search results except to particular authenticated clients. For 
2365    example, caches could serve result information only to the client 
2366    whose request caused it to be in the cache. 
2367     
2368
2369
2370
2371
2372
2373
2374   
2375 Sermersheim      Internet-Draft - Expires April 2006             Page 41 \f
2376               Lightweight Directory Access Protocol Version 3 
2377                                       
2378    Servers may return referrals or Search result references which 
2379    redirect clients to peer servers. It is possible for a rogue 
2380    application to inject such referrals into the data stream in an 
2381    attempt to redirect a client to a rogue server. Clients are advised 
2382    to be aware of this, and possibly reject referrals when 
2383    confidentiality measures are not in place. Clients are advised to 
2384    reject referrals from the StartTLS operation. 
2385     
2386    The matchedDN and diagnosticMessage fields, as well as some 
2387    resultCode values (e.g., attributeOrValueExists and 
2388    entryAlreadyExists), could disclose the presence or absence of 
2389    specific data in the directory which is subject to access and other 
2390    administrative controls. Server implementations should restrict 
2391    access to protected information equally under both normal and error 
2392    conditions. 
2393     
2394    Protocol peers MUST be prepared to handle invalid and arbitrary 
2395    length protocol encodings. Invalid protocol encodings include: BER 
2396    encoding exceptions, format string and UTF-8 encoding exceptions, 
2397    overflow exceptions, integer value exceptions, and binary mode on/off 
2398    flag exceptions. The LDAPv3 PROTOS [PROTOS-LDAP] test suite provides 
2399    excellent examples of these exceptions and test cases used to 
2400    discover flaws. 
2401     
2402    In the event that a protocol peer senses an attack which in its 
2403    nature could cause damage due to further communication at any layer 
2404    in the LDAP session, the protocol peer should abruptly terminate the 
2405    LDAP session as described in Section 5.3. 
2406     
2407     
2408 7. Acknowledgements 
2409     
2410    This document is based on RFC 2251 by Mark Wahl, Tim Howes, and Steve 
2411    Kille. RFC 2251 was a product of the IETF ASID Working Group. 
2412     
2413    It is also based on RFC 2830 by Jeff Hodges, RL "Bob" Morgan, and 
2414    Mark Wahl. RFC 2830 was a product of the IETF LDAPEXT Working Group. 
2415     
2416    It is also based on RFC 3771 by Roger Harrison, and Kurt Zeilenga. 
2417    RFC 3771 was an individual submission to the IETF. 
2418     
2419    This document is a product of the IETF LDAPBIS Working Group. 
2420    Significant contributors of technical review and content include Kurt 
2421    Zeilenga, Steven Legg, and Hallvard Furuseth. 
2422     
2423     
2424 8. Normative References 
2425       
2426    [ABNF]    Crocker, D. and P. Overell, "Augmented BNF for Syntax 
2427              Specifications: ABNF", draft-crocker-abnf-rfc2234bis-
2428              xx.txt, (a work in progress). 
2429     
2430
2431
2432   
2433 Sermersheim      Internet-Draft - Expires April 2006             Page 42 \f
2434               Lightweight Directory Access Protocol Version 3 
2435                                       
2436    [ASN.1]   ITU-T Recommendation X.680 (07/2002) | ISO/IEC 8824-1:2002 
2437              "Information Technology - Abstract Syntax Notation One 
2438              (ASN.1): Specification of basic notation" 
2439     
2440    [AuthMeth] Harrison, R., "LDAP: Authentication Methods and Connection 
2441              Level Security Mechanisms", draft-ietf-ldapbis-authmeth-
2442              xx.txt, (a work in progress). 
2443     
2444    [BER]     ITU-T Rec. X.690 (07/2002) | ISO/IEC 8825-1:2002, 
2445              "Information technology - ASN.1 encoding rules: 
2446              Specification of Basic Encoding Rules (BER), Canonical 
2447              Encoding Rules (CER) and Distinguished Encoding Rules 
2448              (DER)", 2002. 
2449  
2450    [IP]      Postel, J., "Internet Protocol", STD5 and RFC 791, 
2451              September 1981 
2452     
2453    [ISO10646] Universal Multiple-Octet Coded Character Set (UCS) - 
2454              Architecture and Basic Multilingual Plane, ISO/IEC 10646-1 
2455              : 1993. 
2456      
2457    [Keyword] Bradner, S., "Key words for use in RFCs to Indicate 
2458              Requirement Levels", RFC 2119, March 1997. 
2459      
2460    [LDAPDN]  Zeilenga, K., "LDAP: String Representation of 
2461              Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, (a 
2462              work in progress). 
2463     
2464    [LDAPIANA] Zeilenga, K., "IANA Considerations for LDAP", draft-ietf-
2465              ldapbis-bcp64-xx.txt, (a work in progress). 
2466     
2467    [LDAPURL] Smith, M., "LDAP: Uniform Resource Locator", draft-ietf-
2468              ldapbis-url-xx.txt, (a work in progress). 
2469     
2470    [Models]  Zeilenga, K., "LDAP: Directory Information Models", draft-
2471              ietf-ldapbis-models-xx.txt (a work in progress). 
2472     
2473    [Roadmap] Zeilenga, K., "LDAP: Technical Specification Road Map", 
2474              draft-ietf-ldapbis-roadmap-xx.txt (a work in progress). 
2475     
2476    [SASL]    Melnikov, A., "Simple Authentication and Security Layer", 
2477              draft-ietf-sasl-rfc2222bis-xx.txt (a work in progress). 
2478     
2479    [SASLPrep] Zeilenga, K., "Stringprep profile for user names and 
2480              passwords", draft-ietf-sasl-saslprep-xx.txt, (a work in 
2481              progress). 
2482     
2483    [StringPrep] Hoffman P. and M. Blanchet, "Preparation of 
2484              Internationalized Strings ('stringprep')", draft-hoffman-
2485              rfc3454bis-xx.txt, a work in progress. 
2486     
2487    [Syntaxes] Legg, S., and K. Dally, "LDAP: Syntaxes and Matching 
2488              Rules", draft-ietf-ldapbis-syntaxes-xx.txt, (a work in 
2489              progress). 
2490   
2491 Sermersheim      Internet-Draft - Expires April 2006             Page 43 \f
2492               Lightweight Directory Access Protocol Version 3 
2493                                       
2494     
2495    [TCP]     Postel, J., "Transmission Control Protocol", STD7 and RFC 
2496              793, September 1981 
2497     
2498    [TLS]     Dierks, T. and C. Allen. "The TLS Protocol Version 1.1", 
2499              draft-ietf-tls-rfc2246-bis-xx.txt, a work in progress. 
2500     
2501    [Unicode] The Unicode Consortium, "The Unicode Standard, Version 
2502              3.2.0" is defined by "The Unicode Standard, Version 3.0" 
2503              (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5), 
2504              as amended by the "Unicode Standard Annex #27: Unicode 
2505              3.1" (http://www.unicode.org/reports/tr27/) and by the 
2506              "Unicode Standard Annex #28: Unicode 3.2" 
2507              (http://www.unicode.org/reports/tr28/). 
2508     
2509    [URI]     Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform 
2510              Resource Identifiers (URI): Generic Syntax", RFC 2396, 
2511              August 1998. 
2512     
2513    [UTF-8]   Yergeau, F., "UTF-8, a transformation format of ISO 
2514              10646", STD63 and RFC3629, November 2003. 
2515     
2516    [X.500]   ITU-T Rec. X.500, "The Directory: Overview of Concepts, 
2517              Models and Service", 1993. 
2518      
2519    [X.501]   ITU-T Rec. X.501, "The Directory: Models", 1993. 
2520     
2521    [X.511]   ITU-T Rec. X.511, "The Directory: Abstract Service 
2522              Definition", 1993. 
2523     
2524     
2525 9. Informative References 
2526     
2527    [Glossary] The Unicode Consortium, "Unicode Glossary", 
2528              <http://www.unicode.org/glossary/>. 
2529     
2530    [CharModel]  Whistler, K. and M. Davis, "Unicode Technical Report 
2531              #17, Character Encoding Model", UTR17, 
2532              <http://www.unicode.org/unicode/reports/tr17/>, August 
2533              2000. 
2534     
2535    [PROTOS-LDAP] University of Oulu, "PROTOS Test-Suite: c06-ldapv3" 
2536              <http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/l
2537              dapv3/> 
2538     
2539    [PortReg] IANA, "Port Numbers", 
2540              http://www.iana.org/assignments/port-numbers 
2541  
2542  
2543 10. IANA Considerations 
2544     
2545
2546
2547
2548   
2549 Sermersheim      Internet-Draft - Expires April 2006             Page 44 \f
2550               Lightweight Directory Access Protocol Version 3 
2551                                       
2552    It is requested that the Internet Assigned Numbers Authority (IANA) 
2553    update the LDAP result code registry to indicate that this document 
2554    provides the definitive technical specification for result codes 0-
2555    36, 48-54, 64-70, 80-90. It is also noted that one resultCode value 
2556    (strongAuthRequired) has been renamed (to strongerAuthRequired). 
2557     
2558    It is requested that the IANA update the LDAP Protocol Mechanism 
2559    registry to indicate that this document and [AuthMeth] provides the 
2560    definitive technical specification for the StartTLS 
2561    (1.3.6.1.4.1.1466.20037) Extended operation. 
2562     
2563    It is requested that the IANA update the occurrence of "RFC XXXX" in 
2564    this section and Appendix B with this RFC number at publication. 
2565  
2566    It is requested that IANA assign upon Standards Action an LDAP Object 
2567    Identifier [LDAPIANA] to identify the ASN.1 module defined in this 
2568    document. 
2569     
2570         Subject: Request for LDAP Object Identifier Registration 
2571         Person & email address to contact for further information: 
2572              Jim Sermersheim <jimse@novell.com> 
2573         Specification: RFC XXXX 
2574         Author/Change Controller: IESG 
2575         Comments:    
2576              Identifies the LDAP ASN.1 module 
2577     
2578    [[Note to RFC Editor: please replace the occurrence of <IANA-
2579    ASSIGNED-DIRECTORY-NUMBER> in Appendix B with the IANA assigned 
2580    OID.]] 
2581     
2582  
2583 11. Editor's Address 
2584     
2585    Jim Sermersheim 
2586    Novell, Inc. 
2587    1800 South Novell Place 
2588    Provo, Utah 84606, USA 
2589    jimse@novell.com 
2590    +1 801 861-3088 
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606   
2607 Sermersheim      Internet-Draft - Expires April 2006             Page 45 \f
2608               Lightweight Directory Access Protocol Version 3 
2609                                       
2610 Appendix A. LDAP Result Codes 
2611  
2612    This normative appendix details additional considerations regarding 
2613    LDAP result codes and provides a brief, general description of each 
2614    LDAP result code enumerated in Section 4.1.9. 
2615     
2616    Additional result codes MAY be defined for use with extensions 
2617    [LDAPIANA]. Client implementations SHALL treat any result code which 
2618    they do not recognize as an unknown error condition. 
2619     
2620    The descriptions provided here do not fully account for result code 
2621    substitutions used to prevent unauthorized disclosures (such as 
2622    substitution of noSuchObject for insufficientAccessRights, or 
2623    invalidCredentials for insufficientAccessRights). 
2624     
2625     
2626 A.1. Non-Error Result Codes 
2627     
2628    These result codes (called "non-error" result codes) do not indicate 
2629    an error condition: 
2630         success (0), 
2631         compareFalse (5), 
2632         compareTrue (6), 
2633         referral (10), and 
2634         saslBindInProgress (14). 
2635     
2636    The success, compareTrue, and compareFalse result codes indicate 
2637    successful completion (and, hence, are referred to as "successful" 
2638    result codes). 
2639     
2640    The referral and saslBindInProgress result codes indicate the client 
2641    needs to take additional action to complete the operation. 
2642     
2643     
2644 A.2. Result Codes 
2645     
2646    Existing LDAP result codes are described as follows: 
2647  
2648         success (0) 
2649            Indicates the successful completion of an operation. Note: 
2650            this code is not used with the Compare operation. See 
2651            compareFalse (5) and compareTrue (6).        
2652     
2653         operationsError (1) 
2654            Indicates that the operation is not properly sequenced with 
2655            relation to other operations (of same or different type). 
2656  
2657            For example, this code is returned if the client attempts to 
2658            StartTLS [TLS] while there are other uncompleted operations 
2659            or if a TLS layer was already installed. 
2660  
2661         protocolError (2) 
2662            Indicates the server received data which is not well-formed. 
2663             
2664   
2665 Sermersheim      Internet-Draft - Expires April 2006             Page 46 \f
2666               Lightweight Directory Access Protocol Version 3 
2667                                       
2668            For Bind operation only, this code is also used to indicate 
2669            that the server does not support the requested protocol 
2670            version. 
2671             
2672            For Extended operations only, this code is also used to 
2673            indicate that the server does not support (by design or 
2674            configuration) the Extended operation associated with the 
2675            requestName. 
2676             
2677            For request operations specifying multiple controls, this may 
2678            be used to indicate that the server cannot ignore the order 
2679            of the controls as specified, or that the combination of the 
2680            specified controls is invalid or unspecified. 
2681             
2682         timeLimitExceeded (3) 
2683            Indicates that the time limit specified by the client was 
2684            exceeded before the operation could be completed. 
2685  
2686         sizeLimitExceeded (4) 
2687            Indicates that the size limit specified by the client was 
2688            exceeded before the operation could be completed. 
2689          
2690         compareFalse (5) 
2691            Indicates that the Compare operation has successfully 
2692            completed and the assertion has evaluated to FALSE or 
2693            Undefined. 
2694          
2695         compareTrue (6) 
2696            Indicates that the Compare operation has successfully 
2697            completed and the assertion has evaluated to TRUE. 
2698          
2699         authMethodNotSupported (7) 
2700            Indicates that the authentication method or mechanism is not 
2701            supported. 
2702          
2703         strongerAuthRequired (8) 
2704            Indicates the server requires strong(er) authentication in 
2705            order to complete the operation. 
2706             
2707            When used with the Notice of Disconnection operation, this 
2708            code indicates that the server has detected that an 
2709            established security association between the client and 
2710            server has unexpectedly failed or been compromised. 
2711          
2712         referral (10) 
2713            Indicates that a referral needs to be chased to complete the 
2714            operation (see Section 4.1.10). 
2715          
2716         adminLimitExceeded (11) 
2717            Indicates that an administrative limit has been exceeded. 
2718          
2719         unavailableCriticalExtension (12) 
2720            Indicates a critical control is unrecognized (see Section 
2721            4.1.11). 
2722   
2723 Sermersheim      Internet-Draft - Expires April 2006             Page 47 \f
2724               Lightweight Directory Access Protocol Version 3 
2725                                       
2726          
2727         confidentialityRequired (13) 
2728            Indicates that data confidentiality protections are required. 
2729          
2730         saslBindInProgress (14) 
2731            Indicates the server requires the client to send a new bind 
2732            request, with the same SASL mechanism, to continue the 
2733            authentication process (see Section 4.2). 
2734          
2735         noSuchAttribute (16) 
2736            Indicates that the named entry does not contain the specified 
2737            attribute or attribute value. 
2738          
2739         undefinedAttributeType (17) 
2740            Indicates that a request field contains an unrecognized 
2741            attribute description. 
2742          
2743         inappropriateMatching (18) 
2744            Indicates that an attempt was made (e.g. in an assertion) to 
2745            use a matching rule not defined for the attribute type 
2746            concerned. 
2747          
2748         constraintViolation (19) 
2749            Indicates that the client supplied an attribute value which 
2750            does not conform to the constraints placed upon it by the 
2751            data model. 
2752          
2753            For example, this code is returned when multiple values are 
2754            supplied to an attribute which has a SINGLE-VALUE constraint. 
2755          
2756         attributeOrValueExists (20) 
2757            Indicates that the client supplied an attribute or value to 
2758            be added to an entry, but the attribute or value already 
2759            exists. 
2760          
2761         invalidAttributeSyntax (21) 
2762            Indicates that a purported attribute value does not conform 
2763            to the syntax of the attribute. 
2764          
2765         noSuchObject (32) 
2766            Indicates that the object does not exist in the DIT. 
2767          
2768         aliasProblem (33) 
2769            Indicates that an alias problem has occurred. For example, 
2770            the code may used to indicate an alias has been dereferenced 
2771            which names no object. 
2772          
2773         invalidDNSyntax (34) 
2774            Indicates that an LDAPDN or RelativeLDAPDN field (e.g. search 
2775            base, target entry, ModifyDN newrdn, etc.) of a request does 
2776            not conform to the required syntax or contains attribute 
2777            values which do not conform to the syntax of the attribute's 
2778            type. 
2779
2780   
2781 Sermersheim      Internet-Draft - Expires April 2006             Page 48 \f
2782               Lightweight Directory Access Protocol Version 3 
2783                                       
2784          
2785         aliasDereferencingProblem (36) 
2786            Indicates that a problem occurred while dereferencing an 
2787            alias. Typically an alias was encountered in a situation 
2788            where it was not allowed or where access was denied. 
2789          
2790         inappropriateAuthentication (48) 
2791            Indicates the server requires the client which had attempted 
2792            to bind anonymously or without supplying credentials to 
2793            provide some form of credentials. 
2794          
2795         invalidCredentials (49) 
2796            Indicates that the provided credentials (e.g. the user's name 
2797            and password) are invalid. 
2798          
2799         insufficientAccessRights (50) 
2800            Indicates that the client does not have sufficient access 
2801            rights to perform the operation. 
2802          
2803         busy (51) 
2804            Indicates that the server is too busy to service the 
2805            operation. 
2806          
2807         unavailable (52) 
2808            Indicates that the server is shutting down or a subsystem 
2809            necessary to complete the operation is offline. 
2810          
2811         unwillingToPerform (53) 
2812            Indicates that the server is unwilling to perform the 
2813            operation. 
2814          
2815         loopDetect (54) 
2816            Indicates that the server has detected an internal loop (e.g. 
2817            while dereferencing aliases or chaining an operation). 
2818          
2819         namingViolation (64) 
2820            Indicates that the entry's name violates naming restrictions. 
2821          
2822         objectClassViolation (65) 
2823            Indicates that the entry violates object class restrictions. 
2824          
2825         notAllowedOnNonLeaf (66) 
2826            Indicates that the operation is inappropriately acting upon a 
2827            non-leaf entry. 
2828          
2829         notAllowedOnRDN (67) 
2830            Indicates that the operation is inappropriately attempting to 
2831            remove a value which forms the entry's relative distinguished 
2832            name. 
2833          
2834         entryAlreadyExists (68) 
2835            Indicates that the request cannot be fulfilled (added, moved, 
2836            or renamed) as the target entry already exists. 
2837
2838   
2839 Sermersheim      Internet-Draft - Expires April 2006             Page 49 \f
2840               Lightweight Directory Access Protocol Version 3 
2841                                       
2842          
2843         objectClassModsProhibited (69) 
2844            Indicates that an attempt to modify the object class(es) of 
2845            an entry's 'objectClass' attribute is prohibited. 
2846          
2847            For example, this code is returned when a client attempts to 
2848            modify the structural object class of an entry. 
2849          
2850         affectsMultipleDSAs (71) 
2851            Indicates that the operation cannot be performed as it would 
2852            affect multiple servers (DSAs). 
2853          
2854         other (80) 
2855            Indicates the server has encountered an internal error. 
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896   
2897 Sermersheim      Internet-Draft - Expires April 2006             Page 50 \f
2898               Lightweight Directory Access Protocol Version 3 
2899                                       
2900 Appendix B. Complete ASN.1 Definition 
2901     
2902         This appendix is normative. 
2903     
2904         Lightweight-Directory-Access-Protocol-V3 {1 3 6 1 1 <IANA-
2905    ASSIGNED-DIRECTORY-NUMBER>} 
2906         -- Copyright (C) The Internet Society (2005). This version of 
2907         -- this ASN.1 module is part of RFC XXXX; see the RFC itself 
2908         -- for full legal notices. 
2909         DEFINITIONS 
2910         IMPLICIT TAGS 
2911         EXTENSIBILITY IMPLIED ::= 
2912     
2913         BEGIN 
2914     
2915         LDAPMessage ::= SEQUENCE { 
2916              messageID       MessageID, 
2917              protocolOp      CHOICE { 
2918                   bindRequest           BindRequest, 
2919                   bindResponse          BindResponse, 
2920                   unbindRequest         UnbindRequest, 
2921                   searchRequest         SearchRequest, 
2922                   searchResEntry        SearchResultEntry, 
2923                   searchResDone         SearchResultDone, 
2924                   searchResRef          SearchResultReference, 
2925                   modifyRequest         ModifyRequest, 
2926                   modifyResponse        ModifyResponse, 
2927                   addRequest            AddRequest, 
2928                   addResponse           AddResponse, 
2929                   delRequest            DelRequest, 
2930                   delResponse           DelResponse, 
2931                   modDNRequest          ModifyDNRequest, 
2932                   modDNResponse         ModifyDNResponse, 
2933                   compareRequest        CompareRequest, 
2934                   compareResponse       CompareResponse, 
2935                   abandonRequest        AbandonRequest, 
2936                   extendedReq           ExtendedRequest, 
2937                   extendedResp          ExtendedResponse, 
2938                   ..., 
2939                   intermediateResponse  IntermediateResponse }, 
2940              controls       [0] Controls OPTIONAL } 
2941     
2942         MessageID ::= INTEGER (0 .. maxInt) 
2943     
2944         maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- 
2945     
2946         LDAPString ::= OCTET STRING -- UTF-8 encoded, 
2947                                     -- [ISO10646] characters 
2948     
2949         LDAPOID ::= OCTET STRING -- Constrained to <numericoid> [Models] 
2950     
2951         LDAPDN ::= LDAPString -- Constrained to <distinguishedName> 
2952                               -- [LDAPDN] 
2953     
2954   
2955 Sermersheim      Internet-Draft - Expires April 2006             Page 51 \f
2956               Lightweight Directory Access Protocol Version 3 
2957                                       
2958         RelativeLDAPDN ::= LDAPString -- Constrained to <name-component> 
2959                                       -- [LDAPDN] 
2960     
2961         AttributeDescription ::= LDAPString 
2962                                 -- Constrained to <attributedescription> 
2963                                 -- [Models] 
2964     
2965         AttributeValue ::= OCTET STRING 
2966     
2967         AttributeValueAssertion ::= SEQUENCE { 
2968              attributeDesc   AttributeDescription, 
2969              assertionValue  AssertionValue } 
2970     
2971         AssertionValue ::= OCTET STRING 
2972     
2973         PartialAttribute ::= SEQUENCE { 
2974              type       AttributeDescription, 
2975              vals       SET OF value AttributeValue } 
2976     
2977         Attribute ::= PartialAttribute(WITH COMPONENTS { 
2978              ...,  
2979              vals (SIZE(1..MAX))}) 
2980     
2981         MatchingRuleId ::= LDAPString 
2982     
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012   
3013 Sermersheim      Internet-Draft - Expires April 2006             Page 52 \f
3014               Lightweight Directory Access Protocol Version 3 
3015                                       
3016         LDAPResult ::= SEQUENCE { 
3017              resultCode         ENUMERATED { 
3018                   success                      (0), 
3019                   operationsError              (1), 
3020                   protocolError                (2), 
3021                   timeLimitExceeded            (3), 
3022                   sizeLimitExceeded            (4), 
3023                   compareFalse                 (5), 
3024                   compareTrue                  (6), 
3025                   authMethodNotSupported       (7), 
3026                   strongerAuthRequired         (8), 
3027                        -- 9 reserved -- 
3028                   referral                     (10), 
3029                   adminLimitExceeded           (11), 
3030                   unavailableCriticalExtension (12), 
3031                   confidentialityRequired      (13), 
3032                   saslBindInProgress           (14), 
3033                   noSuchAttribute              (16), 
3034                   undefinedAttributeType       (17), 
3035                   inappropriateMatching        (18), 
3036                   constraintViolation          (19), 
3037                   attributeOrValueExists       (20), 
3038                   invalidAttributeSyntax       (21), 
3039                        -- 22-31 unused -- 
3040                   noSuchObject                 (32), 
3041                   aliasProblem                 (33), 
3042                   invalidDNSyntax              (34), 
3043                        -- 35 reserved for undefined isLeaf -- 
3044                   aliasDereferencingProblem    (36), 
3045                        -- 37-47 unused -- 
3046                   inappropriateAuthentication  (48), 
3047                   invalidCredentials           (49), 
3048                   insufficientAccessRights     (50), 
3049                   busy                         (51), 
3050                   unavailable                  (52), 
3051                   unwillingToPerform           (53), 
3052                   loopDetect                   (54), 
3053                        -- 55-63 unused -- 
3054                   namingViolation              (64), 
3055                   objectClassViolation         (65), 
3056                   notAllowedOnNonLeaf          (66), 
3057                   notAllowedOnRDN              (67), 
3058                   entryAlreadyExists           (68), 
3059                   objectClassModsProhibited    (69), 
3060                        -- 70 reserved for CLDAP -- 
3061                   affectsMultipleDSAs          (71), 
3062                        -- 72-79 unused -- 
3063                   other                        (80), 
3064                   ... }, 
3065              matchedDN          LDAPDN, 
3066              diagnosticMessage  LDAPString, 
3067              referral           [3] Referral OPTIONAL } 
3068     
3069         Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI 
3070   
3071 Sermersheim      Internet-Draft - Expires April 2006             Page 53 \f
3072               Lightweight Directory Access Protocol Version 3 
3073                                       
3074     
3075         URI ::= LDAPString     -- limited to characters permitted in 
3076                                -- URIs 
3077     
3078         Controls ::= SEQUENCE OF control Control 
3079     
3080         Control ::= SEQUENCE { 
3081              controlType             LDAPOID, 
3082              criticality             BOOLEAN DEFAULT FALSE, 
3083              controlValue            OCTET STRING OPTIONAL } 
3084     
3085         BindRequest ::= [APPLICATION 0] SEQUENCE { 
3086              version                 INTEGER (1 .. 127), 
3087              name                    LDAPDN, 
3088              authentication          AuthenticationChoice } 
3089     
3090         AuthenticationChoice ::= CHOICE { 
3091              simple                  [0] OCTET STRING, 
3092                                      -- 1 and 2 reserved 
3093              sasl                    [3] SaslCredentials, 
3094              ... } 
3095     
3096         SaslCredentials ::= SEQUENCE { 
3097              mechanism               LDAPString, 
3098              credentials             OCTET STRING OPTIONAL } 
3099     
3100         BindResponse ::= [APPLICATION 1] SEQUENCE { 
3101              COMPONENTS OF LDAPResult, 
3102              serverSaslCreds    [7] OCTET STRING OPTIONAL } 
3103     
3104         UnbindRequest ::= [APPLICATION 2] NULL 
3105     
3106         SearchRequest ::= [APPLICATION 3] SEQUENCE { 
3107              baseObject      LDAPDN, 
3108              scope           ENUMERATED { 
3109                   baseObject              (0), 
3110                   singleLevel             (1), 
3111                   wholeSubtree            (2), 
3112                   ... }, 
3113              derefAliases    ENUMERATED { 
3114                   neverDerefAliases       (0), 
3115                   derefInSearching        (1), 
3116                   derefFindingBaseObj     (2), 
3117                   derefAlways             (3) }, 
3118              sizeLimit       INTEGER (0 .. maxInt), 
3119              timeLimit       INTEGER (0 .. maxInt), 
3120              typesOnly       BOOLEAN, 
3121              filter          Filter, 
3122              attributes      AttributeSelection } 
3123     
3124         AttributeSelection ::= SEQUENCE OF selector LDAPString 
3125                        -- The LDAPString is constrained to 
3126                        -- <attributeSelector> in Section 4.5.1.7 
3127     
3128   
3129 Sermersheim      Internet-Draft - Expires April 2006             Page 54 \f
3130               Lightweight Directory Access Protocol Version 3 
3131                                       
3132         Filter ::= CHOICE { 
3133              and             [0] SET SIZE (1..MAX) OF filter Filter, 
3134              or              [1] SET SIZE (1..MAX) OF filter Filter, 
3135              not             [2] Filter, 
3136              equalityMatch   [3] AttributeValueAssertion, 
3137              substrings      [4] SubstringFilter, 
3138              greaterOrEqual  [5] AttributeValueAssertion, 
3139              lessOrEqual     [6] AttributeValueAssertion, 
3140              present         [7] AttributeDescription, 
3141              approxMatch     [8] AttributeValueAssertion, 
3142              extensibleMatch [9] MatchingRuleAssertion, 
3143              ... } 
3144     
3145         SubstringFilter ::= SEQUENCE { 
3146              type           AttributeDescription, 
3147              substrings     SEQUENCE SIZE (1..MAX) OF substring CHOICE { 
3148                   initial [0] AssertionValue,  -- can occur at most once 
3149                   any     [1] AssertionValue, 
3150                   final   [2] AssertionValue } -- can occur at most once  
3151              } 
3152     
3153         MatchingRuleAssertion ::= SEQUENCE { 
3154              matchingRule    [1] MatchingRuleId OPTIONAL, 
3155              type            [2] AttributeDescription OPTIONAL, 
3156              matchValue      [3] AssertionValue, 
3157              dnAttributes    [4] BOOLEAN DEFAULT FALSE } 
3158     
3159         SearchResultEntry ::= [APPLICATION 4] SEQUENCE { 
3160              objectName      LDAPDN, 
3161              attributes      PartialAttributeList } 
3162     
3163         PartialAttributeList ::= SEQUENCE OF  
3164                              partialAttribute PartialAttribute   
3165     
3166         SearchResultReference ::= [APPLICATION 19] SEQUENCE  
3167                                   SIZE (1..MAX) OF uri URI 
3168     
3169         SearchResultDone ::= [APPLICATION 5] LDAPResult 
3170     
3171         ModifyRequest ::= [APPLICATION 6] SEQUENCE { 
3172              object          LDAPDN, 
3173              changes         SEQUENCE OF change SEQUENCE { 
3174                   operation       ENUMERATED { 
3175                        add     (0), 
3176                        delete  (1), 
3177                        replace (2), 
3178                        ... }, 
3179                   modification    PartialAttribute } } 
3180     
3181         ModifyResponse ::= [APPLICATION 7] LDAPResult 
3182     
3183         AddRequest ::= [APPLICATION 8] SEQUENCE { 
3184              entry           LDAPDN, 
3185              attributes      AttributeList } 
3186   
3187 Sermersheim      Internet-Draft - Expires April 2006             Page 55 \f
3188               Lightweight Directory Access Protocol Version 3 
3189                                       
3190     
3191         AttributeList ::= SEQUENCE OF attribute Attribute 
3192     
3193         AddResponse ::= [APPLICATION 9] LDAPResult 
3194     
3195         DelRequest ::= [APPLICATION 10] LDAPDN 
3196     
3197         DelResponse ::= [APPLICATION 11] LDAPResult 
3198     
3199         ModifyDNRequest ::= [APPLICATION 12] SEQUENCE { 
3200              entry           LDAPDN, 
3201              newrdn          RelativeLDAPDN, 
3202              deleteoldrdn    BOOLEAN, 
3203              newSuperior     [0] LDAPDN OPTIONAL } 
3204     
3205         ModifyDNResponse ::= [APPLICATION 13] LDAPResult 
3206     
3207         CompareRequest ::= [APPLICATION 14] SEQUENCE { 
3208              entry           LDAPDN, 
3209              ava             AttributeValueAssertion } 
3210     
3211         CompareResponse ::= [APPLICATION 15] LDAPResult 
3212     
3213         AbandonRequest ::= [APPLICATION 16] MessageID 
3214     
3215         ExtendedRequest ::= [APPLICATION 23] SEQUENCE { 
3216              requestName      [0] LDAPOID, 
3217              requestValue     [1] OCTET STRING OPTIONAL } 
3218     
3219         ExtendedResponse ::= [APPLICATION 24] SEQUENCE { 
3220              COMPONENTS OF LDAPResult, 
3221              responseName     [10] LDAPOID OPTIONAL, 
3222              responseValue    [11] OCTET STRING OPTIONAL } 
3223     
3224         IntermediateResponse ::= [APPLICATION 25] SEQUENCE { 
3225              responseName     [0] LDAPOID OPTIONAL, 
3226              responseValue    [1] OCTET STRING OPTIONAL } 
3227     
3228         END 
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244   
3245 Sermersheim      Internet-Draft - Expires April 2006             Page 56 \f
3246               Lightweight Directory Access Protocol Version 3 
3247                                       
3248 Appendix C. Changes 
3249  
3250    This appendix is non-normative. 
3251     
3252    This appendix summarizes substantive changes made to RFC 2251, RFC 
3253    2830, and RFC 3771. 
3254     
3255     
3256 C.1. Changes made to RFC 2251: 
3257     
3258    This section summarizes the substantive changes made to Sections 1, 
3259    2, 3.1, and 4 through the remainder of RFC 2251. Readers should 
3260    consult [Models] and [AuthMeth] for summaries of changes to other 
3261    sections. 
3262     
3263     
3264 C.1.1. Section 1 (Status of this Memo) 
3265     
3266    - Removed IESG note. Post publication of RFC 2251, mandatory LDAP 
3267      authentication mechanisms have been standardized which are 
3268      sufficient to remove this note. See [AuthMeth] for authentication 
3269      mechanisms. 
3270     
3271     
3272 C.1.2. Section 3.1 (Protocol Model) and others 
3273  
3274    - Removed notes giving history between LDAP v1, v2 and v3. Instead, 
3275      added sufficient language so that this document can stand on its 
3276      own. 
3277     
3278     
3279 C.1.3. Section 4 (Elements of Protocol) 
3280  
3281    - Clarified where the extensibility features of ASN.1 apply to the 
3282      protocol. This change affected various ASN.1 types by the 
3283      inclusion of ellipses (...) to certain elements. 
3284    - Removed the requirement that servers which implement version 3 or 
3285      later MUST provide the 'supportedLDAPVersion' attribute. This 
3286      statement provided no interoperability advantages. 
3287  
3288  
3289 C.1.4. Section 4.1.1 (Message Envelope) 
3290  
3291    - There was a mandatory requirement for the server to return a 
3292      Notice of Disconnection and drop the transport connection when a 
3293      PDU is malformed in a certain way. This has been updated such that 
3294      the server SHOULD return the Notice of Disconnection, and MUST 
3295      terminate the LDAP Session. 
3296  
3297  
3298 C.1.5. Section 4.1.1.1 (Message ID) 
3299  
3300    - Required that the messageID of requests MUST be non-zero as the 
3301      zero is reserved for Notice of Disconnection. 
3302   
3303 Sermersheim      Internet-Draft - Expires April 2006             Page 57 \f
3304               Lightweight Directory Access Protocol Version 3 
3305                                       
3306    - Specified when it is and isn't appropriate to return an already 
3307      used message id. RFC 2251 accidentally imposed synchronous server 
3308      behavior in its wording of this. 
3309  
3310  
3311 C.1.6. Section 4.1.2 (String Types) 
3312  
3313    - Stated that LDAPOID is constrained to <numericoid> from [Models]. 
3314  
3315  
3316 C.1.7. Section 4.1.5.1 (Binary Option) and others 
3317  
3318    - Removed the Binary Option from the specification. There are 
3319      numerous interoperability problems associated with this method of 
3320      alternate attribute type encoding. Work to specify a suitable 
3321      replacement is ongoing. 
3322  
3323  
3324 C.1.8. Section 4.1.8 (Attribute) 
3325  
3326    - Combined the definitions of PartialAttribute and Attribute here, 
3327      and defined Attribute in terms of PartialAttribute. 
3328  
3329  
3330 C.1.9. Section 4.1.10 (Result Message) 
3331  
3332    - Renamed "errorMessage" to "diagnosticMessage" as it is allowed to 
3333      be sent for non-error results. 
3334    - Moved some language into Appendix A, and refer the reader there. 
3335    - Allowed matchedDN to be present for other result codes than those 
3336      listed in RFC 2251. 
3337    - renamed the code "strongAuthRequired" to "strongerAuthRequired" to 
3338      clarify that this code may often be returned to indicate that a 
3339      stronger authentication is needed to perform a given operation. 
3340  
3341  
3342 C.1.10. Section 4.1.11 (Referral) 
3343  
3344    - Defined referrals in terms of URIs rather than URLs. 
3345    - Removed the requirement that all referral URIs MUST be equally 
3346      capable of progressing the operation. The statement was ambiguous 
3347      and provided no instructions on how to carry it out. 
3348    - Added the requirement that clients MUST NOT loop between servers. 
3349    - Clarified the instructions for using LDAPURLs in referrals, and in 
3350      doing so added a recommendation that the scope part be present. 
3351    - Removed imperatives which required clients to use URLs in specific 
3352      ways to progress an operation. These did nothing for 
3353      interoperability. 
3354  
3355  
3356 C.1.11. Section 4.1.12 (Controls) 
3357  
3358    - Specified how control values defined in terms of ASN.1 are to be 
3359      encoded. 
3360   
3361 Sermersheim      Internet-Draft - Expires April 2006             Page 58 \f
3362               Lightweight Directory Access Protocol Version 3 
3363                                       
3364    - Noted that the criticality field is only applied to request 
3365      messages (except UnbindRequest), and must be ignored when present 
3366      on response messages and UnbindRequest. 
3367    - Specified that non-critical controls may be ignored at the 
3368      server's discretion. There was confusion in the original wording 
3369      which led some to believe that recognized controls may not be 
3370      ignored as long as they were associated with a proper request. 
3371    - Added language regarding combinations of controls and the ordering 
3372      of controls on a message. 
3373    - Specified that when the semantics of the combination of controls 
3374      is undefined or unknown, it results in a protocolError. 
3375    - Changed "The server MUST be prepared" to "Implementations MUST be 
3376      prepared" in the eighth paragraph to reflect that both client and 
3377      server implementations must be able to handle this (as both parse 
3378      controls). 
3379  
3380  
3381 C.1.12. Section 4.2 (Bind Operation) 
3382  
3383    - Mandated that servers return protocolError when the version is not 
3384      supported. 
3385    - Disambiguated behavior when the simple authentication is used, the 
3386      name is empty and the password is non-empty. 
3387    - Required servers to not dereference aliases for Bind. This was 
3388      added for consistency with other operations and to help ensure 
3389      data consistency. 
3390    - Required that textual passwords be transferred as UTF-8 encoded 
3391      Unicode, and added recommendations on string preparation. This was 
3392      to help ensure interoperability of passwords being sent from 
3393      different clients. 
3394  
3395  
3396 C.1.13. Section 4.2.1 (Sequencing of the Bind Request) 
3397  
3398    - This section was largely reorganized for readability and language 
3399      was added to clarify the authentication state of failed and 
3400      abandoned Bind operations. 
3401    - Removed: "If a SASL transfer encryption or integrity mechanism has 
3402      been negotiated, that mechanism does not support the changing of 
3403      credentials from one identity to another, then the client MUST 
3404      instead establish a new connection." 
3405      If there are dependencies between multiple negotiations of a 
3406      particular SASL mechanism, the technical specification for that 
3407      SASL mechanism details how applications are to deal with them. 
3408      LDAP should not require any special handling. 
3409    - Dropped MUST imperative in paragraph 3 to align with [Keywords]. 
3410    - Mandated that clients not send non-Bind operations while a Bind is 
3411      in progress, and suggested that servers not process them if they 
3412      are received. This is needed to ensure proper sequencing of the 
3413      Bind in relationship to other operations. 
3414     
3415     
3416
3417
3418   
3419 Sermersheim      Internet-Draft - Expires April 2006             Page 59 \f
3420               Lightweight Directory Access Protocol Version 3 
3421                                       
3422 C.1.14. Section 4.2.3 (Bind Response) 
3423  
3424    - Moved most error-related text to Appendix A, and added text 
3425      regarding certain errors used in conjunction with the Bind 
3426      operation. 
3427    - Prohibited the server from specifying serverSaslCreds when not 
3428      appropriate. 
3429     
3430     
3431 C.1.15. Section 4.3 (Unbind Operation) 
3432  
3433    - Specified that both peers are to cease transmission and terminate 
3434      the LDAP session for the Unbind operation. 
3435     
3436     
3437 C.1.16. Section 4.4 (Unsolicited Notification) 
3438  
3439    - Added instructions for future specifications of Unsolicited 
3440      Notifications. 
3441     
3442     
3443 C.1.17. Section 4.5.1 (Search Request) 
3444  
3445    - SearchRequest attributes is now defined as an AttributeSelection 
3446      type rather than AttributeDescriptionList, and an ABNF is 
3447      provided. 
3448    - SearchRequest attributes may contain duplicate attribute 
3449      descriptions. This was previously prohibited. Now servers are 
3450      instructed to ignore subsequent names when they are duplicated. 
3451      This was relaxed in order to allow different short names and also 
3452      OIDs to be requested for an attribute. 
3453    - The present search filter now evaluates to Undefined when the 
3454      specified attribute is not known to the server. It used to 
3455      evaluate to FALSE, which caused behavior inconsistent with what 
3456      most would expect, especially when the not operator was used. 
3457    - The Filter choice SubstringFilter substrings type is now defined 
3458      with a lower bound of 1. 
3459    - The SubstringFilter substrings 'initial, 'any', and 'final' types 
3460      are now AssertionValue rather than LDAPString. Also, added 
3461      imperatives stating that 'initial' (if present) must be listed 
3462      first, and 'final' (if present) must be listed last. 
3463    - Disambiguated the semantics of the derefAliases choices. There was 
3464      question as to whether derefInSearching applied to the base object 
3465      in a wholeSubtree Search. 
3466    - Added instructions for equalityMatch, substrings, greaterOrEqual, 
3467      lessOrEqual, and approxMatch. 
3468     
3469     
3470 C.1.18. Section 4.5.2 (Search Result) 
3471  
3472    - Recommended that servers not use attribute short names when it 
3473      knows they are ambiguous or may cause interoperability problems. 
3474    - Removed all mention of ExtendedResponse due to lack of 
3475      implementation. 
3476   
3477 Sermersheim      Internet-Draft - Expires April 2006             Page 60 \f
3478               Lightweight Directory Access Protocol Version 3 
3479                                       
3480     
3481     
3482 C.1.19. Section 4.5.3 (Continuation References in the Search Result) 
3483  
3484    - Made changes similar to those made to Section 4.1.11. 
3485     
3486     
3487 C.1.20. Section 4.5.3.1 (Example) 
3488  
3489    - Fixed examples to adhere to changes made to Section 4.5.3. 
3490     
3491     
3492 C.1.21. Section 4.6 (Modify Operation) 
3493     
3494    - Replaced AttributeTypeAndValues with Attribute as they are 
3495      equivalent. 
3496    - Specified the types of modification changes which might 
3497      temporarily violate schema. Some readers were under the impression 
3498      that any temporary schema violation was allowed.  
3499     
3500     
3501 C.1.22. Section 4.7 (Add Operation) 
3502  
3503    - Aligned Add operation with X.511 in that the attributes of the RDN 
3504      are used in conjunction with the listed attributes to create the 
3505      entry. Previously, Add required that the distinguished values be 
3506      present in the listed attributes. 
3507    - Removed requirement that the objectClass attribute MUST be 
3508      specified as some DSE types do not require this attribute. 
3509      Instead, generic wording was added, requiring the added entry to 
3510      adhere to the data model. 
3511    - Removed recommendation regarding placement of objects. This is 
3512      covered in the data model document. 
3513     
3514     
3515 C.1.23. Section 4.9 (Modify DN Operation) 
3516  
3517    - Required servers to not dereference aliases for Modify DN. This 
3518      was added for consistency with other operations and to help ensure 
3519      data consistency. 
3520    - Allow Modify DN to fail when moving between naming contexts. 
3521    - Specified what happens when the attributes of the newrdn are not 
3522      present on the entry. 
3523  
3524  
3525 C.1.24. Section 4.10 (Compare Operation) 
3526  
3527    - Specified that compareFalse means that the Compare took place and 
3528      the result is false. There was confusion which lead people to 
3529      believe that an Undefined match resulted in compareFalse. 
3530    - Required servers to not dereference aliases for Compare. This was 
3531      added for consistency with other operations and to help ensure 
3532      data consistency. 
3533     
3534   
3535 Sermersheim      Internet-Draft - Expires April 2006             Page 61 \f
3536               Lightweight Directory Access Protocol Version 3 
3537                                       
3538     
3539 C.1.25. Section 4.11 (Abandon Operation) 
3540  
3541    - Explained that since Abandon returns no response, clients should 
3542      not use it if they need to know the outcome. 
3543    - Specified that Abandon and Unbind cannot be abandoned.  
3544     
3545  
3546 C.1.26. Section 4.12 (Extended Operation) 
3547  
3548    - Specified how values of Extended operations defined in terms of 
3549      ASN.1 are to be encoded. 
3550    - Added instructions on what Extended operation specifications 
3551      consist of. 
3552    - Added a recommendation that servers advertise supported Extended 
3553      operations. 
3554  
3555  
3556 C.1.27. Section 5.2 (Transfer Protocols) 
3557  
3558    - Moved referral-specific instructions into referral-related 
3559      sections. 
3560  
3561  
3562 C.1.28. Section 7 (Security Considerations) 
3563  
3564    - Reworded notes regarding SASL not protecting certain aspects of 
3565      the LDAP Bind messages. 
3566    - Noted that Servers are encouraged to prevent directory 
3567      modifications by clients that have authenticated anonymously 
3568      [AuthMeth].  
3569    - Added a note regarding the possibility of changes to security 
3570      factors (authentication, authorization, data confidentiality). 
3571    - Warned against following referrals that may have been injected in 
3572      the data stream. 
3573    - Noted that servers should protect information equally, whether in 
3574      an error condition or not, and mentioned specifically; matchedDN, 
3575      diagnosticMessage, and resultCodes.  
3576    - Added a note regarding malformed and long encodings. 
3577  
3578  
3579 C.1.29. Appendix A (Complete ASN.1 Definition) 
3580  
3581    - Added "EXTENSIBILITY IMPLIED" to ASN.1 definition. 
3582    - Removed AttributeType. It is not used. 
3583  
3584  
3585 C.2. Changes made to RFC 2830: 
3586     
3587    This section summarizes the substantive changes made to Sections of 
3588    RFC 2830. Readers should consult [AuthMeth] for summaries of changes 
3589    to other sections. 
3590     
3591     
3592   
3593 Sermersheim      Internet-Draft - Expires April 2006             Page 62 \f
3594               Lightweight Directory Access Protocol Version 3 
3595                                       
3596 C.2.1. Section 2.3 (Response other than "success") 
3597  
3598    - Removed wording indicating that referrals can be returned from 
3599      StartTLS. 
3600    - Removed requirement that only a narrow set of result codes can be 
3601      returned. Some result codes are required in certain scenarios, but 
3602      any other may be returned if appropriate. 
3603    - Removed requirement that the ExtendedResponse.responseName MUST be 
3604      present. There are circumstances where this is impossible, and 
3605      requiring this is at odds with language in Section 4.12. 
3606     
3607     
3608 C.2.1. Section 4 (Closing a TLS Connection) 
3609     
3610    - Reworded most of this section to align with definitions of the 
3611      LDAP protocol layers. 
3612    - Removed instructions on abrupt closure as this is covered in other 
3613      areas of the document (specifically, Section 5.3) 
3614     
3615  
3616 C.3. Changes made to RFC 3771: 
3617     
3618    - Rewrote to fit into this document. In general, semantics were 
3619      preserved. Supporting and background language seen as redundant 
3620      due to its presence in this document was omitted. 
3621    - Specified that Intermediate responses to a request may be of 
3622      different types, and one of the response types may be specified to 
3623      have no response value. 
3624  
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650   
3651 Sermersheim      Internet-Draft - Expires April 2006             Page 63 \f
3652               Lightweight Directory Access Protocol Version 3 
3653                                       
3654  
3655     
3656     
3657 Intellectual Property Statement 
3658     
3659    The IETF takes no position regarding the validity or scope of any 
3660    Intellectual Property Rights or other rights that might be claimed to 
3661    pertain to the implementation or use of the technology described in 
3662    this document or the extent to which any license under such rights 
3663    might or might not be available; nor does it represent that it has 
3664    made any independent effort to identify any such rights. Information 
3665    on the procedures with respect to rights in RFC documents can be 
3666    found in BCP 78 and BCP 79.  
3667  
3668    Copies of IPR disclosures made to the IETF Secretariat and any 
3669    assurances of licenses to be made available, or the result of an 
3670    attempt made to obtain a general license or permission for the use of 
3671    such proprietary rights by implementers or users of this 
3672    specification can be obtained from the IETF on-line IPR repository at 
3673    http://www.ietf.org/ipr.  
3674  
3675    The IETF invites any interested party to bring to its attention any 
3676    copyrights, patents or patent applications, or other proprietary 
3677    rights that may cover technology that may be required to implement 
3678    this standard. Please address the information to the IETF at ietf-
3679    ipr@ietf.org.  
3680  
3681 Disclaimer of Validity 
3682  
3683    This document and the information contained herein are provided on an 
3684    "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS 
3685    OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET 
3686    ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, 
3687    INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE 
3688    INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 
3689    WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
3690  
3691 Copyright Statement 
3692  
3693    Copyright (C) The Internet Society (2005).  
3694     
3695    This document is subject to the rights, licenses and restrictions 
3696    contained in BCP 78, and except as set forth therein, the authors 
3697    retain all their rights.  
3698  
3699 Acknowledgement 
3700  
3701    Funding for the RFC Editor function is currently provided by the 
3702    Internet Society. 
3703
3704
3705
3706
3707
3708   
3709 Sermersheim      Internet-Draft - Expires April 2006             Page 64