Commit 690f0111 authored by Howard Chu's avatar Howard Chu
Browse files

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.
parent a7bd9dc4
......@@ -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
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment