From 20dc4190e27c7778cfa6c2943961f2ad27e14b48 Mon Sep 17 00:00:00 2001
From: Daniel Watkins <daniel.watkins@canonical.com>
Date: Fri, 9 Oct 2015 14:01:11 +0100
Subject: Handle colons in packed strings in WALinuxAgentShim.find_endpoint.

This fixes bug 1488896.
---
 cloudinit/sources/helpers/azure.py | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

(limited to 'cloudinit/sources/helpers')

diff --git a/cloudinit/sources/helpers/azure.py b/cloudinit/sources/helpers/azure.py
index 33003da0..21b4cd21 100644
--- a/cloudinit/sources/helpers/azure.py
+++ b/cloudinit/sources/helpers/azure.py
@@ -225,16 +225,18 @@ class WALinuxAgentShim(object):
                 value = line.strip(' ').split(' ', 2)[-1].strip(';\n"')
         if value is None:
             raise Exception('No endpoint found in DHCP config.')
-        if ':' in value:
+        unescaped_value = value.replace('\\', '')
+        if len(unescaped_value) > 4:
             hex_string = ''
-            for hex_pair in value.split(':'):
+            for hex_pair in unescaped_value.split(':'):
                 if len(hex_pair) == 1:
                     hex_pair = '0' + hex_pair
                 hex_string += hex_pair
-            value = struct.pack('>L', int(hex_string.replace(':', ''), 16))
+            packed_bytes = struct.pack(
+                '>L', int(hex_string.replace(':', ''), 16))
         else:
-            value = value.replace('\\', '').encode('utf-8')
-        endpoint_ip_address = socket.inet_ntoa(value)
+            packed_bytes = unescaped_value.encode('utf-8')
+        endpoint_ip_address = socket.inet_ntoa(packed_bytes)
         LOG.debug('Azure endpoint found at %s', endpoint_ip_address)
         return endpoint_ip_address
 
-- 
cgit v1.2.3