michael@stroeder.com wrote:
ando@sys-net.it wrote:
The "dontUseCopy" control requires criticality to be TRUE. While this is the desirable value,
Why is this a desirable value? The answer Kurt gave on ldap-ext mailing list just mentioned direct mapping to X.511 dontUseCopy option.
Because. If you need to avoid using copy, then you strongly need it. If it's just a wish, then don't use it, assuming the DSA you contact will do no more than what it can to provide you valid data. You would otherwise be misuing the control.
a DUA could use the control with the criticality set to FALSE.
Yes, perfectly legitimate (from a DSA's point of view, as per RFC4511) but contrary to the control's specification (and, IMHO, to common sense).
As I stated on ldap-ext mailing list in this case I'd simply accept a best effort on the DSA side.
IMHO you already get the best effort by not using the control.
So sending "dontUseCopy" control with criticality FALSE would mean: If the DSA supports this control it should *process* it according to what's specified in draft-zeilenga-ldap-dontusecopy. Otherwise ignore it.
No. The spec looks broken to me, because it contradicts RFC4511 (from the DSA's point of view). The DUA must use TRUE to comply with dontUseCopy. If it doesn't, then the DSA can do its best to honor it, but nothing more. If the DSA finds out it can chain a request, but this would cost resources, it could return a referral, or simply ignore the control. All of these behaviors would comply with criticality to FALSE.
The main problem is that a DUA cannot determine in advance whether a DSA supports a certain control for a certain backend. It turned out in practice that looking a supportedControl in rootDSE does not have any meaning at all.
You got a clear answer: the only ultimate way to know is to try. If you use FALSE, you'll never know.
IMO yet another control does not solve this.
It does: you add dontUseCopy with criticality set to TRUE; you add the whatFailed control; if dontUseCopy fails, you'd know for sure. Then you don't need to use it any more, as using it with FALSE would make no sense.
For full conformance with RFC4511, if the control is syntactically well-formed and criticality is set to FALSE, slapd MUST accept it if recognized, or MUST ignore it if not recognized, but CANNOT question the fact that the value of criticality is violating the control's specification.
I'm not sure whether this statement can be made generally. I'd wish so and I'd rephrase "accept it" to "process it".
With "accept" I mean: "recognize it"; with "process" I'd mean "apply it to the operation". If you set criticality to FALSE and the DSA does not recognize it, the DSA will just ignore it. If the DSA recognizes it, it is at the DSA's discretion to either apply it or not, based on what the DSA considers best (including interoperability with the specific operation, with other extensions, with resource consumption and any other consideration about the opportunity to process it). I'm pretty sure you agree that elaving so much discretion to the DSA about something related to data integrity does not differ too much from not using the control at all.
p.