| 349 | |
| 350 | |
| 351 | class AXFRNanoNameserver(Server): |
| 352 | def handle(self, request): |
| 353 | self.zone = dns.zone.from_text(axfr_zone, origin=self.origin) |
| 354 | self.origin = self.zone.origin |
| 355 | items = [] |
| 356 | soa = self.zone.find_rrset(dns.name.empty, dns.rdatatype.SOA) |
| 357 | response = dns.message.make_response(request.message) |
| 358 | response.flags |= dns.flags.AA |
| 359 | response.answer.append(soa) |
| 360 | items.append(response) |
| 361 | response = dns.message.make_response(request.message) |
| 362 | response.question = [] |
| 363 | response.flags |= dns.flags.AA |
| 364 | for name, rdataset in self.zone.iterate_rdatasets(): |
| 365 | if rdataset.rdtype == dns.rdatatype.SOA and name == dns.name.empty: |
| 366 | continue |
| 367 | rrset = dns.rrset.RRset( |
| 368 | name, rdataset.rdclass, rdataset.rdtype, rdataset.covers |
| 369 | ) |
| 370 | rrset.update(rdataset) |
| 371 | response.answer.append(rrset) |
| 372 | items.append(response) |
| 373 | response = dns.message.make_response(request.message) |
| 374 | response.question = [] |
| 375 | response.flags |= dns.flags.AA |
| 376 | response.answer.append(soa) |
| 377 | items.append(response) |
| 378 | return items |
| 379 | |
| 380 | |
| 381 | ixfr_message = """id 12345 |
no outgoing calls
searching dependent graphs…