dns: slightly refactor rebuild_domain_lists()

Centralize wildcard domain assignment in a single place.
This commit is contained in:
Beniamino Galvani 2020-09-29 11:48:03 +02:00
parent 4eb3b5b9dd
commit e05550c34c

View file

@ -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)