From c6d8dc3c538c6ac0dfb1103ae67323a202b08b2a Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Thu, 28 Jan 2016 18:04:15 +0100
Subject: [PATCH] Allow fully qualified hostname aliases

---
 src/hostinfo/named.py | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/hostinfo/named.py b/src/hostinfo/named.py
index c7ad2ff..1c8432e 100755
--- a/src/hostinfo/named.py
+++ b/src/hostinfo/named.py
@@ -31,7 +31,7 @@ def generate(tree, options):
         pass
     
     #
-    # C. Create reverse mapping for localhost
+    # C. Create reverse mapping for host
     #
     result = []
 
@@ -141,7 +141,7 @@ class DomainDict:
 
         def add_host(self, name, kind, value):
             if not re.match('^[0-9a-zA-Z.-]+$', name):
-                raise Exception('Invalid nameserver name "%s"' % name)
+                raise Exception('Invalid host name "%s"' % name)
             if not name in self.host:
                 self.host[name] = set()
                 pass
@@ -203,17 +203,28 @@ def generate_forward(tree, hosts):
         result[c.domain[1]].add_host(c.alias[0], 'CNAME', c.name[0])
         pass
     # Add numbered hosts
+    def add_host(domain, name, address):
+        if address.version == 4:
+            result[domain].add_host(name, 'A', str(address.exploded))
+            pass
+        elif address.version == 6:
+            result[domain].add_host(name, 'AAAA', str(address.exploded))
+            pass
+
     for domain,net in [ (s.domain[0],util.network(s)) 
                         for s in tree._subnet_ 
                         if s.domain[0] and util.network(s)]:
         for name,address in hosts:
+            try:
+                if name.endswith('.'):
+                    d = '.'.join(name.split('.')[1:-1])
+                    n = name.split('.')[0]
+                    add_host(d, n, address)
+                    continue
+            except Exception,e:
+                pass
             if address in net:
-                if address.version == 4:
-                    result[domain].add_host(name, 'A', str(address.exploded))
-                    pass
-                elif address.version == 6:
-                    result[domain].add_host(name, 'AAAA', str(address.exploded))
-                    pass
+                add_host(domain, name,address)
                 pass
             pass
         pass
-- 
GitLab