]> 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:32 +0000 (14:10 +1100)
CHANGES
lib/dns/dispatch.c

diff --git a/CHANGES b/CHANGES
index 5a9e9bf7f0f339bd6a5de686feb6c62d0485eed4..5b459ee63c1c4d460c10a972af6ee34c893e0902 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 980b640d68a53d6d982f886f037eaf38662250f4..4c1c9f54f1051c323d19c7c9afefe98712de5af3 100644 (file)
@@ -2940,12 +2940,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);
                }
 
                /*