[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [ascension] 22/57: finished refactoring, fixed a few bugs
From: |
gnunet |
Subject: |
[GNUnet-SVN] [ascension] 22/57: finished refactoring, fixed a few bugs |
Date: |
Sat, 13 Apr 2019 13:32:19 +0200 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to branch master
in repository ascension.
commit ecd247943b01aa4da58643e2d3c8c04bb8638740
Author: rexxnor <address@hidden>
AuthorDate: Sat Oct 13 21:03:58 2018 +0200
finished refactoring, fixed a few bugs
---
gnsmigrator/gnsmigrator.py | 137 ++++++++++++++++++++++++++++-----------------
1 file changed, 86 insertions(+), 51 deletions(-)
diff --git a/gnsmigrator/gnsmigrator.py b/gnsmigrator/gnsmigrator.py
index ba3819e..0bc497f 100644
--- a/gnsmigrator/gnsmigrator.py
+++ b/gnsmigrator/gnsmigrator.py
@@ -319,17 +319,18 @@ class BaseMigrator():
if not BaseMigrator.check_if_record_exists_in_zone(record, zonename):
dnsname, ttl, rdata = record
nameserver = str(rdata)
- if nameserver[-1] == ".":
- dnsresolver = nameserver[:-1]
- else:
- dnsresolver = "%s.%s" % (rdata, domain)
- dnsresolver = nameserver[:-1]
if str(dnsname)[-1] == ".":
dnsname = str(dnsname)[:-1]
if domain[-1] == ".":
domain = domain[:-1]
+ if nameserver[-1] == ".":
+ dnsresolver = nameserver[:-1]
+ else:
+ dnsresolver = "%s.%s" % (rdata, domain)
+
+
pkey_lookup = sp.Popen([GNUNET_ZONE_CREATION_COMMAND, '-d'],
stdout=sp.PIPE)
pkey_line = sp.Popen(['grep', str(dnsname)],
@@ -399,9 +400,13 @@ class BaseMigrator():
"""
if zonename[-1] == '.':
zonename = zonename[:-1]
- serial = sp.check_output([GNUNET_GNS_COMMAND,
- '-t', 'SOA',
- '-u', '@.%s' % zonename])
+ try:
+ serial = sp.check_output([GNUNET_GNS_COMMAND,
+ '-t', 'SOA',
+ '-u', '@.%s' % zonename])
+ except sp.CalledProcessError:
+ soa_serial = 0
+ return soa_serial
serial = serial.decode()
soapattern = re.compile(r'.+\s(\d+),\d+,+\d+,\d+,\d+', re.M)
if re.findall(soapattern, serial):
@@ -460,8 +465,7 @@ class TLDMigrator(BaseMigrator):
@classmethod
- def mirror_zone(cls, zone_factory=dns.zone.Zone,
- relativize=True, check_origin=True):
+ def mirror_zone(cls):
"""
Extract necessary information from Generator
"""
@@ -470,46 +474,57 @@ class TLDMigrator(BaseMigrator):
try:
with gzip.open('%s.zone.gz' % cls.tld[:-1], 'rb') as zonefile:
zone = pickle.load(zonefile)
- except Exception:
- pass
+ cls.zone = zone
+ except FileNotFoundError as filenotfound:
+ print(filenotfound)
currentserial = cls.get_current_serial(cls.tld)
zoneserial = None
if zone:
- zoneserial = zone[0][2].split(' ')[2].split(',')[0]
- if currentserial != zoneserial:
- try:
- for message in cls.zonegenerator:
- origin = message.origin
- rdclass = message.answer[0].rdclass
- if zone is None:
- if relativize:
- origin = message.origin
- else:
- origin = message.answer[0].name
- rdclass = message.answer[0].rdclass
- zone = zone_factory(origin, rdclass,
relativize=relativize)
- for rrset in message.answer:
- znode = zone.nodes.get(rrset.name)
- if not znode:
- znode = zone.node_factory()
- zone.nodes[rrset.name] = znode
- zrds = znode.find_rdataset(rrset.rdclass, rrset.rdtype,
- rrset.covers, True)
- zrds.update_ttl(rrset.ttl)
- for record in rrset:
- record.choose_relativity(zone.origin, relativize)
- zrds.add(record)
- if check_origin:
- zone.check_origin()
- cls.zone = zone
- except Exception as transferexception:
- print("Error occured during Zone transfer: %s" %
transferexception)
-
- # To zip and pickle:
+ for record in zone.iterate_rdatas(rdtype=dns.rdatatype.SOA):
+ zoneserial = str(record[2]).split(' ')[2].split(',')[0]
+ break
+ else:
+ if currentserial != zoneserial:
+ cls.transfer_zone()
+ # zip and pickle the zone
with gzip.open('%s.zone.gz' % cls.tld[:-1], 'wb') as zonefile:
pickle.dump(zone, zonefile)
+ @classmethod
+ def transfer_zone(cls, zone_factory=dns.zone.Zone,
+ relativize=True, check_origin=True):
+ """
+ Do the actual zone transfer
+ """
+ try:
+ for message in cls.zonegenerator:
+ origin = message.origin
+ rdclass = message.answer[0].rdclass
+ if zone is None:
+ if relativize:
+ origin = message.origin
+ else:
+ origin = message.answer[0].name
+ rdclass = message.answer[0].rdclass
+ zone = zone_factory(origin, rdclass, relativize=relativize)
+ for rrset in message.answer:
+ znode = zone.nodes.get(rrset.name)
+ if not znode:
+ znode = zone.node_factory()
+ zone.nodes[rrset.name] = znode
+ zrds = znode.find_rdataset(rrset.rdclass, rrset.rdtype,
+ rrset.covers, True)
+ zrds.update_ttl(rrset.ttl)
+ for record in rrset:
+ record.choose_relativity(zone.origin, relativize)
+ zrds.add(record)
+ if check_origin:
+ zone.check_origin()
+ cls.zone = zone
+ except Exception as transferexception:
+ print("Error occured during Zone transfer: %s" % transferexception)
+
@classmethod
def multithreaded_add_records_to_gns(cls):
"""
@@ -535,15 +550,8 @@ class TLDMigrator(BaseMigrator):
# building gns record struct
#GNUnetGNSRecordData()
+ cls.add_record_to_gns(record, zonename, cls.tld)
- sp.run([GNUNET_NAMESTORE_COMMAND,
- '-z', zonename,
- '-a', '-n', str(dnsname),
- '-t', 'GNS2DNS',
- '-V', 'address@hidden' % (str(dnsname),
- zonename,
- str(authns)),
- '-e', '%ds' % int(ttl)])
taskqueue.task_done()
# Create threads
@@ -566,6 +574,33 @@ class TLDMigrator(BaseMigrator):
for thread in threads:
thread.join()
+ @staticmethod
+ def add_record_to_gns(record, zonename, domain):
+ """
+ Checks if records are present and adds them if not
+ :param record: record to add
+ :param zonename: zonename of zone to add records to
+ :param domain: full domain of zone
+ """
+ dnsname_str = str(record[0])
+ rtype_str = dns.rdatatype.to_text(record[2].rdtype)
+ if dnsname_str == '@':
+ if rtype_str == 'SOA':
+ BaseMigrator.add_soa_record_to_gns(record, zonename, domain)
+ else:
+ if rtype_str == 'NS' and dnsname_str != '@':
+ BaseMigrator.add_ns_record_to_gns(record, zonename, domain)
+ elif rtype_str == 'MX':
+ BaseMigrator.add_mx_record_to_gns(record, zonename)
+ #elif rtype_str == 'SRV':
+ # BaseMigrator.add_srv_record_to_gns(record, zonename)
+ elif rtype_str in ['A', 'AAAA']:
+ BaseMigrator.add_a_aaaa_record_to_gns(record, zonename, domain)
+ elif rtype_str in ['TXT', 'CNAME']:
+ BaseMigrator.add_gen_record_to_gns(record, zonename)
+ else:
+ print("Record type %s is not yet supported" % rtype_str)
+
def main():
"""
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [ascension] 42/57: added dnscurve detection and log it, fix ttl bug with hierarchy, (continued)
- [GNUnet-SVN] [ascension] 42/57: added dnscurve detection and log it, fix ttl bug with hierarchy, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 07/57: fixes, added a few tests, updated README and requirements, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 10/57: added incremental zone transfer logic, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 54/57: lint manpage, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 39/57: added daemonization, bumped version, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 57/57: ascension.1: remove texinfo syntax, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 49/57: minor cleanup, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 51/57: removed daemonization, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 26/57: added definitive support for IXFR, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 37/57: updated README, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 22/57: finished refactoring, fixed a few bugs,
gnunet <=
- [GNUnet-SVN] [ascension] 30/57: updated gnsmigrator and removed c rebuilds, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 44/57: updated README, cleanup, PEP8, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 32/57: testing and added logging of executed commands to debug, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 28/57: refactored code, added debug mode, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 35/57: unify all records under label, added SUPPORTED_RECORDS global, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 40/57: improvements, better case separation, more logging, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 50/57: flags adjustment and soa record is now public by default, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 33/57: added needed return statement; add glue records first, then NS, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 25/57: fixed bugs, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 38/57: renamed project to ascension, gnunet, 2019/04/13