mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
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:
parent
a7bd9dc4f8
commit
690f0111e9
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user