X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldap%2Fextended.c;h=070466ae0355ec1f3059dcfd83af98c6e37f1188;hb=00dae75f7b48b6bab23503d211deb7650aba8c1b;hp=d4202d4c2b7e8971c9c3ee35382447ee9d7ef4e2;hpb=1d919d35a537ca1a0f3ade0d9527e8d0f6cb5397;p=openldap diff --git a/servers/slapd/back-ldap/extended.c b/servers/slapd/back-ldap/extended.c index d4202d4c2b..070466ae03 100644 --- a/servers/slapd/back-ldap/extended.c +++ b/servers/slapd/back-ldap/extended.c @@ -56,8 +56,8 @@ ldap_back_extended( * called twice; maybe we could avoid the * ldap_back_dobind() call inside each extended() * call ... */ - lc = ldap_back_getconn( op, rs ); - if ( !lc || !ldap_back_dobind( lc, op, rs ) ) { + lc = ldap_back_getconn( op, rs, LDAP_BACK_SENDERR ); + if ( !lc || !ldap_back_dobind( lc, op, rs, LDAP_BACK_SENDERR ) ) { return -1; } @@ -68,7 +68,8 @@ ldap_back_extended( op->o_ctrls = oldctrls; send_ldap_result( op, rs ); rs->sr_text = NULL; - return rs->sr_err; + rc = rs->sr_err; + goto done; } rc = ( *exop_table[i].extended )( op, rs ); @@ -79,6 +80,11 @@ ldap_back_extended( } op->o_ctrls = oldctrls; +done:; + if ( lc != NULL ) { + ldap_back_release_conn( op, rs, lc ); + } + return rc; } } @@ -99,8 +105,8 @@ ldap_back_exop_passwd( int rc, isproxy; int do_retry = 1; - lc = ldap_back_getconn( op, rs ); - if ( !lc || !ldap_back_dobind( lc, op, rs ) ) { + lc = ldap_back_getconn( op, rs, LDAP_BACK_SENDERR ); + if ( !lc || !ldap_back_dobind( lc, op, rs, LDAP_BACK_SENDERR ) ) { return -1; } @@ -154,7 +160,7 @@ retry: rs->sr_err = slap_map_api2result( rs ); if ( rs->sr_err == LDAP_UNAVAILABLE && do_retry ) { do_retry = 0; - if ( ldap_back_retry(lc, op, rs ) ) { + if ( ldap_back_retry( lc, op, rs, LDAP_BACK_SENDERR ) ) { goto retry; } } @@ -170,5 +176,9 @@ retry: rc = -1; } + if ( lc != NULL ) { + ldap_back_release_conn( op, rs, lc ); + } + return rc; }