1 |
|
---|
2 |
|
---|
3 |
|
---|
4 |
|
---|
5 |
|
---|
6 |
|
---|
7 | Network Working Group K. Zeilenga
|
---|
8 | Request for Comments: 4533 OpenLDAP Foundation
|
---|
9 | Category: Experimental J.H. Choi
|
---|
10 | IBM Corporation
|
---|
11 | June 2006
|
---|
12 |
|
---|
13 |
|
---|
14 | The Lightweight Directory Access Protocol (LDAP)
|
---|
15 | Content Synchronization Operation
|
---|
16 |
|
---|
17 | Status of This Memo
|
---|
18 |
|
---|
19 | This memo defines an Experimental Protocol for the Internet
|
---|
20 | community. It does not specify an Internet standard of any kind.
|
---|
21 | Discussion and suggestions for improvement are requested.
|
---|
22 | Distribution of this memo is unlimited.
|
---|
23 |
|
---|
24 | Copyright Notice
|
---|
25 |
|
---|
26 | Copyright (C) The Internet Society (2006).
|
---|
27 |
|
---|
28 | IESG Note
|
---|
29 |
|
---|
30 | The IESG notes that this work was originally discussed in the LDUP
|
---|
31 | working group. The group came to consensus on a different approach,
|
---|
32 | documented in RFC 3928; that document is on the standards track and
|
---|
33 | should be reviewed by those considering implementation of this
|
---|
34 | proposal.
|
---|
35 |
|
---|
36 | Abstract
|
---|
37 |
|
---|
38 | This specification describes the Lightweight Directory Access
|
---|
39 | Protocol (LDAP) Content Synchronization Operation. The operation
|
---|
40 | allows a client to maintain a copy of a fragment of the Directory
|
---|
41 | Information Tree (DIT). It supports both polling for changes and
|
---|
42 | listening for changes. The operation is defined as an extension of
|
---|
43 | the LDAP Search Operation.
|
---|
44 |
|
---|
45 |
|
---|
46 |
|
---|
47 |
|
---|
48 |
|
---|
49 |
|
---|
50 |
|
---|
51 |
|
---|
52 |
|
---|
53 |
|
---|
54 |
|
---|
55 |
|
---|
56 |
|
---|
57 |
|
---|
58 | Zeilenga & Choi Experimental [Page 1]
|
---|
59 | |
---|
60 |
|
---|
61 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
62 |
|
---|
63 |
|
---|
64 | Table of Contents
|
---|
65 |
|
---|
66 | 1. Introduction ....................................................3
|
---|
67 | 1.1. Background .................................................3
|
---|
68 | 1.2. Intended Usage .............................................4
|
---|
69 | 1.3. Overview ...................................................5
|
---|
70 | 1.4. Conventions ................................................8
|
---|
71 | 2. Elements of the Sync Operation ..................................8
|
---|
72 | 2.1. Common ASN.1 Elements ......................................9
|
---|
73 | 2.2. Sync Request Control .......................................9
|
---|
74 | 2.3. Sync State Control ........................................10
|
---|
75 | 2.4. Sync Done Control .........................................10
|
---|
76 | 2.5. Sync Info Message .........................................11
|
---|
77 | 2.6. Sync Result Codes .........................................11
|
---|
78 | 3. Content Synchronization ........................................11
|
---|
79 | 3.1. Synchronization Session ...................................12
|
---|
80 | 3.2. Content Determination .....................................12
|
---|
81 | 3.3. refreshOnly Mode ..........................................13
|
---|
82 | 3.4. refreshAndPersist Mode ....................................16
|
---|
83 | 3.5. Search Request Parameters .................................17
|
---|
84 | 3.6. objectName ................................................18
|
---|
85 | 3.7. Canceling the Sync Operation ..............................19
|
---|
86 | 3.8. Refresh Required ..........................................19
|
---|
87 | 3.9. Chattiness Considerations .................................20
|
---|
88 | 3.10. Operation Multiplexing ...................................21
|
---|
89 | 4. Meta Information Considerations ................................22
|
---|
90 | 4.1. Entry DN ..................................................22
|
---|
91 | 4.2. Operational Attributes ....................................22
|
---|
92 | 4.3. Collective Attributes .....................................23
|
---|
93 | 4.4. Access and Other Administrative Controls ..................23
|
---|
94 | 5. Interaction with Other Controls ................................23
|
---|
95 | 5.1. ManageDsaIT Control .......................................24
|
---|
96 | 5.2. Subentries Control ........................................24
|
---|
97 | 6. Shadowing Considerations .......................................24
|
---|
98 | 7. Security Considerations ........................................25
|
---|
99 | 8. IANA Considerations ............................................26
|
---|
100 | 8.1. Object Identifier .........................................26
|
---|
101 | 8.2. LDAP Protocol Mechanism ...................................26
|
---|
102 | 8.3. LDAP Result Codes .........................................26
|
---|
103 | 9. Acknowledgements ...............................................26
|
---|
104 | 10. Normative References ..........................................27
|
---|
105 | 11. Informative References ........................................28
|
---|
106 | Appendix A. CSN-based Implementation Considerations ..............29
|
---|
107 |
|
---|
108 |
|
---|
109 |
|
---|
110 |
|
---|
111 |
|
---|
112 |
|
---|
113 |
|
---|
114 |
|
---|
115 | Zeilenga & Choi Experimental [Page 2]
|
---|
116 | |
---|
117 |
|
---|
118 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
119 |
|
---|
120 |
|
---|
121 | 1. Introduction
|
---|
122 |
|
---|
123 | The Lightweight Directory Access Protocol (LDAP) [RFC4510] provides a
|
---|
124 | mechanism, the search operation [RFC4511], that allows a client to
|
---|
125 | request directory content matching a complex set of assertions and to
|
---|
126 | request that the server return this content, subject to access
|
---|
127 | control and other restrictions, to the client. However, LDAP does
|
---|
128 | not provide (despite the introduction of numerous extensions in this
|
---|
129 | area) an effective and efficient mechanism for maintaining
|
---|
130 | synchronized copies of directory content. This document introduces a
|
---|
131 | new mechanism specifically designed to meet the content
|
---|
132 | synchronization requirements of sophisticated directory applications.
|
---|
133 |
|
---|
134 | This document defines the LDAP Content Synchronization Operation, or
|
---|
135 | Sync Operation for short, which allows a client to maintain a
|
---|
136 | synchronized copy of a fragment of a Directory Information Tree
|
---|
137 | (DIT). The Sync Operation is defined as a set of controls and other
|
---|
138 | protocol elements that extend the Search Operation.
|
---|
139 |
|
---|
140 | 1.1. Background
|
---|
141 |
|
---|
142 | Over the years, a number of content synchronization approaches have
|
---|
143 | been suggested for use in LDAP directory services. These approaches
|
---|
144 | are inadequate for one or more of the following reasons:
|
---|
145 |
|
---|
146 | - failure to ensure a reasonable level of convergence;
|
---|
147 |
|
---|
148 | - failure to detect that convergence cannot be achieved (without
|
---|
149 | reload);
|
---|
150 |
|
---|
151 | - require pre-arranged synchronization agreements;
|
---|
152 |
|
---|
153 | - require the server to maintain histories of past changes to DIT
|
---|
154 | content and/or meta information;
|
---|
155 |
|
---|
156 | - require the server to maintain synchronization state on a per-
|
---|
157 | client basis; and/or
|
---|
158 |
|
---|
159 | - are overly chatty.
|
---|
160 |
|
---|
161 | The Sync Operation provides eventual convergence of synchronized
|
---|
162 | content when possible and, when not, notification that a full reload
|
---|
163 | is required.
|
---|
164 |
|
---|
165 | The Sync Operation does not require pre-arranged synchronization
|
---|
166 | agreements.
|
---|
167 |
|
---|
168 |
|
---|
169 |
|
---|
170 |
|
---|
171 |
|
---|
172 | Zeilenga & Choi Experimental [Page 3]
|
---|
173 | |
---|
174 |
|
---|
175 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
176 |
|
---|
177 |
|
---|
178 | The Sync Operation does not require that servers maintain or use any
|
---|
179 | history of past changes to the DIT or to meta information. However,
|
---|
180 | servers may maintain and use histories (e.g., change logs,
|
---|
181 | tombstones, DIT snapshots) to reduce the number of messages generated
|
---|
182 | and to reduce their size. As it is not always feasible to maintain
|
---|
183 | and use histories, the operation may be implemented using purely
|
---|
184 | (current) state-based approaches. The Sync Operation allows use of
|
---|
185 | either the state-based approach or the history-based approach on an
|
---|
186 | operation-by-operation basis to balance the size of history and the
|
---|
187 | amount of traffic. The Sync Operation also allows the combined use
|
---|
188 | of the state-based and the history-based approaches.
|
---|
189 |
|
---|
190 | The Sync Operation does not require that servers maintain
|
---|
191 | synchronization state on a per-client basis. However, servers may
|
---|
192 | maintain and use per-client state information to reduce the number of
|
---|
193 | messages generated and the size of such messages.
|
---|
194 |
|
---|
195 | A synchronization mechanism can be considered overly chatty when
|
---|
196 | synchronization traffic is not reasonably bounded. The Sync
|
---|
197 | Operation traffic is bounded by the size of updated (or new) entries
|
---|
198 | and the number of unchanged entries in the content. The operation is
|
---|
199 | designed to avoid full content exchanges, even when the history
|
---|
200 | information available to the server is insufficient to determine the
|
---|
201 | client's state. The operation is also designed to avoid transmission
|
---|
202 | of out-of-content history information, as its size is not bounded by
|
---|
203 | the content and it is not always feasible to transmit such history
|
---|
204 | information due to security reasons.
|
---|
205 |
|
---|
206 | This document includes a number of non-normative appendices providing
|
---|
207 | additional information to server implementors.
|
---|
208 |
|
---|
209 | 1.2. Intended Usage
|
---|
210 |
|
---|
211 | The Sync Operation is intended to be used in applications requiring
|
---|
212 | eventually-convergent content synchronization. Upon completion of
|
---|
213 | each synchronization stage of the operation, all information to
|
---|
214 | construct a synchronized client copy of the content has been provided
|
---|
215 | to the client or the client has been notified that a complete content
|
---|
216 | reload is necessary. Except for transient inconsistencies due to
|
---|
217 | concurrent operation (or other) processing at the server, the client
|
---|
218 | copy is an accurate reflection of the content held by the server.
|
---|
219 | Transient inconsistencies will be resolved by subsequent
|
---|
220 | synchronization operations.
|
---|
221 |
|
---|
222 |
|
---|
223 |
|
---|
224 |
|
---|
225 |
|
---|
226 |
|
---|
227 |
|
---|
228 |
|
---|
229 | Zeilenga & Choi Experimental [Page 4]
|
---|
230 | |
---|
231 |
|
---|
232 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
233 |
|
---|
234 |
|
---|
235 | Possible uses include the following:
|
---|
236 |
|
---|
237 | - White page service applications may use the Sync Operation to
|
---|
238 | maintain a current copy of a DIT fragment, for example, a mail
|
---|
239 | user agent that uses the sync operation to maintain a local
|
---|
240 | copy of an enterprise address book.
|
---|
241 |
|
---|
242 | - Meta-information engines may use the Sync Operation to maintain
|
---|
243 | a copy of a DIT fragment.
|
---|
244 |
|
---|
245 | - Caching proxy services may use the Sync Operation to maintain a
|
---|
246 | coherent content cache.
|
---|
247 |
|
---|
248 | - Lightweight master-slave replication between heterogeneous
|
---|
249 | directory servers. For example, the Sync Operation can be used
|
---|
250 | by a slave server to maintain a shadow copy of a DIT fragment.
|
---|
251 | (Note: The International Telephone Union (ITU) has defined the
|
---|
252 | X.500 Directory [X.500] Information Shadowing Protocol (DISP)
|
---|
253 | [X.525], which may be used for master-slave replication between
|
---|
254 | directory servers. Other experimental LDAP replication
|
---|
255 | protocols also exist.)
|
---|
256 |
|
---|
257 | This protocol is not intended to be used in applications requiring
|
---|
258 | transactional data consistency.
|
---|
259 |
|
---|
260 | As this protocol transfers all visible values of entries belonging to
|
---|
261 | the content upon change instead of change deltas, this protocol is
|
---|
262 | not appropriate for bandwidth-challenged applications or deployments.
|
---|
263 |
|
---|
264 | 1.3. Overview
|
---|
265 |
|
---|
266 | This section provides an overview of basic ways the Sync Operation
|
---|
267 | can be used to maintain a synchronized client copy of a DIT fragment.
|
---|
268 |
|
---|
269 | - Polling for changes: refreshOnly mode
|
---|
270 |
|
---|
271 | - Listening for changes: refreshAndPersist mode
|
---|
272 |
|
---|
273 | 1.3.1. Polling for Changes (refreshOnly)
|
---|
274 |
|
---|
275 | To obtain its initial client copy, the client issues a Sync request:
|
---|
276 | a search request with the Sync Request Control with mode set to
|
---|
277 | refreshOnly. The server, much like it would with a normal search
|
---|
278 | operation, returns (subject to access controls and other
|
---|
279 | restrictions) the content matching the search criteria (baseObject,
|
---|
280 | scope, filter, attributes). Additionally, with each entry returned,
|
---|
281 | the server provides a Sync State Control indicating state add. This
|
---|
282 | control contains the Universally Unique Identifier (UUID) [UUID] of
|
---|
283 |
|
---|
284 |
|
---|
285 |
|
---|
286 | Zeilenga & Choi Experimental [Page 5]
|
---|
287 | |
---|
288 |
|
---|
289 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
290 |
|
---|
291 |
|
---|
292 | the entry [RFC4530]. Unlike the Distinguished Name (DN), which may
|
---|
293 | change over time, an entry's UUID is stable. The initial content is
|
---|
294 | followed by a SearchResultDone with a Sync Done Control. The Sync
|
---|
295 | Done Control provides a syncCookie. The syncCookie represents
|
---|
296 | session state.
|
---|
297 |
|
---|
298 | To poll for updates to the client copy, the client reissues the Sync
|
---|
299 | Operation with the syncCookie previously returned. The server, much
|
---|
300 | as it would with a normal search operation, determines which content
|
---|
301 | would be returned as if the operation were a normal search operation.
|
---|
302 | However, using the syncCookie as an indicator of what content the
|
---|
303 | client was sent previously, the server sends copies of entries that
|
---|
304 | have changed with a Sync State Control indicating state add. For
|
---|
305 | each changed entry, all (modified or unmodified) attributes belonging
|
---|
306 | to the content are sent.
|
---|
307 |
|
---|
308 | The server may perform either or both of the two distinct
|
---|
309 | synchronization phases that are distinguished by how to synchronize
|
---|
310 | entries deleted from the content: the present and the delete phases.
|
---|
311 | When the server uses a single phase for the refresh stage, each phase
|
---|
312 | is marked as ended by a SearchResultDone with a Sync Done Control. A
|
---|
313 | present phase is identified by a FALSE refreshDeletes value in the
|
---|
314 | Sync Done Control. A delete phase is identified by a TRUE
|
---|
315 | refreshDeletes value. The present phase may be followed by a delete
|
---|
316 | phase. The two phases are delimited by a refreshPresent Sync Info
|
---|
317 | Message having a FALSE refreshDone value. In the case that both the
|
---|
318 | phases are used, the present phase is used to bring the client copy
|
---|
319 | up to the state at which the subsequent delete phase can begin.
|
---|
320 |
|
---|
321 | In the present phase, the server sends an empty entry (i.e., no
|
---|
322 | attributes) with a Sync State Control indicating state present for
|
---|
323 | each unchanged entry.
|
---|
324 |
|
---|
325 | The delete phase may be used when the server can reliably determine
|
---|
326 | which entries in the prior client copy are no longer present in the
|
---|
327 | content and the number of such entries is less than or equal to the
|
---|
328 | number of unchanged entries. In the delete mode, the server sends an
|
---|
329 | empty entry with a Sync State Control indicating state delete for
|
---|
330 | each entry that is no longer in the content, instead of returning an
|
---|
331 | empty entry with state present for each present entry.
|
---|
332 |
|
---|
333 | The server may send syncIdSet Sync Info Messages containing the set
|
---|
334 | of UUIDs of either unchanged present entries or deleted entries,
|
---|
335 | instead of sending multiple individual messages. If refreshDeletes
|
---|
336 | of syncIdSet is set to FALSE, the UUIDs of unchanged present entries
|
---|
337 | are contained in the syncUUIDs set; if refreshDeletes of syncIdSet is
|
---|
338 | set to TRUE, the UUIDs of the entries no longer present in the
|
---|
339 | content are contained in the syncUUIDs set. An optional cookie can
|
---|
340 |
|
---|
341 |
|
---|
342 |
|
---|
343 | Zeilenga & Choi Experimental [Page 6]
|
---|
344 | |
---|
345 |
|
---|
346 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
347 |
|
---|
348 |
|
---|
349 | be included in the syncIdSet to represent the state of the content
|
---|
350 | after synchronizing the presence or the absence of the entries
|
---|
351 | contained in the syncUUIDs set.
|
---|
352 |
|
---|
353 | The synchronized copy of the DIT fragment is constructed by the
|
---|
354 | client.
|
---|
355 |
|
---|
356 | If refreshDeletes of syncDoneValue is FALSE, the new copy includes
|
---|
357 | all changed entries returned by the reissued Sync Operation, as well
|
---|
358 | as all unchanged entries identified as being present by the reissued
|
---|
359 | Sync Operation, but whose content is provided by the previous Sync
|
---|
360 | Operation. The unchanged entries not identified as being present are
|
---|
361 | deleted from the client content. They had been either deleted,
|
---|
362 | moved, or otherwise scoped-out from the content.
|
---|
363 |
|
---|
364 | If refreshDeletes of syncDoneValue is TRUE, the new copy includes all
|
---|
365 | changed entries returned by the reissued Sync Operation, as well as
|
---|
366 | all other entries of the previous copy except for those that are
|
---|
367 | identified as having been deleted from the content.
|
---|
368 |
|
---|
369 | The client can, at some later time, re-poll for changes to this
|
---|
370 | synchronized client copy.
|
---|
371 |
|
---|
372 | 1.3.2. Listening for Changes (refreshAndPersist)
|
---|
373 |
|
---|
374 | Polling for changes can be expensive in terms of server, client, and
|
---|
375 | network resources. The refreshAndPersist mode allows for active
|
---|
376 | updates of changed entries in the content.
|
---|
377 |
|
---|
378 | By selecting the refreshAndPersist mode, the client requests that the
|
---|
379 | server send updates of entries that are changed after the initial
|
---|
380 | refresh content is determined. Instead of sending a SearchResultDone
|
---|
381 | Message as in polling, the server sends a Sync Info Message to the
|
---|
382 | client indicating that the refresh stage is complete and then enters
|
---|
383 | the persist stage. After receipt of this Sync Info Message, the
|
---|
384 | client will construct a synchronized copy as described in Section
|
---|
385 | 1.3.1.
|
---|
386 |
|
---|
387 | The server may then send change notifications as the result of the
|
---|
388 | original Sync search request, which now remains persistent in the
|
---|
389 | server. For entries to be added to the returned content, the server
|
---|
390 | sends a SearchResultEntry (with attributes) with a Sync State Control
|
---|
391 | indicating state add. For entries to be deleted from the content,
|
---|
392 | the server sends a SearchResultEntry containing no attributes and a
|
---|
393 | Sync State Control indicating state delete. For entries to be
|
---|
394 | modified in the return content, the server sends a SearchResultEntry
|
---|
395 | (with attributes) with a Sync State Control indicating state modify.
|
---|
396 |
|
---|
397 |
|
---|
398 |
|
---|
399 |
|
---|
400 | Zeilenga & Choi Experimental [Page 7]
|
---|
401 | |
---|
402 |
|
---|
403 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
404 |
|
---|
405 |
|
---|
406 | Upon modification of an entry, all (modified or unmodified)
|
---|
407 | attributes belonging to the content are sent.
|
---|
408 |
|
---|
409 | Note that renaming an entry of the DIT may cause an add state change
|
---|
410 | where the entry is renamed into the content, a delete state change
|
---|
411 | where the entry is renamed out of the content, and a modify state
|
---|
412 | change where the entry remains in the content. Also note that a
|
---|
413 | modification of an entry of the DIT may cause an add, delete, or
|
---|
414 | modify state change to the content.
|
---|
415 |
|
---|
416 | Upon receipt of a change notification, the client updates its copy of
|
---|
417 | the content.
|
---|
418 |
|
---|
419 | If the server desires to update the syncCookie during the persist
|
---|
420 | stage, it may include the syncCookie in any Sync State Control or
|
---|
421 | Sync Info Message returned.
|
---|
422 |
|
---|
423 | The operation persists until canceled [RFC3909] by the client or
|
---|
424 | terminated by the server. A Sync Done Control shall be attached to
|
---|
425 | SearchResultDone Message to provide a new syncCookie.
|
---|
426 |
|
---|
427 | 1.4. Conventions
|
---|
428 |
|
---|
429 | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
---|
430 | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
---|
431 | document are to be interpreted as described in BCP 14 [RFC2119].
|
---|
432 |
|
---|
433 | Protocol elements are described using ASN.1 [X.680] with implicit
|
---|
434 | tags. The term "BER-encoded" means the element is to be encoded
|
---|
435 | using the Basic Encoding Rules [X.690] under the restrictions
|
---|
436 | detailed in Section 5.1 of [RFC4511].
|
---|
437 |
|
---|
438 | 2. Elements of the Sync Operation
|
---|
439 |
|
---|
440 | The Sync Operation is defined as an extension to the LDAP Search
|
---|
441 | Operation [RFC4511] where the directory user agent (DUA or client)
|
---|
442 | submits a SearchRequest Message with a Sync Request Control and the
|
---|
443 | directory system agent (DSA or server) responds with zero or more
|
---|
444 | SearchResultEntry Messages, each with a Sync State Control; zero or
|
---|
445 | more SearchResultReference Messages, each with a Sync State Control;
|
---|
446 | zero or more Sync Info Intermediate Response Messages; and a
|
---|
447 | SearchResultDone Message with a Sync Done Control.
|
---|
448 |
|
---|
449 | To allow clients to discover support for this operation, servers
|
---|
450 | implementing this operation SHOULD publish 1.3.6.1.4.1.4203.1.9.1.1
|
---|
451 | as a value of the 'supportedControl' attribute [RFC4512] of the root
|
---|
452 | DSA-specific entry (DSE). A server MAY choose to advertise this
|
---|
453 | extension only when the client is authorized to use it.
|
---|
454 |
|
---|
455 |
|
---|
456 |
|
---|
457 | Zeilenga & Choi Experimental [Page 8]
|
---|
458 | |
---|
459 |
|
---|
460 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
461 |
|
---|
462 |
|
---|
463 | 2.1. Common ASN.1 Elements
|
---|
464 |
|
---|
465 | 2.1.1. syncUUID
|
---|
466 |
|
---|
467 | The syncUUID data type is an OCTET STRING holding a 128-bit
|
---|
468 | (16-octet) Universally Unique Identifier (UUID) [UUID].
|
---|
469 |
|
---|
470 | syncUUID ::= OCTET STRING (SIZE(16))
|
---|
471 | -- constrained to UUID
|
---|
472 |
|
---|
473 | 2.1.2. syncCookie
|
---|
474 |
|
---|
475 | The syncCookie is a notational convenience to indicate that, while
|
---|
476 | the syncCookie type is encoded as an OCTET STRING, its value is an
|
---|
477 | opaque value containing information about the synchronization session
|
---|
478 | and its state. Generally, the session information would include a
|
---|
479 | hash of the operation parameters that the server requires not be
|
---|
480 | changed and the synchronization state information would include a
|
---|
481 | commit (log) sequence number, a change sequence number, or a time
|
---|
482 | stamp. For convenience of description, the term "no cookie" refers
|
---|
483 | either to a null cookie or to a cookie with pre-initialized
|
---|
484 | synchronization state.
|
---|
485 |
|
---|
486 | syncCookie ::= OCTET STRING
|
---|
487 |
|
---|
488 | 2.2. Sync Request Control
|
---|
489 |
|
---|
490 | The Sync Request Control is an LDAP Control [RFC4511] where the
|
---|
491 | controlType is the object identifier 1.3.6.1.4.1.4203.1.9.1.1 and the
|
---|
492 | controlValue, an OCTET STRING, contains a BER-encoded
|
---|
493 | syncRequestValue. The criticality field is either TRUE or FALSE.
|
---|
494 |
|
---|
495 | syncRequestValue ::= SEQUENCE {
|
---|
496 | mode ENUMERATED {
|
---|
497 | -- 0 unused
|
---|
498 | refreshOnly (1),
|
---|
499 | -- 2 reserved
|
---|
500 | refreshAndPersist (3)
|
---|
501 | },
|
---|
502 | cookie syncCookie OPTIONAL,
|
---|
503 | reloadHint BOOLEAN DEFAULT FALSE
|
---|
504 | }
|
---|
505 |
|
---|
506 | The Sync Request Control is only applicable to the SearchRequest
|
---|
507 | Message.
|
---|
508 |
|
---|
509 |
|
---|
510 |
|
---|
511 |
|
---|
512 |
|
---|
513 |
|
---|
514 | Zeilenga & Choi Experimental [Page 9]
|
---|
515 | |
---|
516 |
|
---|
517 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
518 |
|
---|
519 |
|
---|
520 | 2.3. Sync State Control
|
---|
521 |
|
---|
522 | The Sync State Control is an LDAP Control [RFC4511] where the
|
---|
523 | controlType is the object identifier 1.3.6.1.4.1.4203.1.9.1.2 and the
|
---|
524 | controlValue, an OCTET STRING, contains a BER-encoded syncStateValue.
|
---|
525 | The criticality is FALSE.
|
---|
526 |
|
---|
527 | syncStateValue ::= SEQUENCE {
|
---|
528 | state ENUMERATED {
|
---|
529 | present (0),
|
---|
530 | add (1),
|
---|
531 | modify (2),
|
---|
532 | delete (3)
|
---|
533 | },
|
---|
534 | entryUUID syncUUID,
|
---|
535 | cookie syncCookie OPTIONAL
|
---|
536 | }
|
---|
537 |
|
---|
538 | The Sync State Control is only applicable to SearchResultEntry and
|
---|
539 | SearchResultReference Messages.
|
---|
540 |
|
---|
541 | 2.4. Sync Done Control
|
---|
542 |
|
---|
543 | The Sync Done Control is an LDAP Control [RFC4511] where the
|
---|
544 | controlType is the object identifier 1.3.6.1.4.1.4203.1.9.1.3 and the
|
---|
545 | controlValue contains a BER-encoded syncDoneValue. The criticality
|
---|
546 | is FALSE (and hence absent).
|
---|
547 |
|
---|
548 | syncDoneValue ::= SEQUENCE {
|
---|
549 | cookie syncCookie OPTIONAL,
|
---|
550 | refreshDeletes BOOLEAN DEFAULT FALSE
|
---|
551 | }
|
---|
552 |
|
---|
553 | The Sync Done Control is only applicable to the SearchResultDone
|
---|
554 | Message.
|
---|
555 |
|
---|
556 |
|
---|
557 |
|
---|
558 |
|
---|
559 |
|
---|
560 |
|
---|
561 |
|
---|
562 |
|
---|
563 |
|
---|
564 |
|
---|
565 |
|
---|
566 |
|
---|
567 |
|
---|
568 |
|
---|
569 |
|
---|
570 |
|
---|
571 | Zeilenga & Choi Experimental [Page 10]
|
---|
572 | |
---|
573 |
|
---|
574 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
575 |
|
---|
576 |
|
---|
577 | 2.5. Sync Info Message
|
---|
578 |
|
---|
579 | The Sync Info Message is an LDAP Intermediate Response Message
|
---|
580 | [RFC4511] where responseName is the object identifier
|
---|
581 | 1.3.6.1.4.1.4203.1.9.1.4 and responseValue contains a BER-encoded
|
---|
582 | syncInfoValue. The criticality is FALSE (and hence absent).
|
---|
583 |
|
---|
584 | syncInfoValue ::= CHOICE {
|
---|
585 | newcookie [0] syncCookie,
|
---|
586 | refreshDelete [1] SEQUENCE {
|
---|
587 | cookie syncCookie OPTIONAL,
|
---|
588 | refreshDone BOOLEAN DEFAULT TRUE
|
---|
589 | },
|
---|
590 | refreshPresent [2] SEQUENCE {
|
---|
591 | cookie syncCookie OPTIONAL,
|
---|
592 | refreshDone BOOLEAN DEFAULT TRUE
|
---|
593 | },
|
---|
594 | syncIdSet [3] SEQUENCE {
|
---|
595 | cookie syncCookie OPTIONAL,
|
---|
596 | refreshDeletes BOOLEAN DEFAULT FALSE,
|
---|
597 | syncUUIDs SET OF syncUUID
|
---|
598 | }
|
---|
599 | }
|
---|
600 |
|
---|
601 | 2.6. Sync Result Codes
|
---|
602 |
|
---|
603 | The following LDAP resultCode [RFC4511] is defined:
|
---|
604 |
|
---|
605 | e-syncRefreshRequired (4096)
|
---|
606 |
|
---|
607 | 3. Content Synchronization
|
---|
608 |
|
---|
609 | The Sync Operation is invoked when the client sends a SearchRequest
|
---|
610 | Message with a Sync Request Control.
|
---|
611 |
|
---|
612 | The absence of a cookie or an initialized synchronization state in a
|
---|
613 | cookie indicates a request for initial content, while the presence of
|
---|
614 | a cookie representing a state of a client copy indicates a request
|
---|
615 | for a content update. Synchronization Sessions are discussed in
|
---|
616 | Section 3.1. Content Determination is discussed in Section 3.2.
|
---|
617 |
|
---|
618 | The mode is either refreshOnly or refreshAndPersist. The refreshOnly
|
---|
619 | and refreshAndPersist modes are discussed in Sections 3.3 and 3.4,
|
---|
620 | respectively. The refreshOnly mode consists only of a refresh stage,
|
---|
621 | while the refreshAndPersist mode consists of a refresh stage and a
|
---|
622 | subsequent persist stage.
|
---|
623 |
|
---|
624 |
|
---|
625 |
|
---|
626 |
|
---|
627 |
|
---|
628 | Zeilenga & Choi Experimental [Page 11]
|
---|
629 | |
---|
630 |
|
---|
631 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
632 |
|
---|
633 |
|
---|
634 | 3.1. Synchronization Session
|
---|
635 |
|
---|
636 | A sequence of Sync Operations where the last cookie returned by the
|
---|
637 | server for one operation is provided by the client in the next
|
---|
638 | operation is said to belong to the same Synchronization Session.
|
---|
639 |
|
---|
640 | The client MUST specify the same content-controlling parameters (see
|
---|
641 | Section 3.5) in each Search Request of the session. The client
|
---|
642 | SHOULD also issue each Sync request of a session under the same
|
---|
643 | authentication and authorization associations with equivalent
|
---|
644 | integrity and protections. If the server does not recognize the
|
---|
645 | request cookie or the request is made under different associations or
|
---|
646 | non-equivalent protections, the server SHALL return the initial
|
---|
647 | content as if no cookie had been provided or return an empty content
|
---|
648 | with the e-syncRefreshRequired LDAP result code. The decision
|
---|
649 | between the return of the initial content and the return of the empty
|
---|
650 | content with the e-syncRefreshRequired result code MAY be based on
|
---|
651 | reloadHint in the Sync Request Control from the client. If the
|
---|
652 | server recognizes the request cookie as representing empty or initial
|
---|
653 | synchronization state of the client copy, the server SHALL return the
|
---|
654 | initial content.
|
---|
655 |
|
---|
656 | A Synchronization Session may span multiple LDAP sessions between the
|
---|
657 | client and the server. The client SHOULD issue each Sync request of
|
---|
658 | a session to the same server. (Note: Shadowing considerations are
|
---|
659 | discussed in Section 6.)
|
---|
660 |
|
---|
661 | 3.2. Content Determination
|
---|
662 |
|
---|
663 | The content to be provided is determined by parameters of the Search
|
---|
664 | Request, as described in [RFC4511], and possibly other controls. The
|
---|
665 | same content parameters SHOULD be used in each Sync request of a
|
---|
666 | session. If different content is requested and the server is
|
---|
667 | unwilling or unable to process the request, the server SHALL return
|
---|
668 | the initial content as if no cookie had been provided or return an
|
---|
669 | empty content with the e-syncRefreshRequired LDAP result code. The
|
---|
670 | decision between the return of the initial content and the return of
|
---|
671 | the empty content with the e-syncRefreshRequired result code MAY be
|
---|
672 | based on reloadHint in the Sync Request Control from the client.
|
---|
673 |
|
---|
674 | The content may not necessarily include all entries or references
|
---|
675 | that would be returned by a normal search operation, nor, for those
|
---|
676 | entries included, all attributes returned by a normal search. When
|
---|
677 | the server is unwilling or unable to provide synchronization for any
|
---|
678 | attribute for a set of entries, the server MUST treat all filter
|
---|
679 | components matching against these attributes as Undefined and MUST
|
---|
680 | NOT return these attributes in SearchResultEntry responses.
|
---|
681 |
|
---|
682 |
|
---|
683 |
|
---|
684 |
|
---|
685 | Zeilenga & Choi Experimental [Page 12]
|
---|
686 | |
---|
687 |
|
---|
688 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
689 |
|
---|
690 |
|
---|
691 | Servers SHOULD support synchronization for all non-collective user-
|
---|
692 | application attributes for all entries.
|
---|
693 |
|
---|
694 | The server may also return continuation references to other servers
|
---|
695 | or to itself. The latter is allowed as the server may partition the
|
---|
696 | entries it holds into separate synchronization contexts.
|
---|
697 |
|
---|
698 | The client may chase all or some of these continuations, each as a
|
---|
699 | separate content synchronization session.
|
---|
700 |
|
---|
701 | 3.3. refreshOnly Mode
|
---|
702 |
|
---|
703 | A Sync request with mode refreshOnly and with no cookie is a poll for
|
---|
704 | initial content. A Sync request with mode refreshOnly and with a
|
---|
705 | cookie representing a synchronization state is a poll for content
|
---|
706 | update.
|
---|
707 |
|
---|
708 | 3.3.1. Initial Content Poll
|
---|
709 |
|
---|
710 | Upon receipt of the request, the server provides the initial content
|
---|
711 | using a set of zero or more SearchResultEntry and
|
---|
712 | SearchResultReference Messages followed by a SearchResultDone
|
---|
713 | Message.
|
---|
714 |
|
---|
715 | Each SearchResultEntry Message SHALL include a Sync State Control of
|
---|
716 | state add, an entryUUID containing the entry's UUID, and no cookie.
|
---|
717 | Each SearchResultReference Message SHALL include a Sync State Control
|
---|
718 | of state add, an entryUUID containing the UUID associated with the
|
---|
719 | reference (normally the UUID of the associated named referral
|
---|
720 | [RFC3296] object), and no cookie. The SearchResultDone Message SHALL
|
---|
721 | include a Sync Done Control having refreshDeletes set to FALSE.
|
---|
722 |
|
---|
723 | A resultCode value of success indicates that the operation
|
---|
724 | successfully completed. Otherwise, the result code indicates the
|
---|
725 | nature of the failure. The server may return e-syncRefreshRequired
|
---|
726 | result code on the initial content poll if it is safe to do so when
|
---|
727 | it is unable to perform the operation due to various reasons.
|
---|
728 | reloadHint is set to FALSE in the SearchRequest Message requesting
|
---|
729 | the initial content poll.
|
---|
730 |
|
---|
731 | If the operation is successful, a cookie representing the
|
---|
732 | synchronization state of the current client copy SHOULD be returned
|
---|
733 | for use in subsequent Sync Operations.
|
---|
734 |
|
---|
735 | 3.3.2. Content Update Poll
|
---|
736 |
|
---|
737 | Upon receipt of the request, the server provides the content refresh
|
---|
738 | using a set of zero or more SearchResultEntry and
|
---|
739 |
|
---|
740 |
|
---|
741 |
|
---|
742 | Zeilenga & Choi Experimental [Page 13]
|
---|
743 | |
---|
744 |
|
---|
745 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
746 |
|
---|
747 |
|
---|
748 | SearchResultReference Messages followed by a SearchResultDone
|
---|
749 | Message.
|
---|
750 |
|
---|
751 | The server is REQUIRED to:
|
---|
752 |
|
---|
753 | a) provide the sequence of messages necessary for eventual
|
---|
754 | convergence of the client's copy of the content to the server's
|
---|
755 | copy,
|
---|
756 |
|
---|
757 | b) treat the request as an initial content request (e.g., ignore
|
---|
758 | the cookie or the synchronization state represented in the
|
---|
759 | cookie),
|
---|
760 |
|
---|
761 | c) indicate that the incremental convergence is not possible by
|
---|
762 | returning e-syncRefreshRequired,
|
---|
763 |
|
---|
764 | d) return a resultCode other than success or e-
|
---|
765 | syncRefreshRequired.
|
---|
766 |
|
---|
767 | A Sync Operation may consist of a single present phase, a single
|
---|
768 | delete phase, or a present phase followed by a delete phase.
|
---|
769 |
|
---|
770 | In each phase, for each entry or reference that has been added to the
|
---|
771 | content or been changed since the previous Sync Operation indicated
|
---|
772 | by the cookie, the server returns a SearchResultEntry or
|
---|
773 | SearchResultReference Message, respectively, each with a Sync State
|
---|
774 | Control consisting of state add, an entryUUID containing the UUID of
|
---|
775 | the entry or reference, and no cookie. Each SearchResultEntry
|
---|
776 | Message represents the current state of a changed entry. Each
|
---|
777 | SearchResultReference Message represents the current state of a
|
---|
778 | changed reference.
|
---|
779 |
|
---|
780 | In the present phase, for each entry that has not been changed since
|
---|
781 | the previous Sync Operation, an empty SearchResultEntry is returned
|
---|
782 | whose objectName reflects the entry's current DN, whose attributes
|
---|
783 | field is empty, and whose Sync State Control consists of state
|
---|
784 | present, an entryUUID containing the UUID of the entry, and no
|
---|
785 | cookie. For each reference that has not been changed since the
|
---|
786 | previous Sync Operation, an empty SearchResultReference containing an
|
---|
787 | empty SEQUENCE OF LDAPURL is returned with a Sync State Control
|
---|
788 | consisting of state present, an entryUUID containing the UUID of the
|
---|
789 | entry, and no cookie. No messages are sent for entries or references
|
---|
790 | that are no longer in the content.
|
---|
791 |
|
---|
792 | Multiple empty entries with a Sync State Control of state present
|
---|
793 | SHOULD be coalesced into one or more Sync Info Messages of syncIdSet
|
---|
794 | value with refreshDeletes set to FALSE. syncUUIDs contain a set of
|
---|
795 | UUIDs of the entries and references unchanged since the last Sync
|
---|
796 |
|
---|
797 |
|
---|
798 |
|
---|
799 | Zeilenga & Choi Experimental [Page 14]
|
---|
800 | |
---|
801 |
|
---|
802 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
803 |
|
---|
804 |
|
---|
805 | Operation. syncUUIDs may be empty. The Sync Info Message of
|
---|
806 | syncIdSet may contain a cookie to represent the state of the content
|
---|
807 | after performing the synchronization of the entries in the set.
|
---|
808 |
|
---|
809 | In the delete phase, for each entry no longer in the content, the
|
---|
810 | server returns a SearchResultEntry whose objectName reflects a past
|
---|
811 | DN of the entry or is empty, whose attributes field is empty, and
|
---|
812 | whose Sync State Control consists of state delete, an entryUUID
|
---|
813 | containing the UUID of the deleted entry, and no cookie. For each
|
---|
814 | reference no longer in the content, a SearchResultReference
|
---|
815 | containing an empty SEQUENCE OF LDAPURL is returned with a Sync State
|
---|
816 | Control consisting of state delete, an entryUUID containing the UUID
|
---|
817 | of the deleted reference, and no cookie.
|
---|
818 |
|
---|
819 | Multiple empty entries with a Sync State Control of state delete
|
---|
820 | SHOULD be coalesced into one or more Sync Info Messages of syncIdSet
|
---|
821 | value with refreshDeletes set to TRUE. syncUUIDs contain a set of
|
---|
822 | UUIDs of the entries and references that have been deleted from the
|
---|
823 | content since the last Sync Operation. syncUUIDs may be empty. The
|
---|
824 | Sync Info Message of syncIdSet may contain a cookie to represent the
|
---|
825 | state of the content after performing the synchronization of the
|
---|
826 | entries in the set.
|
---|
827 |
|
---|
828 | When a present phase is followed by a delete phase, the two phases
|
---|
829 | are delimited by a Sync Info Message containing syncInfoValue of
|
---|
830 | refreshPresent, which may contain a cookie representing the state
|
---|
831 | after completing the present phase. The refreshPresent contains
|
---|
832 | refreshDone, which is always FALSE in the refreshOnly mode of Sync
|
---|
833 | Operation because it is followed by a delete phase.
|
---|
834 |
|
---|
835 | If a Sync Operation consists of a single phase, each phase and hence
|
---|
836 | the Sync Operation are marked as ended by a SearchResultDone Message
|
---|
837 | with Sync Done Control, which SHOULD contain a cookie representing
|
---|
838 | the state of the content after completing the Sync Operation. The
|
---|
839 | Sync Done Control contains refreshDeletes, which is set to FALSE for
|
---|
840 | the present phase and set to TRUE for the delete phase.
|
---|
841 |
|
---|
842 | If a Sync Operation consists of a present phase followed by a delete
|
---|
843 | phase, the Sync Operation is marked as ended at the end of the delete
|
---|
844 | phase by a SearchResultDone Message with Sync Done Control, which
|
---|
845 | SHOULD contain a cookie representing the state of the content after
|
---|
846 | completing the Sync Operation. The Sync Done Control contains
|
---|
847 | refreshDeletes, which is set to TRUE.
|
---|
848 |
|
---|
849 | The client can specify whether it prefers to receive an initial
|
---|
850 | content by supplying reloadHint of TRUE or to receive a e-
|
---|
851 | syncRefreshRequired resultCode by supplying reloadHint of FALSE
|
---|
852 | (hence absent), in the case that the server determines that it is
|
---|
853 |
|
---|
854 |
|
---|
855 |
|
---|
856 | Zeilenga & Choi Experimental [Page 15]
|
---|
857 | |
---|
858 |
|
---|
859 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
860 |
|
---|
861 |
|
---|
862 | impossible or inefficient to achieve the eventual convergence by
|
---|
863 | continuing the current incremental synchronization thread.
|
---|
864 |
|
---|
865 | A resultCode value of success indicates that the operation is
|
---|
866 | successfully completed. A resultCode value of e-syncRefreshRequired
|
---|
867 | indicates that a full or partial refresh is needed. Otherwise, the
|
---|
868 | result code indicates the nature of failure. A cookie is provided in
|
---|
869 | the Sync Done Control for use in subsequent Sync Operations for
|
---|
870 | incremental synchronization.
|
---|
871 |
|
---|
872 | 3.4. refreshAndPersist Mode
|
---|
873 |
|
---|
874 | A Sync request with mode refreshAndPersist asks for initial content
|
---|
875 | or content update (during the refresh stage) followed by change
|
---|
876 | notifications (during the persist stage).
|
---|
877 |
|
---|
878 | 3.4.1. refresh Stage
|
---|
879 |
|
---|
880 | The content refresh is provided as described in Section 3.3, except
|
---|
881 | that the successful completion of content refresh is indicated by
|
---|
882 | sending a Sync Info Message of refreshDelete or refreshPresent with a
|
---|
883 | refreshDone value set to TRUE instead of a SearchResultDone Message
|
---|
884 | with resultCode success. A cookie SHOULD be returned in the Sync
|
---|
885 | Info Message to represent the state of the content after finishing
|
---|
886 | the refresh stage of the Sync Operation.
|
---|
887 |
|
---|
888 | 3.4.2. persist Stage
|
---|
889 |
|
---|
890 | Change notifications are provided during the persist stage.
|
---|
891 |
|
---|
892 | As updates are made to the DIT, the server notifies the client of
|
---|
893 | changes to the content. DIT updates may cause entries and references
|
---|
894 | to be added to the content, deleted from the content, or modified
|
---|
895 | within the content. DIT updates may also cause references to be
|
---|
896 | added, deleted, or modified within the content.
|
---|
897 |
|
---|
898 | Where DIT updates cause an entry to be added to the content, the
|
---|
899 | server provides a SearchResultEntry Message that represents the entry
|
---|
900 | as it appears in the content. The message SHALL include a Sync State
|
---|
901 | Control with state of add, an entryUUID containing the entry's UUID,
|
---|
902 | and an optional cookie.
|
---|
903 |
|
---|
904 | Where DIT updates cause a reference to be added to the content, the
|
---|
905 | server provides a SearchResultReference Message that represents the
|
---|
906 | reference in the content. The message SHALL include a Sync State
|
---|
907 | Control with state of add, an entryUUID containing the UUID
|
---|
908 | associated with the reference, and an optional cookie.
|
---|
909 |
|
---|
910 |
|
---|
911 |
|
---|
912 |
|
---|
913 | Zeilenga & Choi Experimental [Page 16]
|
---|
914 | |
---|
915 |
|
---|
916 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
917 |
|
---|
918 |
|
---|
919 | Where DIT updates cause an entry to be modified within the content,
|
---|
920 | the server provides a SearchResultEntry Message that represents the
|
---|
921 | entry as it appears in the content. The message SHALL include a Sync
|
---|
922 | State Control with state of modify, an entryUUID containing the
|
---|
923 | entry's UUID, and an optional cookie.
|
---|
924 |
|
---|
925 | Where DIT updates cause a reference to be modified within the
|
---|
926 | content, the server provides a SearchResultReference Message that
|
---|
927 | represents the reference in the content. The message SHALL include a
|
---|
928 | Sync State Control with state of modify, an entryUUID containing the
|
---|
929 | UUID associated with the reference, and an optional cookie.
|
---|
930 |
|
---|
931 | Where DIT updates cause an entry to be deleted from the content, the
|
---|
932 | server provides a SearchResultEntry Message with no attributes. The
|
---|
933 | message SHALL include a Sync State Control with state of delete, an
|
---|
934 | entryUUID containing the entry's UUID, and an optional cookie.
|
---|
935 |
|
---|
936 | Where DIT updates cause a reference to be deleted from the content,
|
---|
937 | the server provides a SearchResultReference Message with an empty
|
---|
938 | SEQUENCE OF LDAPURL. The message SHALL include a Sync State Control
|
---|
939 | with state of delete, an entryUUID containing the UUID associated
|
---|
940 | with the reference, and an optional cookie.
|
---|
941 |
|
---|
942 | Multiple empty entries with a Sync State Control of state delete
|
---|
943 | SHOULD be coalesced into one or more Sync Info Messages of syncIdSet
|
---|
944 | value with refreshDeletes set to TRUE. syncUUIDs contain a set of
|
---|
945 | UUIDs of the entries and references that have been deleted from the
|
---|
946 | content. The Sync Info Message of syncIdSet may contain a cookie to
|
---|
947 | represent the state of the content after performing the
|
---|
948 | synchronization of the entries in the set.
|
---|
949 |
|
---|
950 | With each of these messages, the server may provide a new cookie to
|
---|
951 | be used in subsequent Sync Operations. Additionally, the server may
|
---|
952 | also return Sync Info Messages of choice newCookie to provide a new
|
---|
953 | cookie. The client SHOULD use the newest (last) cookie it received
|
---|
954 | from the server in subsequent Sync Operations.
|
---|
955 |
|
---|
956 | 3.5. Search Request Parameters
|
---|
957 |
|
---|
958 | As stated in Section 3.1, the client SHOULD specify the same
|
---|
959 | content-controlling parameters in each Search Request of the session.
|
---|
960 | All fields of the SearchRequest Message are considered content-
|
---|
961 | controlling parameters except for sizeLimit and timeLimit.
|
---|
962 |
|
---|
963 |
|
---|
964 |
|
---|
965 |
|
---|
966 |
|
---|
967 |
|
---|
968 |
|
---|
969 |
|
---|
970 | Zeilenga & Choi Experimental [Page 17]
|
---|
971 | |
---|
972 |
|
---|
973 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
974 |
|
---|
975 |
|
---|
976 | 3.5.1. baseObject
|
---|
977 |
|
---|
978 | As with the normal search operation, the refresh and persist stages
|
---|
979 | are not isolated from DIT changes. It is possible that the entry
|
---|
980 | referred to by the baseObject is deleted, renamed, or moved. It is
|
---|
981 | also possible that the alias object used in finding the entry
|
---|
982 | referred to by the baseObject is changed such that the baseObject
|
---|
983 | refers to a different entry.
|
---|
984 |
|
---|
985 | If the DIT is updated during processing of the Sync Operation in a
|
---|
986 | manner that causes the baseObject no longer to refer to any entry or
|
---|
987 | in a manner that changes the entry the baseObject refers to, the
|
---|
988 | server SHALL return an appropriate non-success result code, such as
|
---|
989 | noSuchObject, aliasProblem, aliasDereferencingProblem, referral, or
|
---|
990 | e-syncRefreshRequired.
|
---|
991 |
|
---|
992 | 3.5.2. derefAliases
|
---|
993 |
|
---|
994 | This operation does not support alias dereferencing during searching.
|
---|
995 | The client SHALL specify neverDerefAliases or derefFindingBaseObj for
|
---|
996 | the SearchRequest derefAliases parameter. The server SHALL treat
|
---|
997 | other values (e.g., derefInSearching, derefAlways) as protocol
|
---|
998 | errors.
|
---|
999 |
|
---|
1000 | 3.5.3. sizeLimit
|
---|
1001 |
|
---|
1002 | The sizeLimit applies only to entries (regardless of their state in
|
---|
1003 | Sync State Control) returned during the refreshOnly operation or the
|
---|
1004 | refresh stage of the refreshAndPersist operation.
|
---|
1005 |
|
---|
1006 | 3.5.4. timeLimit
|
---|
1007 |
|
---|
1008 | For a refreshOnly Sync Operation, the timeLimit applies to the whole
|
---|
1009 | operation. For a refreshAndPersist operation, the timeLimit applies
|
---|
1010 | only to the refresh stage including the generation of the Sync Info
|
---|
1011 | Message with a refreshDone value of TRUE.
|
---|
1012 |
|
---|
1013 | 3.5.5. filter
|
---|
1014 |
|
---|
1015 | The client SHOULD avoid filter assertions that apply to the values of
|
---|
1016 | the attributes likely to be considered by the server as ones holding
|
---|
1017 | meta-information. See Section 4.
|
---|
1018 |
|
---|
1019 | 3.6. objectName
|
---|
1020 |
|
---|
1021 | The Sync Operation uses entryUUID values provided in the Sync State
|
---|
1022 | Control as the primary keys to entries. The client MUST use these
|
---|
1023 | entryUUIDs to correlate synchronization messages.
|
---|
1024 |
|
---|
1025 |
|
---|
1026 |
|
---|
1027 | Zeilenga & Choi Experimental [Page 18]
|
---|
1028 | |
---|
1029 |
|
---|
1030 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1031 |
|
---|
1032 |
|
---|
1033 | In some circumstances, the DN returned may not reflect the entry's
|
---|
1034 | current DN. In particular, when the entry is being deleted from the
|
---|
1035 | content, the server may provide an empty DN if the server does not
|
---|
1036 | wish to disclose the entry's current DN (or, if deleted from the DIT,
|
---|
1037 | the entry's last DN).
|
---|
1038 |
|
---|
1039 | Also note that the entry's DN may be viewed as meta information (see
|
---|
1040 | Section 4.1).
|
---|
1041 |
|
---|
1042 | 3.7. Canceling the Sync Operation
|
---|
1043 |
|
---|
1044 | Servers MUST implement the LDAP Cancel [RFC3909] Operation and
|
---|
1045 | support cancellation of outstanding Sync Operations as described
|
---|
1046 | here.
|
---|
1047 |
|
---|
1048 | To cancel an outstanding Sync Operation, the client issues an LDAP
|
---|
1049 | Cancel [RFC3909] Operation.
|
---|
1050 |
|
---|
1051 | If at any time the server becomes unwilling or unable to continue
|
---|
1052 | processing a Sync Operation, the server SHALL return a
|
---|
1053 | SearchResultDone with a non-success resultCode indicating the reason
|
---|
1054 | for the termination of the operation.
|
---|
1055 |
|
---|
1056 | Whether the client or the server initiated the termination, the
|
---|
1057 | server may provide a cookie in the Sync Done Control for use in
|
---|
1058 | subsequent Sync Operations.
|
---|
1059 |
|
---|
1060 | 3.8. Refresh Required
|
---|
1061 |
|
---|
1062 | In order to achieve the eventually-convergent synchronization, the
|
---|
1063 | server may terminate the Sync Operation in the refresh or persist
|
---|
1064 | stages by returning an e-syncRefreshRequired resultCode to the
|
---|
1065 | client. If no cookie is provided, a full refresh is needed. If a
|
---|
1066 | cookie representing a synchronization state is provided in this
|
---|
1067 | response, an incremental refresh is needed.
|
---|
1068 |
|
---|
1069 | To obtain a full refresh, the client then issues a new
|
---|
1070 | synchronization request with no cookie. To obtain an incremental
|
---|
1071 | reload, the client issues a new synchronization with the provided
|
---|
1072 | cookie.
|
---|
1073 |
|
---|
1074 | The server may choose to provide a full copy in the refresh stage
|
---|
1075 | (e.g., ignore the cookie or the synchronization state represented in
|
---|
1076 | the cookie) instead of providing an incremental refresh in order to
|
---|
1077 | achieve the eventual convergence.
|
---|
1078 |
|
---|
1079 |
|
---|
1080 |
|
---|
1081 |
|
---|
1082 |
|
---|
1083 |
|
---|
1084 | Zeilenga & Choi Experimental [Page 19]
|
---|
1085 | |
---|
1086 |
|
---|
1087 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1088 |
|
---|
1089 |
|
---|
1090 | The decision between the return of the initial content and the return
|
---|
1091 | of the e-syncRefreshRequired result code may be based on reloadHint
|
---|
1092 | in the Sync Request Control from the client.
|
---|
1093 |
|
---|
1094 | In the case of persist stage Sync, the server returns the resultCode
|
---|
1095 | of e-syncRefreshRequired to the client to indicate that the client
|
---|
1096 | needs to issue a new Sync Operation in order to obtain a synchronized
|
---|
1097 | copy of the content. If no cookie is provided, a full refresh is
|
---|
1098 | needed. If a cookie representing a synchronization state is
|
---|
1099 | provided, an incremental refresh is needed.
|
---|
1100 |
|
---|
1101 | The server may also return e-syncRefreshRequired if it determines
|
---|
1102 | that a refresh would be more efficient than sending all the messages
|
---|
1103 | required for convergence.
|
---|
1104 |
|
---|
1105 | Note that the client may receive one or more of SearchResultEntry,
|
---|
1106 | SearchResultReference, and/or Sync Info Messages before it receives a
|
---|
1107 | SearchResultDone Message with the e-syncRefreshRequired result code.
|
---|
1108 |
|
---|
1109 | 3.9. Chattiness Considerations
|
---|
1110 |
|
---|
1111 | The server MUST ensure that the number of entry messages generated to
|
---|
1112 | refresh the client content does not exceed the number of entries
|
---|
1113 | presently in the content. While there is no requirement for servers
|
---|
1114 | to maintain history information, if the server has sufficient history
|
---|
1115 | to allow it to reliably determine which entries in the prior client
|
---|
1116 | copy are no longer present in the content and the number of such
|
---|
1117 | entries is less than or equal to the number of unchanged entries, the
|
---|
1118 | server SHOULD generate delete entry messages instead of present entry
|
---|
1119 | messages (see Section 3.3.2).
|
---|
1120 |
|
---|
1121 | When the amount of history information maintained in the server is
|
---|
1122 | not enough for the clients to perform infrequent refreshOnly Sync
|
---|
1123 | Operations, it is likely that the server has incomplete history
|
---|
1124 | information (e.g., due to truncation) by the time those clients
|
---|
1125 | connect again.
|
---|
1126 |
|
---|
1127 | The server SHOULD NOT resort to full reload when the history
|
---|
1128 | information is not enough to generate delete entry messages. The
|
---|
1129 | server SHOULD generate either present entry messages only or present
|
---|
1130 | entry messages followed by delete entry messages to bring the client
|
---|
1131 | copy to the current state. In the latter case, the present entry
|
---|
1132 | messages bring the client copy to a state covered by the history
|
---|
1133 | information maintained in the server.
|
---|
1134 |
|
---|
1135 | The server SHOULD maintain enough (current or historical) state
|
---|
1136 | information (such as a context-wide last modify time stamp) to
|
---|
1137 | determine if no changes were made in the context since the content
|
---|
1138 |
|
---|
1139 |
|
---|
1140 |
|
---|
1141 | Zeilenga & Choi Experimental [Page 20]
|
---|
1142 | |
---|
1143 |
|
---|
1144 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1145 |
|
---|
1146 |
|
---|
1147 | refresh was provided and, when no changes were made, generate zero
|
---|
1148 | delete entry messages instead of present messages.
|
---|
1149 |
|
---|
1150 | The server SHOULD NOT use the history information when its use does
|
---|
1151 | not reduce the synchronization traffic or when its use can expose
|
---|
1152 | sensitive information not allowed to be received by the client.
|
---|
1153 |
|
---|
1154 | The server implementor should also consider chattiness issues that
|
---|
1155 | span multiple Sync Operations of a session. As noted in Section 3.8,
|
---|
1156 | the server may return e-syncRefreshRequired if it determines that a
|
---|
1157 | reload would be more efficient than continuing under the current
|
---|
1158 | operation. If reloadHint in the Sync Request is TRUE, the server may
|
---|
1159 | initiate a reload without directing the client to request a reload.
|
---|
1160 |
|
---|
1161 | The server SHOULD transfer a new cookie frequently to avoid having to
|
---|
1162 | transfer information already provided to the client. Even where DIT
|
---|
1163 | changes do not cause content synchronization changes to be
|
---|
1164 | transferred, it may be advantageous to provide a new cookie using a
|
---|
1165 | Sync Info Message. However, the server SHOULD avoid overloading the
|
---|
1166 | client or network with Sync Info Messages.
|
---|
1167 |
|
---|
1168 | During persist mode, the server SHOULD coalesce multiple outstanding
|
---|
1169 | messages updating the same entry. The server MAY delay generation of
|
---|
1170 | an entry update in anticipation of subsequent changes to that entry
|
---|
1171 | that could be coalesced. The length of the delay should be long
|
---|
1172 | enough to allow coalescing of update requests issued back to back but
|
---|
1173 | short enough that the transient inconsistency induced by the delay is
|
---|
1174 | corrected in a timely manner.
|
---|
1175 |
|
---|
1176 | The server SHOULD use the syncIdSet Sync Info Message when there are
|
---|
1177 | multiple delete or present messages to reduce the amount of
|
---|
1178 | synchronization traffic.
|
---|
1179 |
|
---|
1180 | Also note that there may be many clients interested in a particular
|
---|
1181 | directory change, and that servers attempting to service all of these
|
---|
1182 | at once may cause congestion on the network. The congestion issues
|
---|
1183 | are magnified when the change requires a large transfer to each
|
---|
1184 | interested client. Implementors and deployers of servers should take
|
---|
1185 | steps to prevent and manage network congestion.
|
---|
1186 |
|
---|
1187 | 3.10. Operation Multiplexing
|
---|
1188 |
|
---|
1189 | The LDAP protocol model [RFC4511] allows operations to be multiplexed
|
---|
1190 | over a single LDAP session. Clients SHOULD NOT maintain multiple
|
---|
1191 | LDAP sessions with the same server. Servers SHOULD ensure that
|
---|
1192 | responses from concurrently processed operations are interleaved
|
---|
1193 | fairly.
|
---|
1194 |
|
---|
1195 |
|
---|
1196 |
|
---|
1197 |
|
---|
1198 | Zeilenga & Choi Experimental [Page 21]
|
---|
1199 | |
---|
1200 |
|
---|
1201 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1202 |
|
---|
1203 |
|
---|
1204 | Clients SHOULD combine Sync Operations whose result set is largely
|
---|
1205 | overlapping. This avoids having to return multiple messages, once
|
---|
1206 | for each overlapping session, for changes to entries in the overlap.
|
---|
1207 |
|
---|
1208 | Clients SHOULD NOT combine Sync Operations whose result sets are
|
---|
1209 | largely non-overlapping. This ensures that an event requiring an
|
---|
1210 | e-syncRefreshRequired response can be limited to as few result sets
|
---|
1211 | as possible.
|
---|
1212 |
|
---|
1213 | 4. Meta Information Considerations
|
---|
1214 |
|
---|
1215 | 4.1. Entry DN
|
---|
1216 |
|
---|
1217 | As an entry's DN is constructed from its relative DN (RDN) and the
|
---|
1218 | entry's parent's DN, it is often viewed as meta information.
|
---|
1219 |
|
---|
1220 | While renaming or moving to a new superior causes the entry's DN to
|
---|
1221 | change, that change SHOULD NOT, by itself, cause synchronization
|
---|
1222 | messages to be sent for that entry. However, if the renaming or the
|
---|
1223 | moving could cause the entry to be added or deleted from the content,
|
---|
1224 | appropriate synchronization messages should be generated to indicate
|
---|
1225 | this to the client.
|
---|
1226 |
|
---|
1227 | When a server treats the entry's DN as meta information, the server
|
---|
1228 | SHALL either
|
---|
1229 |
|
---|
1230 | - evaluate all MatchingRuleAssertions [RFC4511] to TRUE if
|
---|
1231 | matching a value of an attribute of the entry, otherwise
|
---|
1232 | Undefined, or
|
---|
1233 |
|
---|
1234 | - evaluate all MatchingRuleAssertion with dnAttributes of TRUE as
|
---|
1235 | Undefined.
|
---|
1236 |
|
---|
1237 | The latter choice is offered for ease of server implementation.
|
---|
1238 |
|
---|
1239 | 4.2. Operational Attributes
|
---|
1240 |
|
---|
1241 | Where values of an operational attribute are determined by values not
|
---|
1242 | held as part of the entry it appears in, the operational attribute
|
---|
1243 | SHOULD NOT support synchronization of that operational attribute.
|
---|
1244 |
|
---|
1245 | For example, in servers that implement the X.501 subschema model
|
---|
1246 | [X.501], servers should not support synchronization of the
|
---|
1247 | subschemaSubentry attribute as its value is determined by values held
|
---|
1248 | and administrated in subschema subentries.
|
---|
1249 |
|
---|
1250 |
|
---|
1251 |
|
---|
1252 |
|
---|
1253 |
|
---|
1254 |
|
---|
1255 | Zeilenga & Choi Experimental [Page 22]
|
---|
1256 | |
---|
1257 |
|
---|
1258 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1259 |
|
---|
1260 |
|
---|
1261 | As a counter example, servers that implement aliases [RFC4512][X.501]
|
---|
1262 | can support synchronization of the aliasedObjectName attribute as its
|
---|
1263 | values are held and administrated as part of the alias entries.
|
---|
1264 |
|
---|
1265 | Servers SHOULD support synchronization of the following operational
|
---|
1266 | attributes: createTimestamp, modifyTimestamp, creatorsName,
|
---|
1267 | modifiersName [RFC4512]. Servers MAY support synchronization of
|
---|
1268 | other operational attributes.
|
---|
1269 |
|
---|
1270 | 4.3. Collective Attributes
|
---|
1271 |
|
---|
1272 | A collective attribute is "a user attribute whose values are the same
|
---|
1273 | for each member of an entry collection" [X.501]. Use of collective
|
---|
1274 | attributes in LDAP is discussed in [RFC3671].
|
---|
1275 |
|
---|
1276 | Modification of a collective attribute generally affects the content
|
---|
1277 | of multiple entries, which are the members of the collection. It is
|
---|
1278 | inefficient to include values of collective attributes visible in
|
---|
1279 | entries of the collection, as a single modification of a collective
|
---|
1280 | attribute requires transmission of multiple SearchResultEntry (one
|
---|
1281 | for each entry of the collection that the modification affected).
|
---|
1282 |
|
---|
1283 | Servers SHOULD NOT synchronize collective attributes appearing in
|
---|
1284 | entries of any collection. Servers MAY support synchronization of
|
---|
1285 | collective attributes appearing in collective attribute subentries.
|
---|
1286 |
|
---|
1287 | 4.4. Access and Other Administrative Controls
|
---|
1288 |
|
---|
1289 | Entries are commonly subject to access and other administrative
|
---|
1290 | Controls. While portions of the policy information governing a
|
---|
1291 | particular entry may be held in the entry, policy information is
|
---|
1292 | often held elsewhere (in superior entries, in subentries, in the root
|
---|
1293 | DSE, in configuration files, etc.). Because of this, changes to
|
---|
1294 | policy information make it difficult to ensure eventual convergence
|
---|
1295 | during incremental synchronization.
|
---|
1296 |
|
---|
1297 | Where it is impractical or infeasible to generate content changes
|
---|
1298 | resulting from a change to policy information, servers may opt to
|
---|
1299 | return e-syncRefreshRequired or to treat the Sync Operation as an
|
---|
1300 | initial content request (e.g., ignore the cookie or the
|
---|
1301 | synchronization state represented in the cookie).
|
---|
1302 |
|
---|
1303 | 5. Interaction with Other Controls
|
---|
1304 |
|
---|
1305 | The Sync Operation may be used with:
|
---|
1306 |
|
---|
1307 | - ManageDsaIT Control [RFC3296]
|
---|
1308 |
|
---|
1309 |
|
---|
1310 |
|
---|
1311 |
|
---|
1312 | Zeilenga & Choi Experimental [Page 23]
|
---|
1313 | |
---|
1314 |
|
---|
1315 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1316 |
|
---|
1317 |
|
---|
1318 | - Subentries Control [RFC3672]
|
---|
1319 |
|
---|
1320 | as described below. The Sync Operation may be used with other LDAP
|
---|
1321 | extensions as detailed in other documents.
|
---|
1322 |
|
---|
1323 | 5.1. ManageDsaIT Control
|
---|
1324 |
|
---|
1325 | The ManageDsaIT Control [RFC3296] indicates that the operation acts
|
---|
1326 | upon the DSA Information Tree and causes referral and other special
|
---|
1327 | entries to be treated as object entries with respect to the
|
---|
1328 | operation.
|
---|
1329 |
|
---|
1330 | 5.2. Subentries Control
|
---|
1331 |
|
---|
1332 | The Subentries Control is used with the search operation "to control
|
---|
1333 | the visibility of entries and subentries which are within scope"
|
---|
1334 | [RFC3672]. When used with the Sync Operation, the subentries control
|
---|
1335 | and other factors (search scope, filter, etc.) are used to determine
|
---|
1336 | whether an entry or subentry appears in the content.
|
---|
1337 |
|
---|
1338 | 6. Shadowing Considerations
|
---|
1339 |
|
---|
1340 | As noted in [RFC4511], some servers may hold shadow copies of entries
|
---|
1341 | that can be used to answer search and comparison queries. Such
|
---|
1342 | servers may also support content synchronization requests. This
|
---|
1343 | section discusses considerations for implementors and deployers for
|
---|
1344 | the implementation and deployment of the Sync operation in shadowed
|
---|
1345 | directories.
|
---|
1346 |
|
---|
1347 | While a client may know of multiple servers that are equally capable
|
---|
1348 | of being used to obtain particular directory content from, a client
|
---|
1349 | SHOULD NOT assume that each of these servers is equally capable of
|
---|
1350 | continuing a content synchronization session. As stated in Section
|
---|
1351 | 3.1, the client SHOULD issue each Sync request of a Sync session to
|
---|
1352 | the same server.
|
---|
1353 |
|
---|
1354 | However, through domain naming or IP address redirection or other
|
---|
1355 | techniques, multiple physical servers can be made to appear as one
|
---|
1356 | logical server to a client. Only servers that are equally capable in
|
---|
1357 | regards to their support for the Sync operation and that hold equally
|
---|
1358 | complete copies of the entries should be made to appear as one
|
---|
1359 | logical server. In particular, each physical server acting as one
|
---|
1360 | logical server SHOULD be equally capable of continuing a content
|
---|
1361 | synchronization based upon cookies provided by any of the other
|
---|
1362 | physical servers without requiring a full reload. Because there is
|
---|
1363 | no standard LDAP shadowing mechanism, the specification of how to
|
---|
1364 | independently implement equally capable servers (as well as the
|
---|
1365 | precise definition of "equally capable") is left to future documents.
|
---|
1366 |
|
---|
1367 |
|
---|
1368 |
|
---|
1369 | Zeilenga & Choi Experimental [Page 24]
|
---|
1370 | |
---|
1371 |
|
---|
1372 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1373 |
|
---|
1374 |
|
---|
1375 | Note that it may be difficult for the server to reliably determine
|
---|
1376 | what content was provided to the client by another server, especially
|
---|
1377 | in the shadowing environments that allow shadowing events to be
|
---|
1378 | coalesced. For these servers, the use of the delete phase discussed
|
---|
1379 | in Section 3.3.2 may not be applicable.
|
---|
1380 |
|
---|
1381 | 7. Security Considerations
|
---|
1382 |
|
---|
1383 | In order to maintain a synchronized copy of the content, a client is
|
---|
1384 | to delete information from its copy of the content as described
|
---|
1385 | above. However, the client may maintain knowledge of information
|
---|
1386 | disclosed to it by the server separate from its copy of the content
|
---|
1387 | used for synchronization. Management of this knowledge is beyond the
|
---|
1388 | scope of this document. Servers should be careful not to disclose
|
---|
1389 | information for content the client is not authorized to have
|
---|
1390 | knowledge of and/or about.
|
---|
1391 |
|
---|
1392 | While the information provided by a series of refreshOnly Sync
|
---|
1393 | Operations is similar to that provided by a series of Search
|
---|
1394 | Operations, persist stage may disclose additional information. A
|
---|
1395 | client may be able to discern information about the particular
|
---|
1396 | sequence of update operations that caused content change.
|
---|
1397 |
|
---|
1398 | Implementors should take precautions against malicious cookie
|
---|
1399 | content, including malformed cookies or valid cookies used with
|
---|
1400 | different security associations and/or protections in an attempt to
|
---|
1401 | obtain unauthorized access to information. Servers may include a
|
---|
1402 | digital signature in the cookie to detect tampering.
|
---|
1403 |
|
---|
1404 | The operation may be the target of direct denial-of-service attacks.
|
---|
1405 | Implementors should provide safeguards to ensure the operation is not
|
---|
1406 | abused. Servers may place access control or other restrictions upon
|
---|
1407 | the use of this operation.
|
---|
1408 |
|
---|
1409 | Note that even small updates to the directory may cause a significant
|
---|
1410 | amount of traffic to be generated to clients using this operation. A
|
---|
1411 | user could abuse its update privileges to mount an indirect denial of
|
---|
1412 | service to these clients, other clients, and/or portions of the
|
---|
1413 | network. Servers should provide safeguards to ensure that update
|
---|
1414 | operations are not abused.
|
---|
1415 |
|
---|
1416 | Implementors of this (or any) LDAP extension should be familiar with
|
---|
1417 | general LDAP security considerations [RFC4510].
|
---|
1418 |
|
---|
1419 |
|
---|
1420 |
|
---|
1421 |
|
---|
1422 |
|
---|
1423 |
|
---|
1424 |
|
---|
1425 |
|
---|
1426 | Zeilenga & Choi Experimental [Page 25]
|
---|
1427 | |
---|
1428 |
|
---|
1429 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1430 |
|
---|
1431 |
|
---|
1432 | 8. IANA Considerations
|
---|
1433 |
|
---|
1434 | Registration of the following values have been completed by the IANA
|
---|
1435 | [RFC4520].
|
---|
1436 |
|
---|
1437 | 8.1. Object Identifier
|
---|
1438 |
|
---|
1439 | The OID arc 1.3.6.1.4.1.4203.1.9.1 was assigned [ASSIGN] by the
|
---|
1440 | OpenLDAP Foundation, under its IANA-assigned private enterprise
|
---|
1441 | allocation [PRIVATE], for use in this specification.
|
---|
1442 |
|
---|
1443 | 8.2. LDAP Protocol Mechanism
|
---|
1444 |
|
---|
1445 | The IANA has registered the LDAP Protocol Mechanism described in this
|
---|
1446 | document.
|
---|
1447 |
|
---|
1448 | Subject: Request for LDAP Protocol Mechanism Registration
|
---|
1449 | Object Identifier: 1.3.6.1.4.1.4203.1.9.1.1
|
---|
1450 | Description: LDAP Content Synchronization Control
|
---|
1451 | Person & email address to contact for further information:
|
---|
1452 | Kurt Zeilenga <kurt@openldap.org>
|
---|
1453 | Usage: Control
|
---|
1454 | Specification: RFC 4533
|
---|
1455 | Author/Change Controller: Kurt D. Zeilenga, Jong Hyuk Choi
|
---|
1456 | Comments: none
|
---|
1457 |
|
---|
1458 | 8.3. LDAP Result Codes
|
---|
1459 |
|
---|
1460 | The IANA has registered the LDAP Result Code described in this
|
---|
1461 | document.
|
---|
1462 |
|
---|
1463 | Subject: LDAP Result Code Registration
|
---|
1464 | Person & email address to contact for further information:
|
---|
1465 | Kurt Zeilenga <kurt@OpenLDAP.org>
|
---|
1466 | Result Code Name: e-syncRefreshRequired (4096)
|
---|
1467 | Specification: RFC 4533
|
---|
1468 | Author/Change Controller: Kurt D. Zeilenga, Jong Hyuk Choi
|
---|
1469 | Comments: none
|
---|
1470 |
|
---|
1471 | 9. Acknowledgements
|
---|
1472 |
|
---|
1473 | This document borrows significantly from the LDAP Client Update
|
---|
1474 | Protocol [RFC3928], a product of the IETF LDUP working group. This
|
---|
1475 | document also benefited from Persistent Search [PSEARCH], Triggered
|
---|
1476 | Search [TSEARCH], and Directory Synchronization [DIRSYNC] works.
|
---|
1477 | This document also borrows from "Lightweight Directory Access
|
---|
1478 | Protocol (v3)" [RFC2251].
|
---|
1479 |
|
---|
1480 |
|
---|
1481 |
|
---|
1482 |
|
---|
1483 | Zeilenga & Choi Experimental [Page 26]
|
---|
1484 | |
---|
1485 |
|
---|
1486 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1487 |
|
---|
1488 |
|
---|
1489 | 10. Normative References
|
---|
1490 |
|
---|
1491 | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
---|
1492 | Requirement Levels", BCP 14, RFC 2119, March 1997.
|
---|
1493 |
|
---|
1494 | [RFC3296] Zeilenga, K., "Named Subordinate References in
|
---|
1495 | Lightweight Directory Access Protocol (LDAP)
|
---|
1496 | Directories", RFC 3296, July 2002.
|
---|
1497 |
|
---|
1498 | [RFC3671] Zeilenga, K., "Collective Attributes in the Lightweight
|
---|
1499 | Directory Access Protocol (LDAP)", RFC 3671, December
|
---|
1500 | 2003.
|
---|
1501 |
|
---|
1502 | [RFC3672] Zeilenga, K., "Subentries in the Lightweight Directory
|
---|
1503 | Access Protocol (LDAP)", RFC 3672, December 2003.
|
---|
1504 |
|
---|
1505 | [RFC3909] Zeilenga, K., "Lightweight Directory Access Protocol
|
---|
1506 | (LDAP) Cancel Operation", RFC 3909, October 2004.
|
---|
1507 |
|
---|
1508 | [RFC4510] Zeilenga, K., Ed., "Lightweight Directory Access Protocol
|
---|
1509 | (LDAP): Technical Specification Road Map", RFC 4510, June
|
---|
1510 | 2006.
|
---|
1511 |
|
---|
1512 | [RFC4511] Sermersheim, J., Ed., "Lightweight Directory Access
|
---|
1513 | Protocol (LDAP): The Protocol", RFC 4511, June 2006.
|
---|
1514 |
|
---|
1515 | [RFC4512] Zeilenga, K., "Lightweight Directory Access Protocol
|
---|
1516 | (LDAP): Directory Information Models", RFC 4512, June
|
---|
1517 | 2006.
|
---|
1518 |
|
---|
1519 | [RFC4530] Zeilenga, K., "Lightweight Directory Access Protocol
|
---|
1520 | (LDAP) entryUUID Operational Attribute", RFC 4530, June
|
---|
1521 | 2006.
|
---|
1522 |
|
---|
1523 | [UUID] International Organization for Standardization (ISO),
|
---|
1524 | "Information technology - Open Systems Interconnection -
|
---|
1525 | Remote Procedure Call", ISO/IEC 11578:1996
|
---|
1526 |
|
---|
1527 | [X.501] International Telecommunication Union - Telecommunication
|
---|
1528 | Standardization Sector, "The Directory -- Models,"
|
---|
1529 | X.501(1993) (also ISO/IEC 9594-2:1994).
|
---|
1530 |
|
---|
1531 | [X.680] International Telecommunication Union - Telecommunication
|
---|
1532 | Standardization Sector, "Abstract Syntax Notation One
|
---|
1533 | (ASN.1) - Specification of Basic Notation", X.680(1997)
|
---|
1534 | (also ISO/IEC 8824-1:1998).
|
---|
1535 |
|
---|
1536 |
|
---|
1537 |
|
---|
1538 |
|
---|
1539 |
|
---|
1540 | Zeilenga & Choi Experimental [Page 27]
|
---|
1541 | |
---|
1542 |
|
---|
1543 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1544 |
|
---|
1545 |
|
---|
1546 | [X.690] International Telecommunication Union - Telecommunication
|
---|
1547 | Standardization Sector, "Specification of ASN.1 encoding
|
---|
1548 | rules: Basic Encoding Rules (BER), Canonical Encoding
|
---|
1549 | Rules (CER), and Distinguished Encoding Rules (DER)",
|
---|
1550 | X.690(1997) (also ISO/IEC 8825-1:1998).
|
---|
1551 |
|
---|
1552 | 11. Informative References
|
---|
1553 |
|
---|
1554 | [RFC2251] Wahl, M., Howes, T., and S. Kille, "Lightweight Directory
|
---|
1555 | Access Protocol (v3)", RFC 2251, December 1997.
|
---|
1556 |
|
---|
1557 | [RFC3928] Megginson, R., Ed., Smith, M., Natkovich, O., and J.
|
---|
1558 | Parham, "Lightweight Directory Access Protocol (LDAP)
|
---|
1559 | Client Update Protocol (LCUP)", RFC 3928, October 2004.
|
---|
1560 |
|
---|
1561 | [RFC4520] Zeilenga, K., "Internet Assigned Numbers Authority (IANA)
|
---|
1562 | Considerations for the Lightweight Directory Access
|
---|
1563 | Protocol (LDAP)", BCP 64, RFC 4520, June 2006.
|
---|
1564 |
|
---|
1565 | [PRIVATE] IANA, "Private Enterprise Numbers",
|
---|
1566 | http://www.iana.org/assignments/enterprise-numbers.
|
---|
1567 |
|
---|
1568 | [ASSIGN] OpenLDAP Foundation, "OpenLDAP OID Delegations",
|
---|
1569 | http://www.openldap.org/foundation/oid-delegate.txt.
|
---|
1570 |
|
---|
1571 | [X.500] International Telecommunication Union - Telecommunication
|
---|
1572 | Standardization Sector, "The Directory -- Overview of
|
---|
1573 | concepts, models and services," X.500(1993) (also ISO/IEC
|
---|
1574 | 9594-1:1994).
|
---|
1575 |
|
---|
1576 | [X.525] International Telecommunication Union - Telecommunication
|
---|
1577 | Standardization Sector, "The Directory: Replication",
|
---|
1578 | X.525(1993).
|
---|
1579 |
|
---|
1580 | [DIRSYNC] Armijo, M., "Microsoft LDAP Control for Directory
|
---|
1581 | Synchronization", Work in Progress.
|
---|
1582 |
|
---|
1583 | [PSEARCH] Smith, M., et al., "Persistent Search: A Simple LDAP
|
---|
1584 | Change Notification Mechanism", Work in Progress.
|
---|
1585 |
|
---|
1586 | [TSEARCH] Wahl, M., "LDAPv3 Triggered Search Control", Work in
|
---|
1587 | Progress.
|
---|
1588 |
|
---|
1589 |
|
---|
1590 |
|
---|
1591 |
|
---|
1592 |
|
---|
1593 |
|
---|
1594 |
|
---|
1595 |
|
---|
1596 |
|
---|
1597 | Zeilenga & Choi Experimental [Page 28]
|
---|
1598 | |
---|
1599 |
|
---|
1600 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1601 |
|
---|
1602 |
|
---|
1603 | Appendix A. CSN-based Implementation Considerations
|
---|
1604 |
|
---|
1605 | This appendix is provided for informational purposes only; it is not
|
---|
1606 | a normative part of the LDAP Content Synchronization Operation's
|
---|
1607 | technical specification.
|
---|
1608 |
|
---|
1609 | This appendix discusses LDAP Content Synchronization Operation server
|
---|
1610 | implementation considerations associated with Change Sequence Number
|
---|
1611 | based approaches.
|
---|
1612 |
|
---|
1613 | Change Sequence Number based approaches are targeted for use in
|
---|
1614 | servers that do not maintain history information (e.g., change logs,
|
---|
1615 | state snapshots) about changes made to the Directory and hence, must
|
---|
1616 | rely on current directory state and minimal synchronization state
|
---|
1617 | information embedded in Sync Cookie. Servers that maintain history
|
---|
1618 | information should consider other approaches that exploit the history
|
---|
1619 | information.
|
---|
1620 |
|
---|
1621 | A Change Sequence Number is effectively a time stamp that has
|
---|
1622 | sufficient granularity to ensure that the precedence relationship in
|
---|
1623 | time of two updates to the same object can be determined. Change
|
---|
1624 | Sequence Numbers are not to be confused with Commit Sequence Numbers
|
---|
1625 | or Commit Log Record Numbers. A Commit Sequence Number allows one to
|
---|
1626 | determine how two commits (to the same object or different objects)
|
---|
1627 | relate to each other in time. A Change Sequence Number associated
|
---|
1628 | with different entries may be committed out of order. In the
|
---|
1629 | remainder of this Appendix, the term CSN refers to a Change Sequence
|
---|
1630 | Number.
|
---|
1631 |
|
---|
1632 | In these approaches, the server not only maintains a CSN for each
|
---|
1633 | directory entry (the entry CSN) but also maintains a value that we
|
---|
1634 | will call the context CSN. The context CSN is the greatest committed
|
---|
1635 | entry CSN that is not greater than any outstanding (uncommitted)
|
---|
1636 | entry CSNs for all entries in a directory context. The values of
|
---|
1637 | context CSN are used in syncCookie values as synchronization state
|
---|
1638 | indicators.
|
---|
1639 |
|
---|
1640 | As search operations are not isolated from individual directory
|
---|
1641 | update operations and individual update operations cannot be assumed
|
---|
1642 | to be serialized, one cannot assume that the returned content
|
---|
1643 | incorporates each relevant change whose change sequence number is
|
---|
1644 | less than or equal to the greatest entry CSN in the content. The
|
---|
1645 | content incorporates all the relevant changes whose change sequence
|
---|
1646 | numbers are less than or equal to context CSN before search
|
---|
1647 | processing. The content may also incorporate any subset of the
|
---|
1648 | changes whose change sequence number is greater than context CSN
|
---|
1649 | before search processing but less than or equal to the context CSN
|
---|
1650 | after search processing. The content does not incorporate any of the
|
---|
1651 |
|
---|
1652 |
|
---|
1653 |
|
---|
1654 | Zeilenga & Choi Experimental [Page 29]
|
---|
1655 | |
---|
1656 |
|
---|
1657 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1658 |
|
---|
1659 |
|
---|
1660 | changes whose CSN is greater than the context CSN after search
|
---|
1661 | processing.
|
---|
1662 |
|
---|
1663 | A simple server implementation could use the value of the context CSN
|
---|
1664 | before search processing to indicate state. Such an implementation
|
---|
1665 | would embed this value into each SyncCookie returned. We'll call
|
---|
1666 | this the cookie CSN. When a refresh was requested, the server would
|
---|
1667 | simply generate "update" messages for all entries in the content
|
---|
1668 | whose CSN is greater than the supplied cookie CSN and generate
|
---|
1669 | "present" messages for all other entries in the content. However, if
|
---|
1670 | the current context CSN is the same as the cookie CSN, the server
|
---|
1671 | should instead generate zero "updates" and zero "delete" messages and
|
---|
1672 | indicate a refreshDeletes of TRUE, as the directory has not changed.
|
---|
1673 |
|
---|
1674 | The implementation should also consider the impact of changes to meta
|
---|
1675 | information, such as access controls, that affect content
|
---|
1676 | determination. One approach is for the server to maintain a
|
---|
1677 | context-wide meta information CSN or meta CSN. This meta CSN would
|
---|
1678 | be updated whenever meta information affecting content determination
|
---|
1679 | was changed. If the value of the meta CSN is greater than the cookie
|
---|
1680 | CSN, the server should ignore the cookie and treat the request as an
|
---|
1681 | initial request for content.
|
---|
1682 |
|
---|
1683 | Additionally, servers may want to consider maintaining some per-
|
---|
1684 | session history information to reduce the number of messages needed
|
---|
1685 | to be transferred during incremental refreshes. Specifically, a
|
---|
1686 | server could record information about entries as they leave the scope
|
---|
1687 | of a disconnected sync session and later use this information to
|
---|
1688 | generate delete messages instead of present messages.
|
---|
1689 |
|
---|
1690 | When the history information is truncated, the CSN of the latest
|
---|
1691 | truncated history information entry may be recorded as the truncated
|
---|
1692 | CSN of the history information. The truncated CSN may be used to
|
---|
1693 | determine whether a client copy can be covered by the history
|
---|
1694 | information by comparing it to the synchronization state contained in
|
---|
1695 | the cookie supplied by the client.
|
---|
1696 |
|
---|
1697 | When there is a large number of sessions, it may make sense to
|
---|
1698 | maintain such history only for the selected clients. Also, servers
|
---|
1699 | taking this approach need to consider resource consumption issues to
|
---|
1700 | ensure reasonable server operation and to protect against abuse. It
|
---|
1701 | may be appropriate to restrict this mode of operation by policy.
|
---|
1702 |
|
---|
1703 |
|
---|
1704 |
|
---|
1705 |
|
---|
1706 |
|
---|
1707 |
|
---|
1708 |
|
---|
1709 |
|
---|
1710 |
|
---|
1711 | Zeilenga & Choi Experimental [Page 30]
|
---|
1712 | |
---|
1713 |
|
---|
1714 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1715 |
|
---|
1716 |
|
---|
1717 | Authors' Addresses
|
---|
1718 |
|
---|
1719 | Kurt D. Zeilenga
|
---|
1720 | OpenLDAP Foundation
|
---|
1721 |
|
---|
1722 | EMail: Kurt@OpenLDAP.org
|
---|
1723 |
|
---|
1724 |
|
---|
1725 | Jong Hyuk Choi
|
---|
1726 | IBM Corporation
|
---|
1727 |
|
---|
1728 | EMail: jongchoi@us.ibm.com
|
---|
1729 |
|
---|
1730 |
|
---|
1731 |
|
---|
1732 |
|
---|
1733 |
|
---|
1734 |
|
---|
1735 |
|
---|
1736 |
|
---|
1737 |
|
---|
1738 |
|
---|
1739 |
|
---|
1740 |
|
---|
1741 |
|
---|
1742 |
|
---|
1743 |
|
---|
1744 |
|
---|
1745 |
|
---|
1746 |
|
---|
1747 |
|
---|
1748 |
|
---|
1749 |
|
---|
1750 |
|
---|
1751 |
|
---|
1752 |
|
---|
1753 |
|
---|
1754 |
|
---|
1755 |
|
---|
1756 |
|
---|
1757 |
|
---|
1758 |
|
---|
1759 |
|
---|
1760 |
|
---|
1761 |
|
---|
1762 |
|
---|
1763 |
|
---|
1764 |
|
---|
1765 |
|
---|
1766 |
|
---|
1767 |
|
---|
1768 | Zeilenga & Choi Experimental [Page 31]
|
---|
1769 | |
---|
1770 |
|
---|
1771 | RFC 4533 LDAP Content Synchronization Operation June 2006
|
---|
1772 |
|
---|
1773 |
|
---|
1774 | Full Copyright Statement
|
---|
1775 |
|
---|
1776 | Copyright (C) The Internet Society (2006).
|
---|
1777 |
|
---|
1778 | This document is subject to the rights, licenses and restrictions
|
---|
1779 | contained in BCP 78 and at www.rfc-editor.org/copyright.html, and
|
---|
1780 | except as set forth therein, the authors retain all their rights.
|
---|
1781 |
|
---|
1782 | This document and the information contained herein are provided on an
|
---|
1783 | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
---|
1784 | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
|
---|
1785 | ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
|
---|
1786 | INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
|
---|
1787 | INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
---|
1788 | WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
---|
1789 |
|
---|
1790 | Intellectual Property
|
---|
1791 |
|
---|
1792 | The IETF takes no position regarding the validity or scope of any
|
---|
1793 | Intellectual Property Rights or other rights that might be claimed to
|
---|
1794 | pertain to the implementation or use of the technology described in
|
---|
1795 | this document or the extent to which any license under such rights
|
---|
1796 | might or might not be available; nor does it represent that it has
|
---|
1797 | made any independent effort to identify any such rights. Information
|
---|
1798 | on the procedures with respect to rights in RFC documents can be
|
---|
1799 | found in BCP 78 and BCP 79.
|
---|
1800 |
|
---|
1801 | Copies of IPR disclosures made to the IETF Secretariat and any
|
---|
1802 | assurances of licenses to be made available, or the result of an
|
---|
1803 | attempt made to obtain a general license or permission for the use of
|
---|
1804 | such proprietary rights by implementers or users of this
|
---|
1805 | specification can be obtained from the IETF on-line IPR repository at
|
---|
1806 | http://www.ietf.org/ipr.
|
---|
1807 |
|
---|
1808 | The IETF invites any interested party to bring to its attention any
|
---|
1809 | copyrights, patents or patent applications, or other proprietary
|
---|
1810 | rights that may cover technology that may be required to implement
|
---|
1811 | this standard. Please address the information to the IETF at
|
---|
1812 | ietf-ipr@ietf.org.
|
---|
1813 |
|
---|
1814 | Acknowledgement
|
---|
1815 |
|
---|
1816 | Funding for the RFC Editor function is provided by the IETF
|
---|
1817 | Administrative Support Activity (IASA).
|
---|
1818 |
|
---|
1819 |
|
---|
1820 |
|
---|
1821 |
|
---|
1822 |
|
---|
1823 |
|
---|
1824 |
|
---|
1825 | Zeilenga & Choi Experimental [Page 32]
|
---|
1826 | |
---|
1827 |
|
---|