+3837. [security] A NULL pointer is passed to query_prefetch resulting
+ a REQUIRE assertion failure when a fetch is actually
+ initiated. [ RT #35899]
+
--- 9.10.0 released ---
3824. [bug] A collision between two flag values could cause
if (rpz_st != NULL)
rdataset->ttl = ISC_MIN(rdataset->ttl,
rpz_st->m.ttl);
- if (!is_zone && RECURSIONOK(client))
- query_prefetch(client, fname, rdataset);
+ if (!is_zone && RECURSIONOK(client)) {
+ dns_name_t *name;
+ name = (fname != NULL) ? fname : tname;
+ query_prefetch(client, name, rdataset);
+ }
query_addrrset(client,
fname != NULL ? &fname : &tname,
&rdataset, NULL,
@ NS ns.tld.
ns A 10.53.0.4
fetch 10 TXT A short ttl
+fetchall 10 TXT A short ttl
+fetchall 10 A 1.2.3.4
+fetchall 10 AAAA ::1
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
+n=`expr $n + 1`
+echo "I:check prefetch qtype * (${n})"
+ret=0
+$DIG @10.53.0.5 -p 5300 fetchall.tld any > dig.out.1.${n} || ret=1
+ttl1=`awk '/"A" "short" "ttl"/ { print $2 - 2 }' dig.out.1.${n}`
+# sleep so we are in prefetch range
+sleep ${ttl1:-0}
+# trigger prefetch
+$DIG @10.53.0.5 -p 5300 fetchall.tld any > dig.out.2.${n} || ret=1
+ttl2=`awk '/"A" "short" "ttl"/ { print $2 }' dig.out.2.${n}`
+sleep 1
+# check that the nameserver is still alive
+$DIG @10.53.0.5 -p 5300 fetchall.tld any > dig.out.3.${n} || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
echo "I:exit status: $status"
exit $status
#define DNS_FETCHOPT_NOVALIDATE 0x020 /*%< Disable validation. */
#define DNS_FETCHOPT_EDNS512 0x040 /*%< Advertise a 512 byte
UDP buffer. */
-#define DNS_FETCHOPT_WANTNSID 0x080 /*%< Request NSID */
-#define DNS_FETCHOPT_PREFETCH 0x100 /*%< Request NSID */
+#define DNS_FETCHOPT_WANTNSID 0x080 /*%< Request NSID */
+#define DNS_FETCHOPT_PREFETCH 0x100 /*%< Do prefetch */
#define DNS_FETCHOPT_NOCDFLAG 0x200 /*%< Don't set CD flag. */
/* Reserved in use by adb.c 0x00400000 */