diff --git a/CHANGES b/CHANGES index 50f70c3d34148e86a511cced55e503325a67e902..eaa6ea62bf2cee1a0706a345ec89b5bb98211386 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,7 @@ OpenLDAP 2.4.24 Engineering Fixed libldap dnssrv port format specifier (ITS#6644) Fixed libldap GnuTLS hang on socket close (ITS#6673) Fixed libldap sasl partial write handling (ITS#6639) + Fixed libldap referral chasing (ITS#6602) Fixed libldap url parsing with NULL host (ITS#6653) Fixed liblutil getpass prompts (ITS#6702) Fixed ldapsearch segfault with deref (ITS#6638) diff --git a/libraries/libldap/request.c b/libraries/libldap/request.c index 287ce471093cf47ef23594da2b331aded36e3e8e..183e0d76af141212bf9255f90e88c471ee7739b3 100644 --- a/libraries/libldap/request.c +++ b/libraries/libldap/request.c @@ -1044,6 +1044,7 @@ ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, int sref, char * LDAPConn *lc; int rc, count, i, j, id; LDAPreqinfo rinfo; + LDAP_NEXTREF_PROC *nextref_proc = ld->ld_nextref_proc ? ld->ld_nextref_proc : ldap_int_nextref; ld->ld_errno = LDAP_SUCCESS; /* optimistic */ *hadrefp = 0; @@ -1079,15 +1080,12 @@ ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, int sref, char * refarray = refs; refs = NULL; - if ( ld->ld_nextref_proc == NULL ) { - ld->ld_nextref_proc = ldap_int_nextref; - } - /* parse out & follow referrals */ + /* NOTE: if nextref_proc == ldap_int_nextref, params is ignored */ i = -1; - for ( ld->ld_nextref_proc( ld, &refarray, &i, ld->ld_nextref_params ); + for ( nextref_proc( ld, &refarray, &i, ld->ld_nextref_params ); i != -1; - ld->ld_nextref_proc( ld, &refarray, &i, ld->ld_nextref_params ) ) + nextref_proc( ld, &refarray, &i, ld->ld_nextref_params ) ) { /* Parse the referral URL */