(BER_BVISEMPTY(&(op)->o_ndn) ? \
LDAP_BACK_PCONN_ANON_SET((lc), (op)) : LDAP_BACK_PCONN_ROOTDN_SET((lc), (op)))
+ struct ldapinfo_t *lcb_ldapinfo;
struct berval lcb_local_ndn;
unsigned lcb_refcnt;
time_t lcb_create_time;
typedef struct ldapconn_t {
ldapconn_base_t lc_base;
#define lc_conn lc_base.lcb_conn
+#define lc_ldapinfo lc_base.lcb_ldapinfo
#define lc_local_ndn lc_base.lcb_local_ndn
#define lc_refcnt lc_base.lcb_refcnt
#define lc_create_time lc_base.lcb_create_time
int *is_tls,
const char *url,
unsigned flags,
- int retries,
+ int timeout,
const char **text )
{
int rc = LDAP_SUCCESS;
LDAPMessage *res = NULL;
struct timeval tv;
- LDAP_BACK_TV_SET( &tv );
-
-retry:;
+ if ( timeout ) {
+ tv.tv_sec = timeout;
+ tv.tv_usec = 0;
+ } else {
+ LDAP_BACK_TV_SET( &tv );
+ }
rc = ldap_result( ld, msgid, LDAP_MSG_ALL, &tv, &res );
- if ( rc < 0 ) {
- rc = LDAP_UNAVAILABLE;
-
- } else if ( rc == 0 ) {
- if ( retries != LDAP_BACK_RETRY_NEVER ) {
- ldap_pvt_thread_yield();
- if ( retries > 0 ) {
- retries--;
- }
- LDAP_BACK_TV_SET( &tv );
- goto retry;
- }
+ if ( rc <= 0 ) {
rc = LDAP_UNAVAILABLE;
} else if ( rc == LDAP_RES_EXTENDED ) {
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, flags, li->li_nretries, &rs->sr_text );
+ li->li_uri, flags, li->li_timeout[ SLAP_OP_EXTENDED ], &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 ) {
lc = (ldapconn_t *)ch_calloc( 1, sizeof( ldapconn_t ) );
lc->lc_flags = li->li_flags;
lc->lc_lcflags = lc_curr.lc_lcflags;
+ lc->lc_ldapinfo = li;
if ( ldap_back_prepare_conn( lc, op, rs, sendok ) != LDAP_SUCCESS ) {
ch_free( lc );
return NULL;
const char *text = NULL;
rc = ldap_back_start_tls( ld, 0, &is_tls, url, lc->lc_flags,
- LDAP_BACK_RETRY_DEFAULT, &text );
+ lc->lc_ldapinfo->li_timeout[ SLAP_OP_EXTENDED ], &text );
if ( rc != LDAP_SUCCESS ) {
return rc;
}