]> mj.ucw.cz Git - pynsc.git/commitdiff
Fix parsing of relative names
authorMartin Mares <mj@ucw.cz>
Mon, 22 Apr 2024 13:17:42 +0000 (15:17 +0200)
committerMartin Mares <mj@ucw.cz>
Mon, 22 Apr 2024 13:17:42 +0000 (15:17 +0200)
TODO
nsconfig/core.py
nsconfig/util.py

diff --git a/TODO b/TODO
index b4b14c5132f88194397a8012993bcd7a69864829..783852aee21096c03dc9397a3192744505566e7b 100644 (file)
--- a/TODO
+++ b/TODO
@@ -3,4 +3,3 @@
 - Blackhole zones
 - DNSSEC
 - Logging
-- fix parse_name to know @
index 885a460e727233bf1858cb0842cf92a96e9625bc..88baf6623a16c5677469c03a20f6f960deecc7c3 100644 (file)
@@ -64,7 +64,7 @@ class NscNode:
             else:
                 self._add(dns.rdtypes.IN.AAAA.AAAA(RdataClass.IN, RdataType.AAAA, str(a)))
             if reverse:
-                self.nsc_zone.nsc._add_reverse_mapping(a, parse_name(self.name + '.' + self.nsc_zone.name) if self.name != "" else parse_name(self.nsc_zone.name + '.'))
+                self.nsc_zone.nsc._add_reverse_mapping(a, parse_name(self.name, origin=self.nsc_zone.dns_name))
         return self
 
     def MX(self, pri: int, name: str) -> Self:
@@ -199,6 +199,7 @@ class ZoneType(Enum):
 class NscZone:
     nsc: 'Nsc'
     name: str
+    dns_name: Name
     safe_name: str                          # For use in file names
     zone_type: ZoneType
     reverse_for: Optional[IPNetwork]
@@ -210,6 +211,7 @@ class NscZone:
                  **kwargs) -> None:
         self.nsc = nsc
         self.name = name
+        self.dns_name = dns.name.from_text(name)
         self.safe_name = name.replace('/', '@')
         self.config = NscZoneConfig(**kwargs).finalize()
         self.reverse_for = reverse_for
index 6acc1d8a2d183e853bbf3af09c81e9c5f0babd83..17c67ee29a35dafe2861577dd1a7511f2b3348eb 100644 (file)
@@ -2,7 +2,7 @@ import dns.name
 from dns.name import Name
 from ipaddress import ip_address, IPv4Address, IPv6Address, ip_network, IPv4Network, IPv6Network
 from datetime import timedelta
-from typing import Any, List
+from typing import Any, List, Optional
 
 
 IPAddress = IPv4Address | IPv6Address
@@ -41,12 +41,12 @@ def parse_network(addr: IPNetwork | str) -> IPNetwork:
         raise ValueError('Cannot parse IP network')
 
 
-def parse_name(name: str, relative: bool = False) -> Name:
+def parse_name(name: str, relative: bool = False, origin: Optional[Name] = None) -> Name:
     # FIXME: Names with escaped dots
-    if '.' in name and not relative:
+    if '.' in name and not relative and origin is None:
         return dns.name.from_text(name)
     else:
-        return dns.name.from_text(name, origin=None)
+        return dns.name.from_text(name, origin=origin)
 
 
 def parse_duration(delta: timedelta | int) -> int: