]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/request.c
Renamed ppcontrol.c to ppolicy.c
[openldap] / libraries / libldap / request.c
index 6e4985751452703c727fcd9fd8d472c4dbe22b8f..b289bfcb655506db9dfda03ead490632afe2384e 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2003 The OpenLDAP Foundation.
+ * Copyright 1998-2004 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -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