ascension

Migrate DNS zones to the GNU Name System
Log | Files | Refs | README | LICENSE

commit 64559165746948afab271345788104160f7725b9
parent 431f8833bc2f1161ab5fcda34138a46e0987b1aa
Author: rexxnor <rexxnor+gnunet@brief.li>
Date:   Thu,  2 May 2019 22:31:42 +0200

improved handling of transfer errors, added notes

Diffstat:
Mascension/ascension.py | 19++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/ascension/ascension.py b/ascension/ascension.py @@ -115,7 +115,7 @@ class Ascender(): def get_dns_zone_serial(self, domain: str, - resolver=None) -> dns.rdatatype.SOA: + resolver=None) -> int: """ Gets the current serial for a given zone :param domain: Domain to query for in DNS @@ -135,6 +135,7 @@ class Ascender(): except dns.resolver.NXDOMAIN: logging.warning("The domain '%s' is not publicly resolvable.", domain) + try: if resolver: zone = dns.zone.from_xfr(dns.query.xfr( @@ -144,12 +145,19 @@ class Ascender(): master_answer[0].address, domain, port=self.port)) except dns.resolver.NoAnswer: - logging.error("Nameserver for '%s' did not answer.", domain) + logging.critical("Nameserver for '%s' did not answer.", domain) + return None except dns.exception.FormError: - logging.critical("Domain '%s' does not allow xfr requests.", domain) + logging.critical("Domain '%s' does not allow xfr requests.", + domain) return None except dns.query.TransferError: - logging.critical("Domain '%s' does not allow xfr requests.", domain) + logging.critical("Domain '%s' does not allow xfr requests.", + domain) + return None + except: + logging.error("Unexpected error while transfering domain '%s'", + domain) return None for soa_record in zone.iterate_rdatas(rdtype=dns.rdatatype.SOA): @@ -159,7 +167,7 @@ class Ascender(): self.transferns = str(soa_record[2].mname) + "." + domain else: self.transferns = str(soa_record[2].mname) - return soa_record[2].serial + return int(soa_record[2].serial) def add_records_to_gns(self) -> None: """ @@ -559,6 +567,7 @@ class Ascender(): except sp.CalledProcessError: logging.info("Zone %s already exists!", zonestring) + # This is the most inefficient part of the zone hierarchy building pkey_lookup = sp.Popen([GNUNET_ZONE_CREATION_COMMAND, '-d'], stdout=sp.PIPE)