]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/backglue.c
Converted ch_calloc and ch_malloc calls to SLAP_CALLOC and SLAP_MALLOC.
[openldap] / servers / slapd / backglue.c
index e2afd091567ab08fa75260252ca744500652333b..b2665549b07810dccf4057f2985b9b8d419a6c56 100644 (file)
@@ -294,7 +294,6 @@ glue_back_search (
        BackendDB *be;
        int i, rc = 0, t2limit = 0, s2limit = 0;
        long stoptime = 0;
-       struct berval bv;
        glue_state gs = {0};
        slap_callback cb;
 
@@ -373,7 +372,7 @@ glue_back_search (
                                        s2limit, t2limit, filter, filterstr,
                                        attrs, attrsonly);
 
-                       } else if (dnIsSuffix(&bv, &be->be_nsuffix[0])) {
+                       } else if (dnIsSuffix(ndn, &be->be_nsuffix[0])) {
                                rc = be->be_search (be, conn, op, dn, ndn,
                                        scope, deref,
                                        s2limit, t2limit, filter, filterstr,
@@ -413,8 +412,15 @@ glue_back_bind (
        be = glue_back_select (b0, ndn->bv_val);
 
        if (be && be->be_bind) {
-               conn->c_authz_backend = be;
                rc = be->be_bind (be, conn, op, dn, ndn, method, cred, edn);
+
+               if( rc == LDAP_SUCCESS ) {
+                       ldap_pvt_thread_mutex_lock( &conn->c_mutex );
+                       if( conn->c_authz_backend == NULL ) {
+                               conn->c_authz_backend = be;
+                       }
+                       ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
+               }
        } else {
                rc = LDAP_UNWILLING_TO_PERFORM;
                send_ldap_result (conn, op, rc, NULL, "No bind target found",