]> git.sur5r.net Git - openldap/commitdiff
References with empty dn (ITS#817)
authorKurt Zeilenga <kurt@openldap.org>
Wed, 11 Oct 2000 04:23:23 +0000 (04:23 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Wed, 11 Oct 2000 04:23:23 +0000 (04:23 +0000)
libraries/libldap/ldap-int.h
libraries/libldap/request.c
libraries/libldap/result.c

index 14152a939f722b7e609236488e9c17d3f343a6c5..c6978b80030b362f96fb073362da438eda10efc5 100644 (file)
@@ -440,7 +440,7 @@ LDAP_F (void) ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbin
 LDAP_F (void) ldap_dump_connection( LDAP *ld, LDAPConn *lconns, int all );
 LDAP_F (void) ldap_dump_requests_and_responses( LDAP *ld );
 LDAP_F (int) ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp );
-LDAP_F (int) ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **referralsp, int *hadrefp );
+LDAP_F (int) ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, int sref, char **referralsp, int *hadrefp );
 LDAP_F (int) ldap_append_referral( LDAP *ld, char **referralsp, char *s );
 
 /*
index f069eae76becb064ddc4d90e691fd04a96bea1db..99d312580cf69256cb5e0fa92759e6a85d92e321 100644 (file)
@@ -575,13 +575,14 @@ ldap_free_request( LDAP *ld, LDAPRequest *lr )
  *  (IN) lr = LDAP Request structure
  *  (IN) refs = array of pointers to referral strings that we will chase
  *              The array will be free'd by this function when no longer needed
+ *  (IN) sref != 0 if following search reference
  *  (OUT) errstrp = Place to return a string of referrals which could not be followed
  *  (OUT) hadrefp = 1 if sucessfully followed referral
  *
  * Return value - number of referrals followed
  */
 int
-ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **errstrp, int *hadrefp )
+ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, int sref, char **errstrp, int *hadrefp )
 {
        char            *unfollowed;
        int                      unfollowedcnt = 0;
@@ -687,6 +688,11 @@ ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **errstrp,
                 * Note: In the future we also need to replace the filter if one
                 * was provided with the search reference
                 */
+
+               /* For references we don't want old dn if new dn empty */
+               if ( sref && srv->lud_dn == NULL )
+                       srv->lud_dn = LDAP_STRDUP( "" );
+
                if (( ber = re_encode_request( ld, origreq->lr_ber,
                            ++ld->ld_msgid, &srv->lud_dn, &rinfo.ri_request )) == NULL ) {
                        ld->ld_errno = LDAP_ENCODING_ERROR;
index fb47ab1ae56588dc4ed30d2d4f8b13aba3bf99fc..3b2a0812206c60959e208b8df1003c64133cf898 100644 (file)
@@ -431,7 +431,7 @@ try_read1msg(
                                } else {
                                        /* Note: refs arrary is freed by ldap_chase_v3referrals */
                                        refer_cnt = ldap_chase_v3referrals( ld, lr, refs,
-                                           &lr->lr_res_error, &hadref );
+                                           1, &lr->lr_res_error, &hadref );
                                        if ( refer_cnt > 0 ) {  /* sucessfully chased reference */
                                                /* If haven't got end search, set chasing referrals */
                                                if( lr->lr_status != LDAP_REQST_COMPLETED) {
@@ -470,7 +470,7 @@ try_read1msg(
                                                         * Note: refs arrary is freed by ldap_chase_v3referrals
                                                         */
                                                        refer_cnt = ldap_chase_v3referrals( ld, lr, refs,
-                                                           &lr->lr_res_error, &hadref );
+                                                           0, &lr->lr_res_error, &hadref );
                                                        lr->lr_status = LDAP_REQST_COMPLETED;
                                                        Debug( LDAP_DEBUG_TRACE,
                                                            "read1msg:  referral chased, mark request completed, id = %d\n",