pvl.hosts-import: implement alias chaning (flatten CNAME chains)
authorTero Marttila <terom@paivola.fi>
Thu, 19 Dec 2013 17:54:30 +0200
changeset 320 bfda3703fa0c
parent 319 f56f60c2dd9b
child 321 e931ff718ead
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
bin/pvl.hosts-import
--- a/bin/pvl.hosts-import	Thu Dec 19 17:40:37 2013 +0200
+++ b/bin/pvl.hosts-import	Thu Dec 19 17:54:30 2013 +0200
@@ -593,6 +593,16 @@
                 log.warn("%s: %s mapped to %s, but no aliases", alias, alias_field, host)
                 del by_name[(alias, domain)]
 
+    # scan by alias
+    by_alias = { }
+
+    for (host, domain), fields in hosts :
+        for alias in fields.get(('alias', ), ()) :
+            if (alias, domain) in by_alias :
+                log.warn("%s: duplicate alias %s: %s", host, alias, by_alias[(alias, domain)])
+            else :
+                by_alias[(alias, domain)] = (host, fields)
+
     for (host, domain), fields in hosts :
         fields = by_name.get((host, domain))
 
@@ -601,7 +611,14 @@
             continue
 
         if set(fields) == set([('alias', )]) :
-            log.warn("%s: nonexistant alias target: %s", host, ' '.join(fields[('alias', )]))
+            aliases = fields[('alias', )]
+            if (host, domain) in by_alias :
+                alias_host, alias_fields = by_alias[(host, domain)]
+                log.info("%s: chain as alias to %s: %s", host, alias_host, ' '.join(aliases))
+                alias_fields[('alias', )].extend(aliases)
+                continue
+            else :
+                log.warn("%s@%s: nonexistant alias target for: %s", host, domain, ' '.join(aliases))
         
         ip = fields.get(('ip', ))