]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: when a server response with REFUSED, try a different one
authorLennart Poettering <lennart@poettering.net>
Wed, 8 Feb 2017 18:55:16 +0000 (19:55 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 9 Feb 2017 15:13:07 +0000 (16:13 +0100)
Fixes: #4264
src/resolve/resolved-dns-transaction.c

index 2fce44ec8b74e0d821572e2c8f0a4689cdda39e7..1985dbde21123604e15f18a1f9bd246a4a774a27 100644 (file)
@@ -924,7 +924,16 @@ void dns_transaction_process_reply(DnsTransaction *t, DnsPacket *p) {
 
                         dns_transaction_retry(t, false /* use the same server */);
                         return;
-                } else if (DNS_PACKET_TC(p))
+                }
+
+                if (DNS_PACKET_RCODE(p) == DNS_RCODE_REFUSED) {
+                        /* This server refused our request? If so, try again, use a different server */
+                        log_debug("Server returned REFUSED, switching servers, and retrying.");
+                        dns_transaction_retry(t, true /* pick a new server */);
+                        return;
+                }
+
+                if (DNS_PACKET_TC(p))
                         dns_server_packet_truncated(t->server, t->current_feature_level);
 
                 break;