sc2 = { 0 };
        int             rc = 0;
        int             cache = op->o_do_not_cache;
+       char            *matched;
        BerVarray       ref;
        struct berval   ndn = op->o_ndn;
 
         *   e) what ssf
         */
 
+       matched = rs->sr_matched;
+       rs->sr_matched = NULL;
        ref = rs->sr_ref;
        rs->sr_ref = NULL;
 
        op->o_bd->be_private = private;
        op->o_callback = sc;
        op->o_ndn = ndn;
+       rs->sr_matched = matched;
        rs->sr_ref = ref;
 
        ldap_pvt_thread_mutex_unlock( &lc->lc_mutex );
 
        int             freetext = 0;
        int             do_retry = 1;
        LDAPControl     **ctrls = NULL;
+       char            *save_matched = rs->sr_matched;
 
        lc = ldap_back_getconn( op, rs, LDAP_BACK_SENDERR );
        if ( !lc || !ldap_back_dobind( lc, op, rs, LDAP_BACK_SENDERR ) ) {
                rs->sr_ctrls = NULL;
        }
 
-       if ( rs->sr_matched != NULL ) {
+       if ( rs->sr_matched != NULL && rs->sr_matched != save_matched ) {
                if ( rs->sr_matched != match.bv_val ) {
                        ber_memfree_x( (char *)rs->sr_matched, op->o_tmpmemctx );
 
                } else {
                        LDAP_FREE( match.bv_val );
                }
-               rs->sr_matched = NULL;
+               rs->sr_matched = save_matched;
        }
 
        if ( !BER_BVISNULL( &filter ) && filter.bv_val != op->ors_filterstr.bv_val ) {
 
        exit 0
 fi 
 
+rm -rf $TESTDIR
+
 mkdir -p $TESTDIR $DBDIR1 $DBDIR2
 
 echo "Running slapadd to build slapd database..."
     echo PID $PID1
     read foo
 fi
+KILLPIDS="$PID1"
 
 echo "Starting second slapd on TCP/IP port $PORT2..."
 . $CONFFILTER $BACKEND $MONITORDB < $CHAINCONF2 > $CONF2
     read foo
 fi
 
-KILLPIDS="$PID1 $PID2"
+KILLPIDS="$KILLPIDS $PID2"
 
 sleep 1
 
        sleep 5
 done
 
+if test $RC != 0 ; then
+       echo "ldapsearch failed ($RC)!"
+       test $KILLSERVERS != no && kill -HUP $KILLPIDS
+       exit $RC
+fi
+
 echo "Using ldapsearch to check that second slapd is running..."
 for i in 0 1 2 3 4 5; do
        $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \
        sleep 5
 done
 
+if test $RC != 0 ; then
+       echo "ldapsearch failed ($RC)!"
+       test $KILLSERVERS != no && kill -HUP $KILLPIDS
+       exit $RC
+fi
+
 for P in $PORT1 $PORT2 ; do
        echo "Testing ldapsearch as anonymous for \"$BASEDN\" on port $P..."
        $LDAPSEARCH -h $LOCALHOST -p $P -b "$BASEDN" -S "" \