ITS#2894 - search refs that are the immediate result of another search

ref are associated with the parent req instead of the original req, to
prevent infinite loops.
This commit is contained in:
Howard Chu 2004-01-25 10:30:10 +00:00
parent a7bd9dc4f8
commit 690f0111e9

View File

@ -725,6 +725,7 @@ ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, int sref, char *
char **refarray = NULL;
LDAPConn *lc;
int rc, count, i, j, id;
int parent_was_reference;
LDAPreqinfo rinfo;
ld->ld_errno = LDAP_SUCCESS; /* optimistic */
@ -760,6 +761,11 @@ ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, int sref, char *
goto done;
}
/* check if parent request was a search reference */
parent_was_reference = ( lr->lr_parent &&
lr->lr_parent->lr_res_msgtype == LDAP_RES_SEARCH_REFERENCE ) ?
1 : 0;
/* find original request */
for ( origreq = lr;
origreq->lr_parent != NULL;
@ -890,7 +896,8 @@ ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, int sref, char *
ldap_pvt_thread_mutex_lock( &ld->ld_req_mutex );
#endif
rc = ldap_send_server_request( ld, ber, id,
origreq, srv, NULL, &rinfo );
(sref && !parent_was_reference) ? origreq : lr,
srv, NULL, &rinfo );
#ifdef LDAP_R_COMPILE
ldap_pvt_thread_mutex_unlock( &ld->ld_req_mutex );
#endif