diff options
author | Scott Moser <smoser@ubuntu.com> | 2016-02-16 17:00:29 -0500 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2016-02-16 17:00:29 -0500 |
commit | df6af3e1433b9e5564bec7cd452cfb3a0fb403e9 (patch) | |
tree | c9d09e8481111a5138799ddc2cf8ddedc0a64207 /cloudinit | |
parent | 333f17dfa44e20712a2a88ef985a844b016957ce (diff) | |
parent | 2f5a5ed9f9c5ba390a693bc441ab18cbcdff9623 (diff) | |
download | vyos-cloud-init-df6af3e1433b9e5564bec7cd452cfb3a0fb403e9.tar.gz vyos-cloud-init-df6af3e1433b9e5564bec7cd452cfb3a0fb403e9.zip |
Handle escaped quotes in WALinuxAgentShim.find_endpoint
LP: #1488891
Diffstat (limited to 'cloudinit')
-rw-r--r-- | cloudinit/sources/helpers/azure.py | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/cloudinit/sources/helpers/azure.py b/cloudinit/sources/helpers/azure.py index d90c22fd..018cac6d 100644 --- a/cloudinit/sources/helpers/azure.py +++ b/cloudinit/sources/helpers/azure.py @@ -197,6 +197,21 @@ class WALinuxAgentShim(object): self.openssl_manager.clean_up() @staticmethod + def get_ip_from_lease_value(lease_value): + unescaped_value = lease_value.replace('\\', '') + if len(unescaped_value) > 4: + hex_string = '' + for hex_pair in unescaped_value.split(':'): + if len(hex_pair) == 1: + hex_pair = '0' + hex_pair + hex_string += hex_pair + packed_bytes = struct.pack( + '>L', int(hex_string.replace(':', ''), 16)) + else: + packed_bytes = unescaped_value.encode('utf-8') + return socket.inet_ntoa(packed_bytes) + + @staticmethod def find_endpoint(): LOG.debug('Finding Azure endpoint...') content = util.load_file('/var/lib/dhcp/dhclient.eth0.leases') @@ -206,16 +221,7 @@ 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: - hex_string = '' - for hex_pair in 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)) - else: - value = value.encode('utf-8') - endpoint_ip_address = socket.inet_ntoa(value) + endpoint_ip_address = WALinuxAgentShim.get_ip_from_lease_value(value) LOG.debug('Azure endpoint found at %s', endpoint_ip_address) return endpoint_ip_address |