From c90c9f36896eb93ca071df09dc90c35550e0e8e5 Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Sun, 12 Dec 2004 23:23:00 +0000 Subject: [PATCH] don't try to send results on abandon (ITS#3434) --- servers/slapd/back-relay/init.c | 2 -- servers/slapd/back-relay/op.c | 20 +++++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/servers/slapd/back-relay/init.c b/servers/slapd/back-relay/init.c index 290085afbc..0692a15fb3 100644 --- a/servers/slapd/back-relay/init.c +++ b/servers/slapd/back-relay/init.c @@ -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; diff --git a/servers/slapd/back-relay/op.c b/servers/slapd/back-relay/op.c index 669da91f49..4b6912ee7a 100644 --- a/servers/slapd/back-relay/op.c +++ b/servers/slapd/back-relay/op.c @@ -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; -- 2.39.5