summaryrefslogtreecommitdiff
path: root/contrib/try-all-ns/dnsmasq-2.78xx-try-all-ns.patch
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/try-all-ns/dnsmasq-2.78xx-try-all-ns.patch')
-rw-r--r--contrib/try-all-ns/dnsmasq-2.78xx-try-all-ns.patch20
1 files changed, 20 insertions, 0 deletions
diff --git a/contrib/try-all-ns/dnsmasq-2.78xx-try-all-ns.patch b/contrib/try-all-ns/dnsmasq-2.78xx-try-all-ns.patch
new file mode 100644
index 0000000..700439e
--- /dev/null
+++ b/contrib/try-all-ns/dnsmasq-2.78xx-try-all-ns.patch
@@ -0,0 +1,20 @@
+diff --git a/src/forward.c b/src/forward.c
+index e3fa94b..ecf3b98 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -789,9 +789,12 @@ void reply_query(int fd, int family, time_t now)
+
+ /* Note: if we send extra options in the EDNS0 header, we can't recreate
+ the query from the reply. */
+- if (RCODE(header) == REFUSED &&
+- forward->forwardall == 0 &&
+- !(forward->flags & FREC_HAS_EXTRADATA))
++ if ((RCODE(header) == REFUSED &&
++ forward->forwardall == 0 &&
++ !(forward->flags & FREC_HAS_EXTRADATA)) ||
++ /* If strict-order is set, try next server on NXDOMAIN reply */
++ (RCODE(header) == NXDOMAIN && option_bool(OPT_ORDER) &&
++ server->next != NULL))
+ /* for broken servers, attempt to send to another one. */
+ {
+ unsigned char *pheader;