From 85e998e766df5b04145b87487c3bd158003fc6b9 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Tue, 19 Dec 2023 13:34:18 +0900 Subject: [PATCH] is_valid_ipv4: Enable strict check by default The default behavior which disables the strict check was deprecated in 4.8.0[1], which was released during wallaby cycle. [1] 3288539a0b3be6b69efd2630b79133b918bb079b Related-Bug: #1914386 Change-Id: Ia04b8774c85a519d9695aebe8b956920f9915495 --- oslo_utils/netutils.py | 27 ++++--------------- oslo_utils/tests/test_netutils.py | 16 +++-------- ...is_valid_ipv4-strict-3da92c0452aaf947.yaml | 6 +++++ 3 files changed, 15 insertions(+), 34 deletions(-) create mode 100644 releasenotes/notes/is_valid_ipv4-strict-3da92c0452aaf947.yaml diff --git a/oslo_utils/netutils.py b/oslo_utils/netutils.py index 3dd7373a..c66f389a 100644 --- a/oslo_utils/netutils.py +++ b/oslo_utils/netutils.py @@ -84,7 +84,7 @@ def parse_host_port(address, default_port=None): return (host, None if port is None else int(port)) -def is_valid_ipv4(address, strict=None): +def is_valid_ipv4(address, strict=True): """Verify that address represents a valid IPv4 address. :param address: Value to verify @@ -104,26 +104,9 @@ def is_valid_ipv4(address, strict=None): if not address: return False - if strict is not None: - flag = INET_PTON if strict else INET_ATON - try: - return netaddr.valid_ipv4(address, flags=flag) - except netaddr.AddrFormatError: - return False - - # non strict mode + flag = INET_PTON if strict else INET_ATON try: - if netaddr.valid_ipv4(address, flags=INET_PTON): - return True - else: - if netaddr.valid_ipv4(address, flags=INET_ATON): - LOG.warning( - 'Converting in non strict mode is deprecated. ' - 'You should pass strict=False if you want to ' - 'preserve legacy behavior') - return True - else: - return False + return netaddr.valid_ipv4(address, flags=flag) except netaddr.AddrFormatError: return False @@ -235,7 +218,7 @@ def get_ipv6_addr_by_EUI64(prefix, mac): msg = _("Prefix must be a string") raise TypeError(msg) # Check if the prefix is an IPv4 address - if is_valid_ipv4(prefix): + if is_valid_ipv4(prefix, False): msg = _("Unable to generate IP address by EUI64 for IPv4 prefix") raise ValueError(msg) try: @@ -327,7 +310,7 @@ def is_valid_ip(address): .. versionadded:: 1.1 """ - return is_valid_ipv4(address) or is_valid_ipv6(address) + return is_valid_ipv4(address, False) or is_valid_ipv6(address) def is_valid_mac(address): diff --git a/oslo_utils/tests/test_netutils.py b/oslo_utils/tests/test_netutils.py index b366eef3..b069f207 100644 --- a/oslo_utils/tests/test_netutils.py +++ b/oslo_utils/tests/test_netutils.py @@ -156,27 +156,19 @@ class NetworkUtilsTest(test_base.BaseTestCase): @mock.patch.object(netutils, 'LOG', autospec=True) def test_is_valid_ipv4(self, mock_log): - expected_log = 'Converting in non strict mode is deprecated. ' \ - 'You should pass strict=False if you want to preserve ' \ - 'legacy behavior' self.assertTrue(netutils.is_valid_ipv4('42.42.42.42')) self.assertFalse(netutils.is_valid_ipv4('-1.11.11.11')) self.assertFalse(netutils.is_valid_ipv4('')) - self.assertTrue(netutils.is_valid_ipv4('10')) - mock_log.warning.assert_called_with(expected_log) - mock_log.reset_mock() - self.assertTrue(netutils.is_valid_ipv4('10.10')) - mock_log.warning.assert_called_with(expected_log) - mock_log.reset_mock() - self.assertTrue(netutils.is_valid_ipv4('10.10.10')) - mock_log.warning.assert_called_with(expected_log) - mock_log.reset_mock() + self.assertFalse(netutils.is_valid_ipv4('10')) + self.assertFalse(netutils.is_valid_ipv4('10.10')) + self.assertFalse(netutils.is_valid_ipv4('10.10.10')) self.assertTrue(netutils.is_valid_ipv4('10.10.10.10')) mock_log.warning.assert_not_called() mock_log.reset_mock() + self.assertFalse( netutils.is_valid_ipv4('10', strict=True) ) diff --git a/releasenotes/notes/is_valid_ipv4-strict-3da92c0452aaf947.yaml b/releasenotes/notes/is_valid_ipv4-strict-3da92c0452aaf947.yaml new file mode 100644 index 00000000..e7111375 --- /dev/null +++ b/releasenotes/notes/is_valid_ipv4-strict-3da92c0452aaf947.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + The ``netutils.is_valid_ipv4`` method now enables the strict check by + default. To preserve the previous behavior, set the ``strict`` argument to + ``False``.