mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-30 10:33:13 +00:00
49 lines
1.9 KiB
Diff
49 lines
1.9 KiB
Diff
![]() |
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
|
||
|
|