Commits (2)
...@@ -57,6 +57,7 @@ typedef struct pp_info { ...@@ -57,6 +57,7 @@ typedef struct pp_info {
int forward_updates; /* use frontend for policy state updates */ int forward_updates; /* use frontend for policy state updates */
int disable_write; int disable_write;
int send_netscape_controls; /* send netscape password controls */ int send_netscape_controls; /* send netscape password controls */
ldap_pvt_thread_mutex_t pwdFailureTime_mutex;
} pp_info; } pp_info;
/* Our per-connection info - note, it is not per-instance, it is /* Our per-connection info - note, it is not per-instance, it is
...@@ -1418,11 +1419,13 @@ ppolicy_bind_response( Operation *op, SlapReply *rs ) ...@@ -1418,11 +1419,13 @@ ppolicy_bind_response( Operation *op, SlapReply *rs )
goto locked; goto locked;
} }
ldap_pvt_thread_mutex_lock( &pi->pwdFailureTime_mutex );
op->o_bd->bd_info = (BackendInfo *)on->on_info; op->o_bd->bd_info = (BackendInfo *)on->on_info;
rc = be_entry_get_rw( op, &op->o_req_ndn, NULL, NULL, 0, &e ); rc = be_entry_get_rw( op, &op->o_req_ndn, NULL, NULL, 0, &e );
op->o_bd->bd_info = bi; op->o_bd->bd_info = bi;
if ( rc != LDAP_SUCCESS ) { if ( rc != LDAP_SUCCESS ) {
ldap_pvt_thread_mutex_unlock( &pi->pwdFailureTime_mutex );
return SLAP_CB_CONTINUE; return SLAP_CB_CONTINUE;
} }
...@@ -1781,6 +1784,7 @@ locked: ...@@ -1781,6 +1784,7 @@ locked:
op->o_callback->sc_cleanup = ppolicy_ctrls_cleanup; op->o_callback->sc_cleanup = ppolicy_ctrls_cleanup;
} }
op->o_bd->bd_info = bi; op->o_bd->bd_info = bi;
ldap_pvt_thread_mutex_unlock( &pi->pwdFailureTime_mutex );
return SLAP_CB_CONTINUE; return SLAP_CB_CONTINUE;
} }
...@@ -3115,6 +3119,7 @@ ppolicy_db_init( ...@@ -3115,6 +3119,7 @@ ppolicy_db_init(
) )
{ {
slap_overinst *on = (slap_overinst *) be->bd_info; slap_overinst *on = (slap_overinst *) be->bd_info;
pp_info *pi;
if ( SLAP_ISGLOBALOVERLAY( be ) ) { if ( SLAP_ISGLOBALOVERLAY( be ) ) {
/* do not allow slapo-ppolicy to be global by now (ITS#5858) */ /* do not allow slapo-ppolicy to be global by now (ITS#5858) */
...@@ -3126,7 +3131,7 @@ ppolicy_db_init( ...@@ -3126,7 +3131,7 @@ ppolicy_db_init(
return 1; return 1;
} }
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 ) { if ( !pwcons ) {
/* accommodate for c_conn_idx == -1 */ /* accommodate for c_conn_idx == -1 */
...@@ -3136,6 +3141,8 @@ ppolicy_db_init( ...@@ -3136,6 +3141,8 @@ ppolicy_db_init(
ov_count++; ov_count++;
ldap_pvt_thread_mutex_init( &pi->pwdFailureTime_mutex );
return 0; return 0;
} }
...@@ -3177,6 +3184,7 @@ ppolicy_db_destroy( ...@@ -3177,6 +3184,7 @@ ppolicy_db_destroy(
pp_info *pi = on->on_bi.bi_private; pp_info *pi = on->on_bi.bi_private;
on->on_bi.bi_private = NULL; on->on_bi.bi_private = NULL;
ldap_pvt_thread_mutex_destroy( &pi->pwdFailureTime_mutex );
free( pi->def_policy.bv_val ); free( pi->def_policy.bv_val );
free( pi ); free( pi );
......