def create_reverse(dns_name: str, address: ip.IPAddress, status: Optional[DNSStatus], output: List[str]): if status: status.reverse_action = ACTION_CREATE zone = ReverseZone.objects.find_for_address(address) if zone: record_name = zone.record_name(address) logger.debug(f"Found zone {zone.name} for {record_name}") # Check the SOA, we don't want to write to a parent zone if it has delegated authority soa = get_soa(record_name) if soa == zone.name: update = zone.server.create_update(zone.name) update.add( record_name, zone.ttl, 'ptr', dns_name ) response = dns.query.udp(update, zone.server.address, port=zone.server.server_port) status_update(output, f'Adding {record_name} PTR {dns_name}', response) if status: status.reverse_rcode = response.rcode() else: logger.warning(f"Can't update zone {zone.name} for {record_name}, " f"it has delegated authority for {soa}") if status: status.reverse_rcode = rcode.NOTAUTH else: logger.debug(f"No zone found for {address}") if status: status.reverse_rcode = RCODE_NO_ZONE
def delete_forward(dns_name: str, address: ip.IPAddress, status: Optional[DNSStatus], output: List[str]): if status: status.forward_action = ACTION_DELETE zone = Zone.objects.find_for_dns_name(dns_name) if zone: logger.debug(f"Found zone {zone.name} for {dns_name}") # Check the SOA, we don't want to write to a parent zone if it has delegated authority soa = get_soa(dns_name) if soa == zone.name: record_type = 'A' if address.version == 4 else 'AAAA' update = zone.server.create_update(zone.name) update.delete( dns_name, record_type, str(address) ) response = dns.query.udp(update, zone.server.address, port=zone.server.server_port) status_update(output, f'Deleting {dns_name} {record_type} {address}', response) if status: status.forward_rcode = response.rcode() else: logger.warning(f"Can't update zone {zone.name} {dns_name}, " f"it has delegated authority for {soa}") if status: status.forward_rcode = rcode.NOTAUTH else: logger.debug(f"No zone found for {dns_name}") if status: status.forward_rcode = RCODE_NO_ZONE