From: Tatuya JINMEI 神明達哉 Date: Tue, 26 Aug 2008 02:04:20 +0000 (+0000) Subject: 2425. [bug] named didn't detect unavailable query source addresses X-Git-Tag: v9.3.6b1~36^2~8 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=ebacb7908afe3d62fe341f7ef9efed63d0c651a2;p=thirdparty%2Fbind9.git 2425. [bug] named didn't detect unavailable query source addresses at load time. [RT #18536] --- diff --git a/CHANGES b/CHANGES index 6041858e685..63d898e1cb4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +2425. [bug] named didn't detect unavailable query source addresses + at load time. [RT #18536] + 2424. [port] configure now probes for a working epoll implementation. Allow the use of kqueue, epoll and /dev/poll to be selected at compile diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index dd17d3524e5..cfe6cdef7b1 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dispatch.c,v 1.152 2008/08/15 17:47:18 jinmei Exp $ */ +/* $Id: dispatch.c,v 1.153 2008/08/26 02:04:20 jinmei Exp $ */ /*! \file */ @@ -2654,6 +2654,23 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, 0xffffU); if (result != ISC_R_SUCCESS) goto deallocate_dispatch; + } else { + isc_sockaddr_t sa_any; + + /* + * For dispatches using exclusive sockets with a specific + * source address, we only check if the specified address is + * available on the system. Query sockets will be created later + * on demand. + */ + isc_sockaddr_anyofpf(&sa_any, isc_sockaddr_pf(localaddr)); + if (!isc_sockaddr_eqaddr(&sa_any, localaddr)) { + result = open_socket(sockmgr, localaddr, 0, &sock); + if (sock != NULL) + isc_socket_detach(&sock); + if (result != ISC_R_SUCCESS) + goto deallocate_dispatch; + } } disp->socktype = isc_sockettype_udp; disp->socket = sock;