]> 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 d2d2080c8639f075947dfcfb5e3a4bacf086674a..094d76ec424a6910565514df592667e29972d1a3 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2012 The OpenLDAP Foundation.
+ * Copyright 1999-2013 The OpenLDAP Foundation.
  * Portions Copyright 1999-2003 Howard Chu.
  * Portions Copyright 2000-2003 Pierangelo Masarati.
  * All rights reserved.
@@ -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 );
        }