]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9302 fix pwdFailireTime mutex scope
authorHoward Chu <hyc@openldap.org>
Thu, 30 Jul 2020 16:53:25 +0000 (17:53 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 30 Jul 2020 22:07:49 +0000 (22:07 +0000)
servers/slapd/overlays/ppolicy.c

index 5576ab80757ea26d30f474f403360050bcea13c6..d3a7b612e1570928ec29525d7a0b074aa2896276 100644 (file)
@@ -56,6 +56,7 @@ typedef struct pp_info {
        int hash_passwords;             /* transparently hash cleartext pwds */
        int forward_updates;    /* use frontend for policy state updates */
        int send_netscape_controls;     /* send netscape password controls */
+       ldap_pvt_thread_mutex_t pwdFailureTime_mutex;
 } pp_info;
 
 /* Our per-connection info - note, it is not per-instance, it is 
@@ -211,7 +212,6 @@ static struct schema_info pwd_UsSchema[] = {
 };
 
 static ldap_pvt_thread_mutex_t chk_syntax_mutex;
-static ldap_pvt_thread_mutex_t pwdFailureTime_mutex;
 
 enum {
        PPOLICY_DEFAULT = 1,
@@ -1000,13 +1000,13 @@ ppolicy_bind_response( Operation *op, SlapReply *rs )
                goto locked;
        }
 
-       ldap_pvt_thread_mutex_lock( &pwdFailureTime_mutex );
+       ldap_pvt_thread_mutex_lock( &pi->pwdFailureTime_mutex );
        op->o_bd->bd_info = (BackendInfo *)on->on_info;
        rc = be_entry_get_rw( op, &op->o_req_ndn, NULL, NULL, 0, &e );
        op->o_bd->bd_info = bi;
 
        if ( rc != LDAP_SUCCESS ) {
-               ldap_pvt_thread_mutex_unlock( &pwdFailureTime_mutex );
+               ldap_pvt_thread_mutex_unlock( &pi->pwdFailureTime_mutex );
                return SLAP_CB_CONTINUE;
        }
 
@@ -1330,7 +1330,7 @@ locked:
                op->o_callback->sc_cleanup = ppolicy_ctrls_cleanup;
        }
        op->o_bd->bd_info = bi;
-       ldap_pvt_thread_mutex_unlock( &pwdFailureTime_mutex );
+       ldap_pvt_thread_mutex_unlock( &pi->pwdFailureTime_mutex );
        return SLAP_CB_CONTINUE;
 }
 
@@ -2423,6 +2423,7 @@ ppolicy_db_init(
 )
 {
        slap_overinst *on = (slap_overinst *) be->bd_info;
+       pp_info *pi;
 
        if ( SLAP_ISGLOBALOVERLAY( be ) ) {
                /* do not allow slapo-ppolicy to be global by now (ITS#5858) */
@@ -2467,7 +2468,7 @@ ppolicy_db_init(
                }
        }
 
-       on->on_bi.bi_private = ch_calloc( sizeof(pp_info), 1 );
+       pi = on->on_bi.bi_private = ch_calloc( sizeof(pp_info), 1 );
 
        if ( !pwcons ) {
                /* accommodate for c_conn_idx == -1 */
@@ -2477,7 +2478,7 @@ ppolicy_db_init(
 
        ov_count++;
 
-       ldap_pvt_thread_mutex_init( &pwdFailureTime_mutex );
+       ldap_pvt_thread_mutex_init( &pi->pwdFailureTime_mutex );
 
        return 0;
 }
@@ -2514,6 +2515,7 @@ ppolicy_db_destroy(
        pp_info *pi = on->on_bi.bi_private;
 
        on->on_bi.bi_private = NULL;
+       ldap_pvt_thread_mutex_destroy( &pi->pwdFailureTime_mutex );
        free( pi->def_policy.bv_val );
        free( pi );
 
@@ -2524,7 +2526,6 @@ ppolicy_db_destroy(
                pwc--;
                ch_free( pwc );
        }
-       ldap_pvt_thread_mutex_destroy( &pwdFailureTime_mutex );
        return 0;
 }