From aa347182bb04750b8b8c2f55526fde7fb473878b Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 13 Jun 2017 23:58:57 +0200 Subject: [PATCH 1/6] dns: minor refactoring in _collect_resolv_conf_data() The code was correct previously, but it was confusing to me, because - once @skip gets set to TRUE, it stays TRUE for the rest of the loop. - in each additional skipped iteration, it would still set plugin_confs[i] to NULL. Which is not wrong, but confusing. - it would set "prev_prio = prio;" in each iteration. After @skip is set to TRUE, that doesn't matter anymore, but is confusing. Before @skip is set to TRUE it also doesn't really matter to set it more then once, because we only care about the very first priority. - @skip sounded to me like the current iteration would be skipped. But really all remaining will be skipped too. --- src/dns/nm-dns-manager.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c index cc9be29e7f..13e57dc11b 100644 --- a/src/dns/nm-dns-manager.c +++ b/src/dns/nm-dns-manager.c @@ -994,7 +994,7 @@ _collect_resolv_conf_data (NMDnsManager *self, /* only for logging context, no o NMDnsIPConfigData ***out_plugin_confs) { NMDnsIPConfigData **plugin_confs = NULL; - guint i, num, len; + guint i, j, num, len; NMResolvConfData rc = { .nameservers = g_ptr_array_new (), .searches = g_ptr_array_new (), @@ -1007,26 +1007,26 @@ _collect_resolv_conf_data (NMDnsManager *self, /* only for logging context, no o merge_global_dns_config (&rc, global_config); else { nm_auto_free_gstring GString *tmp_gstring = NULL; - int prio, prev_prio = 0; + int prio, first_prio = 0; NMDnsIPConfigData *current; - gboolean skip = FALSE, v4; + gboolean v4; plugin_confs = g_new (NMDnsIPConfigData *, configs->len + 1); - for (i = 0; i < configs->len; i++) { + for (i = 0, j = 0; i < configs->len; i++) { + gboolean skip = FALSE; + current = configs->pdata[i]; v4 = NM_IS_IP4_CONFIG (current->config); - prio = v4 ? - nm_ip4_config_get_dns_priority ((NMIP4Config *) current->config) : - nm_ip6_config_get_dns_priority ((NMIP6Config *) current->config); + prio = v4 + ? nm_ip4_config_get_dns_priority ((NMIP4Config *) current->config) + : nm_ip6_config_get_dns_priority ((NMIP6Config *) current->config); - if (prev_prio < 0 && prio != prev_prio) { + if (i == 0) + first_prio = prio; + else if (first_prio < 0 && first_prio != prio) skip = TRUE; - plugin_confs[i] = NULL; - } - - prev_prio = prio; if ( ( v4 && nm_ip4_config_get_num_nameservers ((NMIP4Config *) current->config)) || (!v4 && nm_ip6_config_get_num_nameservers ((NMIP6Config *) current->config))) { @@ -1041,10 +1041,10 @@ _collect_resolv_conf_data (NMDnsManager *self, /* only for logging context, no o if (!skip) { merge_one_ip_config_data (&rc, current); - plugin_confs[i] = current; + plugin_confs[j++] = current; } } - plugin_confs[i] = NULL; + plugin_confs[j++] = NULL; } /* If the hostname is a FQDN ("dcbw.example.com"), then add the domain part of it From c818e46d48b9ec02ba2aaedf6981b5a54eceb648 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 14 Jun 2017 00:27:38 +0200 Subject: [PATCH 2/6] dns: add helper method to get DNS priority from NMDnsIPConfigData --- src/dns/nm-dns-manager.c | 34 ++++++++++++++++++---------------- src/dns/nm-dns-manager.h | 2 ++ 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c index 13e57dc11b..a36b09ef10 100644 --- a/src/dns/nm-dns-manager.c +++ b/src/dns/nm-dns-manager.c @@ -197,6 +197,19 @@ NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_config_type_to_string, NMDnsIPConfigType, NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_IP_CONFIG_TYPE_VPN, "vpn"), ); +int +nm_dns_ip_config_data_get_dns_priority (const NMDnsIPConfigData *config) +{ + g_return_val_if_fail (config, 0); + + if (NM_IS_IP4_CONFIG (config->config)) + return nm_ip4_config_get_dns_priority (config->config); + else if (NM_IS_IP6_CONFIG (config->config)) + return nm_ip6_config_get_dns_priority (config->config); + else + g_return_val_if_reached (0); +} + static NMDnsIPConfigData * ip_config_data_new (gpointer config, NMDnsIPConfigType type, const char *iface) { @@ -226,19 +239,10 @@ ip_config_data_destroy (gpointer ptr) static gint ip_config_data_compare (const NMDnsIPConfigData *a, const NMDnsIPConfigData *b) { - gboolean a_v4, b_v4; - gint a_prio, b_prio; + int a_prio, b_prio; - a_v4 = NM_IS_IP4_CONFIG (a->config); - b_v4 = NM_IS_IP4_CONFIG (b->config); - - a_prio = a_v4 ? - nm_ip4_config_get_dns_priority ((NMIP4Config *) a->config) : - nm_ip6_config_get_dns_priority ((NMIP6Config *) a->config); - - b_prio = b_v4 ? - nm_ip4_config_get_dns_priority ((NMIP4Config *) b->config) : - nm_ip6_config_get_dns_priority ((NMIP6Config *) b->config); + a_prio = nm_dns_ip_config_data_get_dns_priority (a); + b_prio = nm_dns_ip_config_data_get_dns_priority (b); /* Configurations with lower priority value first */ if (a_prio < b_prio) @@ -1017,17 +1021,15 @@ _collect_resolv_conf_data (NMDnsManager *self, /* only for logging context, no o gboolean skip = FALSE; current = configs->pdata[i]; - v4 = NM_IS_IP4_CONFIG (current->config); - prio = v4 - ? nm_ip4_config_get_dns_priority ((NMIP4Config *) current->config) - : nm_ip6_config_get_dns_priority ((NMIP6Config *) current->config); + prio = nm_dns_ip_config_data_get_dns_priority (current); if (i == 0) first_prio = prio; else if (first_prio < 0 && first_prio != prio) skip = TRUE; + v4 = NM_IS_IP4_CONFIG (current->config); if ( ( v4 && nm_ip4_config_get_num_nameservers ((NMIP4Config *) current->config)) || (!v4 && nm_ip6_config_get_num_nameservers ((NMIP6Config *) current->config))) { _LOGT ("config: %8d %-7s v%c %-16s %s: %s", diff --git a/src/dns/nm-dns-manager.h b/src/dns/nm-dns-manager.h index 899e4bb865..ee83592741 100644 --- a/src/dns/nm-dns-manager.h +++ b/src/dns/nm-dns-manager.h @@ -44,6 +44,8 @@ typedef struct { char *iface; } NMDnsIPConfigData; +int nm_dns_ip_config_data_get_dns_priority (const NMDnsIPConfigData *config); + #define NM_TYPE_DNS_MANAGER (nm_dns_manager_get_type ()) #define NM_DNS_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NM_TYPE_DNS_MANAGER, NMDnsManager)) #define NM_DNS_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NM_TYPE_DNS_MANAGER, NMDnsManagerClass)) From 1c9285b06e166a86bf750c3302958f49b9fb9f76 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 14 Jun 2017 00:40:13 +0200 Subject: [PATCH 3/6] dns/systemd: remove unused device lookup in add_interface_configuration() --- src/dns/nm-dns-systemd-resolved.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/dns/nm-dns-systemd-resolved.c b/src/dns/nm-dns-systemd-resolved.c index ed165618ec..098897660d 100644 --- a/src/dns/nm-dns-systemd-resolved.c +++ b/src/dns/nm-dns-systemd-resolved.c @@ -107,7 +107,6 @@ add_interface_configuration (NMDnsSystemdResolved *self, int i; InterfaceConfig *ic = NULL; int ifindex; - NMDevice *device; if (NM_IS_IP4_CONFIG (data->config)) ifindex = nm_ip4_config_get_ifindex (data->config); @@ -116,8 +115,6 @@ add_interface_configuration (NMDnsSystemdResolved *self, else g_return_if_reached (); - device = nm_manager_get_device_by_ifindex (nm_manager_get (), ifindex); - for (i = 0; i < interfaces->len; i++) { InterfaceConfig *tic = &g_array_index (interfaces, InterfaceConfig, i); if (ifindex == tic->ifindex) { From d582176939cce20c034649bc5569f75e1d05da24 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 14 Jun 2017 00:47:10 +0200 Subject: [PATCH 4/6] dns: make configs argument to update a const pointer --- src/dns/nm-dns-dnsmasq.c | 2 +- src/dns/nm-dns-plugin.c | 2 +- src/dns/nm-dns-plugin.h | 4 ++-- src/dns/nm-dns-systemd-resolved.c | 4 ++-- src/dns/nm-dns-unbound.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/dns/nm-dns-dnsmasq.c b/src/dns/nm-dns-dnsmasq.c index 5223638e68..33cda8371b 100644 --- a/src/dns/nm-dns-dnsmasq.c +++ b/src/dns/nm-dns-dnsmasq.c @@ -554,7 +554,7 @@ start_dnsmasq (NMDnsDnsmasq *self) static gboolean update (NMDnsPlugin *plugin, - const NMDnsIPConfigData **configs, + const NMDnsIPConfigData *const*configs, const NMGlobalDnsConfig *global_config, const char *hostname) { diff --git a/src/dns/nm-dns-plugin.c b/src/dns/nm-dns-plugin.c index 00729c9392..460093440c 100644 --- a/src/dns/nm-dns-plugin.c +++ b/src/dns/nm-dns-plugin.c @@ -77,7 +77,7 @@ G_DEFINE_TYPE_EXTENDED (NMDnsPlugin, nm_dns_plugin, G_TYPE_OBJECT, G_TYPE_FLAG_A gboolean nm_dns_plugin_update (NMDnsPlugin *self, - const NMDnsIPConfigData **configs, + const NMDnsIPConfigData *const*configs, const NMGlobalDnsConfig *global_config, const char *hostname) { diff --git a/src/dns/nm-dns-plugin.h b/src/dns/nm-dns-plugin.h index 12109441f9..d71eb46b45 100644 --- a/src/dns/nm-dns-plugin.h +++ b/src/dns/nm-dns-plugin.h @@ -50,7 +50,7 @@ typedef struct { * configuration. */ gboolean (*update) (NMDnsPlugin *self, - const NMDnsIPConfigData **configs, + const NMDnsIPConfigData *const*configs, const NMGlobalDnsConfig *global_config, const char *hostname); @@ -80,7 +80,7 @@ gboolean nm_dns_plugin_is_caching (NMDnsPlugin *self); const char *nm_dns_plugin_get_name (NMDnsPlugin *self); gboolean nm_dns_plugin_update (NMDnsPlugin *self, - const NMDnsIPConfigData **configs, + const NMDnsIPConfigData *const*configs, const NMGlobalDnsConfig *global_config, const char *hostname); diff --git a/src/dns/nm-dns-systemd-resolved.c b/src/dns/nm-dns-systemd-resolved.c index 098897660d..a943e572d9 100644 --- a/src/dns/nm-dns-systemd-resolved.c +++ b/src/dns/nm-dns-systemd-resolved.c @@ -288,13 +288,13 @@ send_updates (NMDnsSystemdResolved *self) static gboolean update (NMDnsPlugin *plugin, - const NMDnsIPConfigData **configs, + const NMDnsIPConfigData *const*configs, const NMGlobalDnsConfig *global_config, const char *hostname) { NMDnsSystemdResolved *self = NM_DNS_SYSTEMD_RESOLVED (plugin); GArray *interfaces = g_array_new (TRUE, TRUE, sizeof (InterfaceConfig)); - const NMDnsIPConfigData **c; + const NMDnsIPConfigData *const*c; int i; for (c = configs; *c != NULL; c++) diff --git a/src/dns/nm-dns-unbound.c b/src/dns/nm-dns-unbound.c index 6af4bad885..7369505ec9 100644 --- a/src/dns/nm-dns-unbound.c +++ b/src/dns/nm-dns-unbound.c @@ -39,7 +39,7 @@ G_DEFINE_TYPE (NMDnsUnbound, nm_dns_unbound, NM_TYPE_DNS_PLUGIN) static gboolean update (NMDnsPlugin *plugin, - const NMDnsIPConfigData **configs, + const NMDnsIPConfigData *const*configs, const NMGlobalDnsConfig *global_config, const char *hostname) { From 70792e51d94a5e7790b3e65b7d6cf591b251f4cd Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 14 Jun 2017 00:44:03 +0200 Subject: [PATCH 5/6] dns: fix negative ipv4.dns-priority for systemd-resolved A negative ipv4.dns-priority and ipv6.dns-priority has the meaning to configure the DNS information of the connection exclusively. With systemd-resolved, that means we must explicitly unset the configuration from other interfaces. https://bugzilla.gnome.org/show_bug.cgi?id=783569 --- src/dns/nm-dns-dnsmasq.c | 12 +++++++++--- src/dns/nm-dns-manager.c | 6 +++--- src/dns/nm-dns-plugin.c | 2 +- src/dns/nm-dns-systemd-resolved.c | 22 ++++++++++++++++------ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/dns/nm-dns-dnsmasq.c b/src/dns/nm-dns-dnsmasq.c index 33cda8371b..67aae6f431 100644 --- a/src/dns/nm-dns-dnsmasq.c +++ b/src/dns/nm-dns-dnsmasq.c @@ -561,6 +561,8 @@ update (NMDnsPlugin *plugin, NMDnsDnsmasq *self = NM_DNS_DNSMASQ (plugin); NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE (self); GVariantBuilder servers; + guint i; + int prio, first_prio; start_dnsmasq (self); @@ -569,9 +571,13 @@ update (NMDnsPlugin *plugin, if (global_config) add_global_config (self, &servers, global_config); else { - while (*configs) { - add_ip_config_data (self, &servers, *configs); - configs++; + for (i = 0; configs[i]; i++) { + prio = nm_dns_ip_config_data_get_dns_priority (configs[i]); + if (i == 0) + first_prio = prio; + else if (first_prio < 0 && first_prio != prio) + break; + add_ip_config_data (self, &servers, configs[i]); } } diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c index a36b09ef10..09c183be50 100644 --- a/src/dns/nm-dns-manager.c +++ b/src/dns/nm-dns-manager.c @@ -1041,10 +1041,10 @@ _collect_resolv_conf_data (NMDnsManager *self, /* only for logging context, no o get_nameserver_list (current->config, &tmp_gstring)); } - if (!skip) { + if (!skip) merge_one_ip_config_data (&rc, current); - plugin_confs[j++] = current; - } + + plugin_confs[j++] = current; } plugin_confs[j++] = NULL; } diff --git a/src/dns/nm-dns-plugin.c b/src/dns/nm-dns-plugin.c index 460093440c..740ff26bab 100644 --- a/src/dns/nm-dns-plugin.c +++ b/src/dns/nm-dns-plugin.c @@ -84,7 +84,7 @@ nm_dns_plugin_update (NMDnsPlugin *self, g_return_val_if_fail (NM_DNS_PLUGIN_GET_CLASS (self)->update != NULL, FALSE); return NM_DNS_PLUGIN_GET_CLASS (self)->update (self, - configs, + configs ?: NM_PTRARRAY_EMPTY (const NMDnsIPConfigData *), global_config, hostname); } diff --git a/src/dns/nm-dns-systemd-resolved.c b/src/dns/nm-dns-systemd-resolved.c index a943e572d9..f49aed57da 100644 --- a/src/dns/nm-dns-systemd-resolved.c +++ b/src/dns/nm-dns-systemd-resolved.c @@ -102,7 +102,8 @@ call_done (GObject *source, GAsyncResult *r, gpointer user_data) static void add_interface_configuration (NMDnsSystemdResolved *self, GArray *interfaces, - const NMDnsIPConfigData *data) + const NMDnsIPConfigData *data, + gboolean skip) { int i; InterfaceConfig *ic = NULL; @@ -130,7 +131,8 @@ add_interface_configuration (NMDnsSystemdResolved *self, ic->ifindex = ifindex; } - ic->configs = g_list_append (ic->configs, data->config); + if (!skip) + ic->configs = g_list_append (ic->configs, data->config); } static void @@ -294,11 +296,19 @@ update (NMDnsPlugin *plugin, { NMDnsSystemdResolved *self = NM_DNS_SYSTEMD_RESOLVED (plugin); GArray *interfaces = g_array_new (TRUE, TRUE, sizeof (InterfaceConfig)); - const NMDnsIPConfigData *const*c; - int i; + guint i; + int prio, first_prio = 0; - for (c = configs; *c != NULL; c++) - add_interface_configuration (self, interfaces, *c); + for (i = 0; configs[i]; i++) { + gboolean skip = FALSE; + + prio = nm_dns_ip_config_data_get_dns_priority (configs[i]); + if (i == 0) + first_prio = prio; + else if (first_prio < 0 && first_prio != prio) + skip = TRUE; + add_interface_configuration (self, interfaces, configs[i], skip); + } free_pending_updates (self); From 19a98c6f617c2c9d550f6954f34b3e25e3ae6d63 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 14 Jun 2017 11:04:38 +0200 Subject: [PATCH 6/6] dns: don't clone DNS configs list for nm_dns_plugin_update() No need to clone the list anymore. Unfortunately, GPtrArray is not NULL terminated (without extra effort), so we have to pass on the GPtrArray instance for the length. --- src/dns/nm-dns-dnsmasq.c | 8 ++++---- src/dns/nm-dns-manager.c | 16 +++------------- src/dns/nm-dns-plugin.c | 4 ++-- src/dns/nm-dns-plugin.h | 4 ++-- src/dns/nm-dns-systemd-resolved.c | 8 ++++---- src/dns/nm-dns-unbound.c | 2 +- 6 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/dns/nm-dns-dnsmasq.c b/src/dns/nm-dns-dnsmasq.c index 67aae6f431..a6204ae4a0 100644 --- a/src/dns/nm-dns-dnsmasq.c +++ b/src/dns/nm-dns-dnsmasq.c @@ -554,7 +554,7 @@ start_dnsmasq (NMDnsDnsmasq *self) static gboolean update (NMDnsPlugin *plugin, - const NMDnsIPConfigData *const*configs, + const GPtrArray *configs, const NMGlobalDnsConfig *global_config, const char *hostname) { @@ -571,13 +571,13 @@ update (NMDnsPlugin *plugin, if (global_config) add_global_config (self, &servers, global_config); else { - for (i = 0; configs[i]; i++) { - prio = nm_dns_ip_config_data_get_dns_priority (configs[i]); + for (i = 0; i < configs->len; i++) { + prio = nm_dns_ip_config_data_get_dns_priority (configs->pdata[i]); if (i == 0) first_prio = prio; else if (first_prio < 0 && first_prio != prio) break; - add_ip_config_data (self, &servers, configs[i]); + add_ip_config_data (self, &servers, configs->pdata[i]); } } diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c index 09c183be50..daba6db349 100644 --- a/src/dns/nm-dns-manager.c +++ b/src/dns/nm-dns-manager.c @@ -994,10 +994,8 @@ _collect_resolv_conf_data (NMDnsManager *self, /* only for logging context, no o char ***out_options, char ***out_nameservers, char ***out_nis_servers, - const char **out_nis_domain, - NMDnsIPConfigData ***out_plugin_confs) + const char **out_nis_domain) { - NMDnsIPConfigData **plugin_confs = NULL; guint i, j, num, len; NMResolvConfData rc = { .nameservers = g_ptr_array_new (), @@ -1015,8 +1013,6 @@ _collect_resolv_conf_data (NMDnsManager *self, /* only for logging context, no o NMDnsIPConfigData *current; gboolean v4; - plugin_confs = g_new (NMDnsIPConfigData *, configs->len + 1); - for (i = 0, j = 0; i < configs->len; i++) { gboolean skip = FALSE; @@ -1043,10 +1039,7 @@ _collect_resolv_conf_data (NMDnsManager *self, /* only for logging context, no o if (!skip) merge_one_ip_config_data (&rc, current); - - plugin_confs[j++] = current; } - plugin_confs[j++] = NULL; } /* If the hostname is a FQDN ("dcbw.example.com"), then add the domain part of it @@ -1080,7 +1073,6 @@ _collect_resolv_conf_data (NMDnsManager *self, /* only for logging context, no o } g_ptr_array_set_size (rc.searches, i); - *out_plugin_confs = plugin_confs; *out_searches = _ptrarray_to_strv (rc.searches); *out_options = _ptrarray_to_strv (rc.options); *out_nameservers = _ptrarray_to_strv (rc.nameservers); @@ -1104,7 +1096,6 @@ update_dns (NMDnsManager *self, SpawnResult result = SR_ERROR; NMConfigData *data; NMGlobalDnsConfig *global_config; - gs_free NMDnsIPConfigData **plugin_confs = NULL; g_return_val_if_fail (!error || !*error, FALSE); @@ -1138,8 +1129,7 @@ update_dns (NMDnsManager *self, compute_hash (self, global_config, priv->hash); _collect_resolv_conf_data (self, global_config, priv->configs, priv->hostname, - &searches, &options, &nameservers, &nis_servers, &nis_domain, - &plugin_confs); + &searches, &options, &nameservers, &nis_servers, &nis_domain); /* Let any plugins do their thing first */ if (priv->plugin) { @@ -1157,7 +1147,7 @@ update_dns (NMDnsManager *self, _LOGD ("update-dns: updating plugin %s", plugin_name); if (!nm_dns_plugin_update (plugin, - (const NMDnsIPConfigData **) plugin_confs, + priv->configs, global_config, priv->hostname)) { _LOGW ("update-dns: plugin %s update failed", plugin_name); diff --git a/src/dns/nm-dns-plugin.c b/src/dns/nm-dns-plugin.c index 740ff26bab..5805b7d858 100644 --- a/src/dns/nm-dns-plugin.c +++ b/src/dns/nm-dns-plugin.c @@ -77,14 +77,14 @@ G_DEFINE_TYPE_EXTENDED (NMDnsPlugin, nm_dns_plugin, G_TYPE_OBJECT, G_TYPE_FLAG_A gboolean nm_dns_plugin_update (NMDnsPlugin *self, - const NMDnsIPConfigData *const*configs, + const GPtrArray *configs, const NMGlobalDnsConfig *global_config, const char *hostname) { g_return_val_if_fail (NM_DNS_PLUGIN_GET_CLASS (self)->update != NULL, FALSE); return NM_DNS_PLUGIN_GET_CLASS (self)->update (self, - configs ?: NM_PTRARRAY_EMPTY (const NMDnsIPConfigData *), + configs, global_config, hostname); } diff --git a/src/dns/nm-dns-plugin.h b/src/dns/nm-dns-plugin.h index d71eb46b45..996695c0f7 100644 --- a/src/dns/nm-dns-plugin.h +++ b/src/dns/nm-dns-plugin.h @@ -50,7 +50,7 @@ typedef struct { * configuration. */ gboolean (*update) (NMDnsPlugin *self, - const NMDnsIPConfigData *const*configs, + const GPtrArray *configs, const NMGlobalDnsConfig *global_config, const char *hostname); @@ -80,7 +80,7 @@ gboolean nm_dns_plugin_is_caching (NMDnsPlugin *self); const char *nm_dns_plugin_get_name (NMDnsPlugin *self); gboolean nm_dns_plugin_update (NMDnsPlugin *self, - const NMDnsIPConfigData *const*configs, + const GPtrArray *configs, const NMGlobalDnsConfig *global_config, const char *hostname); diff --git a/src/dns/nm-dns-systemd-resolved.c b/src/dns/nm-dns-systemd-resolved.c index f49aed57da..fce1fef1ab 100644 --- a/src/dns/nm-dns-systemd-resolved.c +++ b/src/dns/nm-dns-systemd-resolved.c @@ -290,7 +290,7 @@ send_updates (NMDnsSystemdResolved *self) static gboolean update (NMDnsPlugin *plugin, - const NMDnsIPConfigData *const*configs, + const GPtrArray *configs, const NMGlobalDnsConfig *global_config, const char *hostname) { @@ -299,15 +299,15 @@ update (NMDnsPlugin *plugin, guint i; int prio, first_prio = 0; - for (i = 0; configs[i]; i++) { + for (i = 0; i < configs->len; i++) { gboolean skip = FALSE; - prio = nm_dns_ip_config_data_get_dns_priority (configs[i]); + prio = nm_dns_ip_config_data_get_dns_priority (configs->pdata[i]); if (i == 0) first_prio = prio; else if (first_prio < 0 && first_prio != prio) skip = TRUE; - add_interface_configuration (self, interfaces, configs[i], skip); + add_interface_configuration (self, interfaces, configs->pdata[i], skip); } free_pending_updates (self); diff --git a/src/dns/nm-dns-unbound.c b/src/dns/nm-dns-unbound.c index 7369505ec9..0b80055f1b 100644 --- a/src/dns/nm-dns-unbound.c +++ b/src/dns/nm-dns-unbound.c @@ -39,7 +39,7 @@ G_DEFINE_TYPE (NMDnsUnbound, nm_dns_unbound, NM_TYPE_DNS_PLUGIN) static gboolean update (NMDnsPlugin *plugin, - const NMDnsIPConfigData *const*configs, + const GPtrArray *configs, const NMGlobalDnsConfig *global_config, const char *hostname) {