2084d400c7
Ensure correct domain entries are prepared also for DBus specified domains. Initialize server_domain when adding new nameserver, no matter what is its source. Do not wait for check_servers() to domain initialization. Resolves: rhbz#2186481
84 lines
2.4 KiB
Diff
84 lines
2.4 KiB
Diff
From 312e9f812a6b2f5ca2c2db866ffed3a0b289b945 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
|
|
Date: Wed, 10 May 2023 12:57:17 +0200
|
|
Subject: [PATCH] fixup! Correct releasing of serv_domain
|
|
|
|
---
|
|
src/dnsmasq.h | 2 +-
|
|
src/network.c | 20 +++++++++++---------
|
|
2 files changed, 12 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
|
|
index e8a1320..711ffd3 100644
|
|
--- a/src/dnsmasq.h
|
|
+++ b/src/dnsmasq.h
|
|
@@ -1331,7 +1331,7 @@ int label_exception(int index, int family, struct all_addr *addr);
|
|
int fix_fd(int fd);
|
|
int tcp_interface(int fd, int af);
|
|
struct server_domain *server_domain_find_domain(const char *domain);
|
|
-struct server_domain *server_domain_new(struct server *serv);
|
|
+void server_domain_new(struct server *serv);
|
|
#ifdef HAVE_IPV6
|
|
int set_ipv6pktinfo(int fd);
|
|
#endif
|
|
diff --git a/src/network.c b/src/network.c
|
|
index b8d77fe..6faaad4 100644
|
|
--- a/src/network.c
|
|
+++ b/src/network.c
|
|
@@ -1544,6 +1544,7 @@ void add_update_server(int flags,
|
|
serv->addr = *addr;
|
|
if (source_addr)
|
|
serv->source_addr = *source_addr;
|
|
+ server_domain_new(serv);
|
|
}
|
|
}
|
|
|
|
@@ -1571,14 +1572,20 @@ struct server_domain *server_domain_find_domain(const char *domain)
|
|
/**< Test structure has already set domain pointer.
|
|
*
|
|
* If not, create a new record. */
|
|
-struct server_domain *server_domain_new(struct server *serv)
|
|
+void server_domain_new(struct server *serv)
|
|
{
|
|
struct server_domain *sd;
|
|
+ const char *domain = server_get_domain(serv);
|
|
|
|
- if ((sd = whine_malloc(sizeof(struct server_domain))))
|
|
+ sd = server_domain_find_domain(domain);
|
|
+ if (sd)
|
|
{
|
|
- const char *domain = server_get_domain(serv);
|
|
+ serv->serv_domain = sd;
|
|
+ return;
|
|
+ }
|
|
|
|
+ if ((sd = whine_malloc(sizeof(struct server_domain))))
|
|
+ {
|
|
/* Ensure all serv->domain values have own record in server_domain.
|
|
* Add a new record. */
|
|
if (domain)
|
|
@@ -1592,7 +1599,6 @@ struct server_domain *server_domain_new(struct server *serv)
|
|
serv->serv_domain = sd;
|
|
daemon->server_domains = sd;
|
|
}
|
|
- return sd;
|
|
}
|
|
|
|
/**< Test structure has already set domain pointer.
|
|
@@ -1605,11 +1611,7 @@ static void server_domain_check(struct server *serv)
|
|
if (sd)
|
|
sd->flags &= (~SERV_MARK); /* found domain, mark active */
|
|
else
|
|
- {
|
|
- sd = server_domain_find_domain(serv->domain);
|
|
- if (!sd)
|
|
- server_domain_new(serv);
|
|
- }
|
|
+ server_domain_new(serv);
|
|
}
|
|
|
|
void check_servers(void)
|
|
--
|
|
2.40.1
|
|
|