]> git.sur5r.net Git - openldap/commitdiff
ITS#5025 clear sr_entry before sending search reference
authorHoward Chu <hyc@openldap.org>
Tue, 19 Jun 2007 20:04:36 +0000 (20:04 +0000)
committerHoward Chu <hyc@openldap.org>
Tue, 19 Jun 2007 20:04:36 +0000 (20:04 +0000)
servers/slapd/back-ldap/search.c

index 9f5fcf746ca550f6b4f122e676fda866a90b371b..732fb203e7c5d72578a6e0df9cb19e42baa67edb 100644 (file)
@@ -330,12 +330,17 @@ retry:
                        e = ldap_first_entry( lc->lc_ld, res );
                        rc = ldap_build_entry( op, e, &ent, &bdn );
                        if ( rc == LDAP_SUCCESS ) {
+                               ldap_get_entry_controls( lc->lc_ld, res, &rs->sr_ctrls );
                                rs->sr_entry = &ent;
                                rs->sr_attrs = op->ors_attrs;
                                rs->sr_operational_attrs = NULL;
                                rs->sr_flags = 0;
                                rs->sr_err = LDAP_SUCCESS;
                                rc = rs->sr_err = send_search_entry( op, rs );
+                               if ( rs->sr_ctrls ) {
+                                       ldap_controls_free( rs->sr_ctrls );
+                                       rs->sr_ctrls = NULL;
+                               }
                                rs->sr_entry = NULL;
                                if ( !BER_BVISNULL( &ent.e_name ) ) {
                                        assert( ent.e_name.bv_val != bdn.bv_val );
@@ -384,6 +389,7 @@ retry:
                                BER_BVZERO( &rs->sr_ref[ cnt ] );
 
                                /* ignore return value by now */
+                               rs->sr_entry = NULL;
                                ( void )send_search_reference( op, rs );
 
                        } else {