[svn] commit: r1968 - in /branches/trac185/src/bin/xfrin: ./ tests/xfrin_test.py xfrin.py.in

BIND 10 source code commits bind10-changes at lists.isc.org
Fri May 28 23:09:09 UTC 2010


Author: jinmei
Date: Fri May 28 23:09:09 2010
New Revision: 1968

Log:
- work around Linux's buggy getaddrinfo() implementation
- make sure an invalid IPv4 address is tested

Modified:
    branches/trac185/src/bin/xfrin/   (props changed)
    branches/trac185/src/bin/xfrin/tests/xfrin_test.py
    branches/trac185/src/bin/xfrin/xfrin.py.in

Modified: branches/trac185/src/bin/xfrin/tests/xfrin_test.py
==============================================================================
--- branches/trac185/src/bin/xfrin/tests/xfrin_test.py (original)
+++ branches/trac185/src/bin/xfrin/tests/xfrin_test.py Fri May 28 23:09:09 2010
@@ -437,9 +437,8 @@
         self.assertRaises(XfrinException, self._do_parse)
 
     def test_parse_cmd_params_bad_ip4(self):
-        self.args['master'] = '3.3.3'
-        # There should be no exception 
-        self._do_parse()
+        self.args['master'] = '3.3.3.3.3'
+        self.assertRaises(XfrinException, self._do_parse)
 
     def test_parse_cmd_params_bad_ip6(self):
         self.args['master'] = '1::1::1'
@@ -450,8 +449,7 @@
         self.assertRaises(XfrinException, self._do_parse)
 
         self.args['port'] = '65536'
-        # There should be no exception 
-        self._do_parse()
+        self.assertRaises(XfrinException, self._do_parse)
 
         self.args['port'] = 'http'
         self.assertRaises(XfrinException, self._do_parse)

Modified: branches/trac185/src/bin/xfrin/xfrin.py.in
==============================================================================
--- branches/trac185/src/bin/xfrin/xfrin.py.in (original)
+++ branches/trac185/src/bin/xfrin/xfrin.py.in Fri May 28 23:09:09 2010
@@ -489,6 +489,16 @@
     signal.signal(signal.SIGINT, signal_handler)
 
 def check_addr_port(addrstr, portstr):
+    # XXX: Linux (glibc)'s getaddrinfo incorrectly accepts numeric port
+    # string larger than 65535.  So we need to explicit validate it separately.
+    try:
+        portnum = int(portstr)
+        if portnum < 0 or portnum > 65535:
+            raise ValueError("invalid port number (out of range): " + portstr)
+    except ValueError as err:
+        raise XfrinException("failed to resolve master address/port=%s/%s: %s" %
+                             (addrstr, portstr, str(err)))
+
     try:
         addrinfo = socket.getaddrinfo(addrstr, portstr, socket.AF_UNSPEC,
                                       socket.SOCK_STREAM, socket.IPPROTO_TCP,




More information about the bind10-changes mailing list