mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 08:39:37 -05:00
ITS#4541 better fix
This commit is contained in:
parent
da0ec66ceb
commit
ff40a705da
4 changed files with 46 additions and 35 deletions
|
|
@ -602,23 +602,31 @@ ldap_int_sasl_bind(
|
|||
return ld->ld_errno;
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
#ifdef LDAP_R_COMPILE
|
||||
ldap_pvt_thread_mutex_lock( &ld->ld_req_mutex );
|
||||
#endif
|
||||
ber_sockbuf_ctrl( ld->ld_sb, LBER_SB_OPT_GET_FD, &sd );
|
||||
|
||||
if ( sd == AC_SOCKET_INVALID ) {
|
||||
/* not connected yet */
|
||||
int rc;
|
||||
|
||||
rc = ldap_open_defconn( ld );
|
||||
if( rc < 0 ) return ld->ld_errno;
|
||||
|
||||
ber_sockbuf_ctrl( ld->ld_defconn->lconn_sb,
|
||||
LBER_SB_OPT_GET_FD, &sd );
|
||||
if ( rc == 0 ) {
|
||||
ber_sockbuf_ctrl( ld->ld_defconn->lconn_sb,
|
||||
LBER_SB_OPT_GET_FD, &sd );
|
||||
|
||||
if( sd == AC_SOCKET_INVALID ) {
|
||||
ld->ld_errno = LDAP_LOCAL_ERROR;
|
||||
return ld->ld_errno;
|
||||
if( sd == AC_SOCKET_INVALID ) {
|
||||
ld->ld_errno = LDAP_LOCAL_ERROR;
|
||||
rc = ld->ld_errno;
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef LDAP_R_COMPILE
|
||||
ldap_pvt_thread_mutex_unlock( &ld->ld_req_mutex );
|
||||
#endif
|
||||
if( rc != 0 ) return ld->ld_errno;
|
||||
|
||||
oldctx = ld->ld_defconn->lconn_sasl_authctx;
|
||||
|
||||
|
|
|
|||
|
|
@ -255,12 +255,18 @@ ldap_get_kerberosv4_credentials(
|
|||
return( NULL );
|
||||
}
|
||||
|
||||
err = 0;
|
||||
#ifdef LDAP_R_COMPILE
|
||||
ldap_pvt_thread_mutex_lock( &ld->ld_req_mutex );
|
||||
#endif
|
||||
if ( ber_sockbuf_ctrl( ld->ld_sb, LBER_SB_OPT_GET_FD, NULL ) == -1 ) {
|
||||
/* not connected yet */
|
||||
int rc = ldap_open_defconn( ld );
|
||||
|
||||
if( rc < 0 ) return NULL;
|
||||
err = ldap_open_defconn( ld );
|
||||
}
|
||||
#ifdef LDAP_R_COMPILE
|
||||
ldap_pvt_thread_mutex_unlock( &ld->ld_req_mutex );
|
||||
#endif
|
||||
if ( err < 0 ) return NULL;
|
||||
|
||||
krbinstance = ld->ld_defconn->lconn_krbinstance;
|
||||
|
||||
|
|
|
|||
|
|
@ -35,28 +35,19 @@
|
|||
#include "ldap-int.h"
|
||||
#include "ldap_log.h"
|
||||
|
||||
/* Caller should hold the req_mutex if simultaneous accesses are possible */
|
||||
int ldap_open_defconn( LDAP *ld )
|
||||
{
|
||||
int rc = 0;
|
||||
ld->ld_defconn = ldap_new_connection( ld,
|
||||
&ld->ld_options.ldo_defludp, 1, 1, NULL );
|
||||
|
||||
#ifdef LDAP_R_COMPILE
|
||||
ldap_pvt_thread_mutex_lock( &ld->ld_req_mutex );
|
||||
#endif /* LDAP_R_COMPILE */
|
||||
if ( ld->ld_defconn == NULL ) {
|
||||
ld->ld_defconn = ldap_new_connection( ld,
|
||||
&ld->ld_options.ldo_defludp, 1, 1, NULL );
|
||||
|
||||
if( ld->ld_defconn == NULL ) {
|
||||
ld->ld_errno = LDAP_SERVER_DOWN;
|
||||
rc = -1;
|
||||
} else {
|
||||
++ld->ld_defconn->lconn_refcnt; /* so it never gets closed/freed */
|
||||
}
|
||||
if( ld->ld_defconn == NULL ) {
|
||||
ld->ld_errno = LDAP_SERVER_DOWN;
|
||||
return -1;
|
||||
}
|
||||
#ifdef LDAP_R_COMPILE
|
||||
ldap_pvt_thread_mutex_unlock( &ld->ld_req_mutex );
|
||||
#endif /* LDAP_R_COMPILE */
|
||||
return rc;
|
||||
|
||||
++ld->ld_defconn->lconn_refcnt; /* so it never gets closed/freed */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -93,19 +93,25 @@ ldap_send_initial_request(
|
|||
BerElement *ber,
|
||||
ber_int_t msgid)
|
||||
{
|
||||
int rc;
|
||||
int rc = 1;
|
||||
|
||||
Debug( LDAP_DEBUG_TRACE, "ldap_send_initial_request\n", 0, 0, 0 );
|
||||
|
||||
#ifdef LDAP_R_COMPILE
|
||||
ldap_pvt_thread_mutex_lock( &ld->ld_req_mutex );
|
||||
#endif
|
||||
if ( ber_sockbuf_ctrl( ld->ld_sb, LBER_SB_OPT_GET_FD, NULL ) == -1 ) {
|
||||
/* not connected yet */
|
||||
int rc = ldap_open_defconn( ld );
|
||||
|
||||
if( rc < 0 ) {
|
||||
ber_free( ber, 1 );
|
||||
return( -1 );
|
||||
}
|
||||
rc = ldap_open_defconn( ld );
|
||||
|
||||
}
|
||||
#ifdef LDAP_R_COMPILE
|
||||
ldap_pvt_thread_mutex_unlock( &ld->ld_req_mutex );
|
||||
#endif
|
||||
if( rc < 0 ) {
|
||||
ber_free( ber, 1 );
|
||||
return( -1 );
|
||||
} else if ( rc == 0 ) {
|
||||
Debug( LDAP_DEBUG_TRACE,
|
||||
"ldap_open_defconn: successful\n",
|
||||
0, 0, 0 );
|
||||
|
|
|
|||
Loading…
Reference in a new issue