resolved: unify logic how we flush out DNS servers we learnt

This commit is contained in:
Lennart Poettering
2014-08-12 19:32:55 +02:00
parent 96c76ac49c
commit 3e684349c2
5 changed files with 28 additions and 26 deletions

View File

@@ -81,7 +81,6 @@ int config_parse_dnsv(
void *userdata) {
Manager *m = userdata;
DnsServer **l;
int r;
assert(filename);
@@ -89,19 +88,10 @@ int config_parse_dnsv(
assert(rvalue);
assert(m);
if (ltype == DNS_SERVER_FALLBACK)
l = &m->fallback_dns_servers;
else
l = &m->dns_servers;
if (isempty(rvalue)) {
if (isempty(rvalue))
/* Empty assignment means clear the list */
while (*l)
dns_server_free(*l);
} else {
manager_flush_dns_servers(m, ltype);
else {
/* Otherwise add to the list */
r = manager_parse_dns_server(m, ltype, rvalue);
if (r < 0) {

View File

@@ -64,9 +64,9 @@ int dns_server_new(
* we used so far was a fallback one? Then let's try to pick
* the new one */
if (type != DNS_SERVER_FALLBACK &&
s->manager->current_dns_server &&
s->manager->current_dns_server->type == DNS_SERVER_FALLBACK)
manager_set_dns_server(s->manager, NULL);
m->current_dns_server &&
m->current_dns_server->type == DNS_SERVER_FALLBACK)
manager_set_dns_server(m, NULL);
if (ret)
*ret = s;
@@ -87,14 +87,14 @@ DnsServer* dns_server_free(DnsServer *s) {
LIST_REMOVE(servers, s->manager->fallback_dns_servers, s);
else
assert_not_reached("Unknown server type");
if (s->manager->current_dns_server == s)
manager_set_dns_server(s->manager, NULL);
}
if (s->link && s->link->current_dns_server == s)
link_set_dns_server(s->link, NULL);
if (s->manager && s->manager->current_dns_server == s)
manager_set_dns_server(s->manager, NULL);
free(s);
return NULL;

View File

@@ -26,15 +26,15 @@
typedef struct DnsServer DnsServer;
typedef enum DnsServerSource DnsServerSource;
#include "resolved-manager.h"
#include "resolved-link.h"
typedef enum DnsServerType {
DNS_SERVER_SYSTEM,
DNS_SERVER_FALLBACK,
DNS_SERVER_LINK,
} DnsServerType;
#include "resolved-manager.h"
#include "resolved-link.h"
struct DnsServer {
Manager *manager;

View File

@@ -536,10 +536,8 @@ Manager *manager_free(Manager *m) {
dns_scope_free(m->unicast_scope);
while (m->dns_servers)
dns_server_free(m->dns_servers);
while (m->fallback_dns_servers)
dns_server_free(m->fallback_dns_servers);
manager_flush_dns_servers(m, DNS_SERVER_SYSTEM);
manager_flush_dns_servers(m, DNS_SERVER_FALLBACK);
hashmap_free(m->links);
hashmap_free(m->dns_transactions);
@@ -1771,6 +1769,18 @@ void manager_verify_all(Manager *m) {
dns_zone_verify_all(&s->zone);
}
void manager_flush_dns_servers(Manager *m, DnsServerType t) {
assert(m);
if (t == DNS_SERVER_SYSTEM)
while (m->dns_servers)
dns_server_free(m->dns_servers);
if (t == DNS_SERVER_FALLBACK)
while (m->fallback_dns_servers)
dns_server_free(m->fallback_dns_servers);
}
static const char* const support_table[_SUPPORT_MAX] = {
[SUPPORT_NO] = "no",
[SUPPORT_YES] = "yes",

View File

@@ -151,6 +151,8 @@ DnsScope* manager_find_scope(Manager *m, DnsPacket *p);
void manager_verify_all(Manager *m);
void manager_flush_dns_servers(Manager *m, DnsServerType t);
DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
#define EXTRA_CMSG_SPACE 1024