]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/bind.c
Set peeraddr also for IPv6, fixes ITS#1918
[openldap] / servers / slapd / back-ldbm / bind.c
index e244a339fcaa2f3d8fade68875b118c106e66166..2ca018d03beb83048f4e8100903b4cb275409b20 100644 (file)
@@ -1,7 +1,7 @@
 /* bind.c - ldbm backend bind and unbind routines */
 /* $OpenLDAP$ */
 /*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
@@ -50,13 +50,15 @@ ldbm_back_bind(
        Debug(LDAP_DEBUG_ARGS, "==> ldbm_back_bind: dn: %s\n", dn->bv_val, 0, 0);
 #endif
 
-
        dn = ndn;
 
+       /* grab giant lock for reading */
+       ldap_pvt_thread_rdwr_rlock(&li->li_giant_rwlock);
+
        /* get entry with reader lock */
        if ( (e = dn2entry_r( be, dn, &matched )) == NULL ) {
                char *matched_dn = NULL;
-               struct berval **refs = NULL;
+               BerVarray refs = NULL;
 
                if( matched != NULL ) {
                        matched_dn = ch_strdup( matched->e_dn );
@@ -72,6 +74,8 @@ ldbm_back_bind(
                                NULL, dn, LDAP_SCOPE_DEFAULT );
                }
 
+               ldap_pvt_thread_rdwr_runlock(&li->li_giant_rwlock);
+
                /* allow noauth binds */
                rc = 1;
                if ( method == LDAP_AUTH_SIMPLE ) {
@@ -97,7 +101,7 @@ ldbm_back_bind(
                                NULL, NULL, NULL, NULL );
                }
 
-               if ( refs ) ber_bvecfree( refs );
+               if ( refs ) ber_bvarray_free( refs );
                if ( matched_dn ) free( matched_dn );
                return( rc );
        }
@@ -126,7 +130,7 @@ ldbm_back_bind(
 
        if ( is_entry_referral( e ) ) {
                /* entry is a referral, don't allow bind */
-               struct berval **refs = get_entry_referrals( be,
+               BerVarray refs = get_entry_referrals( be,
                        conn, op, e );
 
 #ifdef NEW_LOGGING
@@ -147,7 +151,7 @@ ldbm_back_bind(
                                NULL, NULL, NULL, NULL );
                }
 
-               ber_bvecfree( refs );
+               ber_bvarray_free( refs );
 
                rc = 1;
                goto return_results;
@@ -165,7 +169,7 @@ ldbm_back_bind(
                }
 
                if ( ! access_allowed( be, conn, op, e,
-                       password, NULL, ACL_AUTH ) )
+                       password, NULL, ACL_AUTH, NULL ) )
                {
                        send_ldap_result( conn, op, LDAP_INSUFFICIENT_ACCESS,
                                NULL, NULL, NULL, NULL );
@@ -203,7 +207,7 @@ ldbm_back_bind(
                }
 
                if ( ! access_allowed( be, conn, op, e,
-                       krbattr, NULL, ACL_AUTH ) )
+                       krbattr, NULL, ACL_AUTH, NULL ) )
                {
                        send_ldap_result( conn, op, LDAP_INSUFFICIENT_ACCESS,
                                NULL, NULL, NULL, NULL );
@@ -263,6 +267,7 @@ ldbm_back_bind(
 return_results:;
        /* free entry and reader lock */
        cache_return_entry_r( &li->li_cache, e );
+       ldap_pvt_thread_rdwr_runlock(&li->li_giant_rwlock);
 
        /* front end with send result on success (rc==0) */
        return( rc );