mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-27 03:20:22 +08:00
450 lines
14 KiB
Plaintext
450 lines
14 KiB
Plaintext
|
||
|
||
|
||
|
||
Change Record Object Class Definition Gordon Good
|
||
INTERNET-DRAFT Netscape Communications
|
||
11 March 1998
|
||
|
||
Definition of an Object Class to Hold LDAP Change Records
|
||
Filename: draft-good-ldap-changelog-00.txt
|
||
|
||
Status of this Memo
|
||
|
||
This document is an Internet-Draft. 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.''
|
||
|
||
To learn the current status of any Internet-Draft, please check
|
||
the ``1id-abstracts.txt'' listing contained in the Internet-
|
||
Drafts Shadow Directories on ds.internic.net (US East Coast),
|
||
nic.nordu.net (Europe), ftp.isi.edu (US West Coast), or
|
||
munnari.oz.au (Pacific Rim).
|
||
|
||
This Internet Draft expires October 1st, 1998.
|
||
|
||
|
||
|
||
Abstract
|
||
|
||
In order to support more flexible replication methods, it is
|
||
desirable to specify some manner in which an LDAP client may retrieve
|
||
a set of changes which have been applied to an LDAP server's
|
||
database. The client, which may be another LDAP server, may then
|
||
choose to update its own replicated copy of the data. This document
|
||
specifies an object class which may be used to represent changes
|
||
applied to an LDAP server. It also specifies a method for
|
||
discovering the location of the container object which holds these
|
||
change records, so that clients and servers have a common rendezvous
|
||
point for this information.
|
||
|
||
|
||
|
||
Background and Intended Usage
|
||
|
||
This document describes an objectclass which can be used to represent
|
||
|
||
|
||
|
||
Good March 11, 1998 [Page 1]
|
||
|
||
INTERNET-DRAFT Change Record Object Class 11 March 1998
|
||
|
||
|
||
changes which have been applied to a directory server. It also
|
||
suggests a common location for a container which holds these objects.
|
||
A client may update its local copy of directory information by
|
||
reading the entries within this container, and applying the changes
|
||
to its local database.
|
||
|
||
The key words "MUST", "MAY", and "SHOULD" used in this document are
|
||
to be interpreted as described in [3].
|
||
|
||
New Attribute Types Used in the changeLogEntry Object Class
|
||
|
||
( 2.16.840.1.113730.3.1.5
|
||
NAME 'changeNumber'
|
||
DESC 'a number which uniquely identifies a change made to a
|
||
directory entry'
|
||
SYNTAX 'INTEGER'
|
||
EQUALITY 'integerMatch'
|
||
ORDERING 'integerOrderingMatch' )
|
||
|
||
( 2.16.840.1.113730.3.1.6
|
||
NAME 'targetDN'
|
||
DESC 'the DN of the entry which was modified'
|
||
EQUALITY distinguishedNameMatch
|
||
SYNTAX 'DN' )
|
||
|
||
( 2.16.840.1.113730.3.1.7
|
||
NAME 'changeType'
|
||
DESC 'the type of change made to an entry'
|
||
EQUALITY caseIgnoreMatch
|
||
SYNTAX 'DirectoryString' )
|
||
|
||
( 2.16.840.1.113730.3.1.8
|
||
NAME 'changes'
|
||
DESC 'a set of changes to apply to an entry'
|
||
SYNTAX 'OctetString' )
|
||
|
||
( 2.16.840.1.113730.3.1.9
|
||
NAME 'newRDN'
|
||
DESC 'the new RDN of an entry which is the target of a
|
||
modrdn operation'
|
||
EQUALITY distinguishedNameMatch
|
||
SYNTAX 'DN' )
|
||
|
||
( 2.16.840.1.113730.3.1.10
|
||
NAME 'deleteOldRDN'
|
||
DESC 'a flag which indicates if the old RDN should be retained
|
||
as an attribute of the entry'
|
||
EQUALITY booleanMatch
|
||
|
||
|
||
|
||
Good March 11, 1998 [Page 2]
|
||
|
||
INTERNET-DRAFT Change Record Object Class 11 March 1998
|
||
|
||
|
||
SYNTAX 'BOOLEAN' )
|
||
|
||
( 2.16.840.1.113730.3.1.11
|
||
NAME 'newSuperior'
|
||
DESC 'the new parent of an entry which is the target of a
|
||
moddn operation'
|
||
EQUALITY distinguishedNameMatch
|
||
SYNTAX 'DN' )
|
||
|
||
|
||
Schema Definition of the changeLogEntry Object Class
|
||
|
||
( 2.16.840.1.113730.3.2.1
|
||
NAME 'changeLogEntry'
|
||
SUP top
|
||
STRUCTURAL
|
||
MUST (
|
||
changeNumber $ targetDN $ changeType
|
||
)
|
||
MAY (
|
||
changes $ newRDN $ deleteOldRDN $ newSuperior
|
||
)
|
||
)
|
||
|
||
|
||
|
||
Discussion of changeLogEntry Attributes:
|
||
|
||
changeNumber: the change number, as assigned by the supplier. This
|
||
integer MUST strictly increase as new entries are added, and must
|
||
always be unique within a given server. Syntax: INTEGER
|
||
|
||
targetdn: the distinguished name of the entry which was added,
|
||
modified or deleted. In the case of a modrdn operation, the targetdn
|
||
gives the DN of the entry before it was modified. Syntax: DN
|
||
|
||
changeType: the type of change. One of: "add", "delete", "modify",
|
||
"modrdn". Later RFCs may define additional values for changeType.
|
||
Syntax: DirectoryString
|
||
|
||
changes: the changes which were made to the directory server. These
|
||
changes are in LDIF format, which is described in [1].
|
||
Syntax: OctetString
|
||
|
||
newRDN: the new RDN (Relative Distinguished Name) of the entry, if the
|
||
changeType is "modrdn". If the changeType attribute does not have the
|
||
value "modrdn", then there should be no values contained in the newRDN
|
||
attribute.
|
||
|
||
|
||
|
||
Good March 11, 1998 [Page 3]
|
||
|
||
INTERNET-DRAFT Change Record Object Class 11 March 1998
|
||
|
||
|
||
Syntax: DN
|
||
|
||
deleteOldRDN: a flag which tells whether the old RDN of the entry
|
||
should be retained as a distinguished attribute of the entry, or
|
||
should be deleted. A value of "FALSE" indicates that the RDN should be
|
||
retained as a distinguished attribute, and a value of "TRUE" indicates
|
||
that it should not be retained as a distinguished attribute of the
|
||
entry. If any value other than "TRUE" or "FALSE" is contained in the
|
||
deleteOldRDN attribute, or if the deleteOldRDN contains multiple
|
||
values, the RDN should be retained as a distinguished attribute (that
|
||
is, "FALSE" is the default if no values are present, or if illegal
|
||
values are present).
|
||
Syntax: BOOLEAN
|
||
|
||
newSuperior: if present, gives the name of the entry which
|
||
becomes the immediate superior of the existing entry. This optional
|
||
attribute reflects LDAPv3 functionality, and MUST NOT be generated
|
||
by LDAPv2 servers [2].
|
||
Syntax: DN
|
||
|
||
|
||
|
||
Discussion of the changeLogEntry object class
|
||
|
||
The changeLogEntry object class is used to represent changes made to a
|
||
directory server. The set of changes made to a directory server, then,
|
||
is given by the ordered set of all entries within the changelog
|
||
container, ordered by changeNumber.
|
||
|
||
A client may synchronize its local copy of a remote directory server's
|
||
contents by searching the remote server's changelog container for any
|
||
entries where the changenumber is greater than or equal to the last
|
||
change previously retrieved from that server. If the entry with the
|
||
changenumber matching the last change retrieved is not returned in the
|
||
search results, then the server's changelog has been trimmed. The
|
||
client must then fall back to reading the entire directory to bring its
|
||
copy in sync with the server's.
|
||
|
||
Assuming that the client has successfully retrieved one or more changelog
|
||
entries from the server, it can then use the information contained in each
|
||
entry to update the corresponding entry (named by the targetDN attribute)
|
||
in its local copy of the database.
|
||
|
||
Note that, due to access control restrictions, the client is not guaranteed
|
||
read access to the "changes" attribute. If the client discovers that the
|
||
"changes" attribute has no values, then it must read the entry given by
|
||
the targetDN attribute, possibly only retrieving attributes it deems
|
||
"interesting". However, in the case of delete and modrdn operations, there
|
||
|
||
|
||
|
||
Good March 11, 1998 [Page 4]
|
||
|
||
INTERNET-DRAFT Change Record Object Class 11 March 1998
|
||
|
||
|
||
is never a "changes" attribute, so it is never necessary to read the target
|
||
entry in these cases.
|
||
|
||
|
||
|
||
Examples of the changeLogEntry object class
|
||
|
||
In each example below, the "changes" attribute is shown in plain text,
|
||
with embedded newlines. This is done for clarity. It is intended that
|
||
newlines be stored in the entry literally, not encoded in any way.
|
||
If a "changes" attribute value is stored in an LDIF file, it must
|
||
base-64 encoded.
|
||
|
||
Example 1: A changeLogEntry representing the addition of a
|
||
new entry to the directory
|
||
|
||
dn: changenumber=1923, cn=changelog
|
||
changenumber: 1923
|
||
targetdn: cn=Barbara Jensen, ou=Accounting, o=Ace Industry, c=US
|
||
changetype: add
|
||
changes: cn: Barbara Jensen\ncn: Babs Jensen\nsn: Jensen\n
|
||
givenname: Barbara\ntelephonenumber: +1 212 555-1212\nmail: babs@ace.com\n
|
||
objectclass: top\nobjectclass: person\nobjectclass: organizationalPerson\n
|
||
objectclass: inetOrgPerson
|
||
|
||
Example 2: A changeLogEntry representing the deletion of an entry
|
||
from the directory
|
||
|
||
dn: changenumber=2933, cn=changelog
|
||
changenumber: 2933
|
||
targetdn: cn=Gern Jensen, ou=Product Testing, o=Ace Industry, c=US
|
||
changetype: delete
|
||
|
||
Example 3: A changeLogEntry representing the modification of an entry
|
||
in the directory
|
||
|
||
dn: changenumber=5883, cn=changelog
|
||
changenumber: 5883
|
||
targetdn: cn=Bjorn Jensen, ou=Product Development, o=Ace Industry, c=US
|
||
changetype: modify
|
||
changes: delete: telephonenumber\ntelephonenumber: 1212\n-\n
|
||
add: telephonenumber\ntelephonenumber: +1 212 555 1212\n-
|
||
|
||
Example 4: A changeLogEntry representing a modrdn operation performed
|
||
on an entry in the directory
|
||
|
||
dn: changenumber=10042, cn=changelog
|
||
changenumber: 10042
|
||
|
||
|
||
|
||
Good March 11, 1998 [Page 5]
|
||
|
||
INTERNET-DRAFT Change Record Object Class 11 March 1998
|
||
|
||
|
||
targetdn: cn=Bjorn Jensen, ou=Product Development, o=Ace Industry, c=US
|
||
changetype: modrdn
|
||
newrdn: cn=Bjorn J Jensen
|
||
deleteoldrdn: FALSE
|
||
|
||
|
||
Location of the container containing changeLogEntry objects
|
||
|
||
For LDAPv3 servers, the location of the container which holds
|
||
changeLogEntry objects is obtained by reading the "changeLog" attribute
|
||
of a server's root DSE. For example, if the container's root is
|
||
"cn=changelog", then the root DSE must have an attribute named
|
||
"changeLog" with the value "cn=changelog".
|
||
|
||
The "changelog" attribute is defined as follows:
|
||
|
||
( 2.16.840.1.113730.3.1.35
|
||
NAME 'changelog'
|
||
DESC 'the distinguished name of the entry which contains
|
||
the set of entries comprising this server's changelog'
|
||
EQUALITY distinguishedNameMatch
|
||
SYNTAX 'DN'
|
||
)
|
||
|
||
For LDAPv2 servers, the name of the changelog container must be
|
||
"cn=changelog".
|
||
|
||
|
||
Differences from previous versions of this document
|
||
|
||
Differences between draft-ietf-asid-changelog-00.txt and
|
||
draft-ietf-asid-changelog-01.txt
|
||
|
||
1) Fixed a deficiency in the syntax of the changeNumber attribute. The
|
||
attribute now has INTEGER syntax, with appropriate matching and
|
||
ordering rules defined.
|
||
|
||
2) Removed unneeded substring matching rules from the changeType and
|
||
deleteOldRDN attribute definitions.
|
||
|
||
3) Made use of MAY, SHOULD, etc. consistent with RFC 2119.
|
||
|
||
4) Renamed document (now an individual submission).
|
||
|
||
5) Changed syntax of "changes" attribute from "Binary" to "OctetString".
|
||
|
||
6) Removed references to X.500 supplier and consumer-initiated
|
||
replication.
|
||
|
||
|
||
|
||
Good March 11, 1998 [Page 6]
|
||
|
||
INTERNET-DRAFT Change Record Object Class 11 March 1998
|
||
|
||
|
||
7) Updated references to current drafts/proposed standards documents.
|
||
|
||
Security Considerations
|
||
|
||
Servers implementing this scheme MUST NOT allow the "changes"
|
||
attribute to be generally readable. The "changes" attribute contains
|
||
all modifications made to an entry, and some changes may contain
|
||
sensitive data, e.g. passwords.
|
||
|
||
If a server does allow read access on the "changes: attribute to a
|
||
particular bound DN, then that DN should be trusted. For example, two
|
||
cooperating servers may exchange the password for some DN which is
|
||
granted read access to the "changes" attribute of the changeLog. This
|
||
would allow one server to retrieve changes and apply them directly to
|
||
its database.
|
||
|
||
In situations where the "changes" attribute is not readable by a client,
|
||
that client may still use the entries in the changeLog to construct a
|
||
list of entry DNs which are known to have changed since the last time
|
||
the client synchronized. The client may then read each of those entries,
|
||
subject to whatever access control is in effect on the server,
|
||
and update its local copy of each entry.
|
||
|
||
Servers implementing this scheme should disallow write access to the
|
||
changelog container object and all entries contained within.
|
||
|
||
|
||
|
||
Acknowledgements
|
||
|
||
This material is based in part upon work supported by the National
|
||
Science Foundation under Grant No. NCR-9416667.
|
||
|
||
|
||
|
||
References
|
||
|
||
[1] Good, G., "The LDAP Data Interchange Format", INTERNET-DRAFT
|
||
draft-good-ldap-ldif-03.txt, Netscape Communications Corp., March 1997,
|
||
<URL:ftp://ftp.ietf.org/internet-drafts/draft-good-ldap-ldif-03.txt>
|
||
|
||
[2] Wahl, M., Howes, T., Kille, S., "Lightweight Directory Access
|
||
Protocol (v3)", RFC 2251 Critical Angle, Inc., Netscape Communications Corp.,
|
||
ISODE Consortium, July, 1997,
|
||
<URL:ftp://ftp.isi.edu/in-notes/rfc2251.txt>
|
||
|
||
[3] S. Bradner, "Key Words for use in RFCs to Indicate Requirement
|
||
Levels", Harvard University, RFC 2119, March 1997,
|
||
|
||
|
||
|
||
Good March 11, 1998 [Page 7]
|
||
|
||
INTERNET-DRAFT Change Record Object Class 11 March 1998
|
||
|
||
|
||
<URL:http://ds.internic.net/rfc/rfc2119.txt>
|
||
|
||
|
||
Author's Address
|
||
|
||
Gordon Good
|
||
Netscape Communications Corp.
|
||
501 E. Middlefield Rd.
|
||
Mailstop MV068
|
||
Mountain View, CA 94043, USA
|
||
Phone: +1 415 937-3825
|
||
EMail: ggood@netscape.com
|
||
|
||
This Internet Draft expires October 1st, 1998.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Good March 11, 1998 [Page 8]
|
||
|