[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [ascension] 27/57: unstable version, port specification pos
From: |
gnunet |
Subject: |
[GNUnet-SVN] [ascension] 27/57: unstable version, port specification possible |
Date: |
Sat, 13 Apr 2019 13:32:24 +0200 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to branch master
in repository ascension.
commit 65d94cf4300305b946f8ab5b78d8a082c6deb3a4
Author: rexxnor <address@hidden>
AuthorDate: Wed Oct 24 21:28:30 2018 +0200
unstable version, port specification possible
---
gnsmigrator/gnsmigrator.py | 106 ++++++++++++++++++++++++---------------------
1 file changed, 57 insertions(+), 49 deletions(-)
diff --git a/gnsmigrator/gnsmigrator.py b/gnsmigrator/gnsmigrator.py
index 4d35565..f088e1c 100644
--- a/gnsmigrator/gnsmigrator.py
+++ b/gnsmigrator/gnsmigrator.py
@@ -3,11 +3,15 @@
Usage:
gnsmigrator.py -t <tld> -ns <transferns>
+ gnsmigrator.py -t <tld> -ns <transferns> -p <port>
gnsmigrator.py -f <txtfile>
+ gnsmigrator.py -f <txtfile> -p <port>
+ gnsmigrator.py -f <txtfile> -p <port> -ns <transferns>
gnsmigrator.py -h | --help
gnsmigrator.py -v | --version
Options:
+ <port> Port specification
<tld> Top level domain to migrate
<txtfile> Text File containing domains to transfer
<transferns> DNS Server that does the zone transfer
@@ -64,12 +68,13 @@ class BaseMigrator():
Base class for migration
"""
@classmethod
- def __init__(cls, domainlist):
+ def __init__(cls, domainlist, port=53):
cls.domainlist = domainlist
+ cls.port = port
cls.zones = {}
@classmethod
- def initial_zone_transfer(cls):
+ def initial_zone_transfer(cls, resolver=None):
"""
Fetch all the zones via zone transfer
"""
@@ -83,20 +88,35 @@ class BaseMigrator():
master_answer = dns.resolver.query(soa_answer[0].mname, 'A')
try:
- zone = dns.zone.from_xfr(dns.query.xfr(
- master_answer[0].address, domain))
+ if resolver:
+ zone = dns.zone.from_xfr(dns.query.xfr(
+ resolver, domain, port=cls.port))
+ else:
+ zone = dns.zone.from_xfr(dns.query.xfr(
+ master_answer[0].address, domain,
+ port=cls.port))
except dns.resolver.NoAnswer:
print("nameserver for '%s' did not answer" % domain)
continue
except dns.exception.FormError:
print("domain '%s' does not allow xfr requests" % domain)
continue
- cls.zones[domain] = (zone,
- (master_answer[0].address,
- domain,
- zone.get_rdataset('@',
dns.rdatatype.SOA).ttl,
- 0)
- )
+ if resolver:
+ cls.zones[domain] = (zone,
+ (resolver,
+ domain,
+ zone.get_rdataset('@',
+ dns.rdatatype.SOA).ttl,
+ 0)
+ )
+ else:
+ cls.zones[domain] = (zone,
+ (master_answer[0].address,
+ domain,
+ zone.get_rdataset('@',
+ dns.rdatatype.SOA).ttl,
+ 0)
+ )
@classmethod
def refresh_zone(cls, domain, zonetuple):
@@ -120,20 +140,16 @@ class BaseMigrator():
.split(' ')[5])
xfrinfo[3] = 1
- # A normal BIND9 returns a normal AXFR response with the entire zone
- # if the serial is newer. This is why there is no real incremental
- # zone transfer using bind. This makes the merger_zones function
- # unnecessary. Furthermore this try except block updates only if
- # there is a newer zone availible (according to serial). The IXFR
- # returns only a SOA record with a new serial if it has not changed
try:
newzone = dns.zone.from_xfr(dns.query.xfr(xfrinfo[0],
xfrinfo[1],
rdtype=dns.rdatatype.IXFR,
serial=oldserial))
- cls.zones[domain] = (newzone, (xfrinfo[0],
- xfrinfo[1],
- zone.get_rdataset('@',
dns.rdatatype.SOA).ttl))
+ cls.zones[domain] = (newzone,
+ (xfrinfo[0],
+ xfrinfo[1],
+ zone.get_rdataset('@',
+ dns.rdatatype.SOA).ttl))
except dns.zone.NoNS:
print('the zone for domain %s was not updated' % domain)
@@ -213,6 +229,7 @@ class BaseMigrator():
BaseMigrator.add_ns_record_to_gns(record, zonename, domain)
elif rtype_str == 'MX':
BaseMigrator.add_mx_record_to_gns(record, zonename)
+ # TODO Add support for SRV records
#elif rtype_str == 'SRV':
# BaseMigrator.add_srv_record_to_gns(record, zonename)
elif rtype_str in ['A', 'AAAA']:
@@ -390,12 +407,13 @@ class BaseMigrator():
"""
return domain.split('.')[0]
- @staticmethod
- def get_current_serial(domain, resolver=None):
+ @classmethod
+ def get_current_serial(cls, domain, resolver=None):
"""
Gets the current serial for a given zone
"""
- # this seems to be different from the data via AXFR
+ # SOA is different if taken directly from SOA record
+ # compared to AXFR/IXFR - changed to respect this
try:
soa_answer = dns.resolver.query(domain, 'SOA')
except dns.resolver.NoAnswer:
@@ -404,10 +422,11 @@ class BaseMigrator():
try:
if resolver:
zone = dns.zone.from_xfr(dns.query.xfr(
- resolver, domain))
+ resolver, domain, port=cls.port))
else:
zone = dns.zone.from_xfr(dns.query.xfr(
- master_answer[0].address, domain))
+ master_answer[0].address, domain,
+ port=cls.port))
except dns.resolver.NoAnswer:
print("nameserver for '%s' did not answer" % domain)
except dns.exception.FormError:
@@ -443,16 +462,16 @@ class ZoneMigrator(BaseMigrator):
Class that migrates small zones efficiently
"""
@classmethod
- def __init__(cls, domainlist):
- BaseMigrator.__init__(domainlist)
+ def __init__(cls, domainlist, port=53):
+ BaseMigrator.__init__(domainlist, port)
class TLDMigrator(BaseMigrator):
"""
Class that migrates big zones (TLDs) efficiently
"""
@classmethod
- def __init__(cls, tld, transferns):
- BaseMigrator.__init__(tld)
+ def __init__(cls, tld, transferns, port=53):
+ BaseMigrator.__init__(tld, port)
cls.soa = None
cls.tld = tld
cls.transferns = transferns
@@ -468,7 +487,8 @@ class TLDMigrator(BaseMigrator):
cls.zonegenerator = dns.query.xfr(cls.transferns,
cls.tld,
rdtype=dns.rdatatype.IXFR,
- serial=serial)
+ serial=serial,
+ port=cls.port)
else:
cls.zonegenerator = dns.query.xfr(cls.transferns, cls.tld,)
@@ -518,28 +538,14 @@ class TLDMigrator(BaseMigrator):
elif zoneserial == currentserial:
print("Nothing to do!")
sys.exit(0)
- # this case should be unnecessary but AXFR SOA is not equal to direct
SOA
+ # should be unnecessary but AXFR SOA is not equal to direct SOA
else:
print("SOA serial is bigger than zone serial?")
print(zoneserial, currentserial)
sys.exit(0)
- address@hidden
- #def merge_zones(cls):
- # """
- # Fetch diff and merge zones
- # """
- # currentzone = cls.zone
- # partialzone = dns.zone.from_xfr(cls.zonegenerator)
- # for rdata in partialzone.iterate_rdatasets(dns.rdatatype.NS):
- # name, rdataset = rdata
- # current_set = currentzone.get_rdataset(name, dns.rdatatype.NS,
- # create=True)
- # current_set.union_update(rdataset)
-
@classmethod
- def transfer_zone(cls, zone_factory=dns.zone.Zone,
- relativize=True):
+ def transfer_zone(cls, zone_factory=dns.zone.Zone, relativize=True):
"""
Do the actual zone transfer
"""
@@ -595,7 +601,7 @@ class TLDMigrator(BaseMigrator):
authns = "%s.%s" % (authns, zonename)
# building gns record struct
- #GNUnetGNSRecordData()
+ # GNUnetGNSRecordData()
cls.add_record_to_gns(record, zonename, cls.tld)
taskqueue.task_done()
@@ -623,6 +629,7 @@ class TLDMigrator(BaseMigrator):
# Add soa record to GNS once completed
soa = cls.get_zone_soa(cls.zone)
super().add_soa_record_to_gns(soa, cls.tld[:-1], cls.tld)
+ print("All records have been added!")
@staticmethod
def add_record_to_gns(record, zonename, domain):
@@ -670,9 +677,10 @@ def main():
tld = args.get('<tld>', None)
transferns = args.get('<transferns>', None)
txtfile = args.get('<txtfile>', None)
+ port = int(args.get('<port>', None))
if tld and transferns:
- migrator = TLDMigrator(tld, transferns)
+ migrator = TLDMigrator(tld, transferns, port)
serial = migrator.get_zone_serial(tld)
migrator.initial_zone_transfer(serial)
migrator.bootstrap_zone()
@@ -684,8 +692,8 @@ def main():
with open(txtfile, 'r') as openedtxt:
for line in openedtxt:
domainlist.append(line.rstrip())
- zonemigrator = ZoneMigrator(domainlist)
- zonemigrator.initial_zone_transfer()
+ zonemigrator = ZoneMigrator(domainlist, port=port)
+ zonemigrator.initial_zone_transfer(resolver=transferns)
zonemigrator.bootstrap_zones()
for domain, zonetuple in zonemigrator.zones.items():
zonemigrator.refresh_zone(domain, zonetuple)
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [ascension] 11/57: added ttl of SOA to zone for later implementation of timer, (continued)
- [GNUnet-SVN] [ascension] 11/57: added ttl of SOA to zone for later implementation of timer, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 05/57: initial prototype, bootstrapping zones and zone transfer, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 24/57: fixed zone serialisation, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 17/57: updated requirements and README, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 36/57: some experimental fixes, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 19/57: fixed some minor bugs, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 15/57: created baseclass and separated small from big zones, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 21/57: fixed serial fetching and added serialization of zone, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 13/57: added zone merging of full and incremental zones, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 29/57: added warnings to logging if records failed to be added, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 27/57: unstable version, port specification possible,
gnunet <=
- [GNUnet-SVN] [ascension] 02/57: Added LICENSE, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 18/57: refactored adding of records, gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 08/57: added GNS2DNS support and rudimentary Unittests (incomplete), gnunet, 2019/04/13
- [GNUnet-SVN] [ascension] 23/57: fixed non existing file, gnunet, 2019/04/13
- [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