Hallvard B Furuseth wrote:
The send_ldap_response() fix is still incomplete:
When rc == LDAP_CANCELLED, the function should not send sr_matched,
sr_text, sr_ref, and sr_ctrls. Looking at how Abandon works, it seems
slap_cleanup_play() should still see them if they are not sent?
Dunno what you mean.
Note, not just when the function itself sets rc = LDAP_CANCELLED,
since syncprov can set rs->sr_err = LDAP_CANCELLED too.
Which also suggests the assert( rs->sr_err == LDAP_REFERRAL ) when
sr_ref != NULL is rather dubious. Maybe sr_ref should just
be ignored when sending something else than LDAP_REFERRAL.
Leave the assert() in place until you have proof one way or the other.
Also, this:
rc = rs->sr_err;
if ( rc == SLAPD_ABANDON&& op->o_cancel )
rc = LDAP_CANCELLED;
will send a negative result code (SLAPD_ABANDON) if !o_cancel.
No, it won't. That is all bypassed at the top of the function.
--
-- Howard Chu
CTO, Symas Corp.
http://www.symas.com
Director, Highland Sun
http://highlandsun.com/hyc/
Chief Architect, OpenLDAP
http://www.openldap.org/project/