Skip to content
Snippets Groups Projects
Commit c90c9f36 authored by Pierangelo Masarati's avatar Pierangelo Masarati
Browse files

don't try to send results on abandon (ITS#3434)

parent 65a527eb
No related branches found
No related tags found
No related merge requests found
......@@ -50,9 +50,7 @@ relay_back_initialize( BackendInfo *bi )
bi->bi_op_modrdn = relay_back_op_modrdn;
bi->bi_op_add = relay_back_op_add;
bi->bi_op_delete = relay_back_op_delete;
#if 0 /* causes a deadlock */
bi->bi_op_abandon = relay_back_op_abandon;
#endif
bi->bi_op_cancel = relay_back_op_cancel;
bi->bi_extended = relay_back_op_extended;
bi->bi_entry_release_rw = relay_back_entry_release_rw;
......
......@@ -47,6 +47,13 @@ relay_back_add_cb( slap_callback *cb, struct slap_op *op )
op->o_callback = cb;
}
/*
* selects the backend if not enforced at config;
* in case of failure, behaves based on err:
* -1 don't send result
* LDAP_SUCCESS don't send result; may send referral
* any valid error send as error result
*/
static BackendDB *
relay_back_select_backend( struct slap_op *op, struct slap_rep *rs, int err )
{
......@@ -56,16 +63,16 @@ relay_back_select_backend( struct slap_op *op, struct slap_rep *rs, int err )
if ( bd == NULL ) {
bd = select_backend( &op->o_req_ndn, 0, 1 );
if ( bd == op->o_bd ) {
if ( err != LDAP_SUCCESS ) {
if ( err > LDAP_SUCCESS ) {
send_ldap_error( op, rs,
LDAP_UNWILLING_TO_PERFORM,
"would call self" );
"back-relay would call self" );
}
return NULL;
}
}
if ( bd == NULL ) {
if ( bd == NULL && err > -1 ) {
if ( default_referral ) {
rs->sr_ref = referral_rewrite( default_referral,
NULL, &op->o_req_dn, LDAP_SCOPE_DEFAULT );
......@@ -368,7 +375,7 @@ relay_back_op_abandon( struct slap_op *op, struct slap_rep *rs )
BackendDB *bd;
int rc = 1;
bd = relay_back_select_backend( op, rs, LDAP_NO_SUCH_OBJECT );
bd = relay_back_select_backend( op, rs, -1 );
if ( bd == NULL ) {
return 1;
}
......@@ -386,11 +393,6 @@ relay_back_op_abandon( struct slap_op *op, struct slap_rep *rs )
if ( op->o_callback == &cb ) {
op->o_callback = op->o_callback->sc_next;
}
} else {
send_ldap_error( op, rs, LDAP_UNWILLING_TO_PERFORM,
"operation not supported "
"within naming context" );
}
return rc;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment