mirror of https://github.com/asterisk/asterisk
commit
64d2ea44d8
@ -0,0 +1,48 @@
|
||||
From a5efddbe9151e9ad99279e59566c86f8bc27d3a9 Mon Sep 17 00:00:00 2001
|
||||
From: George Joseph <gjoseph@digium.com>
|
||||
Date: Wed, 7 Sep 2016 13:10:57 -0600
|
||||
Subject: [PATCH] resolver.c: Prevent SERVFAIL from marking name server bad
|
||||
|
||||
A name server that returns "Server Failure" is indicating only that
|
||||
the server couldn't process that particular request. We should NOT
|
||||
assume that the name server is incapable of serving other requests.
|
||||
|
||||
Here's the scenario we've been encountering...
|
||||
|
||||
* 2 local name servers configured in resolv.conf.
|
||||
* An OPTIONS request causes a request for A and AAAA records to go out
|
||||
to both nameservers.
|
||||
* The A responses both come back successfully resolved.
|
||||
* Because of an issue at some upstream nameserver, the AAAA responses
|
||||
for that particular query come back as "SERVFAIL" from both local
|
||||
name servers.
|
||||
* Both local servers are marked as bad and no further queries can be
|
||||
sent until the 60 second ttl expires. Only previously cached results
|
||||
can be used.
|
||||
* In this case, 60 seconds is just enough time for another OPTIONS
|
||||
request to go out to the same host so the cycle repeats.
|
||||
|
||||
We could set the bad ttl really low but that also affects REFUSED and
|
||||
NOTAUTH which probably DO signal a real server issue. Besides, even
|
||||
a really low bad ttl would be an issue on a pbx.
|
||||
---
|
||||
pjlib-util/src/pjlib-util/resolver.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pjlib-util/src/pjlib-util/resolver.c b/pjlib-util/src/pjlib-util/resolver.c
|
||||
index d277e4f..540f88f 100644
|
||||
--- a/pjlib-util/src/pjlib-util/resolver.c
|
||||
+++ b/pjlib-util/src/pjlib-util/resolver.c
|
||||
@@ -1384,8 +1384,7 @@ static void report_nameserver_status(pj_dns_resolver *resolver,
|
||||
q_id = (pj_uint32_t)-1;
|
||||
}
|
||||
|
||||
- if (!pkt || rcode == PJ_DNS_RCODE_SERVFAIL ||
|
||||
- rcode == PJ_DNS_RCODE_REFUSED ||
|
||||
+ if (!pkt || rcode == PJ_DNS_RCODE_REFUSED ||
|
||||
rcode == PJ_DNS_RCODE_NOTAUTH)
|
||||
{
|
||||
is_good = PJ_FALSE;
|
||||
--
|
||||
2.7.4
|
||||
|
Loading…
Reference in new issue