]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3465. [bug] Handle isolated reserved ports. [RT #31778]
authorMark Andrews <marka@isc.org>
Fri, 11 Jan 2013 03:10:07 +0000 (14:10 +1100)
committerMark Andrews <marka@isc.org>
Fri, 11 Jan 2013 03:10:07 +0000 (14:10 +1100)
CHANGES
lib/dns/dispatch.c

diff --git a/CHANGES b/CHANGES
index 7314caa79abaa417f920b4493b55a61d84f8008b..da861f06b83b2f1b13410f0e85b74d545c5b9c76 100644 (file)
--- 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]
 
index b9086b737b62c074f15490376a9b0152ced12997..08c800ef5b3c40f63bfba761761b30b2c20b4707 100644 (file)
@@ -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);
                }
 
                /*