min_ttl: timedelta
origin_server: str
daemon_options: List[str]
+ add_null_mx: bool
default_config: Optional['NscZoneConfig'] = None
origin_server: Optional[str] = None,
daemon_options: Optional[List[str]] = None,
add_daemon_options: Optional[List[str]] = None,
+ add_null_mx: Optional[bool] = None,
inherit_config: Optional['NscZoneConfig'] = None,
) -> None:
if inherit_config is None:
self.min_ttl = min_ttl if min_ttl is not None else inherit_config.min_ttl
self.origin_server = origin_server if origin_server is not None else inherit_config.origin_server
self.daemon_options = daemon_options if daemon_options is not None else inherit_config.daemon_options
+ self.add_null_mx = add_null_mx if add_null_mx is not None else inherit_config.add_null_mx
if add_daemon_options is not None:
self.daemon_options += add_daemon_options
min_ttl=timedelta(days=1),
origin_server="",
daemon_options=[],
+ add_null_mx=False,
)
print(f'WARNING: Serial number overflow for zone {self.name}, current is {self.state.serial}')
def process(self) -> None:
- if self.zone_type == ZoneType.primary:
- self.gen_hash()
- self.gen_serial()
+ if self.config.add_null_mx:
+ self.gen_null_mx()
+ self.gen_hash()
+ self.gen_serial()
def write_zone(self) -> None:
self.update_soa()
return self[subdomain]
+ def gen_null_mx(self) -> None:
+ for name, node in self.zone.items():
+ rds_a = node.get_rdataset(RdataClass.IN, RdataType.A)
+ rds_aaaa = node.get_rdataset(RdataClass.IN, RdataType.AAAA)
+ if rds_a or rds_aaaa:
+ mx_rds = node.get_rdataset(RdataClass.IN, RdataType.MX, create=True)
+ if not mx_rds:
+ mx_rds.add(
+ dns.rdtypes.ANY.MX.MX(RdataClass.IN, RdataType.MX, 0, dns.name.root),
+ ttl=self._min_ttl,
+ )
+
class NscZoneSecondary(NscZone):
primary_server: IPAddress