]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldap/search.c
Merge remote-tracking branch 'origin/mdb.master' into OPENLDAP_REL_ENG_2_4
[openldap] / servers / slapd / back-ldap / search.c
index 8e09dbb19f53b106e834d34a79c54c439e0a39a9..094d76ec424a6910565514df592667e29972d1a3 100644 (file)
@@ -554,16 +554,25 @@ retry:
                }
        }
 
-       if ( rc == -1 && dont_retry == 0 ) {
-               if ( do_retry ) {
-                       do_retry = 0;
-                       if ( ldap_back_retry( &lc, op, rs, LDAP_BACK_DONTSEND ) ) {
-                               goto retry;
+       if ( rc == -1 ) {
+               if ( dont_retry == 0 ) {
+                       if ( do_retry ) {
+                               do_retry = 0;
+                               if ( ldap_back_retry( &lc, op, rs, LDAP_BACK_DONTSEND ) ) {
+                                       goto retry;
+                               }
                        }
+
+                       rs->sr_err = LDAP_SERVER_DOWN;
+                       rs->sr_err = slap_map_api2result( rs );
+                       goto finish;
+
+               } else if ( LDAP_BACK_ONERR_STOP( li ) ) {
+                       /* if onerr == STOP */
+                       rs->sr_err = LDAP_SERVER_DOWN;
+                       rs->sr_err = slap_map_api2result( rs );
+                       goto finish;
                }
-               rs->sr_err = LDAP_SERVER_DOWN;
-               rs->sr_err = slap_map_api2result( rs );
-               goto finish;
        }
 
        /*
@@ -579,6 +588,8 @@ retry:
                rs->sr_matched = pmatch.bv_val;
                rs->sr_flags |= REP_MATCHED_MUSTBEFREED;
        }
+
+finish:;
        if ( !BER_BVISNULL( &match ) ) {
                ber_memfree( match.bv_val );
        }
@@ -587,7 +598,6 @@ retry:
                rs->sr_err = LDAP_REFERRAL;
        }
 
-finish:;
        if ( LDAP_BACK_QUARANTINE( li ) ) {
                ldap_back_quarantine( op, rs );
        }