Subject: draft-ietf-ldapbis-user-schema

From: "Kurt D. Zeilenga" <[email-masked]>
Date: Mon, 21 Mar 2005 19:09:26 -0800

At my request, Andrew Sciberras <[email-masked]>
has taken over Editor duties for the draft-ietf-ldapbis-user-schema 
deliverable.  Andrew is preparing a revision addressing issues
raised during and since the WG Last Call, in particular:
	* Use modern I-D templates
	* fix references
	* correct spelling
	* correct registeredAddress example (unnecessary escaping)
	* SASLprep "stored"/"query" string clarification(s)
	* IDN toUnicode/toAscii clarification(s)
	* countryName (c) X.520 alignment

If you are aware of other technical issues which need to be
addressed, please post a summary to the list as soon as
possible so that they may be discussed and appropriate
direction given to the Editor.

Editorial issues should be sent directly to Andrew.

I have asked to Andrew to produce an I-D in the next week or
so.  After allowing for appropriate WG review of the changes
made since WG Last Call, and barring any significant new issues,
the next revision will be recommended to the IESG for
consideration.

Kurt, LDAPBIS co-chair

---

From: Howard Chu <[email-masked]>
Date: Sun, 27 Mar 2005 12:09:45 -0800

I'm pretty sure this topic was discussed before, but I need to raise it 
again. The current language regarding the treatment of non-critical 
controls is somewhat ambiguous; it does not define what is "appropriate" 
for a control and this definition is essential for interoperability.

The specific problem I'm seeing is with OpenLDAP slapd being accessed by 
(ex-CA) JXplorer. slapd advertises all the controls that it 
recognizes/supports in the rootDSE, as expected. However, not all 
controls are supported in all the contexts that the server holds. For 
example, the PagedResults control is only supported by the OpenLDAP 
back-bdb backend, other backend types don't handle it. And the slapd 
server can be configured with an arbitrary number of backends and an 
arbitrary number of types of backends.

The first problem is that there is no way to indicate that a control is 
only supported within specific contexts, as opposed to server-wide. 
Since there is only the single rootDSE to use for advertising features, 
it would be reasonable for clients to assume those features are 
server-wide but in this case they are not.

When JXplorer connects to slapd it queries the rootDSE and reads the 
subschemaSubentry before examining any user data. If it sees that 
certain controls are supported, it attaches those to the requests it 
issues, marked non-critical. (In this case, it's the manageDSAit control.)

When slapd receives this request and determines that the control is not 
actually supported in the target context, it fails the request with 
LDAP_UNWILLING_TO_PERFORM. Kurt tells me this behavior is mandated by 
the spec:

 >>If the server recognizes the control it MUST make use of it.
 >>If it is unwilling or unable to, it is obligated to return
 >>an error.

However there is no explicit statement in the spec that actually says 
this. It only says in 4.1.11 "if the server recognizes the control and 
it is appropriate for the operation, the server is to make use of the 
control when performing the operation." (Note the absence of a MUST here.)

It later says "If the server does not recognize the control type or it 
is not appropriate for the operation, and the criticality field is 
FALSE, the server MUST ignore the control."

So, the first issue with this text is that it does not explicitly say 
what the server MUST do if all of these conditions are true:
   1) the server recognizes the control
   2) the server is unable to use the control on the given operation
   3) the control's criticality is FALSE

My view is that the definition of "appropriate" covers this case - the 
server recognizes the control but it is not appropriate for the 
operation because the target context doesn't support the control. And so 
it should be silently ignored. Kurt tells me my interpretation is not 
what the WG intends. I believe for interoperability reasons it is 
necessary to adopt my interpretation, and regardless of that decision, 
it is necessary to provide more explicit language around what 
"appropriate" means in this section.

On a slightly related topic, which I only noticed while investigating 
this issue, I see that there is a specific exception noted for 
criticality on controls attached to an Unbind operation. I don't see any 
explanation of why, but I will assume it is because
   1) controls with Criticality TRUE may cause an otherwise valid 
request to fail with an error response
   2) the Unbind request is defined to have no response

The interesting points I draw from this are:
   3) contrapositive to (1), controls with Criticality FALSE may NOT 
cause an otherwise valid request to fail with an error response
   4) the Abandon request is also defined to have no response, and thus 
should have the same exception.

If (3) is true then the problem that prompted me to write this message 
is solved. Regardless, (4) probably ought to be clarified.

-- 
   -- Howard Chu
   Chief Architect, Symas Corp.       Director, Highland Sun
   http://www.symas.com               http://highlandsun.com/hyc
   Symas: Premier OpenSource Development and Support