At 02:09 PM 10/7/2005, Howard Chu wrote:
>Kurt D. Zeilenga wrote:
>>At 11:06 AM 10/7/2005, Howard Chu wrote:
>>
>>>On the other hand, when exactly is it possible for a single request to have
>>>more than one result message?
>>>
>>
>>In LDAP, there can be many intermediate responses (as in a search
>>entries, search references, and extended intermediate responses)
>>to a single request, but only one of those responses contains
>>the final result (as in searchResultDone).
>>
>
>Yes, but none of those (search entry, search reference, or intermediate)
>responses are *Result* messages.
LDAP, at times, refers to any response as a result message:
SearchResultEntry
SearchResultReference
SearchResultDone
>Notice in libldap/error.c that it explicitly excludes those three response
>types when looking for Result messages. Since in fact the protocol only allows
>*one* Result message per Request, and every new Request gets its own msgID and
>its own place in the request queue, I conclude that
>LDAP_MORE_RESULTS_TO_RETURN is an impossible condition.
A message chain can old responses from multiple requests...
>>
>>>Googling for LDAP_MORE_RESULTS_TO_RETURN shows that at least Sun/Netscape
>>>think this can only happen as the result of a SASL Bind request.
>>>But there's nothing in the protocol spec (or LDAPbis drafts) that mentions
>>>this.
>>>
>>
>>LDAP_MORE_RESULTS_TO_RETURN is an API error, not a protocol result
>>code, and hence not discussed in protocol specifications.
>>
>
>I hoped some rationale would be in some IETF document somewhere. The note in
>the expired C API draft says it was added for LDAPv3 support.
That comment only means its a post-RFC 1823 addition.
>>>It appears that this error code has no real application, and "Find the next
>>>result..." is wasted effort. What's really going on here?
>>>
>>
>>The API error is used in two places in libldap. One
>>in returning a SASL_CONTINUE condition and in
>>ldap_parse_result() to indicate if more results are
>>in the chain.
>>
>
>Yes, in libldap/cyrus.c the sasl_err2ldap() function maps SASL_CONTINUE to
>LDAP_MORE_RESULTS_TO_RETURN. But if you check all (4) of the places where
>sasl_err2ldap() is called, you'll see that it is impossible for SASL_CONTINUE
>to ever be input to this function. So again, that's a red herring.
Correct. Only the latter use is relevant.
>And in ldap_parse_result in libldap/error.c, as I've already pointed out, we
>queue responses with their originating requests. Any LDAP Request can only
>have one Result message, regardless of how many intermediate messages may be
>included. So it appears that all accomodation for this
>LDAP_MORE_RESULTS_TO_RETURN error code is just excess baggage.
The only thing I can think it exists for handling of
message chains containing responses in reply to
multiple requests.
>--
> -- Howard Chu
> Chief Architect, Symas Corp. http://www.symas.com
> Director, Highland Sun http://highlandsun.com/hyc
> OpenLDAP Core Team http://www.openldap.org/project/