|
|
|
@ -119,7 +119,6 @@ Disallow: / |
|
|
|
|
reverse=False): |
|
|
|
|
""" path must starts with a /, then the domain name then an |
|
|
|
|
(optional) / followed by the QTYPE """ |
|
|
|
|
# TODO: document and implement the query class |
|
|
|
|
if not path.startswith('/'): |
|
|
|
|
raise Exception("Internal error: no / at the beginning of %s" % path) |
|
|
|
|
plaintype = 'text/plain; charset=%s' % self.encoding |
|
|
|
@ -189,21 +188,27 @@ Disallow: / |
|
|
|
|
qtype = 'PTR' |
|
|
|
|
else: |
|
|
|
|
domain = args |
|
|
|
|
qtype = 'A' |
|
|
|
|
qtype = 'ADDR' |
|
|
|
|
else: |
|
|
|
|
if reverse: |
|
|
|
|
domain = str(dns.reversename.from_address(args[:slashpos])) |
|
|
|
|
else: |
|
|
|
|
domain = args[:slashpos] |
|
|
|
|
requested_qtype = args[slashpos+1:].upper() |
|
|
|
|
nextslashpos = args.find('/', slashpos+1) |
|
|
|
|
if nextslashpos == -1: |
|
|
|
|
requested_qtype = args[slashpos+1:].upper() |
|
|
|
|
qclass = 'IN' |
|
|
|
|
else: |
|
|
|
|
requested_qtype = args[slashpos+1:nextslashpos].upper() |
|
|
|
|
qclass = args[nextslashpos+1:].upper() |
|
|
|
|
# We do not test if the QTYPE exists. If it doesn't |
|
|
|
|
# dnspython will raise an exception. The formatter will |
|
|
|
|
# have to deal with the various records. |
|
|
|
|
if requested_qtype == "": |
|
|
|
|
if reverse: |
|
|
|
|
type = 'PTR' |
|
|
|
|
qtype = 'PTR' |
|
|
|
|
else: |
|
|
|
|
qtype = 'A' |
|
|
|
|
qtype = 'ADDR' |
|
|
|
|
else: |
|
|
|
|
qtype = requested_qtype |
|
|
|
|
if reverse and qtype != 'PTR': |
|
|
|
@ -251,7 +256,7 @@ Disallow: / |
|
|
|
|
self.resolver.set_nameservers([alt_resolver,]) |
|
|
|
|
query_start = datetime.now() |
|
|
|
|
if qtype != "ADDR": |
|
|
|
|
answer = self.resolver.query(qdomain, qtype, tcp=tcp, cd=cd) |
|
|
|
|
answer = self.resolver.query(qdomain, qtype, qclass, tcp=tcp, cd=cd) |
|
|
|
|
else: |
|
|
|
|
try: |
|
|
|
|
answer = self.resolver.query(qdomain, "A", tcp=tcp, cd=cd) |
|
|
|
@ -282,6 +287,11 @@ Disallow: / |
|
|
|
|
output = output.encode(self.encoding) |
|
|
|
|
send_response(start_response, '400 Unknown record type', output, |
|
|
|
|
plaintype) |
|
|
|
|
except Resolver.UnknownClass: |
|
|
|
|
output = "Class %s does not exist\n" % qclass |
|
|
|
|
output = output.encode(self.encoding) |
|
|
|
|
send_response(start_response, '400 Unknown class', output, |
|
|
|
|
plaintype) |
|
|
|
|
except Resolver.NoSuchDomainName: |
|
|
|
|
output = "Domain %s does not exist\n" % domain |
|
|
|
|
output = output.encode(self.encoding) |
|
|
|
|