mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
1404 lines
52 KiB
Plaintext
1404 lines
52 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
INTERNET-DRAFT Kurt D. Zeilenga
|
||
Intended Category: Standard Track OpenLDAP Foundation
|
||
Expires in six months Jonghyuk Choi
|
||
IBM Corporation
|
||
|
||
5 May 2003
|
||
|
||
|
||
|
||
|
||
LDAP Content Synchronization Operation
|
||
<draft-zeilenga-ldup-sync-02.txt>
|
||
|
||
|
||
|
||
|
||
1. Status of this Memo
|
||
|
||
This document is an Internet-Draft and is in full conformance with all
|
||
provisions of Section 10 of RFC2026.
|
||
|
||
Distribution of this memo is unlimited. Technical discussion of this
|
||
document will take place on the IETF LDUP Working Group mailing list
|
||
at <ietf-ldup@imc.org>. Please send editorial comments directly to
|
||
the document editor at <Kurt@OpenLDAP.org>.
|
||
|
||
Internet-Drafts are working documents of the Internet Engineering Task
|
||
Force (IETF), its areas, and its working groups. Note that other
|
||
groups may also distribute working documents as Internet-Drafts.
|
||
Internet-Drafts are draft documents valid for a maximum of six months
|
||
and may be updated, replaced, or obsoleted by other documents at any
|
||
time. It is inappropriate to use Internet-Drafts as reference
|
||
material or to cite them other than as ``work in progress.''
|
||
|
||
The list of current Internet-Drafts can be accessed at
|
||
<http://www.ietf.org/ietf/1id-abstracts.txt>. The list of
|
||
Internet-Draft Shadow Directories can be accessed at
|
||
<http://www.ietf.org/shadow.html>.
|
||
|
||
Copyright 2003, The Internet Society. All Rights Reserved.
|
||
|
||
Please see the Copyright section near the end of this document for
|
||
more information.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 1]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
Abstract
|
||
|
||
This specification describes the LDAP (Lightweight Directory Access
|
||
Protocol) Content Synchronization operation. The operation allows a
|
||
client to maintain a shadow copy of a fragment of directory
|
||
information tree. It supports both polling for changes and listening
|
||
for changes. The operation is defined as an extension of the LDAP
|
||
Search operation.
|
||
|
||
|
||
Conventions
|
||
|
||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
||
document are to be interpreted as described in BCP 14 [RFC2119].
|
||
|
||
Protocol elements are described using ASN.1 [X.680]. The term
|
||
"BER-encoded" means the element is to be encoded using the Basic
|
||
Encoding Rules [X.690] under the restrictions detailed in Section 5.1
|
||
of [RFC2251].
|
||
|
||
|
||
1. Introduction
|
||
|
||
The Lightweight Directory Access Protocol (LDAP) [RFC3377] provides a
|
||
mechanism, the search operation [RFC2251], to allow a client to
|
||
request the return of content matching a complex set of assertions and
|
||
for the server to return this content, subject to access control and
|
||
other restrictions, to the client. However, short of repeating a
|
||
search operation each time a new copy needed, LDAP does not provide an
|
||
effective and efficient mechanism for maintaining synchronized copies
|
||
of directory content.
|
||
|
||
This document defines the LDAP Content Synchronization operation, or
|
||
Sync operation for short, which allows a client to maintain a
|
||
synchronized shadow copy of a fragment of a Directory Information Tree
|
||
(DIT). The Sync operation is defined as a set of controls and other
|
||
protocol elements which extend the Search operation.
|
||
|
||
|
||
1.1. Background
|
||
|
||
Over the years, a number of directory synchronization approaches have
|
||
been suggested. These approaches are inadequate for one or more of
|
||
the following reasons:
|
||
|
||
1) do not ensure a reasonable level of convergence;
|
||
2) fail to detect that convergence cannot be achieved (without
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 2]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
reload);
|
||
3) require pre-arranged synchronization agreements;
|
||
4) require the server to maintain synchronization state on a per
|
||
client basis;
|
||
5) require the server to maintain histories of past changes to DIT
|
||
content and/or meta information; and/or
|
||
6) are overly chatty.
|
||
|
||
The Sync operation provides eventual convergence of synchronized
|
||
content when possible and, when not, notification that content reload
|
||
is required.
|
||
|
||
The Sync operation does not require pre-arranged synchronization
|
||
agreements.
|
||
|
||
The Sync operation does not require servers to maintain
|
||
synchronization state on a per user basis.
|
||
|
||
The Sync operation does not require servers to maintain any history of
|
||
past changes to the DIT or to meta information. While histories
|
||
(e.g., change logs, tombstones, DIT snapshots) may be used in the
|
||
implementation of the Sync operation, the operation may be implemented
|
||
using purely state-based approaches.
|
||
|
||
As the Sync operation does not require servers to maintain any
|
||
histories of past changes, it can be implemented in environments where
|
||
it is not feasible to maintain such histories. Histories, if
|
||
available, may be used by the server to reduce the number of messages
|
||
generated and reduce their size.
|
||
|
||
The Sync operation chattiness is reasonably bound.
|
||
|
||
|
||
1.2. Intended Usage
|
||
|
||
The Sync operation is intended to be used in applications requiring
|
||
eventual-convergent content synchronization. Upon completion of each
|
||
synchronization phase of the operation, all information to construct
|
||
an synchronized shadow copy of the content has been provided to the
|
||
client or the client has been notified that a complete content reload
|
||
is necessary. Excepting for transient inconsistencies due to
|
||
concurrent operation (or other) processing at the server, the shadow
|
||
copy is an accurate reflection of the content held by the server.
|
||
Each inconsistency is transient in that it will be corrected during
|
||
subsequent synchronization requests.
|
||
|
||
Possible uses include:
|
||
- White page service applications may use the Sync operation to
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 3]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
maintain current shadow copy of a DIT fragment. For example, an
|
||
mail user agent which use the sync operation to maintain a local
|
||
copy of an enterprise address book.
|
||
|
||
- Meta-information engines may use the Sync operation to maintain a
|
||
shadow copy of a DIT fragment.
|
||
|
||
- Caching proxy services may use the Sync operation to maintain a
|
||
coherent content cache.
|
||
|
||
- Lightweight master-slave replication between heterogeneous
|
||
directory servers. For example, the Sync operation can be used by
|
||
a slave server to maintain a shadow copy of a DIT fragment.
|
||
|
||
Note: The International Telephone Union (ITU) has defined the X.500
|
||
Directory Synchronization Protocol [X.525] which may be used for
|
||
master-slave replication between LDAP servers. Other
|
||
experimental LDAP replication protocols exist. The Sync
|
||
operation should be viewed as complementary to these replication
|
||
protocols.
|
||
|
||
This protocol is not intended to be used in applications requiring
|
||
transactional data consistency.
|
||
|
||
As this protocol transfers all visible values of entries upon change
|
||
instead of change deltas, this protocol is not appropriate for
|
||
bandwidth-challenged applications or deployments.
|
||
|
||
|
||
1.3. Overview
|
||
|
||
This section provides an overview of basis ways the Sync operation can
|
||
be used to maintain a synchronized shadow copy of a DIT fragment.
|
||
|
||
- Polling for Changes: refreshOnly mode
|
||
- Listening for Changes: refreshAndPersist mode
|
||
|
||
|
||
1.3.1. Polling for Changes (refreshOnly)
|
||
|
||
To obtain its initial shadow copy, the client issues a Sync request: a
|
||
search request with the Sync Request Control with mode set to
|
||
refreshOnly. The server, much like it would with a normal search
|
||
operation, returns (subject to access controls and other restrictions)
|
||
the content matching the search criteria (baseObject, scope, filter).
|
||
Additionally, with each entry returned, the server provides a Sync
|
||
State control indicating state add. This control contains the
|
||
Universally Unique Identifier (UUID) [UUID] of the entry. Unlike
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 4]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
Distinguished Names (DNs), which may change over time, an entry's
|
||
UUIDs are stable. The initial content is followed by a
|
||
searchResultDone with a Sync Done control. The Sync Done control
|
||
provides a syncCookie. The syncCookie represents session state.
|
||
|
||
To poll for updates to the shadow copy, the client reissues the Sync
|
||
operation with the syncCookie previously returned. The server, much
|
||
as it would with a normal search operation, determines which content
|
||
would be returned as if the operation was a normal search operation.
|
||
However, using the syncCookie as an indicator of what content the
|
||
client was sent previously, the server sends copies of entries which
|
||
have changed with a Sync State control indicating state add. For each
|
||
unchanged entry, the server sends an empty entry (e.g., no attributes)
|
||
with a Sync State control indicating state present. The set of
|
||
updates is followed by a searchResultDone with a Sync Done control.
|
||
|
||
If the server can reliably determine which entries in the prior shadow
|
||
copy are no longer present in the content and the number of such
|
||
entries is less than or equal to the number of unchanged entries, the
|
||
server may, instead of returning an empty entry with state present for
|
||
each present entry, send an empty entry with state delete for each
|
||
entry which is no longer in the content. Also, the Sync Done control
|
||
refreshDeletes is set to TRUE to indicate to the client that this
|
||
method was used. This field is FALSE otherwise.
|
||
|
||
The synchronized shadow copy of the DIT fragment is constructed by the
|
||
client.
|
||
|
||
If refreshDeletes is FALSE, the new copy includes all changed entries
|
||
returned by the reissued Sync operation as well as all unchanged
|
||
entries identified as being present by the reissued Sync operation,
|
||
but whose content is provided by the previous Sync operation. The
|
||
unchanged entries not identified as being present are deleted from the
|
||
shadow content. They had been either deleted, moved, or otherwise
|
||
scoped-out from the content.
|
||
|
||
If refreshDeletes is TRUE, the new copy includes all changed entries
|
||
returned by the reissued Sync operation as well as all other entries
|
||
of the previous copy except those which were identified as having been
|
||
deleted from the content.
|
||
|
||
The client can, at some later time, re-poll for changes to this
|
||
synchronized shadow copy.
|
||
|
||
|
||
1.3.2. Listening for Changes (refreshAndPersist)
|
||
|
||
Polling for changes can be expensive in terms of server, client, and
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 5]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
network resources. The refreshAndPersist mode allows for active
|
||
updates of changed entries in the content.
|
||
|
||
By selecting the refreshAndPersist mode, the client requests the
|
||
server to send updates of entries that are changed after the the
|
||
initial refresh content is determined. Instead of sending a
|
||
searchResultDone message as described above, the server sends a Sync
|
||
Info message to the client indicating that refresh phase is complete
|
||
and then enters persist phase. After receipt of this Sync Info
|
||
message, the client will have a synchronized shadow copy as described
|
||
above.
|
||
|
||
The server may then send change notifications. For entries to be
|
||
added to the returned content, the server sends a searchResultEntry
|
||
(with attributes) with a Sync State control indicating state add. For
|
||
entries to be deleted from the content, the server sends a
|
||
searchResultEntry containing with no attributes and a Sync State
|
||
control indicating state delete. To modify entries in the return
|
||
content, the server sends a searchResultEntry (with attributes) with a
|
||
Sync State control indicating state modify. Upon modification of an
|
||
entry, all (modified or unmodified) attributes belonging to the
|
||
content are sent.
|
||
|
||
Note that renaming an entry of the DIT may cause an add state change
|
||
where the entry is renamed into the content, a delete state change
|
||
where the entry is renamed out of the content, and a modify state
|
||
change where the entry remains in the content. Also note that a
|
||
modification of an entry of the DIT may cause a add, delete, or modify
|
||
state change to the content.
|
||
|
||
Upon receipt of a change notification, the client updates its copy of
|
||
the content.
|
||
|
||
If the server desires to update the syncCookie during the persist
|
||
stage, it may include the syncCookie any Sync State control or Sync
|
||
Info message returned.
|
||
|
||
The operation persists until canceled [CANCEL] by the client or
|
||
terminated by the server. A Sync Done control may be attached to
|
||
searchResultDone message to provide a new syncCookie.
|
||
|
||
|
||
2. Elements of the Sync Operation
|
||
|
||
The Sync Operation is defined as an extension to the LDAP Search
|
||
Operation [RFC2251] where the directory user agent (DUA or client)
|
||
submits a SearchRequest message with a Sync Request control and the
|
||
directory system agent (DSA or server) responses with zero or more
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 6]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
SearchResultEntry messages, each with a Sync State control; zero or
|
||
more SearchResultReference messages, each with a Sync State control;
|
||
zero or more Sync Intermediate Response messages; and a
|
||
searchResultDone message with a Sync Done control.
|
||
|
||
To allow clients to discover support for this operation, servers
|
||
implementing this operation SHOULD publish the IANA-ASSIGNED-OID.1 as
|
||
a value of supportedControl root DSE attribute.
|
||
|
||
|
||
2.1 Common ASN.1 elements
|
||
|
||
2.1.1 syncUUID
|
||
|
||
The syncUUID is a notational convenience to indicate that, while the
|
||
syncUUID type is encoded as an OCTET STRING, its value is restricted
|
||
to the string representation of an Universally Unique Identifier
|
||
(UUID) defined in [UUID].
|
||
|
||
syncUUID ::= OCTET STRING
|
||
|
||
|
||
2.1.2 syncCookie
|
||
|
||
The syncCookie is a notational convenience to indicate that, while the
|
||
syncCookie type is encoded as an OCTET STRING, its value is an opaque
|
||
value containing information about the synchronization session and its
|
||
state. Generally, the session information would include a hash of the
|
||
operation parameters which the server requires not be changed; the
|
||
synchronization state information includes a commit (log) sequence
|
||
number, a change sequence number, or a time stamp; and a digital
|
||
signature for detection of tampering.
|
||
|
||
syncCookie ::= OCTET STRING
|
||
|
||
|
||
2.2 Sync Request Control
|
||
|
||
The Sync Request Control is an LDAP Control [RFC2251, Section 4.1.2]
|
||
where the controlType is the object identifier IANA-ASSIGNED-OID.1 and
|
||
the controlValue, an OCTET STRING, contains a BER-encoded
|
||
syncRequestValue. The criticality field is either TRUE or FALSE.
|
||
|
||
syncRequestValue ::= SEQUENCE {
|
||
mode ENUMERATED {
|
||
-- 0 unused
|
||
refreshOnly (1),
|
||
-- 2 reserved
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 7]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
refreshAndPersist (3)
|
||
},
|
||
cookie syncCookie OPTIONAL
|
||
}
|
||
|
||
The Sync Request Control is only applicable to the searchRequest
|
||
message.
|
||
|
||
|
||
2.3 Sync State Control
|
||
|
||
The Sync State Control is an LDAP Control [RFC2251, Section 4.1.2]
|
||
where the controlType is the object identifier IANA-ASSIGNED-OID.2 and
|
||
the controlValue, an OCTET STRING, contains a BER-encoded
|
||
syncStateValue. The criticality is FALSE.
|
||
|
||
syncStateValue ::= SEQUENCE {
|
||
state ENUMERATED {
|
||
present (0),
|
||
add (1),
|
||
modify (2),
|
||
delete (3)
|
||
},
|
||
entryUUID syncUUID,
|
||
cookie syncCookie OPTIONAL
|
||
}
|
||
|
||
The Sync State Control is only applicable to SearchResultEntry and
|
||
SearchResultReference messages.
|
||
|
||
|
||
2.4 Sync Done Control
|
||
|
||
The Sync Done Control is an LDAP Control [RFC2251, Section 4.1.2]
|
||
where the controlType is the object identifier IANA-ASSIGNED-OID.3 and
|
||
the controlValue contains a BER-encoded syncDoneValue. The
|
||
criticality is FALSE (and hence absent).
|
||
|
||
syncDoneValue ::= SEQUENCE {
|
||
cookie syncCookie OPTIONAL,
|
||
refreshDeletes BOOLEAN DEFAULT FALSE,
|
||
}
|
||
|
||
The Sync Done Control is only applicable to SearchResultDone message.
|
||
|
||
|
||
2.5 Sync Info Message
|
||
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 8]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
The Sync Info Message is an LDAP Intermediate Response Message
|
||
[LDAPIRM] where responseName is the object identifier
|
||
IANA-ASSIGNED-OID.4 and responseValue contains a BER-encoded
|
||
syncInfoValue. The criticality is FALSE (and hence absent).
|
||
|
||
syncInfoValue ::= CHOICE {
|
||
newcookie [0] syncCookie,
|
||
refreshDone [1] SEQUENCE {
|
||
cookie syncCookie OPTIONAL,
|
||
refreshDeletes BOOLEAN DEFAULT FALSE
|
||
}
|
||
}
|
||
|
||
|
||
2.6 Sync Result Codes
|
||
|
||
The following LDAP resultCodes [RFC2251] are defined:
|
||
|
||
syncRefreshRequired (IANA-ASSIGNED-CODE-0)
|
||
|
||
|
||
3. Content Synchronization
|
||
|
||
The Sync Operation is invoked by the client sending a searchRequest
|
||
message with a Sync Request Control.
|
||
|
||
The absence of a cookie indicates a request for initial content while
|
||
the presence of a cookie indicates a request for content update.
|
||
Synchronization Sessions are discussed in Section 3.1. Content
|
||
Determination is discussed in Section 3.2.
|
||
|
||
The mode is either refreshOnly or refreshAndPersist. The refreshOnly
|
||
and refreshAndPersist modes are discussed in Section 3.3 and 3.4,
|
||
respectively. The refreshOnly mode consists only of a refresh stage,
|
||
while the refreshAndPersist mode consists of a refresh stage and a
|
||
subsequent persist stage.
|
||
|
||
|
||
3.1. Synchronization Session
|
||
|
||
A sequence of Sync Operations where the last cookie returned by a
|
||
operation is provided by the client in the next operation are said to
|
||
belong to the same Synchronization Session.
|
||
|
||
The client MUST specify the same content controlling parameters (see
|
||
Section 3.5) in each Search Request of the session. The client SHOULD
|
||
also issue each Sync request of a session under the same
|
||
authentication and authorization associations with equivalent
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 9]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
integrity and confidential protections. If the server does not
|
||
recognize the request cookie or the request is made under different
|
||
associations or inequivalent protections, the server SHALL process the
|
||
request as if no cookie had been provided.
|
||
|
||
A Synchronization Session may span multiple LDAP sessions between the
|
||
client and the server. The client SHOULD issue each Sync request of a
|
||
session to the same server.
|
||
|
||
|
||
3.2. Content Determination
|
||
|
||
The content to be provided is determined by parameters of the Search
|
||
Request, as described in [RFC2251], and possibly other controls. The
|
||
same content SHOULD be used in each Sync request of a session. If
|
||
different content is requested and the server is unwilling or unable
|
||
to process the request, the server SHALL process the request as if no
|
||
cookie had been provided.
|
||
|
||
The content may not necessarily include all entries or references
|
||
which would be returned by a normal search operation nor, for those
|
||
entries included, not all attributes returned by a normal search.
|
||
Where the server is unwilling or unable to provide synchronization for
|
||
an attribute for a set of entries, the server MUST treat all filter
|
||
components matching against these attribute as Undefined and MUST NOT
|
||
return the attribute in searchResultEntry responses.
|
||
|
||
Servers SHOULD support synchronization for all non-collective
|
||
user-applications attributes for all entries.
|
||
|
||
The server may also return continuation references to other servers or
|
||
to itself. The latter is allowed as the server may partition the
|
||
entries it holds into separate synchronization contexts.
|
||
|
||
The client may chase all or some of these continuations, each in a
|
||
separate LDAP session.
|
||
|
||
|
||
3.3. refreshOnly mode
|
||
|
||
A Sync request with mode refreshOnly and no cookie is a poll for
|
||
initial content. A Sync request with mode refreshOnly and cookie is a
|
||
poll for content update.
|
||
|
||
|
||
3.3.1. Initial Content Poll
|
||
|
||
Upon receipt of the request, the server provides the initial content
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 10]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
using a set of zero or more searchResultEntry and
|
||
searchResultReference messages followed by a searchResultDone message.
|
||
|
||
Each searchResultEntry message SHALL include a Sync State control of
|
||
state add, entryUUID containing the entry's UUID, and no cookie. Each
|
||
searchResultReference message SHALL include a Sync State control of
|
||
state add, entryUUID containing the UUID associated with the reference
|
||
(normally the referral [RFC3296] object's entryUUID), and no cookie.
|
||
The searchResultDone message SHALL include a Sync Done control. The
|
||
refreshDeletes SHALL be FALSE.
|
||
|
||
A resultCode value of success indicates the operation successfully
|
||
completed. Otherwise, the result code indicates the nature of
|
||
failure.
|
||
|
||
If the operation is successful, a cookie SHOULD be returned for use in
|
||
subsequent Sync operations.
|
||
|
||
|
||
3.3.2. Content Update Poll
|
||
|
||
Upon receipt of the request the server provides the content refresh
|
||
using a set of zero or more searchResultEntry and
|
||
searchResultReference messages followed by a searchResultDone message.
|
||
|
||
The server is REQUIRED to either:
|
||
a) provide the sequence of messages necessary for eventual
|
||
convergence of the client's copy of the content to the server's
|
||
copy,
|
||
|
||
b) treat the request as an initial content request (e.g., ignore
|
||
the cookie),
|
||
|
||
c) indicate that convergence is not possible by returning
|
||
syncRefreshRequired,
|
||
|
||
d) return a resultCode other than success or syncRefreshRequired.
|
||
|
||
For each entry or reference added to the content or was changed since
|
||
the previous Sync operation indicated by the cookie, the server
|
||
returns a searchResultEntry or searchResultReference message,
|
||
respectively, each with a Sync State cookie of state add, entryUUID
|
||
containing the UUID of the entry or reference, and no cookie. Each
|
||
searchResultEntry message represents the current state of a changed
|
||
entry. Each SearchResultReference message represents the current
|
||
state of a changed reference.
|
||
|
||
For each entry which has not been changed since the previous Sync
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 11]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
operation, a searchResultEntry is returned whose objectName reflects
|
||
the entry's current DN, the attributes field is empty, and a Sync
|
||
State control of state present, entryUUID containing the UUID of the
|
||
entry, and no cookie. For each reference which has not been changed
|
||
since the previous Sync operation, a searchResultReference containing
|
||
an empty SEQUENCE OF LDAPURL is returned with a Sync State control of
|
||
state present, entryUUID containing the UUID of the entry, and no
|
||
cookie. No messages are sent for entries or references which are no
|
||
longer in content.
|
||
|
||
As an alternative to sending messages for each entry and reference
|
||
which has not been changed, the server may instead return the
|
||
following. For each entry no longer in content, return a
|
||
searchResultEntry whose objectName reflects a past DN of the entry or
|
||
is empty, the attributes field is empty, and a Sync State control of
|
||
state delete, entryUUID containing the UUID of the deleted entry, and
|
||
no cookie. For each reference no longer in content, a
|
||
searchResultReference containing an empty SEQUENCE OF LDAPURL is
|
||
returned with a a Sync State control of state delete, entryUUID
|
||
containing the UUID of the deleted reference, and no cookie.
|
||
|
||
A resultCode value of success indicates the operation successfully
|
||
completed. Otherwise, the result code indicates the nature of
|
||
failure.
|
||
|
||
If the operation is successful, a cookie SHOULD be returned for use in
|
||
subsequent Sync operations.
|
||
|
||
|
||
3.4. refreshAndPersist mode
|
||
|
||
A Sync request with mode refreshAndPersist asks for initial content or
|
||
content update (during the refresh stage) followed by change
|
||
notifications (during the persist stage).
|
||
|
||
|
||
3.4.1. refresh stage
|
||
|
||
The content refresh is provided as described in Section 3.3 excepting
|
||
that successful completion of content refresh is indicated by sending
|
||
a Sync Info with state refreshDone message instead of a
|
||
SearchResultDone message with resultCode success. A cookie SHOULD be
|
||
returned for use in subsequent Sync operations.
|
||
|
||
|
||
3.4.2. persist stage
|
||
|
||
Change notifications are provided during the persist stage.
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 12]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
As updates are made to the DIT the server notifies the client of
|
||
changes to the content. DIT updates may cause entries references to
|
||
be added to the content, deleted from the content, or modify entries
|
||
in the content. DIT updates may also cause references to be added,
|
||
deleted, or modified within the content.
|
||
|
||
Where DIT updates cause an entry to be added to the content, the
|
||
server provides a searchResultEntry message which represents the entry
|
||
as it appears in the content. The message SHALL include a Sync State
|
||
control with state of add, entryUUID containing the entry's UUID, and
|
||
an optional cookie.
|
||
|
||
Where DIT updates cause a reference to be added to the content, the
|
||
server provides a searchResultReference message which represents the
|
||
reference in the content. The message SHALL include a Sync State
|
||
control with state of add, entryUUID containing the UUID associated
|
||
with the reference, and an optional cookie.
|
||
|
||
Where DIT updates cause an entry to be modified in the content, the
|
||
server provides a searchResultEntry message which represents the entry
|
||
as it appears in the content. The message SHALL include a Sync State
|
||
control with state of modify, entryUUID containing the entry's UUID,
|
||
and an optional cookie.
|
||
|
||
Where DIT updates cause a reference to be modified in the content, the
|
||
server provides a searchResultEntry message which represents the
|
||
reference in the content. The message SHALL include a Sync State
|
||
control with state of modify, entryUUID containing the UUID associated
|
||
with the reference, and an optional cookie.
|
||
|
||
Where DIT updates cause an entry to be deleted from the content, the
|
||
server provides a searchResultReference message with an empty SEQUENCE
|
||
OF LDAPURL. The message SHALL include a Sync State control with state
|
||
of delete, entryUUID containing the UUID associated with the
|
||
reference, and an optional cookie.
|
||
|
||
Where DIT updates cause a reference to be deleted from the content,
|
||
the server provides a searchResultEntry message with no attributes.
|
||
The message SHALL include a Sync State control with state of delete,
|
||
entryUUID containing the entry's UUID, and an optional cookie.
|
||
|
||
With each of these messages, the server may provide a new cookie to be
|
||
used in subsequent Sync operations. Additionally, the server may also
|
||
return Sync Info messages of choice newCookie to provide a new cookie.
|
||
The client SHOULD use newest (last) cookie it received from the server
|
||
in subsequent Sync operations.
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 13]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
3.5. Search Request Parameters
|
||
|
||
As stated in Section 3.1, the client SHOULD specify the same content
|
||
controlling parameters (see Section 3.5) in each Search Request of the
|
||
session. All fields of the SearchRequest message are considered
|
||
content controlling parameters except for sizeLimit and timeLimit.
|
||
|
||
|
||
3.5.1. baseObject Issues
|
||
|
||
As with the normal search operation, the refresh and persist phases
|
||
are not isolated from DIT changes. It is possible that the entry
|
||
referred to be the baseObject be deleted, renamed, or moved. It is
|
||
also possible that alias object used in finding the entry referred to
|
||
by the baseObject is changed such that the baseObject refers to a
|
||
different entry.
|
||
|
||
If the DIT is updated during processing of the Sync Operation in a
|
||
manner that causes the baseObject to no longer refers to any entry or
|
||
changes which entry the baseObject refers to, the server SHALL return
|
||
an appropriate non-success result code such as noSuchObject,
|
||
aliasProblem, aliasDereferencingProblem, referral, or
|
||
syncRefreshRequired.
|
||
|
||
|
||
3.5.2. derefAliases Issues
|
||
|
||
This operation does not support alias dereferencing during searching.
|
||
The client SHALL specify neverDerefAliases or derefFindingBaseObj for
|
||
the searchRequest derefAliases parameter. The server SHALL treat
|
||
other values (e.g., derefInSearching, derefAlways) as protocol errors.
|
||
|
||
|
||
3.5.3. sizeLimit Issues
|
||
|
||
The sizeLimit applies only to entries (regardless of their syncState)
|
||
returned during refreshOnly processing or the refresh stage of the
|
||
refreshAndPersist processing.
|
||
|
||
|
||
3.5.4. timeLimit Issues
|
||
|
||
For a refreshOnly Sync operation, the timeLimit applies to the whole
|
||
operation. For a refreshAndPersist operation, the timeLimit applies
|
||
to processing up to and including generating the Sync Info with state
|
||
refreshDone message.
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 14]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
3.5.5. filter Issues
|
||
|
||
The client SHOULD avoid filter assertions which apply to values of
|
||
attributes likely to be considered by the server as holding meta-
|
||
information. See section 4.
|
||
|
||
|
||
3.6. objectName Issues
|
||
|
||
The Sync operation uses entryUUID values provided in the Sync State
|
||
control as the primary keys to entries. The client MUST use these
|
||
entryUUIDs to correlate synchronization messages.
|
||
|
||
In some circumstances the DN returned may not reflect the entry's
|
||
current DN. In particular, when the entry is being deleted from the
|
||
content, the server MAY provide an empty DN if the server does not
|
||
wish to disclose the entry's current DN (or, if deleted from the DIT,
|
||
the entry's last DN).
|
||
|
||
It should also be noted that the entry's DN may be viewed as meta
|
||
information (see section 4.1).
|
||
|
||
|
||
3.7. Canceling the Sync Operation
|
||
|
||
Servers SHOULD implement the LDAP Cancel [CANCEL] operation and
|
||
support cancellation of outstanding Sync operations as described here.
|
||
|
||
To cancel an outstanding Sync Operation, the client SHOULD issue a
|
||
Cancel operation [CANCEL]....
|
||
|
||
|
||
3.7. Refresh Required
|
||
|
||
In order to achieve the eventual-convergent synchronization, the
|
||
server may terminate the Sync operation in refresh or persist stage by
|
||
returning a syncRefreshRequired resultCode to the client. The client
|
||
may then request a full reload (e.g., no cookie) instead of
|
||
incremental synchronization in order to obtain a new copy of the
|
||
content. In case that the client issues incremental synchronization
|
||
requests between the issue of a syncRefreshRequired and that of a full
|
||
reload, the server should send a syncRefreshRequired response again,
|
||
but the client may receive one or more searchResultEntry responses
|
||
before it receives the syncRefreshRequired response.
|
||
|
||
The server may also choose to provide a full copy in the refresh stage
|
||
(e.g., ignore the cookie) instead of providing an incremental refresh
|
||
in order to achieve the eventual convergence.
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 15]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
In the case of persist stage Sync, the server returns the resultCode
|
||
of syncRefreshRequired to the client to indicate that the client needs
|
||
to issue a full reload operation (e.g., no cookie) in order to obtain
|
||
a synchronized copy of the content.
|
||
|
||
The server may also return syncRefreshRequired if it determines that a
|
||
refresh would be more efficient than sending all the messages required
|
||
for convergence.
|
||
|
||
|
||
3.8. Chattiness Considerations
|
||
|
||
The server MUST ensure that the number of entry messages generated to
|
||
refresh the client content does not exceed the number of entries
|
||
presently in the content. While there is no requirement for servers
|
||
to maintain historical information, if the server has sufficient
|
||
history to allow it to reliably determine which entries in the prior
|
||
shadow copy are no longer present in the content and the number of
|
||
such entries is less than equal the number of unchanged entries, the
|
||
server SHOULD generate delete entry messages instead of present entry
|
||
messages (see Section 3.3.2).
|
||
|
||
The server SHOULD maintain enough (current or historical) state
|
||
information (such as a context-wide last modify time stamp), to
|
||
determine that no changes were made in the context since the content
|
||
to refresh was provided and, and when no changes were made, generate
|
||
zero delete entry messages instead of present messages.
|
||
|
||
The server implementor should also consider chattiness issues which
|
||
span multiple Sync operations of a session. As noted in Section 3.7,
|
||
the server may return syncRefreshRequired if it determines that a
|
||
refresh would be more efficient than continuing under the current
|
||
operation.
|
||
|
||
The server SHOULD transfer a new cookie frequently to avoid having to
|
||
transfer information already provided to the client. Even where DIT
|
||
changes do not cause content synchronization changes to be
|
||
transferred, it may be advantageous to provide a new cookie using a
|
||
Sync Info message. However, the server SHOULD avoid overloading the
|
||
client or network with Sync Info messages.
|
||
|
||
During persist mode, the server SHOULD coalesce multiple outstanding
|
||
messages updating the same entry. The server MAY delay generation of
|
||
an entry update in anticipation of subsequent changes to that entry
|
||
which could be coalesced. The length of the delay should be long
|
||
enough to allow coalescing of update requests issued back to back but
|
||
short enough that the transient inconsistency induced by the delay is
|
||
corrected in a timely manner.
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 16]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
4. Meta Information Considerations
|
||
|
||
4.1. Entry DN
|
||
|
||
As an entry's DN is constructed from its relative DN (RDN) and the
|
||
entry's parent's DN, it is often viewed as meta information.
|
||
|
||
While renaming or moving a superior to an entry causes the entry's DN
|
||
to change, that change SHOULD NOT, by itself, cause synchronization
|
||
message to be sent for that entry. However, if renaming or moving of
|
||
a superior could cause the entry to added or deleted from the content
|
||
and, if so, appropriate synchronization messages should be generated
|
||
to indicate this to the client.
|
||
|
||
Where a server treats the entry's DN as meta information, the server
|
||
SHALL either
|
||
- evaluate all MatchingRuleAssertions to TRUE if matching a value
|
||
of an attribute of the entry and otherwise Undefined, or
|
||
- evaluate all MatchingRuleAssertion with dnAttributes of TRUE
|
||
as Undefined.
|
||
|
||
The latter choice is offered for ease of server implementation.
|
||
|
||
|
||
4.2. Operational Attributes
|
||
|
||
Where values of an operational attribute is determined by values not
|
||
held as part of the entry it appears in, the operational attribute
|
||
SHOULD NOT support synchronization of that operational attribute.
|
||
|
||
For example, in servers which implement X.501 subschema model [X.501],
|
||
servers should not support synchronization of the subschemaSubentry
|
||
attribute as its value is determined by values held and administrated
|
||
in subschema subentries.
|
||
|
||
For a counter example, servers which implement aliases
|
||
[RFC2256][X.501] can support synchronization of the aliasedObjectName
|
||
attribute as its values are held and administrated as part of the
|
||
alias entries.
|
||
|
||
Servers SHOULD support synchronization of the following operational
|
||
attributes: createTimestamp, modifyTimestamp, creatorsName,
|
||
modifiersName [RFC2252]. Servers MAY support synchronization of other
|
||
operational attributes. Synchronization of operational attributes is
|
||
discussed in Section 4.1.
|
||
|
||
|
||
4.3. Collective Attributes
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 17]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
A collective attribute is "a user attribute whose values are the same
|
||
for each member of an entry collection" [X.501]. Use of collective
|
||
attributes in LDAP is detailed in [COLLECTIVE].
|
||
|
||
Modification of a collective attribute generally affects the content
|
||
of multiple entries, each a member of the collection. It is
|
||
inefficient to include values of collective attributes visible in
|
||
entries of the collection, as a single modification of a collective
|
||
attribute require transmission of multiple SearchResultEntry (one of
|
||
each entry of the collection which the modification affected) to be
|
||
transmitted.
|
||
|
||
Servers SHOULD NOT synchronize collective attributes appearing in
|
||
entries of any collection. Servers MAY support synchronization of
|
||
collective attributes appearing in collective attribute subentries.
|
||
|
||
|
||
4.4. Access and other administrative controls
|
||
|
||
Entries are commonly subject to access and other administrative
|
||
controls. While portions of the policy information governing a
|
||
particular entry may be held in the entry, policy information is often
|
||
held elsewhere (in superior entries, in subentries, in the root DSE,
|
||
in configuration files, ...). Because of this, changes to policy
|
||
information make it difficult to ensure eventual convergence during
|
||
incremental synchronization.
|
||
|
||
Where it is impractical or infeasible to generate content changes
|
||
resulting from a change to policy information, servers may opt to
|
||
return syncRefreshRequired or treat the Sync Operation as an initial
|
||
content request (e.g., ignore the cookie).
|
||
|
||
|
||
5. Interaction with other controls
|
||
|
||
The Sync Operation may be used with:
|
||
|
||
- ManageDsaIT Control [RFC3296]
|
||
- Subentries Control [SUBENTRY]
|
||
|
||
as described below. The Sync operation may be used with other LDAP
|
||
extensions as detailed in other documents.
|
||
|
||
|
||
5.1. ManageDsaIT control
|
||
|
||
The ManageDsaIT control [RFC3296] indicates that the operation acts
|
||
upon the DSA Information Tree and causes referral and other special
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 18]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
objects to be treated as normal objects with respect to the operation.
|
||
|
||
|
||
5.2. Subentries control
|
||
|
||
The Subentries control is used with the search operation "to control
|
||
the visibility of entries and subentries which are within scope"
|
||
[SUBENTRY]. When used with the Sync Operation, the subentries control
|
||
and other factors (search scope, filter, etc.) are used to determining
|
||
whether an entry or subentry appear in the content or not.
|
||
|
||
|
||
6. Security Considerations
|
||
|
||
In order to maintain a synchronized copy of the content, a client is
|
||
to delete information from its copy of the content as described above.
|
||
However, the client may maintain knowledge of information disclosed to
|
||
it by the server separate from its copy of the content used for
|
||
synchronization. Management of this knowledge is beyond the scope of
|
||
this document.
|
||
|
||
While the information provided by a series of refreshOnly Sync
|
||
operations is similar to that provided by a series of Search
|
||
operations, persist stage may disclose additional information. A
|
||
client may be able to discern information about the particular
|
||
sequence of update operations which caused content change.
|
||
|
||
Implementors should take precautions against malicious cookie content,
|
||
including malformed cookies or valid cookies used with different
|
||
security associations and/or protections in attempt to obtain
|
||
unauthorized access to information.
|
||
|
||
The Sync operation may be the target of denial of service attacks.
|
||
Implementors should provide safeguards to ensure these mechanisms are
|
||
not abused. Servers may place access control or other restrictions
|
||
upon the use of this operation.
|
||
|
||
Implementors of this (or any) LDAP extension should be familiar with
|
||
general LDAP security considerations [RFC3377].
|
||
|
||
|
||
7. IANA Considerations
|
||
|
||
Registration of the following values is requested.
|
||
|
||
|
||
7.1. Object Identifier
|
||
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 19]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
It is requested that IANA register upon Standards Action an LDAP
|
||
Object Identifier to identify elements of the LDAP Content
|
||
Synchronization Operation as defined in this document.
|
||
|
||
Subject: Request for LDAP Object Identifier Registration
|
||
Person & email address to contact for further information:
|
||
Kurt Zeilenga <kurt@OpenLDAP.org>
|
||
Specification: RFCXXXX
|
||
Author/Change Controller: IESG
|
||
Comments:
|
||
Identifies elements of the LDAP Content Synchronization Operation
|
||
|
||
|
||
7.2. LDAP Protocol Mechanism
|
||
|
||
It is requested that IANA register upon Standards Action the LDAP
|
||
Protocol Mechanism described in this document.
|
||
|
||
Subject: Request for LDAP Protocol Mechanism Registration
|
||
Object Identifier: IANA-ASSIGNED-OID
|
||
Description: LDAP Content Synchronization Control
|
||
Person & email address to contact for further information:
|
||
Kurt Zeilenga <kurt@openldap.org>
|
||
Usage: Control
|
||
Specification: RFCXXXX
|
||
Author/Change Controller: IESG
|
||
Comments: none
|
||
|
||
|
||
7.3. LDAP Result Codes
|
||
|
||
It is requested that IANA register upon Standards Action the LDAP
|
||
Result Codes described in this document.
|
||
|
||
Subject: LDAP Result Code Registration
|
||
Person & email address to contact for further information:
|
||
Kurt Zeilenga <kurt@OpenLDAP.org>
|
||
Result Code Name: syncRefreshRequired (IANA-ASSIGNED-CODE-0)
|
||
Specification: RFCXXXX
|
||
Author/Change Controller: IESG
|
||
Comments: none
|
||
|
||
|
||
8. Acknowledgment
|
||
|
||
This work borrows significantly from the LDAP Client Update Protocol
|
||
[LCUP]. This work also benefited Persistent Search [PSEARCH],
|
||
Triggered Search [TSEARCH], and Directory Synchronization [DIRSYNC]
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 20]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
efforts. This work also borrows from "Lightweight Directory Access
|
||
Protocol (v3)" [RFC2251].
|
||
|
||
|
||
9. Normative References
|
||
|
||
[RFC2119] S. Bradner, "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
|
||
|
||
[RFC2251] M. Wahl, T. Howes, S. Kille, "Lightweight Directory
|
||
Access Protocol (v3)", RFC 2251, December 1997.
|
||
|
||
[RFC2252] M. Wahl, A. Coulbeck, T. Howes, S. Kille, "Lightweight
|
||
Directory Access Protocol (v3): Attribute Syntax
|
||
Definitions", RFC 2252, December 1997.
|
||
|
||
[RFC2256] M. Wahl, "A Summary of the X.500(96) User Schema for use
|
||
with LDAPv3", RFC 2256, December 1997.
|
||
|
||
[RFC2830] J. Hodges, R. Morgan, and M. Wahl, "Lightweight Directory
|
||
Access Protocol (v3): Extension for Transport Layer
|
||
Security", RFC 2830, May 2000.
|
||
|
||
[RFC3296] K. Zeilenga, "Named Subordinate References in Lightweight
|
||
Directory Access Protocol (LDAP) Directories", RFC 3296,
|
||
July 2002.
|
||
|
||
[RFC3377] J. Hodges, R.L. Morgan, "Lightweight Directory Access
|
||
Protocol (v3): Technical Specification", RFC 3377,
|
||
September 2002.
|
||
|
||
[LDAPIRM] R. Harrison, K. Zeilenga, "LDAP Intermediate Response
|
||
Message", draft-rharrison-ldap-intermediate-resp-xx.txt
|
||
(a work in progress).
|
||
|
||
[SUBENTRY] K. Zeilenga, S. Legg, "Subentries in LDAP",
|
||
draft-zeilenga-ldap-subentry-xx.txt, a work in progress.
|
||
|
||
[X.680] ITU-T, "Abstract Syntax Notation One (ASN.1) -
|
||
Specification of Basic Notation", X.680, 1994.
|
||
|
||
[X.690] ITU-T, "Specification of ASN.1 encoding rules: Basic,
|
||
Canonical, and Distinguished Encoding Rules", X.690,
|
||
1994.
|
||
|
||
[CANCEL] K. Zeilenga, "LDAP Cancel Extended Operation",
|
||
draft-zeilenga-ldap-cancel-xx.txt, a work in progress.
|
||
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 21]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
[UUID] International Organization for Standardization (ISO),
|
||
"Information technology - Open Systems Interconnection -
|
||
Remote Procedure Call", ISO/IEC 11578:1996.
|
||
|
||
|
||
10. Informative References
|
||
|
||
[RFC3383] K. Zeilenga, "IANA Considerations for LDAP", BCP 64 (also
|
||
RFC 3383), September 2002.
|
||
|
||
[X.500] ITU-T Rec. X.500, "The Directory: Overview of Concepts,
|
||
Models and Service", 1993.
|
||
|
||
[X.511] ITU, "The Directory: Abstract Service Definition", ITU-T
|
||
Rec. X.511, 1993.
|
||
|
||
[X.525] ITU, "The Directory: Replication", ITU-T Rec. X.525,
|
||
1993.
|
||
|
||
[COLLECTIVE] K. Zeilenga, "Collective Attributes in LDAP",
|
||
draft-zeilenga-ldap-collective-xx.txt, a work in
|
||
progress.
|
||
|
||
[DIRSYNC] M. Armijo, "Microsoft LDAP Control for Directory
|
||
Synchronization", draft-armijo-ldap-dirsync-xx.txt, a
|
||
work in progress.
|
||
|
||
[LCUP] R. Megginson, et. al., "LDAP Client Update Protocol",
|
||
draft-ietf-ldup-lcup-xx.txt, a work in progress.
|
||
|
||
[PSEARCH] M. Smith, et. al., "Persistent Search: A Simple LDAP
|
||
Change Notification Mechanism",
|
||
draft-ietf-ldapext-psearch-xx.txt, a work in progress.
|
||
|
||
[TSEARCH] M. Wahl, "LDAPv3 Triggered Search Control",
|
||
draft-ietf-ldapext-trigger-xx.txt, a work in progress.
|
||
|
||
[UUID-CSN] K. Zeilenga, J. Choi, "LDAP UUID and CSN Operational
|
||
Attributes", draft-zeilenga-ldap-uuid-csn-xx.txt, a work
|
||
(not yet) in progress.
|
||
|
||
|
||
10. Authors' Address
|
||
|
||
Kurt D. Zeilenga
|
||
OpenLDAP Foundation
|
||
<Kurt@OpenLDAP.org>
|
||
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 22]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
Jonghyuk Choi
|
||
IBM Corporation
|
||
<jongchoi@us.ibm.com>
|
||
|
||
|
||
Full Copyright
|
||
|
||
Copyright 2003, The Internet Society. All Rights Reserved.
|
||
|
||
This document and translations of it may be copied and furnished to
|
||
others, and derivative works that comment on or otherwise explain it
|
||
or assist in its implementation may be prepared, copied, published and
|
||
distributed, in whole or in part, without restriction of any kind,
|
||
provided that the above copyright notice and this paragraph are
|
||
included on all such copies and derivative works. However, this
|
||
document itself may not be modified in any way, such as by removing
|
||
the copyright notice or references to the Internet Society or other
|
||
Internet organizations, except as needed for the purpose of
|
||
developing Internet standards in which case the procedures for
|
||
copyrights defined in the Internet Standards process must be followed,
|
||
or as required to translate it into languages other than English.
|
||
|
||
The limited permissions granted above are perpetual and will not be
|
||
revoked by the Internet Society or its successors or assigns.
|
||
|
||
This document and the information contained herein is provided on an
|
||
"AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
|
||
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
|
||
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
|
||
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
|
||
Appendix - CSN-based Implementation Considerations
|
||
|
||
This appendix is provided for informational purposes only, it is not a
|
||
normative part of the LDAP Content Synchronization Operation's
|
||
technical specification.
|
||
|
||
This appendix discusses some of the implementation considerations
|
||
associated with a Change Sequence Number [UUID-CSN] based approaches
|
||
to supporting the LDAP Content Synchronization Operation.
|
||
|
||
Change Sequence Number-based approaches are targetted for use in
|
||
servers which do not maintain historical information (e.g., change
|
||
logs, state snapshots, etc.) about changes made to the Directory and
|
||
hence, must rely on current directory state and minimal
|
||
synchronization state information embedded in Sync Cookie. Servers
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 23]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
which maintain historical information should consider an other
|
||
approaches which exploit the historical information.
|
||
|
||
A Change Sequence Number is, effectively a time stamp has sufficient
|
||
granularity to ensure that relationship in time of two updates to the
|
||
same object can be determined. Change Sequence Numbers are not to be
|
||
confused with Commit Sequence Numbers or Commit Log Record Numbers. A
|
||
Commit Sequence Number allow one to determine how to two commits (to
|
||
the same object or different objects) relate to each other in time.
|
||
Change Sequence Number associated with different entries may be
|
||
committed out of order. In the remainder of this Appendix, the term
|
||
CSN refers to a Change Sequence Number.
|
||
|
||
In these approaches, the server not only maintains an entry CSN
|
||
operational attribute for each directory entry (as discussed in [UUID-
|
||
CSN], but maintains a value which we will call the context CSN. The
|
||
context CSN is the greatest committed entry CSN which is not greater
|
||
than any outstanding entry CSNs for all entries in a directory
|
||
context. The values of context CSN are used in syncCookie values as
|
||
synchronization state indicators.
|
||
|
||
As search operations are not isolated from individual directory update
|
||
operations and individual update operations cannot be assumed to be
|
||
serialized, one cannot assume that the returned content incorporates
|
||
all relevant changes whose change sequence number is less than or
|
||
equal to the greatest entry CSN in the content. The content
|
||
incorporates all the relevant changes whose change sequence number is
|
||
less than or equal to context CSN before search processing. The
|
||
content may also incorporate any subset of the the changes whose
|
||
change sequence number is greater than context CSN before search
|
||
processing but less than or equal to the context CSN after search
|
||
processing. The content does not incorporate any of the changes whose
|
||
CSN is greater than the context CSN after search processing.
|
||
|
||
A simple server implementation could use value of the context CSN
|
||
before search processing to indicate state. Such an implementation
|
||
would embed this value into each SyncCookie returned. We'll call this
|
||
the cookie CSN. When a refresh was requested, the server would simply
|
||
entry "update" messages for all entries in the content whose CSN is
|
||
greater than the cookie CSN and entry "present" messages for all other
|
||
entries in the content. However, if the current context CSN is same
|
||
as the cookie CSN, the server should instead generate zero "updates",
|
||
zero "delete" messages and indicate refreshDeletes of TRUE as the
|
||
directory has not changed.
|
||
|
||
The implementation should also consider the impact of changes to meta
|
||
information, such as access controls, which affects content
|
||
determination. One approach is for the server to maintain a context
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 24]
|
||
|
||
INTERNET-DRAFT draft-zeilenga-ldup-sync-02 5 May 2003
|
||
|
||
|
||
wide meta information CSN or meta CSN. This meta CSN would be updated
|
||
whenever meta information affecting content determination was changed.
|
||
If the value of the meta CSN is greater than cookie CSN, the server
|
||
should ignore the cookie and treat the request as an initial request
|
||
for content.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga LDAP Content Sync Operation [Page 25]
|
||
|