forked from MirrorHub/synapse
Handle SERVFAILs when doing AAAA lookups for federation (#2477)
... to cope with people with broken dnssec setups, mostly
This commit is contained in:
parent
768f00dedb
commit
75e67b9ee4
1 changed files with 17 additions and 5 deletions
|
@ -354,16 +354,28 @@ def _get_hosts_for_srv_record(dns_client, host):
|
||||||
|
|
||||||
return res[0]
|
return res[0]
|
||||||
|
|
||||||
def eb(res):
|
def eb(res, record_type):
|
||||||
res.trap(DNSNameError)
|
if res.check(DNSNameError):
|
||||||
return []
|
return []
|
||||||
|
logger.warn("Error looking up %s for %s: %s",
|
||||||
|
record_type, host, res, res.value)
|
||||||
|
return res
|
||||||
|
|
||||||
# no logcontexts here, so we can safely fire these off and gatherResults
|
# no logcontexts here, so we can safely fire these off and gatherResults
|
||||||
d1 = dns_client.lookupAddress(host).addCallbacks(cb, eb)
|
d1 = dns_client.lookupAddress(host).addCallbacks(cb, eb)
|
||||||
d2 = dns_client.lookupIPV6Address(host).addCallbacks(cb, eb)
|
d2 = dns_client.lookupIPV6Address(host).addCallbacks(cb, eb)
|
||||||
results = yield defer.gatherResults([d1, d2], consumeErrors=True)
|
results = yield defer.DeferredList(
|
||||||
|
[d1, d2], consumeErrors=True)
|
||||||
|
|
||||||
|
# if all of the lookups failed, raise an exception rather than blowing out
|
||||||
|
# the cache with an empty result.
|
||||||
|
if results and all(s == defer.FAILURE for (s, _) in results):
|
||||||
|
defer.returnValue(results[0][1])
|
||||||
|
|
||||||
|
for (success, result) in results:
|
||||||
|
if success == defer.FAILURE:
|
||||||
|
continue
|
||||||
|
|
||||||
for result in results:
|
|
||||||
for answer in result:
|
for answer in result:
|
||||||
if not answer.payload:
|
if not answer.payload:
|
||||||
continue
|
continue
|
||||||
|
|
Loading…
Reference in a new issue