Query serial number

This commit is contained in:
otthorn 2021-04-14 19:13:09 +02:00
parent a5bb257827
commit 663133f9cb

27
lib.py
View file

@ -9,6 +9,7 @@ import dns.rdataset
import dns.rdatatype import dns.rdatatype
from dns.rdtypes.ANY import CNAME, DNAME, MX, NS, SOA, SSHFP, TXT from dns.rdtypes.ANY import CNAME, DNAME, MX, NS, SOA, SSHFP, TXT
from dns.rdtypes.IN import AAAA, SRV, A from dns.rdtypes.IN import AAAA, SRV, A
import dns.resolver
# dns name object '@' # dns name object '@'
AT = dns.name.Name(()) AT = dns.name.Name(())
@ -62,6 +63,25 @@ def add_to_zone(zone, name, rdata):
) )
rdataset.add(rdata) rdataset.add(rdata)
def get_serial(dns_zone):
"""
Query the serial number from the NS
dns_zone can either be a str or a dns.zone.Zone obj
"""
try:
answer = dns.resolver.query(dns_zone, 'soa')
soa = answer.rrset.items[0]
serial = soa.serial
except:
logging.warning(f"[GET SERIAL] failed to query serial for this zone."
"Fallback to default value 0")
serial = 0
return serial
def soa_handler(re2o_zone, dns_zone): def soa_handler(re2o_zone, dns_zone):
"""Handler for SOA record""" """Handler for SOA record"""
@ -70,14 +90,17 @@ def soa_handler(re2o_zone, dns_zone):
ns = re2o_zone["ns_records"][0]["target"] ns = re2o_zone["ns_records"][0]["target"]
ns_obj = dns.name.from_text(ns) ns_obj = dns.name.from_text(ns)
origin = dns_zone.origin
serial = get_serial(origin)
logging.debug(f"[SOA] zone_origin={origin} serial={serial}")
soa_obj = SOA.SOA( soa_obj = SOA.SOA(
dns.rdataclass.IN, dns.rdataclass.IN,
dns.rdatatype.SOA, dns.rdatatype.SOA,
ns_obj, ns_obj,
format_rname(soa["mail"]), format_rname(soa["mail"]),
#soa["serial"], serial,
0,
soa["refresh"], soa["refresh"],
soa["retry"], soa["retry"],
soa["expire"], soa["expire"],