--- a/pvl/dns/__init__.py Thu Feb 26 15:22:30 2015 +0200
+++ b/pvl/dns/__init__.py Thu Feb 26 15:23:00 2015 +0200
@@ -8,6 +8,7 @@
from pvl.dns.labels import (
fqdn,
join,
+ split,
relative,
)
from pvl.dns.reverse import (
--- a/pvl/dns/labels.py Thu Feb 26 15:22:30 2015 +0200
+++ b/pvl/dns/labels.py Thu Feb 26 15:23:00 2015 +0200
@@ -19,7 +19,7 @@
return fqdn
-def relative (origin, fqdn):
+def split (origin, fqdn):
"""
Determine the relative label from the given zone origin to the given host fqnd.
"""
@@ -30,3 +30,56 @@
else:
raise ValueError("{fqdn} outside of zone {origin}".format(fqdn=fqdn, origin=origin))
+def relative (origin, domain, name) :
+ """
+ relative relative label @origin for name@domain
+
+ Raises ValueError if name is outside of origin
+
+ >>> print relative(None, None, 'fqdn')
+ fqdn.
+ >>> print relative(None, 'domain', 'host')
+ host.domain.
+ >>> print relative('origin', 'domain', 'host')
+ Traceback (most recent call last):
+ ...
+ ValueError: host: domain domain out of zone origin.
+ >>> print relative('origin', 'origin', 'host')
+ host
+ >>> print relative('origin', 'domain.origin', 'host')
+ host.domain
+ >>> print relative('origin', 'domainorigin', 'host')
+ Traceback (most recent call last):
+ ...
+ ValueError: host: domain domainorigin out of zone origin.
+ >>> print relative('origin', None, 'host.domain')
+ Traceback (most recent call last):
+ ...
+ ValueError: host.domain: fqdn host.domain. out of zone origin.
+ """
+
+ if origin:
+ origin = fqdn(origin)
+
+ if domain:
+ host_fqdn = fqdn(name, domain)
+ else:
+ host_fqdn = fqdn(name)
+
+
+ if not origin:
+ return host_fqdn
+
+ elif domain == origin:
+ return name
+
+ elif host_fqdn.endswith('.' + origin):
+ return split(origin, host_fqdn)
+
+ elif domain:
+ raise ValueError("{name}: domain {domain} out of zone {origin}".format(name=name, domain=domain, origin=origin))
+
+ else:
+ raise ValueError("{name}: fqdn {fqdn} out of zone {origin}".format(name=name, fqdn=host_fqdn, origin=origin))
+
+