From 56dda9825beaf9580ca6099c76e2c0d6037db9eb Mon Sep 17 00:00:00 2001 From: Steve Leon Date: Thu, 19 Dec 2013 10:20:35 -0800 Subject: [PATCH] Using base32 encoding to generate DNS records The Designate driver generate record names by hashing and 64-base encoding the instance ID. The problem is that 64-base encoding can generate hyphens and upper/lower case letters. Hyphens are illegal when it is at the beginning of the name. Name is also case insensitive. So the best solution is to use BASE-32 encoding. Change-Id: Ie98a0a50a609207df041c5f0bc2f622701ee9848 Closes-Bug: #1262789 --- trove/dns/designate/driver.py | 2 +- trove/tests/unittests/dns/test_designate_driver.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/trove/dns/designate/driver.py b/trove/dns/designate/driver.py index 43b3ebfbbf..fc0d3d5ba7 100644 --- a/trove/dns/designate/driver.py +++ b/trove/dns/designate/driver.py @@ -140,7 +140,7 @@ class DesignateInstanceEntryFactory(driver.DnsInstanceEntryFactory): def create_entry(self, instance): zone = DesignateDnsZone(id=DNS_DOMAIN_ID, name=DNS_DOMAIN_NAME) # Constructing the hostname by hashing the instance ID. - name = base64.urlsafe_b64encode(hashlib.md5(instance).digest())[:11] + name = base64.b32encode(hashlib.md5(instance).digest())[:11] hostname = ("%s.%s" % (name, zone.name)) #Removing the leading dot if present if hostname.endswith('.'): diff --git a/trove/tests/unittests/dns/test_designate_driver.py b/trove/tests/unittests/dns/test_designate_driver.py index d94b0fdd72..68e7401c5a 100644 --- a/trove/tests/unittests/dns/test_designate_driver.py +++ b/trove/tests/unittests/dns/test_designate_driver.py @@ -188,7 +188,7 @@ class DesignateInstanceEntryFactoryTest(testtools.TestCase): driver.DNS_DOMAIN_ID = '00000000-0000-0000-0000-000000000000' driver.DNS_DOMAIN_NAME = 'trove.com' driver.DNS_TTL = 3600 - hashed_id = base64.urlsafe_b64encode(hashlib.md5(instance_id).digest()) + hashed_id = base64.b32encode(hashlib.md5(instance_id).digest()) hashed_id_concat = hashed_id[:11] exp_hostname = ("%s.%s" % (hashed_id_concat, driver.DNS_DOMAIN_NAME)) factory = driver.DesignateInstanceEntryFactory() @@ -205,7 +205,7 @@ class DesignateInstanceEntryFactoryTest(testtools.TestCase): driver.DNS_DOMAIN_ID = '00000000-0000-0000-0000-000000000000' driver.DNS_DOMAIN_NAME = 'trove.com.' driver.DNS_TTL = 3600 - hashed_id = base64.urlsafe_b64encode(hashlib.md5(instance_id).digest()) + hashed_id = base64.b32encode(hashlib.md5(instance_id).digest()) hashed_id_concat = hashed_id[:11] exp_hostname = ("%s.%s" % (hashed_id_concat, driver.DNS_DOMAIN_NAME))[:-1]