mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-02-17 17:48:20 -05:00
Internet drafts associated with LDAP alias change changelog implementation.
This commit is contained in:
parent
dec5c37de6
commit
cd9ab253d6
2 changed files with 773 additions and 0 deletions
324
doc/drafts/draft-byrne-ldap-alias-00.txt
Normal file
324
doc/drafts/draft-byrne-ldap-alias-00.txt
Normal file
|
|
@ -0,0 +1,324 @@
|
||||||
|
|
||||||
|
Internet-Draft D. Byrne, IBM
|
||||||
|
LDAP Extensions WG L. Poitou, Sun
|
||||||
|
Intended Category: Standards Track E. Stokes, IBM
|
||||||
|
Expires: 20 October 1998
|
||||||
|
|
||||||
|
20 April 1998
|
||||||
|
|
||||||
|
Use of Aliases within LDAP
|
||||||
|
<draft-byrne-ldap-alias-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. Internet Drafts may be updated, replaced, or obsoleted
|
||||||
|
by other documents at any time. It is not appropriate to use
|
||||||
|
Internet Drafts as reference material or to cite them other
|
||||||
|
than as a "working draft" or "work in progress."
|
||||||
|
|
||||||
|
To view the entire list of current Internet-Drafts, please
|
||||||
|
check the "1id-abstracts.txt" listing contained in the
|
||||||
|
Internet-Drafts Shadow Directories on ftp.is.co.za (Africa),
|
||||||
|
ftp.nordu.net (Northern Europe), ftp.nis.garr.it (Southern
|
||||||
|
Europe), munnari.oz.au (Pacific Rim), ftp.ietf.org (US East
|
||||||
|
Coast), or ftp.isi.edu (US West Coast).
|
||||||
|
|
||||||
|
Comments and suggestions on this document are encouraged.
|
||||||
|
Comments on this document should be sent to the LDAPEXT
|
||||||
|
working group discussion list:
|
||||||
|
|
||||||
|
ietf-ldapext@netscape.com
|
||||||
|
|
||||||
|
ABSTRACT
|
||||||
|
|
||||||
|
This document describes the suggested behavior for aliases for
|
||||||
|
LDAPv3 and above to improve LDAP server interoperability .
|
||||||
|
|
||||||
|
The key words "MUST", "SHOULD", and "MAY" used in this
|
||||||
|
document are to be interpreted as described in [Bradner97].
|
||||||
|
|
||||||
|
|
||||||
|
1. Objectives
|
||||||
|
|
||||||
|
|
||||||
|
Aliases may be used within LDAP to reference entries anywhere
|
||||||
|
within the directory tree. Conceptually, an alias is simply a
|
||||||
|
pointer to the DIT entry it represents. It does not contain
|
||||||
|
additional information about that entry; only the location of
|
||||||
|
the entry.
|
||||||
|
|
||||||
|
The behavior of the alias object within LDAP is not well-
|
||||||
|
defined, both in creation of the alias object and the behavior
|
||||||
|
when dereferencing the alias.
|
||||||
|
|
||||||
|
For successful interoperability, the expected behavior of
|
||||||
|
servers when encountering alias objects SHOULD be consistent.
|
||||||
|
|
||||||
|
Additionally, it MUST be possible to use aliases without
|
||||||
|
changing the LDAPv3 schema as defined in [Wahl] and without
|
||||||
|
adding server-dependent data.
|
||||||
|
|
||||||
|
|
||||||
|
2. Schema Definition
|
||||||
|
|
||||||
|
|
||||||
|
2.1 Schema Expansion
|
||||||
|
|
||||||
|
The alias objectclass definitions presented in the LDAPv3
|
||||||
|
Schema [Wahl] are the basis for aliasing within ldap. The
|
||||||
|
alias objectclass is a Structural objectclass with a single
|
||||||
|
required attribute; the single valued aliasObjectName.
|
||||||
|
|
||||||
|
This definition of the alias objectclass does not allow for
|
||||||
|
any attribute other than 'aliasedObjectName' to be used as the
|
||||||
|
naming attribute within the RDN. The resulting dn for the
|
||||||
|
alias object must therefore be of the form
|
||||||
|
"aliasedObjectName=<dn>, <rdn>, <rdn>..." This is not a
|
||||||
|
user-friendly name for a directory entry, and quite possibly
|
||||||
|
corrupts the naming hierarchy within the directory tree.
|
||||||
|
|
||||||
|
In order to remain true the concept of an alias; that it is
|
||||||
|
merely a pointer to another entry, an entry of objectclass
|
||||||
|
alias SHOULD NOT be combined with any other objectclass. If
|
||||||
|
multiple objectclasses are combined, it becomes possible to
|
||||||
|
add information to the alias entry without violating the
|
||||||
|
schema rules.
|
||||||
|
|
||||||
|
While not explicitly specified as either a 'required' or
|
||||||
|
'may', any naming attribute MUST be allowed to form the RDN of
|
||||||
|
the alias. Restricting the possible naming attributes would
|
||||||
|
potentially corrupt the hierarchy. For example, it would be
|
||||||
|
impossible to distinguish between a person alias and an
|
||||||
|
organisation alias.
|
||||||
|
|
||||||
|
2.2 AliasObject Objectclass
|
||||||
|
|
||||||
|
In order to create an alias object which can be appropriately
|
||||||
|
named to that which it represents, the definition of the alias
|
||||||
|
object MUST be expanded. A new objectclass must be defined
|
||||||
|
which inherits from the current definition of alias but
|
||||||
|
extends the attributes allowed within the RDN.
|
||||||
|
|
||||||
|
( 1.3.6.1.4.1.42.2.27.1.2.1
|
||||||
|
NAME 'aliasObject'
|
||||||
|
DESC objectclass for all alias objects
|
||||||
|
SUP 'ALIAS'
|
||||||
|
MAY *
|
||||||
|
)
|
||||||
|
|
||||||
|
The '*' allows any naming attribute to be used in forming the
|
||||||
|
RDN of the object.
|
||||||
|
|
||||||
|
For example, the following is a correct LDIF:
|
||||||
|
dn: cn=John Doe, ou=myOrg, c=US
|
||||||
|
objectclass: alias
|
||||||
|
objectclass: aliasObject
|
||||||
|
aliasedObjectName: cn=President, ou=myOrg, c=US
|
||||||
|
cn: John Doe
|
||||||
|
|
||||||
|
To prevent the alias from containing extra information about
|
||||||
|
the object, the naming attribute SHOULD contain only a single
|
||||||
|
value.
|
||||||
|
|
||||||
|
For example, the following is not a correct LDIF:
|
||||||
|
dn: cn=John Doe, ou=myOrg, c=US
|
||||||
|
objectclass: alias
|
||||||
|
objectclass: aliasObject
|
||||||
|
aliasedObjectName: cn=President, ou=myOrg, c=US
|
||||||
|
cn: John Doe
|
||||||
|
cn: Doe
|
||||||
|
|
||||||
|
Similarly, the following would not be a correct LDIF file
|
||||||
|
because it adds extra information to the alias object.
|
||||||
|
|
||||||
|
dn: cn=John Doe, ou=myOrg, c=US
|
||||||
|
objectclass: alias
|
||||||
|
objectclass: aliasObject
|
||||||
|
aliasedObjectName: cn=President, ou=myOrg, c=US
|
||||||
|
cn: John Doe
|
||||||
|
title: President
|
||||||
|
|
||||||
|
The naming attribute used to form the RDN of the object SHOULD
|
||||||
|
reflect the naming attribute of the referenced object.
|
||||||
|
However, there are some cases where the naming attribute MAY
|
||||||
|
be different.
|
||||||
|
|
||||||
|
Within the X.501 [ITU-T], the attribute used to described the
|
||||||
|
aliased object is 'aliasedEntryName'. Since the OID for
|
||||||
|
'aliasedEntryName' and 'aliasedObjectName' are the same for
|
||||||
|
both X.500 and LDAP, LDAP servers SHOULD treat the
|
||||||
|
'aliasedEntryName' as a synonym for 'aliasedObjectName'.
|
||||||
|
|
||||||
|
|
||||||
|
3. Alias Behavior
|
||||||
|
|
||||||
|
In general alias objects SHOULD NOT be dereferenced during any
|
||||||
|
operation other than search unless requested to do so by the
|
||||||
|
client.
|
||||||
|
|
||||||
|
Since an alias points to another section of the tree, it MUST
|
||||||
|
NOT be possible to add an object under an alias object; alias
|
||||||
|
objects MUST always be leaf nodes.
|
||||||
|
|
||||||
|
During the dereferencing of aliases, a loop is detected if the
|
||||||
|
server visits the same alias entry more than once. In this
|
||||||
|
case a data integrity error has occurred and the server MUST
|
||||||
|
return an error of 'aliasProblem'
|
||||||
|
|
||||||
|
If an alias is dereferenced, and the resulting directory entry
|
||||||
|
does not exists, a data integrity problem has occurred, and
|
||||||
|
the server MUST return an error code of
|
||||||
|
'aliasDereferencingProblem'
|
||||||
|
|
||||||
|
If the base entry for an ldapsearch is an alias, and alias
|
||||||
|
dereferencing is set to either derefFindBaseObj, or
|
||||||
|
derefAlways, the base entry MUST be dereferenced before the
|
||||||
|
search is performed. The new base for the search will become
|
||||||
|
the entry to which the alias resolves. The search is then
|
||||||
|
performed.
|
||||||
|
|
||||||
|
If multiple aliases are chained, the alias for the first
|
||||||
|
object MUST resolve to the last entry in the chain. For
|
||||||
|
example, A, B, and C are alias objects. If A points to B which
|
||||||
|
points to C which points to D, A resolves to D when
|
||||||
|
dereferencing the alias.
|
||||||
|
|
||||||
|
If an alias is dereferenced as part of a search, the alias
|
||||||
|
entry itself SHOULD NOT be returned as part of the search.
|
||||||
|
|
||||||
|
If an alias matches the search filter, and dereferencing is
|
||||||
|
set to 'searching' or 'always', the dereferenced object SHOULD
|
||||||
|
be returned, even if it does not match the filter.
|
||||||
|
|
||||||
|
If the alias is not dereferenced during the search, and it
|
||||||
|
matches the filter, then it SHOULD be returned within the
|
||||||
|
search result.
|
||||||
|
|
||||||
|
Each directory object matching a filter SHOULD be returned
|
||||||
|
only once during a search. If an entry is found twice because
|
||||||
|
of aliases pointing to a part of the tree already searched,
|
||||||
|
the entry SHOULD NOT be returned to the client a second time.
|
||||||
|
|
||||||
|
4. Scenarios
|
||||||
|
|
||||||
|
Using the following LDIF, the scenarios would return the
|
||||||
|
expected information as follows:
|
||||||
|
|
||||||
|
dn: c=myCountry
|
||||||
|
c: myCountry
|
||||||
|
objectclass: country
|
||||||
|
|
||||||
|
dn: ou=Area1, c=myCountry
|
||||||
|
ou: Area1
|
||||||
|
aliasedObjectName: o=myCorporation, c=myCountry
|
||||||
|
objectclass: alias
|
||||||
|
objectclass:aliasObject
|
||||||
|
|
||||||
|
dn: o=myCorporation, c=myCountry
|
||||||
|
ou: myCorporation
|
||||||
|
objectclass:organization
|
||||||
|
|
||||||
|
dn: cn=President, o=myCorporation, c=myCountry
|
||||||
|
cn: President
|
||||||
|
aliasObjectName: cn=John Doe, o=myCorporation, c=myCountry
|
||||||
|
objectclass: alias
|
||||||
|
objectclass: aliasObject
|
||||||
|
|
||||||
|
dn: cn=John Doe, o=myCorporation, c=myCountry
|
||||||
|
cn: John Doe
|
||||||
|
objectclass: person
|
||||||
|
|
||||||
|
|
||||||
|
c = myCountry
|
||||||
|
/ |
|
||||||
|
ou = Area1 -----> o = myCorporation
|
||||||
|
| \
|
||||||
|
cn=President ---> cn = John Doe
|
||||||
|
|
||||||
|
Performing a base search of 'ou = Area1, c=myCountry' with a
|
||||||
|
filter of 'objectclass=aliasObject'
|
||||||
|
NeverDerefAlias would return 'ou=Area1, c=myCountry'
|
||||||
|
DerefFinding would return 'cn=President, o=myCorporation,
|
||||||
|
c=myCountry'
|
||||||
|
DerefSearching would return 'o=myCorporation,
|
||||||
|
c=myCountry'
|
||||||
|
DerefAlways would return 'cn=John Doe, o=myCorporation,
|
||||||
|
c=myCountry'
|
||||||
|
|
||||||
|
Performing a one level search of 'c=myCountry' with a filter
|
||||||
|
of 'ou = * '
|
||||||
|
NeverDerefAlias would return 'ou=Area1, c=myCountry'
|
||||||
|
DerefFinding would return 'ou=Area1, c=myCountry'
|
||||||
|
DerefSearching would return 'o=myCorporation,
|
||||||
|
c=myCountry'
|
||||||
|
DerefAlways would return ' o=myCorporation, c=myCountry'
|
||||||
|
|
||||||
|
Performing a full tree search of 'c=myCountry' with a filter
|
||||||
|
of ' cn = President '
|
||||||
|
NeverDerefAlias would return 'cn=President, o=myCorporation,
|
||||||
|
c=myCountry'
|
||||||
|
DerefFinding would return 'cn=President, o=myCorporation,
|
||||||
|
c=myCountry'
|
||||||
|
DerefSearching would return 'cn=John Doe, o=myCorporation,
|
||||||
|
c=myCountry'
|
||||||
|
DerefAlways would return 'cn=John Doe, o=myCorporation,
|
||||||
|
c=myCountry'
|
||||||
|
|
||||||
|
|
||||||
|
6. Security Considerations
|
||||||
|
|
||||||
|
Permissions to dereferencing an alias, adding, deleting or
|
||||||
|
returning alias entries are decided by the directory server's
|
||||||
|
ACL administration policy.
|
||||||
|
|
||||||
|
|
||||||
|
7. References
|
||||||
|
|
||||||
|
[LDAPv3] M. Wahl, T. Howes, S. Kille, "Lightweight Directory
|
||||||
|
Access Protocol (v3)", RFC 2251, December 1997.
|
||||||
|
|
||||||
|
[Whal] M.Wahl, A, Coulbeck, T. Howes, S. Kille, "Lightweight
|
||||||
|
Directory Access Protocol (v3)": Attribute Syntax Definitions,
|
||||||
|
RFC 2252, December 1997.
|
||||||
|
|
||||||
|
[Bradner97] Bradner, Scott, "Key Words for use in RFCs to
|
||||||
|
Indicate Requirement Levels", RFC 2119.
|
||||||
|
|
||||||
|
[ITU-T] ITU-T Rec. X.501, "The Directory: Models", 1993
|
||||||
|
|
||||||
|
|
||||||
|
AUTHOR(S) ADDRESS
|
||||||
|
|
||||||
|
|
||||||
|
Debbie Byrne
|
||||||
|
IBM
|
||||||
|
11400 Burnet Rd
|
||||||
|
Austin, TX 78758
|
||||||
|
USA
|
||||||
|
mail-to: djbyrne@us.ibm.com
|
||||||
|
phone: +1 512 838 1930
|
||||||
|
|
||||||
|
Ludovic Poitou
|
||||||
|
Sun Microsystems
|
||||||
|
32, Chemin du vieux Chene
|
||||||
|
38240 Meylan
|
||||||
|
France
|
||||||
|
Phone: +33.(0)4.76.41.42.12
|
||||||
|
email: ludovic.poitou@france.sun.com
|
||||||
|
|
||||||
|
Ellen Stokes
|
||||||
|
IBM
|
||||||
|
11400 Burnet Rd
|
||||||
|
Austin, TX 78758
|
||||||
|
USA
|
||||||
|
mail-to: stokes@austin.ibm.com
|
||||||
|
phone: +1 512 838 3725
|
||||||
|
|
||||||
|
|
||||||
449
doc/drafts/draft-good-ldap-changelog-00.txt
Normal file
449
doc/drafts/draft-good-ldap-changelog-00.txt
Normal file
|
|
@ -0,0 +1,449 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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]
|
||||||
|
|
||||||
Loading…
Reference in a new issue