@@ -32,6 +32,19 @@ def __init__(
3232 self .pdns_manager = pdns_manager
3333 self .dns_settings = dns_settings
3434
35+ def _strip_record_name (self , record_name : str , zone_name : str ) -> str :
36+ """Strip trash from record name."""
37+ logger .debug (
38+ f"Stripping record name '{ record_name } ' for zone '{ zone_name } '" ,
39+ )
40+ if record_name .startswith (("\\ 032" , "\\ @" )) and record_name != "\\ @" :
41+ record_name = record_name .removeprefix ("\\ 032" ).removeprefix ("\\ @" )
42+ elif record_name == "\\ @" :
43+ record_name = zone_name
44+ return (
45+ record_name if not record_name .startswith ("." ) else record_name [1 :]
46+ )
47+
3548 def parse_bind_config_file (
3649 self ,
3750 ) -> tuple [list [DNSMasterZoneDTO ], list [DNSForwardZoneDTO ]]:
@@ -58,12 +71,24 @@ def parse_bind_config_file(
5871 ),
5972 )
6073 elif "type forward" in line :
61- forward_zones .append (
62- DNSForwardZoneDTO (
63- id = zone_name ,
64- name = zone_name ,
65- ),
74+ forward_zone = DNSForwardZoneDTO (
75+ id = zone_name ,
76+ name = zone_name ,
6677 )
78+ elif "forwarders" in line and forward_zone :
79+ forwarders_part = line .split ("forwarders" )[1 ]
80+ forwarders = [
81+ f
82+ for f in forwarders_part .strip (";" )
83+ .strip (" " )
84+ .strip ("{" )
85+ .strip ("}" )
86+ .strip (" " )
87+ .split (";" )[:- 1 ]
88+ ]
89+ forward_zone .servers = forwarders
90+ forward_zones .append (forward_zone )
91+ forward_zone = None
6792
6893 return master_zones , forward_zones
6994
@@ -94,7 +119,7 @@ def parse_zones_records(
94119
95120 for name , ttl , rdata in zone_obj .iterate_rdatas ():
96121 try :
97- DNSRecordType (rdata .rdtype .name )
122+ record_type = DNSRecordType (rdata .rdtype .name )
98123 except ValueError :
99124 logger .warning (
100125 f"Unsupported DNS record type { rdata .rdtype .name } in zone '{ zone .name } '" , # noqa: E501
@@ -103,8 +128,11 @@ def parse_zones_records(
103128
104129 zone_rrsets .append (
105130 DNSRRSetDTO (
106- name = name .to_text (),
107- type = DNSRecordType (rdata .rdtype .name ),
131+ name = self ._strip_record_name (
132+ name .to_text (),
133+ zone .name ,
134+ ),
135+ type = record_type ,
108136 records = [
109137 DNSRecordDTO (
110138 content = rdata .to_text (),
0 commit comments