xref: /netbsd-src/external/bsd/openldap/dist/doc/drafts/draft-ietf-ldapext-ldapv3-dupent-xx.txt (revision 2de962bd804263c16657f586aa00f1704045df8e)
1
2
3LDAPEXT Working Group                                    J. Sermersheim
4Internet Draft                                              Novell, Inc
5Document: draft-ietf-ldapext-ldapv3-dupent-08.txt             Sept 2002
6Intended Category: Standard Track
7
8
9  LDAP Control for a Duplicate Entry Representation of Search Results
10
11
121. Status of this Memo
13
14   This document is an Internet-Draft and is in full conformance with
15   all provisions of Section 10 of RFC2026 [1].
16
17   Internet-Drafts are working documents of the Internet Engineering
18   Task Force (IETF), its areas, and its working groups. Note that
19   other groups may also distribute working documents as Internet-
20   Drafts. Internet-Drafts are draft documents valid for a maximum of
21   six months and may be updated, replaced, or obsoleted by other
22   documents at any time. It is inappropriate to use Internet- Drafts
23   as reference material or to cite them other than as "work in
24   progress."
25
26   The list of current Internet-Drafts can be accessed at
27   http://www.ietf.org/ietf/1id-abstracts.txt
28
29   The list of Internet-Draft Shadow Directories can be accessed at
30   http://www.ietf.org/shadow.html.
31
322. Abstract
33
34   This document describes a Duplicate Entry Representation control
35   extension for the LDAP Search operation. By using the control with
36   an LDAP search, a client requests that the server return separate
37   entries for each value held in the specified attribute(s). For
38   instance, if a specified attribute of an entry holds multiple
39   values, the search operation will return multiple instances of that
40   entry, each instance holding a separate single value in that
41   attribute.
42
433. Introduction
44
45   This document describes controls, which allow duplicate entries to
46   be returned in the result set of search operation. Each duplicated
47   entry represents a distinct value (or combination of values) of the
48   set of specified multi-valued attributes.
49
50   For example, an application may need to produce an ordered list of
51   entries, sorted by a multi-valued attribute, where each attribute
52   value is represented in the list. The Server-Side Sorting control
53   [RFC2891] allows the server to order search result entries based on
54   attribute values (sort keys).  But it does not allow one to specify
55   behavior when an attribute contains multiple values.  The default
56
57
58Sermersheim       Internet-Draft - Expires Mar 2003            Page 1
59LDAP Control for a Duplicate Entry Representation of Search Results
60
61
62   behavior, as outlined in 7.9 of [X.511], is to use the smallest
63   order value as the sort key.
64
65   In order to produce an ordered list, where each value of a multi-
66   valued attribute is sorted into the list, a separate control is
67   needed which causes the set of entries to be expanded sufficiently
68   to represent each attribute value prior to sorting.
69
70
71
72   An example of this would be a sorted list of all telephone numbers
73   in an organization.  Because any entry may have multiple telephone
74   numbers, and the list is to be sorted by telephone number, the list
75   must be able to contain duplicate entries, each with its own unique
76   telephone number.
77
78   Another example would be an application that needs to display an
79   ordered list of all members of a group.  It would use this control
80   to create a result set of duplicate groupOfNames entries, each with
81   a single, unique value in its member attribute.
82
834. Conventions
84
85   The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY"
86   used in this document carry the meanings described in [RFC2119].
87
88   All controlValue data is represented as ASN.1 in this document, and
89   is to be BER encoded as stated in Section 5.1 of [RFC2251].
90
915. The Controls
92
93   Support for the controls is advertised by the presence of their OID
94   in the supportedControl attribute of a server's root DSE.  The OID
95   for the request control is "2.16.840.1.113719.1.27.101.1" and the
96   OIDs for the response controls are "2.16.840.1.113719.1.27.101.2"
97   and "2.16.840.1.113719.1.27.101.3".
98
995.1 Request Control
100
101   This control is included in the searchRequest message as part of the
102   controls field of the LDAPMessage, as defined in Section 4.1.12 of
103   [RFC2251].
104
105   The controlType is set to "2.16.840.1.113719.1.27.101.1". The
106   criticality MAY be set to either TRUE or FALSE.  The controlValue is
107   defined as the following DuplicateEntryRequest:
108
109   DuplicateEntryRequest ::= SEQUENCE {
110        AttributeDescriptionList, -- from [RFC2251]
111        PartialApplicationAllowed BOOLEAN DEFAULT TRUE }
112
113
1145.1.1 AttributeDescriptionList Semantics
115
116Sermersheim       Internet-Draft - Expires Mar 2003            Page 2
117LDAP Control for a Duplicate Entry Representation of Search Results
118
119
120
121   The AttributeDescriptionList data type is described in 4.1.5 of
122   [RFC2251] and describes a list of zero or more AttributeDescription
123   types as also described in 4.1.5 of [RFC2251]. Both definitions are
124   repeated here for convenience:
125
126        AttributeDescriptionList ::= SEQUENCE OF
127                AttributeDescription
128
129        AttributeDescription ::= LDAPString
130
131   A value of AttributeDescription is based on the following BNF:
132
133        attributeDescription = AttributeType [ ";" <options> ]
134
135   While processing a search request, a server implementation examines
136   this list. If a specified attribute or attribute subtype exists in
137   an entry to be returned by the search operation, and that attribute
138   holds multiple values, the server treats the entry as if it were
139   multiple, duplicate entries -- the specified attributes each holding
140   a single, unique value from the original set of values of that
141   attribute. Note that this may result in search result entries that
142   no longer match the search filter.
143
144   Specifying an attribute supertype has the effect of treating all
145   values of that attribute's subtypes as if they were values of the
146   specified attribute supertype. See Section 6.2 for an example of
147   this.
148
149   When attribute descriptions contain subtyping options, they are
150   treated in the same manner as is described in Section 4.1.5 of
151   [RFC2251]. Semantics are undefined if an attribute description
152   contains a non-subtyping option, and SHOULD NOT be specified by
153   clients.
154
155   When two or more attributes are specified by this control, the
156   number of duplicate entries is the combination of all values in each
157   attribute. Because of the potential complexity involved in servicing
158   multiple attributes, server implementations MAY choose to support a
159   limited number of attributes in the control.
160
161   There is a special case where either no attributes are specified, or
162   an attribute description value of "*" is specified.  In this case,
163   all attributes are used.  (The "*" allows the client to request all
164   user attributes in addition to specific operational attributes).
165
166   If an attribute is unrecognized, that attribute is ignored when
167   processing the control.
168
1695.1.2 PartialApplicationAllowed Semantics
170
171   The PartialApplicationAllowed field is used to specify whether the
172   client will allow the server to apply this control to a subset of
173
174Sermersheim       Internet-Draft - Expires Mar 2003            Page 3
175LDAP Control for a Duplicate Entry Representation of Search Results
176
177
178   the search result set. If TRUE, the server is free to arbitrarily
179   apply this control to no, any, or all search results. If FALSE, the
180   server MUST either apply the control to all search results or fail
181   to support the control at all.
182
183   Client implementations use the DuplicateSearchResult control to
184   discover which search results have been affected by this control.
185
1865.2 Response Controls
187
188   Two response controls are defined to provide feedback while the
189   search results are being processed; DuplicateSearchResult and
190   DuplicateEntryResponseDone.
191
192   The DuplicateSearchResult control is sent with all SearchResultEntry
193   operations that contain search results which have been modified by
194   the DuplicateEntryRequest control.
195
196   The DuplicateEntryResponseDone control is sent with the
197   SearchResultDone operation in order to convey completion
198   information.
199
2005.2.1 The DuplicateSearchResult control
201
202   This control is included in the SearchResultEntry message of any
203   search result that holds an entry that has been modified by the
204   DuplicateEntryRequest control as part of the controls field of the
205   LDAPMessage, as defined in Section 4.1.12 of [RFC2251]. This control
206   is absent on search results that are unaffected by
207   DuplicateEntryRequest control.
208
209   The controlType is set to "2.16.840.1.113719.1.27.101.2". The
210   controlValue is not included.
211
2125.2.2 The DuplicateEntryResponseDone control
213
214   This control is included in the searchResultDone message as part of
215   the controls field of the LDAPMessage, as defined in Section 4.1.12
216   of [RFC2251].
217
218   The controlType is set to "2.16.840.1.113719.1.27.101.3". The
219   controlValue is defined as the following DuplicateEntryResponseDone:
220
221      DuplicateEntryResponseDone ::= SEQUENCE {
222         resultCode,     -- From [RFC2251]
223         errorMessage    [0] LDAPString OPTIONAL,
224         attribute       [1] AttributeDescription OPTIONAL }
225
226   A resultCode field is provided here to allow the server to convey to
227   the client that an error resulted due to the control being serviced.
228   For example, a search that would ordinarily complete successfully
229   may fail with a sizeLimitExceeded error due to this control being
230
231
232Sermersheim       Internet-Draft - Expires Mar 2003            Page 4
233LDAP Control for a Duplicate Entry Representation of Search Results
234
235
236   processed. If the operation is successfull, the value will be
237   success (0).
238
239   The errorMessage field MAY be populated with a human-readable string
240   in the event of an erroneous result code.
241
242   The attribute field MAY be set to the value of the first attribute
243   specified by the DuplicateEntryRequest that was in error.  The
244   client MUST ignore the attribute field if the result is success.
245
2466. Protocol Examples
247
2486.1 Simple example
249
250   This example will show this control being used to produce a list of
251   all telephone numbers in the dc=example,dc=net container.  Let's say
252   the following three entries exist in this container;
253
254   dn: cn=User1,dc=example,dc=net
255   telephoneNumber: 555-0123
256
257   dn: cn=User2,dc=example,dc=net
258   telephoneNumber: 555-8854
259   telephoneNumber: 555-4588
260   telephoneNumber: 555-5884
261
262   dn: cn=User3,dc=example,dc=net
263   telephoneNumber: 555-9425
264   telephoneNumber: 555-7992
265
266   First an LDAP search is specified with a baseDN of
267   "dc=example,dc=net", subtree scope, filter set to
268   "(telephoneNumber=*)".  A DuplicateEntryRequest control is attached
269   to the search, specifying "telephoneNumber" as the attribute
270   description, and the search request is sent to the server.
271
272   The set of search results returned by the server would then consist
273   of the following entries:
274
275   dn: cn=User1,dc=example,dc=net
276   telephoneNumber: 555-0123
277   <no DuplicateSearchResult control sent with search result>
278
279   dn: cn=User2,dc=example,dc=net
280   telephoneNumber: 555-8854
281   control: 2.16.840.1.113719.1.27.101.2
282
283   dn: cn=User2,dc=example,dc=net
284   telephoneNumber: 555-4588
285   control: 2.16.840.1.113719.1.27.101.2
286
287   dn: cn=User2,dc=example,dc=net
288   telephoneNumber: 555-5884
289
290Sermersheim       Internet-Draft - Expires Mar 2003            Page 5
291LDAP Control for a Duplicate Entry Representation of Search Results
292
293
294   control: 2.16.840.1.113719.1.27.101.2
295
296   dn: cn=User3,dc=example,dc=net
297   telephoneNumber: 555-9425
298   control: 2.16.840.1.113719.1.27.101.2
299
300   dn: cn=User3,dc=example,dc=net
301   telephoneNumber: 555-7992
302   control: 2.16.840.1.113719.1.27.101.2
303
304   All but the first entry are accompanied by the DuplicateSearchResult
305   control when sent from the server.
306
307   Note that it is not necessary to use an attribute in this control
308   that is specified in the search filter.  This example only does so,
309   because the result was to obtain a list of telephone numbers.
310
3116.2 Specifying multiple attributes
312
313   A more complicated example involving multiple attributes will result
314   in more entries. If we assume these entries in the directory:
315
316   dn: cn=User1,dc=example,dc=net
317   cn: User1
318   givenName: User One
319   mail: user1@example.net
320
321   dn: cn=User2,dc=example,dc=net
322   cn: User2
323   givenName: User Two
324   mail: user2@example.net
325   mail: usertwo@example.net
326
327   In this example, we specify mail and name in the attribute list. By
328   specifying name, all attribute subtypes of name will also be
329   considered. Following is the resulting set of entries:
330
331   dn: cn=User1,dc=example,dc=net
332   cn: User1
333   mail: user1@example.net
334   control: 2.16.840.1.113719.1.27.101.2
335
336   dn: cn=User1,dc=example,dc=net
337   givenName: User One
338   mail: user1@example.net
339   control: 2.16.840.1.113719.1.27.101.2
340
341   dn: cn=User2,dc=example,dc=net
342   cn: User2
343   mail: user2@example.net
344   control: 2.16.840.1.113719.1.27.101.2
345
346   dn: cn=User2,dc=example,dc=net
347
348Sermersheim       Internet-Draft - Expires Mar 2003            Page 6
349LDAP Control for a Duplicate Entry Representation of Search Results
350
351
352   cn: User2
353   mail: usertwo@example.net
354   control: 2.16.840.1.113719.1.27.101.2
355
356   dn: cn=User2,dc=example,dc=net
357   givenName: User Two
358   mail: user2@example.net
359   control: 2.16.840.1.113719.1.27.101.2
360
361   dn: cn=User2,dc=example,dc=net
362   givenName: User Two
363   mail: usertwo@example.net
364   control: 2.16.840.1.113719.1.27.101.2
365
3666.3 Listing the members of a groupOfNames
367
368   This example shows how the controls can be used to turn a single
369   groupOfNames entry into multiple duplicate entries.  Let's say this
370   is our groupOfNames entry:
371
372   dn: cn=Administrators,dc=example,dc=net
373   cn: Administrators
374   member: cn=aBaker,dc=example,dc=net
375   member: cn=cDavis,dc=example,dc=net
376   member: cn=bChilds,dc=example,dc=net
377   member: cn=dEvans,dc=example,dc=net
378
379   We could set our search base to "cn=Administrators,dc=example,dc=net
380   ", filter to "(objectClass=*)", use an object scope (to restrict it
381   to this entry) and send the duplicateEntryRequest control with
382   "member" as its attribute value.  The resulting set would look like
383   this:
384
385   dn: cn=Administrators,dc=example,dc=net
386   member: cn=aBaker,dc=example,dc=net
387   control: 2.16.840.1.113719.1.27.101.2
388
389   dn: cn=Administrators,dc=example,dc=net
390   member: cn=cDavis,dc=example,dc=net
391   control: 2.16.840.1.113719.1.27.101.2
392
393   dn: cn=Administrators,dc=example,dc=net
394   member: cn=bChilds,dc=example,dc=net
395   control: 2.16.840.1.113719.1.27.101.2
396
397   dn: cn=Administrators,dc=example,dc=net
398   member: cn=dEvans,dc=example,dc=net
399   control: 2.16.840.1.113719.1.27.101.2
400
401   This list can then be sorted by member and displayed (also by
402   member) in a list.
403
4047. Relationship to other controls
405
406Sermersheim       Internet-Draft - Expires Mar 2003            Page 7
407LDAP Control for a Duplicate Entry Representation of Search Results
408
409
410
411   This control is intended (but not limited) to be used with the
412   Server Side Sorting control [RFC2891].  By pairing this control with
413   the Server Side Sorting control, One can produce a set of entries,
414   sorted by attribute values, where each attribute value is
415   represented in the sorted set.  Server implementations MUST ensure
416   that this control is processed before sorting the result of a
417   search, as this control alters the result set of search.
418
419   This control MAY also be used with the Virtual List View [VLV]
420   control (which has a dependency on the Server Side Sort control).
421   The nature of the dependency between the VLV control and the Sort
422   control is such that the Sorting takes place first. Because the sort
423   happens first, and because this control is processed before the sort
424   control, the impact of this control on the VLV control is minimal.
425   Some server implementations may need to carefully consider how to
426   handle the typedown functionality of the VLV control when paired
427   with this control. The details of this are heavily implementation
428   dependent and are beyond the scope of this document.
429
4308. Notes for Implementers
431
432   Both client and server implementations MUST be aware that using this
433   control could potentially result in a very large set of search
434   results. Servers MAY return an adminLimitExceeded result in the
435   response control due to inordinate consumption of resources. This
436   may be due to some a priori knowledge such as a server restriction
437   of the number of attributes in the request control that it's willing
438   to service, or it may be due to the server attempting to service the
439   control and running out of resources.
440
441   Client implementations MUST be aware that when using this control,
442   search entries returned will contain a subset of the values of any
443   specified attribute.
444
445   If this control is used in a chained environment, servers SHOULD NOT
446   pass this control to other servers. Instead they SHOULD gather
447   results and apply this control themselves.
448
4499. Security Considerations
450
451   This control allows finer control of the result set returned by an
452   LDAP search operation and as such may be used in a denial of service
453   attack. See Section 8 for more information on how this is detected
454   and handled.
455
45610. Acknowledgments
457
458   The author gratefully thanks the input and support of participants
459   of the LDAP-EXT working group.
460
46111. References
462
463
464Sermersheim       Internet-Draft - Expires Mar 2003            Page 8
465LDAP Control for a Duplicate Entry Representation of Search Results
466
467
468   [RFC2251]
469   Wahl, M, S. Kille and T. Howes, "Lightweight Directory Access
470   Protocol (v3)", Internet RFC, December, 1997.
471   Available as RFC 2251.
472
473   [RFC2891]
474   Wahl, M, A. Herron and T. Howes, "LDAP Control Extension for Server
475   Side Sorting of Search Results", Internet RFC, August, 2000.
476   Available as RFC 2891.
477
478   [VLV]
479   Boreham, D, Sermersheim, J, Anantha, A, Armijo, M, "LDAP Extensions
480   for Scrolling View Browsing of Search Results", Internet Draft,
481   April, 2000.
482   Available as draft-ietf-ldapext-ldapv3-vlv-xx.txt.
483
484   [X.511]
485   ITU-T Rec. X.511, "The Directory: Abstract Service Definition",
486   1993.
487
488   [RFC2119]
489   Bradner, Scott, "Key Words for use in RFCs to Indicate Requirement
490   Levels", Internet Draft, March, 1997.
491   Available as RFC 2119.
492
49312. Author's Address
494
495   Jim Sermersheim
496   Novell, Inc.
497   1800 South Novell Place
498   Provo, Utah 84606, USA
499   jimse@novell.com
500   +1 801 861-3088
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522Sermersheim       Internet-Draft - Expires Mar 2003            Page 9
523