Apply by doing:
cd /usr/src
patch -p0 < 032_bind.patch
Then rebuild and install bind:
cd usr.sbin/bind
make -f Makefile.bsd-wrapper obj
make -f Makefile.bsd-wrapper
make -f Makefile.bsd-wrapper install
Index: usr.sbin/bind/lib/dns/resolver.c
===================================================================
RCS file: /cvs/src/usr.sbin/bind/lib/dns/resolver.c,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -p -r1.3 -r1.3.2.1
--- usr.sbin/bind/lib/dns/resolver.c 15 Apr 2003 13:20:17 -0000 1.3
+++ usr.sbin/bind/lib/dns/resolver.c 5 Nov 2004 01:38:08 -0000 1.3.2.1
@@ -396,7 +396,7 @@ fctx_cancelquery(resquery_t **queryp, dn
*/
INSIST(no_response);
rtt = query->addrinfo->srtt +
- (100000 * fctx->restarts);
+ (200000 * fctx->restarts);
if (rtt > 10000000)
rtt = 10000000;
/*
@@ -608,7 +608,10 @@ resquery_senddone(isc_task_t *task, isc_
isc_socket_detach(&query->tcpsocket);
resquery_destroy(&query);
}
- } else if (sevent->result != ISC_R_SUCCESS)
+ } else if (sevent->result == ISC_R_HOSTUNREACH ||
+ sevent->result == ISC_R_NETUNREACH)
+ fctx_cancelquery(&query, NULL, NULL, ISC_TRUE);
+ else if (sevent->result != ISC_R_SUCCESS)
fctx_cancelquery(&query, NULL, NULL, ISC_FALSE);
isc_event_free(&event);
@@ -1189,6 +1192,10 @@ resquery_connected(isc_task_t *task, isc
ISC_FALSE);
fctx_done(fctx, result);
}
+ } else if (sevent->result == ISC_R_HOSTUNREACH ||
+ sevent->result == ISC_R_NETUNREACH) {
+ isc_socket_detach(&query->tcpsocket);
+ fctx_cancelquery(&query, NULL, NULL, ISC_TRUE);
} else {
isc_socket_detach(&query->tcpsocket);
fctx_cancelquery(&query, NULL, NULL, ISC_FALSE);