mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-07 06:08:02 +02:00
dns: sd-resolved: honor dns-priority
Honor dns-priority by using the preprocessed list of domains provided
by the manager.
(cherry picked from commit 5df69330b5)
This commit is contained in:
parent
bd1021a0a0
commit
4e9555699d
1 changed files with 16 additions and 38 deletions
|
|
@ -141,47 +141,36 @@ static void
|
||||||
update_add_ip_config (NMDnsSystemdResolved *self,
|
update_add_ip_config (NMDnsSystemdResolved *self,
|
||||||
GVariantBuilder *dns,
|
GVariantBuilder *dns,
|
||||||
GVariantBuilder *domains,
|
GVariantBuilder *domains,
|
||||||
NMIPConfig *config)
|
NMDnsIPConfigData *data)
|
||||||
{
|
{
|
||||||
int addr_family;
|
int addr_family;
|
||||||
gsize addr_size;
|
gsize addr_size;
|
||||||
guint i, n;
|
guint i, n;
|
||||||
gboolean is_routing;
|
gboolean is_routing;
|
||||||
|
const char **iter;
|
||||||
const char *domain;
|
const char *domain;
|
||||||
|
|
||||||
addr_family = nm_ip_config_get_addr_family (config);
|
addr_family = nm_ip_config_get_addr_family (data->ip_config);
|
||||||
addr_size = nm_utils_addr_family_to_size (addr_family);
|
addr_size = nm_utils_addr_family_to_size (addr_family);
|
||||||
|
|
||||||
n = nm_ip_config_get_num_nameservers (config);
|
if (!data->domains.search || !data->domains.search[0])
|
||||||
|
return;
|
||||||
|
|
||||||
|
n = nm_ip_config_get_num_nameservers (data->ip_config);
|
||||||
for (i = 0 ; i < n; i++) {
|
for (i = 0 ; i < n; i++) {
|
||||||
g_variant_builder_open (dns, G_VARIANT_TYPE ("(iay)"));
|
g_variant_builder_open (dns, G_VARIANT_TYPE ("(iay)"));
|
||||||
g_variant_builder_add (dns, "i", addr_family);
|
g_variant_builder_add (dns, "i", addr_family);
|
||||||
g_variant_builder_add_value (dns,
|
g_variant_builder_add_value (dns,
|
||||||
g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
|
g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
|
||||||
nm_ip_config_get_nameserver (config, i),
|
nm_ip_config_get_nameserver (data->ip_config, i),
|
||||||
addr_size,
|
addr_size,
|
||||||
1));
|
1));
|
||||||
g_variant_builder_close (dns);
|
g_variant_builder_close (dns);
|
||||||
}
|
}
|
||||||
|
|
||||||
n = nm_ip_config_get_num_searches (config);
|
for (iter = data->domains.search; *iter; iter++) {
|
||||||
if (n > 0) {
|
domain = nm_utils_parse_dns_domain (*iter, &is_routing);
|
||||||
for (i = 0; i < n; i++) {
|
g_variant_builder_add (domains, "(sb)", domain[0] ? domain : ".", is_routing);
|
||||||
domain = nm_utils_parse_dns_domain (nm_ip_config_get_search (config, i),
|
|
||||||
&is_routing);
|
|
||||||
g_variant_builder_add (domains, "(sb)",
|
|
||||||
domain,
|
|
||||||
is_routing);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
n = nm_ip_config_get_num_domains (config);
|
|
||||||
for (i = 0; i < n; i++) {
|
|
||||||
domain = nm_utils_parse_dns_domain (nm_ip_config_get_domain (config, i),
|
|
||||||
&is_routing);
|
|
||||||
g_variant_builder_add (domains, "(sb)",
|
|
||||||
domain,
|
|
||||||
is_routing);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -216,9 +205,10 @@ prepare_one_interface (NMDnsSystemdResolved *self, InterfaceConfig *ic)
|
||||||
g_variant_builder_open (&domains, G_VARIANT_TYPE ("a(sb)"));
|
g_variant_builder_open (&domains, G_VARIANT_TYPE ("a(sb)"));
|
||||||
|
|
||||||
c_list_for_each_entry (elem, &ic->configs_lst_head, lst) {
|
c_list_for_each_entry (elem, &ic->configs_lst_head, lst) {
|
||||||
NMIPConfig *ip_config = elem->data;
|
NMDnsIPConfigData *data = elem->data;
|
||||||
|
NMIPConfig *ip_config = data->ip_config;
|
||||||
|
|
||||||
update_add_ip_config (self, &dns, &domains, ip_config);
|
update_add_ip_config (self, &dns, &domains, data);
|
||||||
|
|
||||||
if (NM_IS_IP4_CONFIG (ip_config))
|
if (NM_IS_IP4_CONFIG (ip_config))
|
||||||
mdns = NM_MAX (mdns, nm_ip4_config_mdns_get (NM_IP4_CONFIG (ip_config)));
|
mdns = NM_MAX (mdns, nm_ip4_config_mdns_get (NM_IP4_CONFIG (ip_config)));
|
||||||
|
|
@ -294,25 +284,15 @@ update (NMDnsPlugin *plugin,
|
||||||
gs_free gpointer *interfaces_keys = NULL;
|
gs_free gpointer *interfaces_keys = NULL;
|
||||||
guint interfaces_len;
|
guint interfaces_len;
|
||||||
guint i;
|
guint i;
|
||||||
int prio, first_prio = 0;
|
|
||||||
NMDnsIPConfigData *ip_data;
|
NMDnsIPConfigData *ip_data;
|
||||||
gboolean is_first = TRUE;
|
|
||||||
|
|
||||||
interfaces = g_hash_table_new_full (nm_direct_hash, NULL,
|
interfaces = g_hash_table_new_full (nm_direct_hash, NULL,
|
||||||
NULL, (GDestroyNotify) _interface_config_free);
|
NULL, (GDestroyNotify) _interface_config_free);
|
||||||
|
|
||||||
c_list_for_each_entry (ip_data, ip_config_lst_head, ip_config_lst) {
|
c_list_for_each_entry (ip_data, ip_config_lst_head, ip_config_lst) {
|
||||||
gboolean skip = FALSE;
|
|
||||||
InterfaceConfig *ic = NULL;
|
InterfaceConfig *ic = NULL;
|
||||||
int ifindex;
|
int ifindex;
|
||||||
|
|
||||||
prio = nm_ip_config_get_dns_priority (ip_data->ip_config);
|
|
||||||
if (is_first) {
|
|
||||||
is_first = FALSE;
|
|
||||||
first_prio = prio;
|
|
||||||
} else if (first_prio < 0 && first_prio != prio)
|
|
||||||
skip = TRUE;
|
|
||||||
|
|
||||||
ifindex = ip_data->data->ifindex;
|
ifindex = ip_data->data->ifindex;
|
||||||
nm_assert (ifindex == nm_ip_config_get_ifindex (ip_data->ip_config));
|
nm_assert (ifindex == nm_ip_config_get_ifindex (ip_data->ip_config));
|
||||||
|
|
||||||
|
|
@ -324,10 +304,8 @@ update (NMDnsPlugin *plugin,
|
||||||
g_hash_table_insert (interfaces, GINT_TO_POINTER (ifindex), ic);
|
g_hash_table_insert (interfaces, GINT_TO_POINTER (ifindex), ic);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!skip) {
|
c_list_link_tail (&ic->configs_lst_head,
|
||||||
c_list_link_tail (&ic->configs_lst_head,
|
&nm_c_list_elem_new_stale (ip_data)->lst);
|
||||||
&nm_c_list_elem_new_stale (ip_data->ip_config)->lst);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free_pending_updates (self);
|
free_pending_updates (self);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue