mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
508 lines
18 KiB
Plaintext
508 lines
18 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group A. Young
|
||
Request for Comments: 1798 ISODE Consortium
|
||
Category: Standards Track June 1995
|
||
|
||
|
||
Connection-less Lightweight Directory Access Protocol
|
||
|
||
Status of this Memo
|
||
|
||
This document specifies an Internet standards track protocol for the
|
||
Internet community, and requests discussion and suggestions for
|
||
improvements. Please refer to the current edition of the "Internet
|
||
Official Protocol Standards" (STD 1) for the standardization state
|
||
and status of this protocol. Distribution of this memo is unlimited.
|
||
|
||
X.500
|
||
|
||
The protocol described in this document is designed to provide access
|
||
to the Directory while not incurring the resource requirements of the
|
||
Directory Access Protocol (DAP) [3]. In particular, it is aimed at
|
||
avoiding the elapsed time that is associated with connection-oriented
|
||
communication and it facilitates use of the Directory in a manner
|
||
analagous to the DNS [5,6]. It is specifically targeted at simple
|
||
lookup applications that require to read a small number of attribute
|
||
values from a single entry. It is intended to be a complement to DAP
|
||
and LDAP [4]. The protocol specification draws heavily on that of
|
||
LDAP.
|
||
|
||
1. Background
|
||
|
||
The Directory can be used as a repository for many kinds of
|
||
information. The full power of DAP is unnecessary for applications
|
||
that require simple read access to a few attribute values.
|
||
Applications addressing is a good example of this type of use where
|
||
an application entity needs to determine the Presentation Address
|
||
(PA) of a peer entity given that peer's Application Entity Title
|
||
(AET). If the AET is a Directory Name (DN) then the required result
|
||
can be obtained from the PA attribute of the Directory entry
|
||
identified by the AET. This is very similar to DNS.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Young Standards Track [Page 1]
|
||
|
||
RFC 1798 CLDAP June 1995
|
||
|
||
|
||
Use of DAP to achieve this functionality involves a significant
|
||
number of network exchanges:
|
||
|
||
___________________________________________________________
|
||
|_#_|______Client_(DUA)________DAP________Server_(DSA)_____|
|
||
| 1| N-Connect.request -> |
|
||
| 2| <- N-Connect.response |
|
||
| 3| T-Connect.request -> |
|
||
| 4| <- T-Connect.response |
|
||
| | S-Connect.request, |
|
||
| | P-Connect.request, |
|
||
| | A-Associate.request, |
|
||
| 5| DAP-Bind.request -> |
|
||
| | S-Connect.response, |
|
||
| | P-Connect.response, |
|
||
| | A-Associate.response, |
|
||
| 6| <- DAP-Bind.response |
|
||
| 7| DAP-Read.request -> |
|
||
| 8| <- DAP-Read.response |
|
||
| | S-Release.request, |
|
||
| | P-Release.request, |
|
||
| | A-Release.request, |
|
||
| 9| DAP-Unbind.request -> |
|
||
| | S-Release.response, |
|
||
| | P-Release.response, |
|
||
| | A-Release.response, |
|
||
| 10| <- DAP-Unbind.response |
|
||
| | T-Disconnect.request, |
|
||
| 11| N-Disconnect.request -> |
|
||
| | T-Disconnect.response,|
|
||
| 12| <- N-Disconnect.response |
|
||
|___|______________________________________________________|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Young Standards Track [Page 2]
|
||
|
||
RFC 1798 CLDAP June 1995
|
||
|
||
|
||
This is 10 packets before the application can continue, given that it
|
||
can probably do so after issuing the T-Disconnect.request. (Some
|
||
minor variations arise depending upon the class of Network and
|
||
Transport service that is being used; for example use of TP4 over
|
||
CLNS reduces the packet count by two.) LDAP is no better in the case
|
||
where the LDAP server uses full DAP to communicate with the
|
||
Directory:
|
||
|
||
____________________________________________________________________
|
||
|__#_|___Client_____LDAP_____LDAP_server______DAP_________DSA_______|
|
||
| 1 | TCP SYN -> |
|
||
| 2 | <- TCP SYN ACK |
|
||
| 3 | BindReq -> |
|
||
| 4 | N-Connect.req -> |
|
||
| 5 | <- N-Connect.res |
|
||
| 6 | T-Connect.req -> |
|
||
| 7 | <- T-Connect.res |
|
||
| 8 | DAP-Bind.req -> |
|
||
| 9 | <- DAP-Bind.res |
|
||
| 10 | <- BindRes |
|
||
| 11 | SearchReq -> |
|
||
| 12 | DAP-Search.req -> |
|
||
| 13 | <- DAP-Search.res |
|
||
| 14 | <- SearchRes |
|
||
| 15 | TCP FIN -> |
|
||
| 16 | DAP-Unbind.req -> |
|
||
| 17 | <- DAP-Unbind.res |
|
||
| 18 | N-Disconnect.req -> |
|
||
| 19 | <- N-Disconnect.res|
|
||
|____|______________________________________________________________|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Young Standards Track [Page 3]
|
||
|
||
RFC 1798 CLDAP June 1995
|
||
|
||
|
||
Here there are 14 packets before the application can continue. Even
|
||
if the LDAP server is on the same host as the DSA (so packet delay is
|
||
negligible), or if the DSA supports LDAP directly, then there are
|
||
still 6 packets.
|
||
|
||
____________________________________
|
||
| #| Client LDAP LDAP server|
|
||
|__|________________________________|
|
||
| 1| TCP SYN -> |
|
||
| 2| <- TCP SYN ACK|
|
||
| 3| BindReq -> |
|
||
| 4| <- BindRes |
|
||
| 5| SearchReq -> |
|
||
|_6|_______________<-____SearchRes__|
|
||
|
||
|
||
This protocol provides for simple access to the Directory where the
|
||
delays inherent in the above exchanges are unacceptable and where the
|
||
additional functionality provided by connection-mode operation is not
|
||
required.
|
||
|
||
2. Protocol Model
|
||
|
||
CLDAP is based directly on LDAP [4] and inherits many of the key
|
||
aspects of the LDAP protocol:
|
||
|
||
- - Many protocol data elements are encoding as ordinary strings
|
||
(e.g., Distinguished Names).
|
||
|
||
- - A lightweight BER encoding is used to encode all protocol
|
||
elements.
|
||
|
||
It is different to LDAP in that:
|
||
|
||
- - Protocol elements are carried directly over UDP or other
|
||
connection-less transport, bypassing much of the
|
||
session/presentation overhead and that of connections (LDAP uses
|
||
a connection-mode transport service).
|
||
|
||
- - A restricted set of operations is available.
|
||
|
||
The definitions of most protocol elements are inherited from LDAP.
|
||
|
||
The general model adopted by this protocol is one of clients
|
||
performing protocol operations against servers. In this model, this
|
||
is accomplished by a client transmitting a protocol request
|
||
describing the operation to be performed to a server, which is then
|
||
responsible for performing the necessary operations on the Directory.
|
||
|
||
|
||
|
||
Young Standards Track [Page 4]
|
||
|
||
RFC 1798 CLDAP June 1995
|
||
|
||
|
||
Upon completion of the necessary operations, the server returns a
|
||
response containing any results or errors to the requesting client.
|
||
|
||
Note that, although servers are required to return responses whenever
|
||
such responses are defined in the protocol, there is no requirement
|
||
for synchronous behaviour on the part of either client or server
|
||
implementations: requests and responses for multiple operations may
|
||
be exchanged by client and servers in any order, as long as servers
|
||
eventually send a response for every request that requires one.
|
||
|
||
Also, because the protocol is implemented over a connection-less
|
||
transport service clients must be prepared for either requests or
|
||
responses to be lost. Clients should use a retry mechanism with
|
||
timeouts in order to achieve the desired level of reliability. For
|
||
example, a client might send off a request and wait for two seconds.
|
||
If no reply is forthcoming, the request is sent again and the client
|
||
waits four seconds. If there is still no reply, the client sends it
|
||
again and waits eight seconds, and so on, until some maximun time.
|
||
Such algorithms are widely used in other datagram-based protocol
|
||
implementations, such as the DNS. It is not appropriate to mandate a
|
||
specific algorithm as this will depend upon the requirments and
|
||
operational environment of individual CLDAP client implementations.
|
||
|
||
It is not required that a client abandon any requests to which no
|
||
response has been received and for which a reply is no longer
|
||
required (because the request has been timed out), but they may do
|
||
so.
|
||
|
||
Consistent with the model of servers performing protocol operations
|
||
on behalf of clients, it is also to be noted that protocol servers
|
||
are expected to handle referrals without resorting to the return of
|
||
such referrals to the client. This protocol makes no provisions for
|
||
the return of referrals to clients, as the model is one of servers
|
||
ensuring the performance of all necessary operations in the
|
||
Directory, with only final results or errors being returned by
|
||
servers to clients.
|
||
|
||
Note that this protocol can be mapped to a strict subset of the
|
||
Directory abstract service, so it can be cleanly provided by the DAP.
|
||
|
||
3. Mapping Onto Transport Services
|
||
|
||
This protocol is designed to run over connection-less transports,
|
||
with all 8 bits in an octet being significant in the data stream.
|
||
Specifications for two underlying services are defined here, though
|
||
others are also possible.
|
||
|
||
|
||
|
||
|
||
|
||
Young Standards Track [Page 5]
|
||
|
||
RFC 1798 CLDAP June 1995
|
||
|
||
|
||
3.1. User Datagram Protocol (UDP)
|
||
|
||
The CLDAPMessage PDUs are mapped directly onto UDP datagrams. Only
|
||
one request may be sent in a single datagram. Only one response may
|
||
be sent in a single datagram. Server implementations running over
|
||
the UDP should provide a protocol listener on port 389.
|
||
|
||
3.2. Connection-less Transport Service (CLTS)
|
||
|
||
Each LDAPMessage PDU is mapped directly onto T-Unit-Data.
|
||
|
||
4. Elements of Protocol
|
||
|
||
CLDAP messages are defined by the following ASN.1:
|
||
|
||
CLDAPMessage ::= SEQUENCE {
|
||
messageID MessageID,
|
||
user LDAPDN, -- on request only --
|
||
protocolOp CHOICE {
|
||
searchRequest SearchRequest,
|
||
searchResponse SEQUENCE OF
|
||
SearchResponse,
|
||
abandonRequest AbandonRequest
|
||
}
|
||
}
|
||
|
||
where MessageID, LDAPDN, SearchRequest, SearchResponse and
|
||
AbandonRequest are defined in the LDAP protocol.
|
||
|
||
The 'user' element is supplied only on requests (it should be zero
|
||
length and is ignored in responses). It may be used for logging
|
||
purposes but it is not required that a CLDAP server implementation
|
||
apply any particular semantics to this field.
|
||
|
||
Editorial note:
|
||
There has been some discussion about the desirability of
|
||
authentication with CLDAP requests and the addition of the fields
|
||
necessary to support this. This might take the form of a clear
|
||
text password (which would go against the current IAB drive to
|
||
remove such things from protocols) or some arbitrary credentials.
|
||
Such a field is not included. It is felt that, in general,
|
||
authentication would incur sufficient overhead to negate the
|
||
advantages of the connectionless basis of CLDAP. If an
|
||
application requires authenticated access to the Directory then
|
||
CLDAP is not an appropriate protocol.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Young Standards Track [Page 6]
|
||
|
||
RFC 1798 CLDAP June 1995
|
||
|
||
|
||
Within a searchResponse all but the last SearchResponse has choice
|
||
'entry' and the last SearchResponse has choice 'resultCode'. Within
|
||
a searchResponse, as an encoding optimisation, the value of the
|
||
objectName LDAP DN may use a trailing '*' character to refer to the
|
||
baseObject of the corresponding searchRequest. For example, if the
|
||
baseObject is specified as "o=UofM, c=US", then the following
|
||
objectName LDAPDNs in a response would have the indicated meanings
|
||
|
||
objectName returned actual LDAPDN denoted
|
||
____________________________________________________
|
||
"*" "o=UofM, c=US"
|
||
"cn=Babs Jensen, *" "cn=Babs Jensen, o=UofM, c=US"
|
||
|
||
4.1. Errors
|
||
|
||
The following error code is added to the LDAPResult.resultCode
|
||
enumeration of [4]:
|
||
|
||
resultsTooLarge (70),
|
||
|
||
This error is returned when the LDAPMessage PDU containing the
|
||
results of an operation are too large to be sent in a single
|
||
datagram.
|
||
|
||
4.2. Example
|
||
|
||
A simple lookup can be performed in 4 packets. This is reduced to 2
|
||
if either the DSA implements the CLDAP protocol, the CLDAP server has
|
||
a cache of the desired results, or the CLDAP server and DSA are co-
|
||
located such that there is insignificant delay between them.
|
||
|
||
_______________________________________________________________
|
||
|_#|___Client_____CLDAP____CLDAP_server____DAP________DSA______|
|
||
| 1| SearchReq -> |
|
||
| 2| DAP-Search.req -> |
|
||
| 3| <- DAP-Search.res|
|
||
| 4| <- SearchRes |
|
||
|__|___________________________________________________________|
|
||
|
||
5. Implementation Considerations
|
||
|
||
The following subsections provide guidance on the implementation of
|
||
clients and servers using the CLDAP protocol.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Young Standards Track [Page 7]
|
||
|
||
RFC 1798 CLDAP June 1995
|
||
|
||
|
||
5.1. Server Implementations
|
||
|
||
Given that the goal of this protocol is to minimise the elapsed time
|
||
between making a Directory request and receiving the response, a
|
||
server which uses DAP to access the directory should use techniques
|
||
that assist in this.
|
||
|
||
- - A server should remain bound to the Directory during reasonably
|
||
long idle periods or should remain bound permanently.
|
||
|
||
- - Cacheing of results is highly desirable but this must be
|
||
tempered by the need to provide up-to-date results given the
|
||
lack of a cache invalidation protocol in DAP (either implicit
|
||
via timers or explicit) and the lack of a dontUseCopy service
|
||
control in the protocol.
|
||
|
||
Of course these issues are irrelevant if the CLDAP protocol is
|
||
directly supported by a DSA.
|
||
|
||
5.2. Client Implementations
|
||
|
||
For simple lookup applications, use of a retry algorithm with
|
||
multiple servers similar to that commonly used in DNS stub resolver
|
||
implementations is recommended. The location of a CLDAP server or
|
||
servers may be better specified using IP addresses (simple or
|
||
broadcast) rather than names that must first be looked up in another
|
||
directory such as DNS.
|
||
|
||
6. Security Considerations
|
||
|
||
This protocol provides no facilities for authentication. It is
|
||
expected that servers will bind to the Directory either anonymously
|
||
or using simple authentication without a password.
|
||
|
||
7. Bibliography
|
||
|
||
[1] The Directory: Overview of Concepts, Models and Service. CCITT
|
||
Recommendation X.500, 1988.
|
||
|
||
[2] The Directory: Models. CCITT Recommendation X.501 ISO/IEC JTC
|
||
1/SC21; International Standard 9594-2, 1988.
|
||
|
||
[3] The Directory: Abstract Service Definition. CCITT Recommendation
|
||
X.511, ISO/IEC JTC 1/SC21; International Standard 9594-3, 1988.
|
||
|
||
[4] Yeong, W., Howes, T., and S. Kille, "X.500 Lightweight Directory
|
||
Access Protocol", RFC 1487, Performance Systems International,
|
||
University of Michigan, ISODE Consortium, July 1993.
|
||
|
||
|
||
|
||
Young Standards Track [Page 8]
|
||
|
||
RFC 1798 CLDAP June 1995
|
||
|
||
|
||
[5] Mockapetris, P., "Domain Names - Implementation and
|
||
Specification", STD 13, RFC 1035, USC/Information Sciences
|
||
Institute, November 1987.
|
||
|
||
[6] Mockapetris, P., "Domain Names - Concepts and Facilities", STD
|
||
13, RFC 1034, USC/Information Sciences Institute, November 1987.
|
||
|
||
8. Acknowledgements
|
||
|
||
Many thanks to Tim Howes and Steve Kille for their detailed comments
|
||
and to other members of the working group.
|
||
|
||
This work was initiated by the Union Bank of Switzerland.
|
||
|
||
9. Author's Address
|
||
|
||
Alan Young
|
||
ISODE Consortium
|
||
The Dome, The Square
|
||
RICHMOND
|
||
GB - TW9 1DT
|
||
|
||
Phone: +44 81 332 9091
|
||
EMail: A.Young@isode.com
|
||
X.400: i=A; s=Young; o=ISODE Consortium; p=ISODE; a=MAILNET; c=FI
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Young Standards Track [Page 9]
|
||
|