One document matched: draft-ietf-asid-ldap-dynatt-00.txt
Expires in six months from 1 July 1997
Intended Category: Standards Track
Lightweight Directory Access Protocol:
Dynamic Attributes
<draft-ietf-asid-ldap-dynatt-00.txt>
1. 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).
2. Abstract
This document defines dynamic attributes and the fashion in which they
are being set and used on entries in the directory. This document
builds heavily on the dynamic extensions to LDAP infrastructure as
defined in [1].
The Lightweight Directory Access Protocol (LDAP) [2] supports
lightweight access to static directory services, allowing relatively
fast search and update access. Static directory services store
information about people that persists in its accuracy and value over
a long period of time.
The dynamic extension to LDAP as defined in [1] added the concept of
dynamic entries that only persist in the directory, when they are
periodically refreshed. This document takes this approach one step
farther and defines how dynamic attributes can be used, on either
static or dynamic entries, to handle up-to-date and dynamic
information about an entry in the directory. An example use will be a
client or a person that has a static entry in the directory and
sometimes goes online, which is reflected in the 'online' attribute
for the entry. To specify whether this person is online or offline -
an attribute that changes frequently, a client application will have
to modify this attribute relatively frequently. The current location
of a person is another attribute that may change frequently.
Dynamic attributes must be periodically refreshed. Otherwise, they
will disappear from the directory over time.
3. Requirements
Dynamic attributes must be set and used in a standard LDAP manner, to
allow clients to access static and dynamic attributes in the same way.
By definition, dynamic attributes are not persistent and may go away
gracefully or not. The proposed draft must offer a way for a server
to tell if attributes are still valid, and to do this in a way that is
scalable. There also must be a mechanism for clients to reestablish
their attributes with the server.
Dynamic attributes must build on the same infrastructure that was
design into LDAP in the dynamic extensions draft ([1]). It should
take advantage of the extensions and operational attributes defined
[1].
Finally, to allow clients to broadly use dynamic attributes, they must
be able to find out if a server supports such attributes.
4. Description of Approach
The Lightweight Directory Access Protocol (LDAP) [2] supports the use
of attributes on entries in the directory. The dynamic extensions
draft ([1]) added support for dynamic entries. This proposal takes
the attributes model and the dynamic model and merges the two to
provide support for dynamic attributes in a manner which is fully
compatible with LDAP.
The approach taken here is to mark dynamic attributes as dynamic
(described below), and require clients to refresh these attributes
periodically in order to guarantee that they will continue to be
present on the entry. Dynamic attributes can be set on either a
static or dynamic entry, and the time-to-live associated with them
applies to ALL the dynamic attributes on an entry, i.e. there is no
time-to-live per dynamic attribute. This provides for a more scalable
design, and a less complex server implementation.
4.1. Dynamic Attributes
Dynamic attributes behave the same as ordinary user attributes to
Search, Compare and Modify requests, except that if they time out they
disappear from the entry in which they are located. Unlike the
dynamicObject class - which is used to mark entries as dynamic, the
entry itself does not disappear, and non-dynamic attributes are
unaffected. Like dynamic entries, a static entry with dynamic
attributes must have the entryTtl attribute which is described in
[1].
Dynamic attributes do not necessarily introduce a new set of
attributes in the schema. Any static attribute in the schema can be
made dynamic by including the ;dynamic attribute modifier with the
typename. It is allowed to introduce new dynamic attributes which are
not useful in the static domain. Such attributes will still require
including the ;dynamic attribute modifier with the typename to define
them as dynamic.
A dynamic attribute may be a subtype of a non-dynamic attribute, but a
non-dynamic attribute must not be a subtype of a dynamic attribute.
Operational attributes and collective attributes must not be dynamic.
All dynamic attributes are considered to be user attributes, however
they are not guaranteed to be present in shadow copies of entries.
A client may introduce dynamic attributes into an entry by using a
Modify request to add them, or by including them in the attribute list
of an Add Request. If the attribute type is permitted in the entry
then the dynamic attribute is also permitted. The client would
specify that the attribute is dynamic by including the tag ";dynamic"
with the typename. Dynamic values may be changed, and the attributes
removed, by using the Modify request as normal. If the entry is
deleted, dynamic attributes disappear immediately along with all the
non-dynamic. A ;dynamic modifier on an attribute must not be used in
a compare request, or in a search request (either in the filter or
attributes requested for return). This is in keeping with the
philosophy that dynamic attributes be indistinguishable from static
attributes as much as possible. In such a case, a server is expected
to reject the request, returning 'invalidAttributeSyntax'.
The granularity of a dynamic attribute is the entire attribute
including all values. Dynamic and static values may not be mixed
within a single attribute. For example, suppose an existing static
entry had an attribute called "ipAddress" with the value "1.2.3.4". A
modification of the entry to add the value "5.4.3.2" to the attribute
"ipAddress;dynamic" would fail with a "constraintViolation" error.
The addition and modification of dynamic attributes are subject to
schema and access control restrictions, as with non-dynamic
attributes. Thus unless the extensibleObject object class is present,
generally an object class or content rule must be defined to permit
those attributes to be present in an entry. If their presence is
controlled by an object class, then just as with non-dynamic
attributes, the object class value must have already been added before
the attributes are added. The dynamicObject object class described in
[1] does not itself permit any particular dynamic attributes.
Dynamic attributes in a particular entry are refreshed using the
Refresh extended operation. All of the entry's dynamic attributes are
refreshed by a single refresh request. The TTL given in the refresh
response applies to all of the entry's dynamic attributes. There is
no way to refresh particular dynamic attributes within an entry at
different times, or to have different TTLs apply to different dynamic
attributes or different values of the same multi-value dynamic
attribute.
If not refreshed, all dynamic attributes in an entry time out
simultaneously. All the attributes which are dynamic with all their
values disappear atomically, as if the server had done a ModifyEntry
specifying that all the dynamic types were to be deleted from that
entry. The client must not expect any dynamic attributes to be
present in an entry after the time-to-live for that entry has reached
zero. However the attributes may not disappear immediately as servers
may only process timing out attributes at intervals (e.g. every few
minutes).
Note that if an object class definition references a dynamic attribute
as a mandatory attribute, the attributes of the entry will still time
out, but a schema inconsistency will be present in that entry. (The
objectClass attribute and its values always remain since objectClass
is not a dynamic attribute.) Thus it is strongly recommended that
designers not specify dynamic attributes as anything other than
optional attributes of auxiliary classes.
Dynamic attributes may be used within dynamic entries (i.e., entries
containing object class "dynamicObject", defined in [1]), but since
all of such an entry's attributes are implicitly dynamic, such use is
superfluous.
5. Protocol Additions
Support of dynamic attributes in LDAP does not require any protocol
additions beyond the Refresh request and response which were
introduced in [1].
6. Schema Additions
An entry in the directory which has dynamic attributes must have the
entryTtl operational attribute. In addition, the dynamicSubtrees
attribute, if present in the root DSE, indicates which subtrees of the
directory support the dynamic extensions. The entryTtl attribute and
the dynamicSubtrees attribute are defined in [1].
The following attributes are introduced as a result of allowing
dynamic attributes on static entries. It is described using the
AttributeTypeDescription notation of [3]:
( 1.3.6.1.4.1.1466.101.119.5 NAME 'dynamicAttributesSubtrees'
DESC 'This operational attribute is maintained by the server and
is present in the Root DSE, if the server supports dynamic
attributes as described in this draft. The attribute contains
a list of all the subtrees in this directory for which the
server supports dynamic attributes.'
SYNTAX 'DN' NO-USER-MODIFICATION USAGE dSAOperation )
( 1.2.840.113556.1.4.612 NAME 'online'
DESC 'This attribute is used to indicate whether a entry is the
directory is currently online or offline. This attribute
should only be used with objects in the directory for which
being online or offline makes sense. For example, a
person object or a meeting object. Dynamic entries are
always expected to be online. This attribute is optional.
SYNTAX 'BOOLEAN' SINGLE-VALUE )
( 1.2.840.113556.1.4.613 NAME 'onlineServer'
DESC 'This attribute is used to indicate the DNS names of server
where this entry is online. This attribute should only
be used with objects in the directory for which being
online or offline makes sense. If an entry is not online,
the server names in this attribute are meaningless. This
attribute is maintained by the client and is optional.
SYNTAX 'LDAPString' )
Note that the 'online' and 'onlineServer' attributes are only examples
for one particular application of dynamic attributes, and that not all
entries with dynamic attributes are required to have these attributes.
7. Client and Server Requirements
7.1 Client Requirements
Clients can find out if a server supports the dynamic extensions by
checking the supportedExtension field in the root DSE, to see if the
OBJECT IDENTIFIER described in [1] for Refresh request and response,
is present. Farther, and as described in [1], clients are expected to
check the dynamicSubtrees operational attribute in the root DSE to
find out in which subtrees of the directory, the server selected to
support the dynamic extensions.
To find out if a server specifically supports dynamic attributes, and
in which subtrees in the directory, clients must check the
dynamicAttributesSubtrees operational attribute in the root DSE.
Once an entry has been created in the directory, that has dynamic
attributes, clients are responsible for invoking the refresh extended
operation, in order to keep these attributes present in the entry.
The same holds true for dynamic attributes that were added to an entry
after its creation.
Clients must not expect that a dynamic attributes will be present in
an entry after they have timed out. However it must not either
require that the server remove these attributes immediately (some
servers may only process timing out attributes at intervals). If the
client wishes to ensure an attribute does not exist it should issue a
ModifyRequest to remove this attribute explicitly.
Initially, a client needs to know how often it should send refresh
requests to the server. This value is defined as the CRP (Client
Refresh Period) and is set by the server based on the entryTtl. Since
the AddRequest and ModifyRequest are left unchanged and are not
modified in this proposal to return this value, a client must issue a
Refresh extended operation immediately after an Add or Modify that
introduced a dynamic attribute to an entry. The Refresh Response will
return the CRP (in responseTtl) to the client as described in [1].
Clients must not issue the refresh request for entries to which they
did not add dynamic attributes. Please note that when a client
refreshes a static entry to which it added dynamic attribute(s), it
refreshes ALL the dynamic attributes in this entry, including ones
added by other clients. Also note that servers which allow anonymous
clients to create and refresh dynamic entries and attributes will not
be able to enforce the above.
Clients should always be ready to handle the case in which their
dynamic attributes timed out. In such a case, the Refresh operation
will fail with an error code such as noSuchAttribute, and the client
is expected to re-add their dynamic attributes.
Clients should be prepared to experience refresh operations failing
with protocolError, even though the add and any previous refresh
requests succeeded. This might happen if a proxy between the client
and the server goes down, and another proxy is used which does not
support the Refresh extended operation.
7.2 Server Requirements
Servers are responsible for removing dynamic attributes when they time
out. Servers are not required to do this immediately.
Servers must enforce the schema rules listed in above section 4.
Servers must ensure that the entryTtl operational attribute described
in [1] is present in entries that contain dynamic attributes.
Servers are permitted to check the authentication of the client
invoking a refresh extended operation, and only permit the operation
if it matches that of the client which created the entry or added
dynamic attributes to this entry (please see a note about that in
section 7.1). Servers may permit anonymous users to refresh entries.
Servers which implement support for dynamic attributes must have the
OBJECT IDENTIFIER, described in [1] for the request and response,
present as a value of the supportedExtension field in the root DSE.
They must also have as values in the attributeTypes attribute of their
subschema subentries, the AttributeTypeDescription for entryTtl and
dynamicSubtrees, as described in [1].
8. Implementation issues
8.1 Storage of dynamic information
Dynamic information is expected to change very often. In addition,
Refresh requests are expected to arrive at the server very often.
Disk-based databases that static directory services often use are
likely inappropriate for storing dynamic information. We recommend
that server implementations store dynamic attributes in memory
sufficient to avoid paging. This is not a requirement.
We expect LDAP servers to be able to store static and dynamic entries.
If an LDAP server does not support dynamic entries, it should respond
with an error code such as objectClassViolation. Such a server might
still support setting dynamic attributes on a static entry.
8.2 Client refresh behavior
In some cases, the client might not get a Refresh response. This may
happen as a result of a server crash after receiving the Refresh
request, the TCP/IP socket timing out in the connection case, or the
UDP packet getting lost in the connection-less case.
It is recommended that in such a case, the client will retry the
Refresh operation immediately, and if this Refresh request does not
get a response as well, it will resort to its original Refresh cycle,
i.e. send a Refresh request at its Client Refresh Period (CRP).
9. Localization
The are no localization issues for this extended operation.
10. Security Considerations
Security issues are not addressed in this document. Please note,
though, that anonymous clients are able to refresh attributes which
they did not add to an entry.
Also, Care should be taken in making use of information obtained from
directory servers that has been supplied by client, as it may now be
out of date. In many networks, for example, IP addresses are
automatically assigned when a host connects to the network, and may be
reassigned if that host later disconnects. An IP address obtained
from the directory may no longer be assigned to the host that placed
the address in the directory. This issue is not specific to LDAP or
dynamic directories.
11. Acknowledgments
Design ideas included in this document are based on those discussed in
ASID and other IETF Working Groups.
12. Authors Addresses
Yoram Yaacovi
Microsoft
One Microsoft way
Redmond, WA 98052
USA
Phone: +1 206-936-9629
EMail: yoramy@microsoft.com
Mark Wahl
Critical Angle Inc.
4815 W. Braker Lane #502-385
Austin, TX 78759
USA
EMail: M.Wahl@critical-angle.com
Tony Genovese
Microsoft
One Microsoft way
Redmond, WA 98052
USA
Phone: +1 206-703-0852
EMail: tonyg@microsoft.com
13. Bibliography
[1] Y.Yaacovi, M.Wahl, T.Genovese, "Lightweight Directory Access Protocol
(v3): Extensions for Dynamic Directory Services". INTERNET DRAFT.
<draft-ietf-asid-ldapv3-dynamic-04.txt>
[2] M.Wahl, T. Howes, S. Kille, "Lightweight Directory Access
Protocol (Version 3)". INTERNET DRAFT
<draft-ietf-asid-ldapv3-protocol-01.txt>
[3] M.Wahl, A.Coulbeck, T. Howes, S. Kille, "Lightweight Directory
Access Protocol (v3): Attribute Syntax Definitions". INTERNET DRAFT
<draft-ietf-asid-ldapv3-attributes-04.txt>
Expires on six months from the post date (see top).
| PAFTECH AB 2003-2026 | 2026-04-22 23:39:05 |