ascension

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

commit 37e34e07857b86b5e20b265808fbbcea818f7029
parent 677b7f5f62176f3322c805d373b88eaa9ecfed42
Author: rexxnor <rexxnor+gnunet@brief.li>
Date:   Fri, 18 Jan 2019 17:04:20 +0100

updated dependencies, setup.py, removed TODOs, improved error handling

Diffstat:
Mascension/ascension.py | 25+++++++++++++++++--------
Mrequirements.txt | 12++++++------
Msetup.py | 10++++++++++
3 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/ascension/ascension.py b/ascension/ascension.py @@ -96,7 +96,11 @@ class Ascender(): try: soa_answer = dns.resolver.query(domain, 'SOA') except dns.resolver.NoAnswer: - logging.warning("the domain '%s' does not exist") + logging.critical("the domain '%s' does not exist") + sys.exit(1) + except dns.resolver.NXDOMAIN: + logging.critical("the domain '%s' is invalid") + sys.exit(1) master_answer = dns.resolver.query(soa_answer[0].mname, 'A') try: if resolver: @@ -111,6 +115,9 @@ class Ascender(): except dns.exception.FormError: logging.critical("domain '%s' does not allow xfr requests", domain) sys.exit(1) + except dns.query.TransferError: + logging.critical("domain '%s' does not allow xfr requests", domain) + sys.exit(1) for soa_record in zone.iterate_rdatas(rdtype=dns.rdatatype.SOA): if not cls.transferns: mname = soa_record[2].mname @@ -360,11 +367,15 @@ class Ascender(): Extracts the current serial from a given zone """ try: - serial = sp.check_output([GNUNET_NAMESTORE_COMMAND, + # this would also work but does not check if record/zone expired + #serial = sp.check_output([GNUNET_NAMESTORE_COMMAND, + # '-t', 'SOA', + # '-z', cls.domain, + # '-n', '@', + # '-D']) + serial = sp.check_output([GNUNET_GNS_COMMAND, '-t', 'SOA', - '-z', cls.domain, - '-n', '@', - '-D']) + '-u', '@.%s' % cls.domain,]) serial = serial.decode() except sp.CalledProcessError: serial = "" @@ -431,10 +442,8 @@ class Ascender(): """ ret = None for soarecord in zone.iterate_rdatas(rdtype=dns.rdatatype.SOA): - # TODO this might need improval depending on which SOA is picked if str(soarecord[0]) == '@': ret = soarecord - break return ret @staticmethod @@ -610,8 +619,8 @@ def main(): while 1: serial = ascender.get_zone_serial() ascender.initial_zone_transfer(serial) - ascender.bootstrap_zone() ascender.mirror_zone() + ascender.bootstrap_zone() ascender.add_records_to_gns() logging.info("Finished migrating of the zone %s", ascender.domain) refresh = int(ascender.get_zone_refresh_time()) diff --git a/requirements.txt b/requirements.txt @@ -1,8 +1,8 @@ -cffi==1.11.5 -coverage==4.5.1 -dnspython==1.15.0 +coverage==4.5.2 +daemon==1.2 +daemonize==2.5.0 +dnspython==1.16.0 docopt==0.6.2 mock==2.0.0 -pbr==4.2.0 -pycparser==2.18 -six==1.11.0 +pbr==5.1.1 +six==1.12.0 diff --git a/setup.py b/setup.py @@ -25,4 +25,14 @@ setuptools.setup( 'ascension=ascension.ascension:main', ], }, + install_requires=[ + 'coverage', + 'daemon', + 'daemonize', + 'dnspython', + 'docopt', + 'mock', + 'pbr', + 'six', + ], )