summaryrefslogtreecommitdiffstats
path: root/servers/slapd/back-meta/bind.c
diff options
context:
space:
mode:
Diffstat (limited to 'servers/slapd/back-meta/bind.c')
-rw-r--r--servers/slapd/back-meta/bind.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/servers/slapd/back-meta/bind.c b/servers/slapd/back-meta/bind.c
index edfabbb..2fce8dd 100644
--- a/servers/slapd/back-meta/bind.c
+++ b/servers/slapd/back-meta/bind.c
@@ -1,7 +1,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1999-2022 The OpenLDAP Foundation.
+ * Copyright 1999-2024 The OpenLDAP Foundation.
* Portions Copyright 2001-2003 Pierangelo Masarati.
* Portions Copyright 1999-2003 Howard Chu.
* All rights reserved.
@@ -89,10 +89,11 @@ meta_back_bind( Operation *op, SlapReply *rs )
return rs->sr_err;
}
+ candidates = meta_back_candidates_get( op );
/* we need meta_back_getconn() not send result even on error,
* because we want to intercept the error and make it
* invalidCredentials */
- mc = meta_back_getconn( op, rs, NULL, LDAP_BACK_BIND_DONTSEND );
+ mc = meta_back_getconn( op, rs, NULL, LDAP_BACK_BIND_DONTSEND, candidates );
if ( !mc ) {
Debug(LDAP_DEBUG_ANY,
"%s meta_back_bind: no target " "for dn \"%s\" (%d%s%s).\n",
@@ -110,11 +111,10 @@ meta_back_bind( Operation *op, SlapReply *rs )
break;
}
send_ldap_result( op, rs );
+ op->o_tmpfree( candidates, op->o_tmpmemctx );
return rs->sr_err;
}
- candidates = meta_back_candidates_get( op );
-
/*
* Each target is scanned ...
*/
@@ -284,10 +284,12 @@ meta_back_bind( Operation *op, SlapReply *rs )
rs->sr_err = slap_map_api2result( rs );
}
send_ldap_result( op, rs );
+ op->o_tmpfree( candidates, op->o_tmpmemctx );
return rs->sr_err;
}
+ op->o_tmpfree( candidates, op->o_tmpmemctx );
return LDAP_SUCCESS;
}
@@ -672,7 +674,8 @@ meta_back_dobind(
Operation *op,
SlapReply *rs,
metaconn_t *mc,
- ldap_back_send_t sendok )
+ ldap_back_send_t sendok,
+ SlapReply *candidates )
{
metainfo_t *mi = ( metainfo_t * )op->o_bd->be_private;
@@ -680,8 +683,6 @@ meta_back_dobind(
i,
isroot = 0;
- SlapReply *candidates;
-
if ( be_isroot( op ) ) {
isroot = 1;
}
@@ -704,8 +705,6 @@ meta_back_dobind(
goto done;
}
- candidates = meta_back_candidates_get( op );
-
for ( i = 0; i < mi->mi_ntargets; i++ ) {
metatarget_t *mt = mi->mi_targets[ i ];
metasingleconn_t *msc = &mc->mc_conns[ i ];
@@ -761,7 +760,7 @@ retry_binding:;
if ( rc == LDAP_UNAVAILABLE ) {
/* FIXME: meta_back_retry() already re-calls
* meta_back_single_dobind() */
- if ( meta_back_retry( op, rs, &mc, i, sendok ) ) {
+ if ( meta_back_retry( op, rs, &mc, i, sendok, candidates ) ) {
goto retry_ok;
}