Re: draft-ietf-ldapbis-protocol - controls

Mark Ennis <[email protected]> Wed, 30 Mar 2005 12:15:30 +1000
Newsgroups gmane.ietf.ldapbis
Message-ID <[email protected]>
I have used the term "appropriate" as I interpret its meaning from 
RFC2251 and [protocols] where it is used as "appropriate for the 
operation". I would consider this to be constrained by the control 
specification and any implementation constraints imposed by the server 
implementation.

- Mark.

P.S. My apologies to any who recieved my previous posting more than once.

Howard Chu wrote:
> Mark Ennis wrote:
> 
>> As indicated in the message Jim referenced, our server will ignore the 
>> criticality flag of a control it recognises. However, this does not 
>> entirely address the issue Howard raised.
> 
> 
>> In a distributed environment, a server receiving a request may need to 
>> chain this request to a number of other servers, where the support of 
>> various controls in the different servers may be different. Where a 
>> given server receiving a chained request does not support a control, 
>> it will base its processing decision on the criticality of the 
>> control. So even if the server which received the request from the 
>> client can support a given control, the control will potentially be 
>> ignored for some part of the result set. This results in the effective 
>> behaviour of the server, which received the original request from the 
>> client, ignoring the non-critical control for some contexts, even 
>> though it does support the control. This is the way our server 
>> effectively behaves.
> 
> 
> Yes, exactly. If we persist with this mandate that servers return errors 
> for recognized, unusable non-critical controls, and tell client writers 
> to prepare for these error cases, we will have clients relying on these 
> error returns when the result is in fact unreliable. That is clearly a 
> broken spec.
> 
>> The only way around this, at present, would seem to be to force all 
>> the controls in a chained request to be critical, which would seem to 
>> be counter to the client's request that the processing of a 
>> non-critical control is optional.
> 
> 
> Right.
> 
>>
>> Our policy is to handle controls, in general, in the way John 
>> McMeeking described, which is to ignore unsupported and inapropriate 
>> non-critical controls.
> 
> 
> Please, we're all using the word "appropriate" in these responses but 
> not all with same meaning. I believe your response and John's response 
> are the more liberal interpretation, not "appropriate as defined by the 
> control's specification", but it would be best to be clear and explicit.
> 
>>
>> - Mark.
>>
>> Jim Sermersheim wrote:
>>
>>>> From another vendor:
>>>
>>>
>>> http://www.openldap.org/lists/ietf-ldapbis/200403/msg00055.html
>>>
>>>
>>>>>> "Jim Sermersheim" <[email protected]> 3/29/05 5:08:37 PM >>>
>>>
>>>
>>>
>>>
>>> Our implementations do this:
>>>  
>>> Is the control recognized and appropriate (as specified) for the 
>>> operation?
>>>    Yes, process the operation
>>>    No, Is it marked critical?
>>>       Yes, fail with unavailable critical extension
>>>       No, Ignore the control and process the operation
>>>  
>>> This has been discussed at length in the past, and consensus was that 
>>> this was the original intent and that this is what should be conveyed 
>>> in the new document.
>>>  
>>> IIRC, there were interoperability side effects of allowing 
>>> "appropriate" to mean anything the server wishes it to mean.
>>>  
>>> Jim
>>>
>>>
>>>>>> "Kurt D. Zeilenga" <[email protected]> 3/29/05 12:14:07 PM >>>
>>>
>>>
>>>
>>> At 10:01 AM 3/29/2005, Jim Sermersheim wrote:
>>>
>>>> Appropriate means that the control specification says it can be 
>>>> applied to that operation. I can add that clarification.
>>>
>>>
>>>
>>>
>>> That seems what the WG has concluded, but I still for wonder
>>> if that's best. It certainly seem counter to how many
>>> implementor have interpreted the RFC 2251 language, as well
>>> as quite counter-intuitive to me.
>>>
>>> To test the waters, I implemented code in OpenLDAP 2.3beta
>>> which behaves as the WG concluded. If a client asks for
>>> paged results (regardless of critical), the server returns
>>> unwillingToPerform if it cannot honor this control for
>>> the particular search operation requested. However, this
>>> is not the behavior client developers seem to expect. They
>>> assume that if the client says paging is not critical
>>> to them, that the server should simply ignore the control
>>> if it not willing to honor the control for that operation.
>>>
>>> It seems they expect this behavior, not only based on how
>>> they RFC 2251, but how many current servers behave today.
>>> I wonder how other servers which have different capabilities
>>> in different contexts behave? I understand that many servers
>>> support configuration and monitoring contexts, it is likely
>>> that these contexts do not support all the same capabilities
>>> of DIT contexts. So, are there cases in your server
>>> (or other servers you are familiar with) ignores a
>>> recognized non-critical control attached to an applicable
>>> request? (applicable here meaning that the technical
>>> specification indicated the control was appropriate to that
>>> kind of request)
>>>
>>> Personally, I think the logic that RFC 2251 was intending
>>> was that a server should not apply non-critical controls to
>>> portions of the operation. It must up front (before
>>> initiating the operation) make a determination whether
>>> to make use of the control or to ignore it. Once
>>> it does choose to make use of the control in the operation,
>>> there is no going back. This implies, for instance, that
>>> if a client asks for non-critical FOO and the server
>>> involves other servers in the evaluation of the operation,
>>> that all the servers involved must either all provide
>>> paging or none provide FOO. If the first server decides
>>> to provide FOO, then it must indicate to the other servers
>>> that FOO is now critical. If the first server decides
>>> not to provide FOO, then it must indicate to the other
>>> servers that FOO is not to be provided (e.g., remove the
>>> control).
>>>
>>> Kurt
>>>
>>>
>>>
>>>
>>>
>>>
>>
> 
>