diff options
author | Christian Grothoff <christian@grothoff.org> | 2019-05-01 14:15:37 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-05-01 14:15:37 +0200 |
commit | 825192a3e9042f2d657f6e3e70e3bc934f1d5d5c (patch) | |
tree | 1585e3245a7709ce7a8cccac0e17924a647a1a9e /ascension | |
parent | 7fc4e8c067a398572929960e4b4f8a3c6553dbdd (diff) | |
download | ascension-825192a3e9042f2d657f6e3e70e3bc934f1d5d5c.tar.gz ascension-825192a3e9042f2d657f6e3e70e3bc934f1d5d5c.zip |
nicer logging, coding style, eliminate duplicate calls
Diffstat (limited to 'ascension')
-rw-r--r-- | ascension/ascension.py | 28 |
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 |