You are viewing a plain text version of this content. The canonical link for it is here.
Posted to api@directory.apache.org by Emmanuel Lecharny <el...@gmail.com> on 2010/02/06 17:02:36 UTC

Ldap Operations

Hi !

Time to discuss about Ldap operations.

We have two kind of messages, Requests and Responses. They both are 
LdapMessages. Let's start with Requests

Requests :
----------


The list of existing Requests is :

Abandon
Add
Bind
Compare
Delete
Extended
Modify
ModifyDn
Search
Unbind

Some of them can be abandoned, two can't (Abandon, and Unbind)

Abandonable requests :

Add
Bind
Compare
Delete
Extended
Modify
ModifyDn
Search


Responses :
-----------

Before IntermediateResponse was introduced in RFC 4511, we were able to 
distinguish between three kind of requests accordingly to their 
associated responses  :
- Requests with no expected responses : Unbind, Abandon
- Requests with a single expected response : Add, Bind, Compare, Delete, 
Extended, Modify, ModifyDN
- Requests with a multiple expected response : Search.

Since RFC 4511 introduced the Intermediate response, things have 
changed. Any request expecting a response may have a multiple response, 
assuming that it has been sent with a control which semantic implies 
that we may receive zero to many intermediate responses.

We cannot then distinguish requests in more than two kinds : those with 
no response, and those with multiple responses.


Hierarchy :
----------

In order to reflect this, we can define a pretty simple hierarchy of 
<interfaces> ad [classes] :

<LdapMessage>
   ^
   |
   +-- <Request>
   |      ^
   |      |
   |      +-- <RequestWithResponse>
   |      +-- <RequestWithoutResponse>
   |
   +-- <Response>
          ^
          |
          +-- <SearchResponse>


<Abandonable>


<RequestWithResponse> <--+
                           \
                            +-- [AddRequest], [BindRequest], 
[CompareRequest], [DeleteRequest], [ExtendedRequest],
                           /    [ModifyRequest], [ModifyDnRequest], 
[SearchRequest]
<Abandonable> <----------+


<RequestWithoutResponse> <-- [AbandonRequest], [UnbindRequest]

<Response> <-- [AddResponse], [BindResponse], [CompareResponse], 
[DeleteResponse], [ExtendedResponse],
                [ModifyResponse], [ModifyDnResponse], [IntermediateResponse]

<SearchResponse> <-- [SearchResultEntry], [SearchResultReference], 
[SearchResultDone]


Thoughts ?

-- 
Regards,
Cordialement,
Emmanuel Lécharny
www.nextury.com