mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-07 14:18:15 +08:00
don't deadlock when a TLS uri is not responding (ITS#6167)
This commit is contained in:
parent
39c9b1ab25
commit
c39815ee28
@ -245,6 +245,9 @@ typedef struct ldapinfo_t {
|
||||
* to be checked for the presence of a certain item */
|
||||
BerVarray li_bvuri;
|
||||
ldap_pvt_thread_mutex_t li_uri_mutex;
|
||||
/* hack because when TLS is used we need to lock and let
|
||||
* the li_urllist_f function to know it's locked */
|
||||
int li_uri_mutex_do_not_lock;
|
||||
|
||||
LDAP_REBIND_PROC *li_rebind_f;
|
||||
LDAP_URLLIST_PROC *li_urllist_f;
|
||||
|
@ -691,8 +691,11 @@ ldap_back_prepare_conn( ldapconn_t *lc, Operation *op, SlapReply *rs, ldap_back_
|
||||
}
|
||||
|
||||
ldap_pvt_thread_mutex_lock( &li->li_uri_mutex );
|
||||
assert( li->li_uri_mutex_do_not_lock == 0 );
|
||||
li->li_uri_mutex_do_not_lock = 1;
|
||||
rs->sr_err = ldap_back_start_tls( ld, op->o_protocol, &is_tls,
|
||||
li->li_uri, li->li_flags, li->li_nretries, &rs->sr_text );
|
||||
li->li_uri_mutex_do_not_lock = 0;
|
||||
ldap_pvt_thread_mutex_unlock( &li->li_uri_mutex );
|
||||
if ( rs->sr_err != LDAP_SUCCESS ) {
|
||||
ldap_unbind_ext( ld, NULL, NULL );
|
||||
@ -1581,13 +1584,19 @@ ldap_back_default_urllist(
|
||||
*urllist = *url;
|
||||
*url = NULL;
|
||||
|
||||
ldap_pvt_thread_mutex_lock( &li->li_uri_mutex );
|
||||
if ( !li->li_uri_mutex_do_not_lock ) {
|
||||
ldap_pvt_thread_mutex_lock( &li->li_uri_mutex );
|
||||
}
|
||||
|
||||
if ( li->li_uri ) {
|
||||
ch_free( li->li_uri );
|
||||
}
|
||||
|
||||
ldap_get_option( ld, LDAP_OPT_URI, (void *)&li->li_uri );
|
||||
ldap_pvt_thread_mutex_unlock( &li->li_uri_mutex );
|
||||
|
||||
if ( !li->li_uri_mutex_do_not_lock ) {
|
||||
ldap_pvt_thread_mutex_unlock( &li->li_uri_mutex );
|
||||
}
|
||||
|
||||
return LDAP_SUCCESS;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user