66 lines
2.2 KiB
Diff
66 lines
2.2 KiB
Diff
|
|
From f4b281381853df6b275332d4cd0ec1d150bffa86 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Simon Kelley <simon@thekelleys.org.uk>
|
||
|
|
Date: Mon, 8 Aug 2022 15:27:32 +0100
|
||
|
|
Subject: [PATCH] Fix bad interaction between --address=/#/<ip> and
|
||
|
|
--server=/some.domain/#
|
||
|
|
|
||
|
|
This would return <ip> for queries in some.domain, rather than
|
||
|
|
forwarding the query via the default server(s) read from /etc/resolv.conf.
|
||
|
|
|
||
|
|
Conflict:NA
|
||
|
|
Reference:https://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=commit;h=f4b281381853df6b275332d4cd0ec1d150bffa86
|
||
|
|
---
|
||
|
|
src/domain-match.c | 14 +++++++++-----
|
||
|
|
1 files changed, 9 insertions(+), 5 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/src/domain-match.c b/src/domain-match.c
|
||
|
|
index 3ec49b8..f7db0fe 100644
|
||
|
|
--- a/src/domain-match.c
|
||
|
|
+++ b/src/domain-match.c
|
||
|
|
@@ -213,9 +213,13 @@ int lookup_domain(char *domain, int flags, int *lowout, int *highout)
|
||
|
|
to continue generalising */
|
||
|
|
{
|
||
|
|
/* We've matched a setting which says to use servers without a domain.
|
||
|
|
- Continue the search with empty query */
|
||
|
|
+ Continue the search with empty query. We set the F_SERVER flag
|
||
|
|
+ so that --address=/#/... doesn't match. */
|
||
|
|
if (daemon->serverarray[nlow]->flags & SERV_USE_RESOLV)
|
||
|
|
- crop_query = qlen;
|
||
|
|
+ {
|
||
|
|
+ crop_query = qlen;
|
||
|
|
+ flags |= F_SERVER;
|
||
|
|
+ }
|
||
|
|
else
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
@@ -299,7 +303,7 @@ int filter_servers(int seed, int flags, int *lowout, int *highout)
|
||
|
|
|
||
|
|
for (i = nlow; i < nhigh && (daemon->serverarray[i]->flags & SERV_6ADDR); i++);
|
||
|
|
|
||
|
|
- if (i != nlow && (flags & F_IPV6))
|
||
|
|
+ if (!(flags & F_SERVER) && i != nlow && (flags & F_IPV6))
|
||
|
|
nhigh = i;
|
||
|
|
else
|
||
|
|
{
|
||
|
|
@@ -307,7 +311,7 @@ int filter_servers(int seed, int flags, int *lowout, int *highout)
|
||
|
|
|
||
|
|
for (i = nlow; i < nhigh && (daemon->serverarray[i]->flags & SERV_4ADDR); i++);
|
||
|
|
|
||
|
|
- if (i != nlow && (flags & F_IPV4))
|
||
|
|
+ if (!(flags & F_SERVER) && i != nlow && (flags & F_IPV4))
|
||
|
|
nhigh = i;
|
||
|
|
else
|
||
|
|
{
|
||
|
|
@@ -315,7 +319,7 @@ int filter_servers(int seed, int flags, int *lowout, int *highout)
|
||
|
|
|
||
|
|
for (i = nlow; i < nhigh && (daemon->serverarray[i]->flags & SERV_ALL_ZEROS); i++);
|
||
|
|
|
||
|
|
- if (i != nlow && (flags & (F_IPV4 | F_IPV6)))
|
||
|
|
+ if (!(flags & F_SERVER) && i != nlow && (flags & (F_IPV4 | F_IPV6)))
|
||
|
|
nhigh = i;
|
||
|
|
else
|
||
|
|
{
|
||
|
|
--
|
||
|
|
2.23.0
|
||
|
|
|