diff --git a/servers/slapd/result.c b/servers/slapd/result.c index 27a9db887b09bc598c38c0a0e3476e0e1b0ea854..13a70ed9e9c97055e0e8fc98a949cda2b33712a8 100644 --- a/servers/slapd/result.c +++ b/servers/slapd/result.c @@ -570,7 +570,8 @@ send_ldap_response( int rc = LDAP_SUCCESS; long bytes; - if (( rs->sr_err == SLAPD_ABANDON || op->o_abandon ) && !op->o_cancel ) { + /* op was actually aborted, bypass everything if client didn't Cancel */ + if (( rs->sr_err == SLAPD_ABANDON ) && !op->o_cancel ) { rc = SLAPD_ABANDON; goto clean2; } @@ -582,6 +583,12 @@ send_ldap_response( } } + /* op completed, connection aborted, bypass sending response */ + if ( op->o_abandon && !op->o_cancel ) { + rc = SLAPD_ABANDON; + goto clean2; + } + #ifdef LDAP_CONNECTIONLESS if (op->o_conn && op->o_conn->c_is_udp) ber = op->o_res_ber;