From: Evan Broder Date: Sat, 1 Nov 2008 04:53:20 +0000 (-0400) Subject: Add support for DNS zone files that take precedence over the database X-Git-Tag: 0.0.5~1 X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-dns.git/commitdiff_plain/7ef7aad0f2aa1773cfb59b74540af62b74639ffd Add support for DNS zone files that take precedence over the database svn path=/trunk/packages/invirt-dns/; revision=1477 --- diff --git a/debian/changelog b/debian/changelog index c57ef4f..9b1ac8e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +invirt-dns (0.0.5) unstable; urgency=low + + * Instead of hacking in support for prod.xvm.mit.edu, support zone files + that override the database + + -- Evan Broder Sat, 01 Nov 2008 00:48:53 -0400 + invirt-dns (0.0.4) unstable; urgency=low * Whoops - actually install the invirt-dns script diff --git a/invirt-dns b/invirt-dns index 3d95965..13e00d4 100755 --- a/invirt-dns +++ b/invirt-dns @@ -3,6 +3,7 @@ from twisted.internet import reactor from twisted.names import server from twisted.names import dns from twisted.names import common +from twisted.names import authority from twisted.internet import defer from twisted.python import failure @@ -57,19 +58,6 @@ class DatabaseAuthority(common.ResolverBase): ttl = 900 name = name.lower() - # XXX hack for the transition to two separate dev/prod clusters - if 'dev.xvm.mit.edu' in self.domains and name.endswith('prod.xvm.mit.edu'): - # import time, sys - # print time.localtime(), 'handling prod request', name - # sys.stdout.flush() - - # Point the client in the right direction for prod requests. - authority = dns.RRHeader('prod.xvm.mit.edu', dns.NS, dns.IN, 3600, - dns.Record_NS(name='ns1.prod.xvm.mit.edu', ttl=3600), auth=True) - additional = dns.RRHeader('ns1.prod.xvm.mit.edu', dns.A, dns.IN, 3600, - dns.Record_A(address='18.181.0.221', ttl=3600), auth=True) - return defer.succeed(([], [authority], [additional])) - if name in self.domains: domain = name else: @@ -132,10 +120,22 @@ class DatabaseAuthority(common.ResolverBase): return defer.fail(failure.Failure(dns.AuthoritativeDomainError(name))) if '__main__' == __name__: - resolver = DatabaseAuthority() + resolvers = [] + for zone in config.dns.zone_files: + for origin in config.dns.domains: + r = authority.BindAuthority(zone) + # This sucks, but if I want a generic zone file, I have to + # reload the information by hand + r.origin = origin + lines = open(zone).readlines() + lines = r.collapseContinuations(r.stripComments(lines)) + r.parseLines(lines) + + resolvers.append(r) + resolvers.append(DatabaseAuthority()) verbosity = 0 - f = server.DNSServerFactory(authorities=[resolver], verbose=verbosity) + f = server.DNSServerFactory(authorities=resolvers, verbose=verbosity) p = dns.DNSDatagramProtocol(f) f.noisy = p.noisy = verbosity