Yedidyah Bar David has uploaded a new change for review.

Change subject: packaging: setup: correctly verify local IPv6 addresses
......................................................................

packaging: setup: correctly verify local IPv6 addresses

Change-Id: I4f4bffdb083755c60704f436a24a960848fbd056
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1009990
Signed-off-by: Yedidyah Bar David <d...@redhat.com>
---
M packaging/setup/plugins/ovirt-engine-setup/config/hostname.py
1 file changed, 38 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/09/21709/1

diff --git a/packaging/setup/plugins/ovirt-engine-setup/config/hostname.py 
b/packaging/setup/plugins/ovirt-engine-setup/config/hostname.py
index 9092655..2662650 100644
--- a/packaging/setup/plugins/ovirt-engine-setup/config/hostname.py
+++ b/packaging/setup/plugins/ovirt-engine-setup/config/hostname.py
@@ -76,6 +76,21 @@
     """
     )
 
+    _IPV6_ADDRESS_RE = re.compile(
+        flags=re.VERBOSE,
+        pattern=r"""
+            \s+
+            inet6
+            \s
+            (?P<address>[a-f0-9:]+)
+            /
+            \d+
+            \s+
+            .*
+            $
+    """
+    )
+
     _DIG_LOOKUP_RE = re.compile(
         flags=re.VERBOSE,
         pattern=r"""
@@ -113,6 +128,15 @@
     def __init__(self, context):
         super(Plugin, self).__init__(context=context)
 
+    def _is_valid_IPv6_address(self, address):
+        # We do not use a regexp to validate an IPv6 address
+        # because it's too complex. Simply use the library for that.
+        try:
+            socket.inet_pton(socket.AF_INET6, address)
+        except socket.error:
+            return False
+        return True
+
     def _getNonLoopbackAddresses(self):
         interfaces = {}
         addresses = {}
@@ -122,12 +146,15 @@
                 'addr',
             ),
         )
+        currentinterface = ''
         for line in stdout:
             interfacematch = self._INTERFACE_RE.match(line)
             addressmatch = self._ADDRESS_RE.match(line)
+            v6addressmatch = self._IPV6_ADDRESS_RE.match(line)
             if interfacematch is not None:
+                currentinterface = interfacematch.group('interface')
                 interfaces[
-                    interfacematch.group('interface')
+                    currentinterface
                 ] = 'LOOPBACK' in interfacematch.group('options')
             elif addressmatch is not None:
                 addresses.setdefault(
@@ -136,6 +163,16 @@
                 ).append(
                     addressmatch.group('address')
                 )
+            elif (
+                v6addressmatch is not None and
+                self._is_valid_IPv6_address(v6addressmatch.group('address'))
+            ):
+                addresses.setdefault(
+                    currentinterface,  # no interface in inet6 lines
+                    []
+                ).append(
+                    v6addressmatch.group('address')
+                )
         iplist = []
         for interface, loopback in interfaces.iteritems():
             if not loopback:


-- 
To view, visit http://gerrit.ovirt.org/21709
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4f4bffdb083755c60704f436a24a960848fbd056
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Yedidyah Bar David <d...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to