+ def _lookup(self, name, cls, type, timeout = None):
+ deferredResult = authority.BindAuthority._lookup(self, name, cls,
+ type, timeout)
+ # If we didn't find an exact match for the name we were seeking,
+ # check if it's within a subdomain we're supposed to delegate to
+ # some other DNS server.
+ deferredResult.addErrback(self._delegation_errback, name, cls, timeout)
+ return deferredResult
+
+ def _delegation_errback(self, deferredResult, name, cls, timeout):
+ if '.' in name:
+ name = name[name.find('.') + 1 :]
+ deferredResult = authority.BindAuthority._lookup(self, name, cls,
+ dns.NS, timeout)
+ deferredResult.addErrback(self._delegation_errback, name, cls, timeout)
+ return deferredResult
+