107 lines
3.6 KiB
Diff
107 lines
3.6 KiB
Diff
From 4cab3d930f9236408b838adfdaaeb6508a928bbf Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
|
|
Date: Fri, 9 Jun 2023 22:11:01 +0200
|
|
Subject: [PATCH] Use serv_domain only for regular servers
|
|
|
|
Do not try to use it for --local=/x/ or --address=/x/#. Some users use
|
|
quite long list of blocks, which slows down walking trough domain list
|
|
considerably. But searching by server_domain_find_domain is needed only
|
|
for normal servers, which may store there last used server and number
|
|
of recent forwarded queries. Local addresses overrides store there no
|
|
useful information, avoid searching and adding new domains for such
|
|
records.
|
|
|
|
Would also speed up searching servers when blocklists are used, because
|
|
only domains of servers are tested.
|
|
|
|
Resolves: rhbz#2209031
|
|
---
|
|
src/forward.c | 4 ++--
|
|
src/option.c | 13 ++++++++-----
|
|
2 files changed, 10 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/src/forward.c b/src/forward.c
|
|
index d8e845a..989fb61 100644
|
|
--- a/src/forward.c
|
|
+++ b/src/forward.c
|
|
@@ -234,8 +234,8 @@ static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigne
|
|
*type = 0; /* use normal servers for this domain */
|
|
*domain = NULL;
|
|
}
|
|
- if (serv_domain && !*serv_domain)
|
|
- *serv_domain = server_domain_find_domain(*domain);
|
|
+ if (serv_domain && !*serv_domain && (*type & SERV_HAS_DOMAIN)==0)
|
|
+ *serv_domain = server_domain_find_domain(NULL);
|
|
return flags;
|
|
}
|
|
|
|
diff --git a/src/option.c b/src/option.c
|
|
index 1382c55..b22fc90 100644
|
|
--- a/src/option.c
|
|
+++ b/src/option.c
|
|
@@ -906,7 +906,7 @@ static struct server *add_rev4(struct in_addr addr, int msize)
|
|
p += sprintf(p, "in-addr.arpa");
|
|
|
|
serv->flags = SERV_HAS_DOMAIN;
|
|
- server_domain_new(serv);
|
|
+ serv->serv_domain = NULL;
|
|
serv->next = daemon->servers;
|
|
daemon->servers = serv;
|
|
|
|
@@ -931,7 +931,7 @@ static struct server *add_rev6(struct in6_addr *addr, int msize)
|
|
p += sprintf(p, "ip6.arpa");
|
|
|
|
serv->flags = SERV_HAS_DOMAIN;
|
|
- server_domain_new(serv);
|
|
+ serv->serv_domain = NULL;
|
|
serv->next = daemon->servers;
|
|
daemon->servers = serv;
|
|
|
|
@@ -2246,7 +2246,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
|
memset(serv, 0, sizeof(struct server));
|
|
serv->domain = d;
|
|
serv->flags = SERV_HAS_DOMAIN | SERV_NO_ADDR;
|
|
- server_domain_new(serv);
|
|
+ serv->serv_domain = NULL;
|
|
serv->next = daemon->servers;
|
|
daemon->servers = serv;
|
|
}
|
|
@@ -2291,7 +2291,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
|
memset(serv, 0, sizeof(struct server));
|
|
serv->domain = d;
|
|
serv->flags = SERV_HAS_DOMAIN | SERV_NO_ADDR;
|
|
- server_domain_new(serv);
|
|
+ serv->serv_domain = NULL;
|
|
serv->next = daemon->servers;
|
|
daemon->servers = serv;
|
|
}
|
|
@@ -2542,7 +2542,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
|
newlist = serv;
|
|
serv->domain = domain;
|
|
serv->flags = domain ? SERV_HAS_DOMAIN : SERV_FOR_NODOTS;
|
|
- server_domain_new(serv);
|
|
+ serv->serv_domain = NULL;
|
|
arg = end;
|
|
if (rebind)
|
|
break;
|
|
@@ -2594,6 +2594,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
|
server_list_free(newlist);
|
|
ret_err(err);
|
|
}
|
|
+ if ((newlist->flags & SERV_LITERAL_ADDRESS)==0)
|
|
+ server_domain_new(newlist);
|
|
}
|
|
|
|
serv = newlist;
|
|
@@ -2637,6 +2639,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
|
else
|
|
ret_err(gen_err);
|
|
|
|
+ server_domain_new(serv);
|
|
string = parse_server(comma, &serv->addr, &serv->source_addr, serv->interface, &serv->flags);
|
|
|
|
if (string)
|
|
--
|
|
2.41.0
|
|
|