+4341. [bug] 'rndc flushtree' could fail to clean the tree if there
+ wasn't a node at the specified name. [RT #41846]
+
4338. [bug] Reimplement change 4324 as it wasn't properly doing
all the required book keeping. [RT #41941]
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
+echo "I:check the check that flushname of a partial match works."
+ret=0
+in_cache txt second2.top1.flushtest.example || ret=1
+$RNDC $RNDCOPTS flushtree example
+in_cache txt second2.top1.flushtest.example && ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+echo "I:check the number of cached records remaining"
+ret=0
+dump_cache
+nrecords=`grep flushtest.example ns2/named_dump.db | grep -v '^;' | egrep '(TXT|ANY)' | wc -l`
+[ $nrecords -eq 1 ] || { ret=1; echo "I: found $nrecords records expected 1"; }
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+echo "I:check flushtree clears adb correctly"
+ret=0
+load_cache
+dump_cache
+awk '/plain success\/timeout/ {getline; getline; if ($2 == "ns.flushtest.example") exit(0); exit(1); }' ns2/named_dump.db || ret=1
+$RNDC $RNDCOPTS flushtree flushtest.example || ret=1
+dump_cache
+awk '/plain success\/timeout/ {getline; getline; if ($2 == "ns.flushtest.example") exit(1); exit(0); }' ns2/named_dump.db || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
echo "I:exit status: $status"
exit $status
goto cleanup;
result = dns_dbiterator_seek(iter, name);
+ if (result == DNS_R_PARTIALMATCH)
+ result = dns_dbiterator_next(iter);
if (result != ISC_R_SUCCESS)
goto cleanup;
dns_dbnode_t *node = NULL;
dns_db_t *db = NULL;
- if (dns_name_equal(name, dns_rootname))
+ if (tree && dns_name_equal(name, dns_rootname))
return (dns_cache_flush(cache));
LOCK(&cache->lock);
* Returns:
*\li #ISC_R_SUCCESS
*\li #ISC_R_NOTFOUND
+ *\li #DNS_R_PARTIALMATCH
+ * (node is at name above requested named when name has children)
*
*\li Other results are possible, depending on the DB implementation.
*/
}
}
-#if 1
- if (result == ISC_R_SUCCESS) {
- result = dns_rbtnodechain_current(rbtdbiter->current, iname,
- origin, NULL);
- if (result == ISC_R_SUCCESS) {
- rbtdbiter->new_origin = ISC_TRUE;
- reference_iter_node(rbtdbiter);
- }
- } else if (result == DNS_R_PARTIALMATCH) {
- result = ISC_R_NOTFOUND;
- rbtdbiter->node = NULL;
- }
-
- rbtdbiter->result = result;
-#else
if (result == ISC_R_SUCCESS || result == DNS_R_PARTIALMATCH) {
- isc_result_t tresult;
tresult = dns_rbtnodechain_current(rbtdbiter->current, iname,
origin, NULL);
if (tresult == ISC_R_SUCCESS) {
rbtdbiter->result = (result == DNS_R_PARTIALMATCH) ?
ISC_R_SUCCESS : result;
-#endif
return (result);
}
ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
result = dns_dbiterator_seek(iter, seekname);
- ATF_CHECK_EQ(result, ISC_R_NOTFOUND);
+ ATF_CHECK_EQ(result, DNS_R_PARTIALMATCH);
dns_dbiterator_destroy(&iter);
dns_db_detach(&db);
result = make_name("nonexistent." TEST_ORIGIN, seekname);
ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ result = dns_dbiterator_seek(iter, seekname);
+ ATF_CHECK_EQ(result, DNS_R_PARTIALMATCH);
+
+ result = make_name("nonexistent.", seekname);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
result = dns_dbiterator_seek(iter, seekname);
ATF_CHECK_EQ(result, ISC_R_NOTFOUND);