]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldap/search.c
Reverse last commit. Wrong tree.
[openldap] / servers / slapd / back-ldap / search.c
index 5290dc9b16ee20d5fb8d1aa5b03f5e15ba343d51..cdb9c581ee8347882b4f72433de59311fe65750e 100644 (file)
@@ -153,7 +153,7 @@ ldap_back_search(
        int             i;
        char            **attrs = NULL;
        int             freetext = 0;
-       int             do_retry = 1;
+       int             do_retry = 1, dont_retry = 0;
        LDAPControl     **ctrls = NULL;
        /* FIXME: shouldn't this be null? */
        const char      *save_matched = rs->sr_matched;
@@ -209,7 +209,7 @@ ldap_back_search(
        /* deal with <draft-zeilenga-ldap-t-f> filters */
        filter = op->ors_filterstr;
 retry:
-       rs->sr_err = ldap_search_ext( lc->lc_ld, op->o_req_ndn.bv_val,
+       rs->sr_err = ldap_search_ext( lc->lc_ld, op->o_req_dn.bv_val,
                        op->ors_scope, filter.bv_val,
                        attrs, op->ors_attrsonly, ctrls, NULL,
                        tv.tv_sec ? &tv : NULL,
@@ -282,8 +282,15 @@ retry:
                                rc = rs->sr_err = LDAP_TIMELIMIT_EXCEEDED;
                                goto finish;
                        }
+                       continue;
 
-               } else if ( rc == LDAP_RES_SEARCH_ENTRY ) {
+               } else {
+                       /* don't retry any more */
+                       dont_retry = 1;
+               }
+
+
+               if ( rc == LDAP_RES_SEARCH_ENTRY ) {
                        Entry           ent = { 0 };
                        struct berval   bdn = BER_BVNULL;
 
@@ -296,6 +303,7 @@ retry:
                                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 ( !BER_BVISNULL( &ent.e_name ) ) {
                                        assert( ent.e_name.bv_val != bdn.bv_val );
@@ -405,22 +413,10 @@ retry:
                        }
 
                        if ( match.bv_val != NULL ) {
-#ifndef LDAP_NULL_IS_NULL
-                               if ( match.bv_val[ 0 ] == '\0' ) {
-                                       LDAP_FREE( match.bv_val );
-                                       BER_BVZERO( &match );
-                               } else
-#endif /* LDAP_NULL_IS_NULL */
                                {
                                        match.bv_len = strlen( match.bv_val );
                                }
                        }
-#ifndef LDAP_NULL_IS_NULL
-                       if ( rs->sr_text != NULL && rs->sr_text[ 0 ] == '\0' ) {
-                               LDAP_FREE( (char *)rs->sr_text );
-                               rs->sr_text = NULL;
-                       }
-#endif /* LDAP_NULL_IS_NULL */
 
                        /* cleanup */
                        if ( references ) {
@@ -432,10 +428,10 @@ retry:
                }
        }
 
-       if ( rc == -1 ) {
+       if ( rc == -1 && dont_retry == 0 ) {
                if ( do_retry ) {
                        do_retry = 0;
-                       if ( ldap_back_retry( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
+                       if ( ldap_back_retry( &lc, op, rs, LDAP_BACK_DONTSEND ) ) {
                                goto retry;
                        }
                }