aboutsummaryrefslogtreecommitdiff
path: root/ascension
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-05-01 14:15:37 +0200
committerChristian Grothoff <christian@grothoff.org>2019-05-01 14:15:37 +0200
commit825192a3e9042f2d657f6e3e70e3bc934f1d5d5c (patch)
tree1585e3245a7709ce7a8cccac0e17924a647a1a9e /ascension
parent7fc4e8c067a398572929960e4b4f8a3c6553dbdd (diff)
downloadascension-825192a3e9042f2d657f6e3e70e3bc934f1d5d5c.tar.gz
ascension-825192a3e9042f2d657f6e3e70e3bc934f1d5d5c.zip
nicer logging, coding style, eliminate duplicate calls
Diffstat (limited to 'ascension')
-rw-r--r--ascension/ascension.py28
1 files changed, 14 insertions, 14 deletions
diff --git a/ascension/ascension.py b/ascension/ascension.py
index 1366020..fa22f15 100644
--- a/ascension/ascension.py
+++ b/ascension/ascension.py
@@ -142,10 +142,10 @@ class Ascender():
142 try: 142 try:
143 soa_answer = dns.resolver.query(domain, 'SOA') 143 soa_answer = dns.resolver.query(domain, 'SOA')
144 except dns.resolver.NoAnswer: 144 except dns.resolver.NoAnswer:
145 logging.warning("the domain '%s' is not publicly resolvable", 145 logging.warning("The domain '%s' is not publicly resolvable.",
146 domain) 146 domain)
147 except dns.resolver.NXDOMAIN: 147 except dns.resolver.NXDOMAIN:
148 logging.warning("the domain '%s' is not publicly resolvable", 148 logging.warning("The domain '%s' is not publicly resolvable.",
149 domain) 149 domain)
150 master_answer = dns.resolver.query(soa_answer[0].mname, 'A') 150 master_answer = dns.resolver.query(soa_answer[0].mname, 'A')
151 try: 151 try:
@@ -157,12 +157,14 @@ class Ascender():
157 master_answer[0].address, domain, 157 master_answer[0].address, domain,
158 port=cls.port)) 158 port=cls.port))
159 except dns.resolver.NoAnswer: 159 except dns.resolver.NoAnswer:
160 logging.error("nameserver for '%s' did not answer", domain) 160 logging.error("Nameserver for '%s' did not answer.", domain)
161 except dns.exception.FormError: 161 except dns.exception.FormError:
162 logging.critical("domain '%s' does not allow xfr requests", domain) 162 logging.critical("Domain '%s' does not allow xfr requests.", domain)
163 # FIXME: do not exit, throw exception, catch in main, retry based on GNS SOA (or default value)
163 sys.exit(1) 164 sys.exit(1)
164 except dns.query.TransferError: 165 except dns.query.TransferError:
165 logging.critical("domain '%s' does not allow xfr requests", domain) 166 logging.critical("Domain '%s' does not allow xfr requests.", domain)
167 # FIXME: do not exit, throw exception, catch in main, retry based on GNS SOA (or default value)
166 sys.exit(1) 168 sys.exit(1)
167 for soa_record in zone.iterate_rdatas(rdtype=dns.rdatatype.SOA): 169 for soa_record in zone.iterate_rdatas(rdtype=dns.rdatatype.SOA):
168 if not cls.transferns: 170 if not cls.transferns:
@@ -174,30 +176,28 @@ class Ascender():
174 return soa_record[2].serial 176 return soa_record[2].serial
175 177
176 @classmethod 178 @classmethod
177 def mirror_zone(cls, gns_zone_serial=None): 179 def mirror_zone(cls, gns_zone_serial):
178 """ 180 """
179 Extract necessary information from Generator 181 Extract necessary information from Generator
180 """ 182 """
181 dns_zone_serial = int(cls.get_dns_zone_serial(cls.domain, cls.transferns)) 183 dns_zone_serial = int(cls.get_dns_zone_serial(cls.domain, cls.transferns))
182 if gns_zone_serial == 0: 184 if not gns_zone_serial:
183 logging.info("zone does not exist yet") 185 logging.info("GNS zone does not exist yet, performing full transfer.")
184 cls.initial_zone_transfer()
185 try: 186 try:
186 cls.zone = dns.zone.from_xfr(cls.zonegenerator, 187 cls.zone = dns.zone.from_xfr(cls.zonegenerator,
187 check_origin=False) 188 check_origin=False)
188 except dns.zone.BadZone: 189 except dns.zone.BadZone:
189 logging.critical("Malformed DNS Zone '%s'", cls.domain) 190 logging.critical("Malformed DNS Zone '%s'", cls.domain)
190 cls.soa = cls.get_zone_soa(cls.zone) 191 cls.soa = cls.get_zone_soa(cls.zone)
191 elif gns_zone_serial < dns_zone_serial: 192 elif int(gns_zone_serial) < dns_zone_serial:
192 logging.info("zone is out of date") 193 logging.info("GNS zone is out of date, performing incremental transfer.")
193 cls.initial_zone_transfer(serial=gns_zone_serial)
194 try: 194 try:
195 cls.zone = dns.zone.from_xfr(cls.zonegenerator) 195 cls.zone = dns.zone.from_xfr(cls.zonegenerator)
196 except dns.zone.BadZone: 196 except dns.zone.BadZone:
197 logging.critical("Malformed DNS Zone '%s'", cls.domain) 197 logging.critical("Malformed DNS Zone '%s'", cls.domain)
198 cls.soa = cls.get_zone_soa(cls.zone) 198 cls.soa = cls.get_zone_soa(cls.zone)
199 elif gns_zone_serial == dns_zone_serial: 199 elif int(gns_zone_serial) == dns_zone_serial:
200 logging.info("zone is up to date") 200 logging.info("GNS zone is up to date.")
201 # should be unnecessary but AXFR SOA might not be equal to direct SOA 201 # should be unnecessary but AXFR SOA might not be equal to direct SOA
202 else: 202 else:
203 # because it runs as a daemon, ignore this case but log it 203 # because it runs as a daemon, ignore this case but log it