From 99394e9807411cbbeb9814b603c7dfa3b569388e Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 11 Jan 2013 14:10:07 +1100 Subject: [PATCH] 3465. [bug] Handle isolated reserved ports. [RT #31778] --- CHANGES | 2 ++ lib/dns/dispatch.c | 16 ++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 7314caa79a..da861f06b8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +3465. [bug] Handle isolated reserved ports. [RT #31778] + 3464. [maint] Updates to PKCS#11 openssl patches, supporting versions 0.9.8x, 1.0.0j, 1.0.1c [RT #29749] diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index b9086b737b..08c800ef5b 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -2949,12 +2949,16 @@ get_udpsocket(dns_dispatchmgr_t *mgr, dns_dispatch_t *disp, isc_sockaddr_setport(&localaddr_bound, prt); result = open_socket(sockmgr, &localaddr_bound, 0, &sock, NULL); - if (result == ISC_R_SUCCESS || - result != ISC_R_ADDRINUSE) { - disp->localport = prt; - *sockp = sock; - return (result); - } + /* + * Continue if the port choosen is already in use + * or the OS has reserved it. + */ + if (result == ISC_R_NOPERM || + result == ISC_R_ADDRINUSE) + continue; + disp->localport = prt; + *sockp = sock; + return (result); } /*