From e05550c34c612136839942010c8c341d14154f32 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 29 Sep 2020 11:48:03 +0200 Subject: [PATCH] dns: slightly refactor rebuild_domain_lists() Centralize wildcard domain assignment in a single place. --- src/dns/nm-dns-manager.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c index 87187d6946..f11e104817 100644 --- a/src/dns/nm-dns-manager.c +++ b/src/dns/nm-dns-manager.c @@ -1326,8 +1326,8 @@ static void rebuild_domain_lists(NMDnsManager *self) { NMDnsIPConfigData *ip_data; - gs_unref_hashtable GHashTable *ht = NULL; - gboolean default_route_found = FALSE; + gs_unref_hashtable GHashTable *ht = NULL; + gs_unref_hashtable GHashTable *wildcard_entries = NULL; CList * head; head = _ip_config_lst_head(self); @@ -1337,8 +1337,9 @@ rebuild_domain_lists(NMDnsManager *self) if (!nm_ip_config_get_num_nameservers(ip_config)) continue; if (nm_ip_config_best_default_route_get(ip_config)) { - default_route_found = TRUE; - break; + if (!wildcard_entries) + wildcard_entries = g_hash_table_new(nm_direct_hash, NULL); + g_hash_table_add(wildcard_entries, ip_data); } } @@ -1373,13 +1374,13 @@ rebuild_domain_lists(NMDnsManager *self) /* Add wildcard lookup domain to connections with the default route. * If there is no default route, add the wildcard domain to all non-VPN * connections */ - if (default_route_found) { + if (wildcard_entries) { /* FIXME: this heuristic of which device has a default route does * not work with policy routing (as used by default with WireGuard). * We should have a more stable mechanism where an NMIPConfig indicates * whether it is suitable for certain operations (like having an automatically * added "~" domain). */ - if (nm_ip_config_best_default_route_get(ip_config)) + if (g_hash_table_contains(wildcard_entries, ip_data)) domains[num_dom1++] = "~"; } else { if (ip_data->ip_config_type != NM_DNS_IP_CONFIG_TYPE_VPN)