From 0d155acb4701cdb1106f6dad3bb78cd25937b079 Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Fri, 17 Mar 2023 11:46:08 +0100
Subject: [PATCH] Check for CNAME conflicts (named)

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

diff --git a/src/hostinfo/named.py b/src/hostinfo/named.py
index 89ad26c..49226e6 100755
--- a/src/hostinfo/named.py
+++ b/src/hostinfo/named.py
@@ -12,6 +12,9 @@ class NoNameserverException(Exception):
 class InvalidHostnameException(Exception):
     pass
 
+class DuplicateCnameException(Exception):
+    pass
+
 def equal_zone(c1, c2):
     for l1, l2 in zip(c1.split('\n'), c2.split('\n')):
         if l1 == l2:
@@ -191,7 +194,12 @@ class DomainDict:
                 pass
             if not ttl:
                 ttl = ''
+                pass
             self.host[name].add((kind, value, ttl))
+            if (len(self.host[name]) > 1 and
+                'CNAME' in [ kind for kind,value,ttl in self.host[name] ]):
+                raise DuplicateCnameException('Conflicting CNAME records %s' %
+                                              self.host[name])
             pass
 
         def value(self, key=None, subdomains=[]):
-- 
GitLab