summary refs log tree commit diff
path: root/src/dns/nm-dns-systemd-resolved.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2020-10-05 22:27:18 +0200
committerMichael Biebl <biebl@debian.org>2020-10-05 22:27:18 +0200
commitaafc1dbe4712c86189bbc1d4d54ad8cb4c69be7e (patch)
treea2a9bb4d007339a0b1304540388230ccedac32bd /src/dns/nm-dns-systemd-resolved.c
parente7b44ef4c80907346ec7492a09c45277459924fc (diff)
New upstream version 1.27.90 upstream/1.27.90
Diffstat (limited to 'src/dns/nm-dns-systemd-resolved.c')
-rw-r--r--src/dns/nm-dns-systemd-resolved.c765
1 files changed, 374 insertions, 391 deletions
diff --git a/src/dns/nm-dns-systemd-resolved.c b/src/dns/nm-dns-systemd-resolved.c
index 4ab13a91..24c0ddb5 100644
--- a/src/dns/nm-dns-systemd-resolved.c
+++ b/src/dns/nm-dns-systemd-resolved.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0+
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2010 Dan Williams <dcbw@redhat.com>
  * Copyright (C) 2016 Sjoerd Simons <sjoerd@luon.net>
@@ -30,516 +30,499 @@
 #include "NetworkManagerUtils.h"
 #include "nm-std-aux/nm-dbus-compat.h"
 
-#define SYSTEMD_RESOLVED_DBUS_SERVICE   "org.freedesktop.resolve1"
-#define SYSTEMD_RESOLVED_MANAGER_IFACE  "org.freedesktop.resolve1.Manager"
-#define SYSTEMD_RESOLVED_DBUS_PATH      "/org/freedesktop/resolve1"
+#define SYSTEMD_RESOLVED_DBUS_SERVICE  "org.freedesktop.resolve1"
+#define SYSTEMD_RESOLVED_MANAGER_IFACE "org.freedesktop.resolve1.Manager"
+#define SYSTEMD_RESOLVED_DBUS_PATH     "/org/freedesktop/resolve1"
 
 /*****************************************************************************/
 
 typedef struct {
-	int ifindex;
-	CList configs_lst_head;
+    int   ifindex;
+    CList configs_lst_head;
 } InterfaceConfig;
 
 typedef struct {
-	CList request_queue_lst;
-	const char *operation;
-	GVariant *argument;
+    CList       request_queue_lst;
+    const char *operation;
+    GVariant *  argument;
 } RequestItem;
 
 /*****************************************************************************/
 
 typedef struct {
-	GDBusConnection *dbus_connection;
-	GCancellable *cancellable;
-	CList request_queue_lst_head;
-	guint name_owner_changed_id;
-	bool send_updates_warn_ratelimited:1;
-	bool try_start_blocked:1;
-	bool dbus_has_owner:1;
-	bool dbus_initied:1;
+    GDBusConnection *dbus_connection;
+    GCancellable *   cancellable;
+    CList            request_queue_lst_head;
+    guint            name_owner_changed_id;
+    bool             send_updates_warn_ratelimited : 1;
+    bool             try_start_blocked : 1;
+    bool             dbus_has_owner : 1;
+    bool             dbus_initied : 1;
 } NMDnsSystemdResolvedPrivate;
 
 struct _NMDnsSystemdResolved {
-	NMDnsPlugin parent;
-	NMDnsSystemdResolvedPrivate _priv;
+    NMDnsPlugin                 parent;
+    NMDnsSystemdResolvedPrivate _priv;
 };
 
 struct _NMDnsSystemdResolvedClass {
-	NMDnsPluginClass parent;
+    NMDnsPluginClass parent;
 };
 
-G_DEFINE_TYPE (NMDnsSystemdResolved, nm_dns_systemd_resolved, NM_TYPE_DNS_PLUGIN)
+G_DEFINE_TYPE(NMDnsSystemdResolved, nm_dns_systemd_resolved, NM_TYPE_DNS_PLUGIN)
 
-#define NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDnsSystemdResolved, NM_IS_DNS_SYSTEMD_RESOLVED)
+#define NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self) \
+    _NM_GET_PRIVATE(self, NMDnsSystemdResolved, NM_IS_DNS_SYSTEMD_RESOLVED)
 
 /*****************************************************************************/
 
-#define _NMLOG_DOMAIN      LOGD_DNS
-#define _NMLOG(level, ...) __NMLOG_DEFAULT_WITH_ADDR (level, _NMLOG_DOMAIN, "dns-sd-resolved", __VA_ARGS__)
+#define _NMLOG_DOMAIN LOGD_DNS
+#define _NMLOG(level, ...) \
+    __NMLOG_DEFAULT_WITH_ADDR(level, _NMLOG_DOMAIN, "dns-sd-resolved", __VA_ARGS__)
 
 /*****************************************************************************/
 
 static void
-_request_item_free (RequestItem *request_item)
+_request_item_free(RequestItem *request_item)
 {
-	c_list_unlink_stale (&request_item->request_queue_lst);
-	g_variant_unref (request_item->argument);
-	g_slice_free (RequestItem, request_item);
+    c_list_unlink_stale(&request_item->request_queue_lst);
+    g_variant_unref(request_item->argument);
+    g_slice_free(RequestItem, request_item);
 }
 
 static void
-_request_item_append (CList *request_queue_lst_head,
-                      const char *operation,
-                      GVariant *argument)
+_request_item_append(CList *request_queue_lst_head, const char *operation, GVariant *argument)
 {
-	RequestItem *request_item;
+    RequestItem *request_item;
 
-	request_item = g_slice_new (RequestItem);
-	request_item->operation = operation;
-	request_item->argument = g_variant_ref_sink (argument);
-	c_list_link_tail (request_queue_lst_head, &request_item->request_queue_lst);
+    request_item            = g_slice_new(RequestItem);
+    request_item->operation = operation;
+    request_item->argument  = g_variant_ref_sink(argument);
+    c_list_link_tail(request_queue_lst_head, &request_item->request_queue_lst);
 }
 
 /*****************************************************************************/
 
 static void
-_interface_config_free (InterfaceConfig *config)
+_interface_config_free(InterfaceConfig *config)
 {
-	nm_c_list_elem_free_all (&config->configs_lst_head, NULL);
-	g_slice_free (InterfaceConfig, config);
+    nm_c_list_elem_free_all(&config->configs_lst_head, NULL);
+    g_slice_free(InterfaceConfig, config);
 }
 
 static void
-call_done (GObject *source, GAsyncResult *r, gpointer user_data)
+call_done(GObject *source, GAsyncResult *r, gpointer user_data)
 {
-	gs_unref_variant GVariant *v = NULL;
-	gs_free_error GError *error = NULL;
-	NMDnsSystemdResolved *self = (NMDnsSystemdResolved *) user_data;
-	NMDnsSystemdResolvedPrivate *priv;
-
-	v = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), r, &error);
-	if (   !v
-	    && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
-		return;
-
-	priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE (self);
-
-	if (!v) {
-		if (!priv->send_updates_warn_ratelimited) {
-			priv->send_updates_warn_ratelimited = TRUE;
-			_LOGW ("send-updates failed to update systemd-resolved: %s", error->message);
-		} else
-			_LOGD ("send-updates failed: %s", error->message);
-	} else
-		priv->send_updates_warn_ratelimited = FALSE;
+    gs_unref_variant GVariant *v       = NULL;
+    gs_free_error GError *       error = NULL;
+    NMDnsSystemdResolved *       self  = (NMDnsSystemdResolved *) user_data;
+    NMDnsSystemdResolvedPrivate *priv;
+
+    v = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source), r, &error);
+    if (!v && g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+        return;
+
+    priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self);
+
+    if (!v) {
+        if (!priv->send_updates_warn_ratelimited) {
+            priv->send_updates_warn_ratelimited = TRUE;
+            _LOGW("send-updates failed to update systemd-resolved: %s", error->message);
+        } else
+            _LOGD("send-updates failed: %s", error->message);
+    } else
+        priv->send_updates_warn_ratelimited = FALSE;
 }
 
 static void
-update_add_ip_config (NMDnsSystemdResolved *self,
-                      GVariantBuilder *dns,
-                      GVariantBuilder *domains,
-                      NMDnsIPConfigData *data)
+update_add_ip_config(NMDnsSystemdResolved *self,
+                     GVariantBuilder *     dns,
+                     GVariantBuilder *     domains,
+                     NMDnsIPConfigData *   data)
 {
-	int addr_family;
-	gsize addr_size;
-	guint i, n;
-	gboolean is_routing;
-	const char **iter;
-	const char *domain;
-
-	addr_family = nm_ip_config_get_addr_family (data->ip_config);
-	addr_size = nm_utils_addr_family_to_size (addr_family);
-
-	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++) {
-		g_variant_builder_open (dns, G_VARIANT_TYPE ("(iay)"));
-		g_variant_builder_add (dns, "i", addr_family);
-		g_variant_builder_add_value (dns,
-		                             g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-		                                                        nm_ip_config_get_nameserver (data->ip_config, i),
-		                                                        addr_size,
-		                                                        1));
-		g_variant_builder_close (dns);
-	}
-
-	for (iter = data->domains.search; *iter; iter++) {
-		domain = nm_utils_parse_dns_domain (*iter, &is_routing);
-		g_variant_builder_add (domains, "(sb)", domain[0] ? domain : ".", is_routing);
-	}
+    int          addr_family;
+    gsize        addr_size;
+    guint        i, n;
+    gboolean     is_routing;
+    const char **iter;
+    const char * domain;
+
+    addr_family = nm_ip_config_get_addr_family(data->ip_config);
+    addr_size   = nm_utils_addr_family_to_size(addr_family);
+
+    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++) {
+        g_variant_builder_open(dns, G_VARIANT_TYPE("(iay)"));
+        g_variant_builder_add(dns, "i", addr_family);
+        g_variant_builder_add_value(
+            dns,
+            g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE,
+                                      nm_ip_config_get_nameserver(data->ip_config, i),
+                                      addr_size,
+                                      1));
+        g_variant_builder_close(dns);
+    }
+
+    for (iter = data->domains.search; *iter; iter++) {
+        domain = nm_utils_parse_dns_domain(*iter, &is_routing);
+        g_variant_builder_add(domains, "(sb)", domain[0] ? domain : ".", is_routing);
+    }
 }
 
 static void
-free_pending_updates (NMDnsSystemdResolved *self)
+free_pending_updates(NMDnsSystemdResolved *self)
 {
-	NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE (self);
-	RequestItem *request_item;
+    NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self);
+    RequestItem *                request_item;
 
-	while ((request_item = c_list_first_entry (&priv->request_queue_lst_head,
-	                                           RequestItem,
-	                                           request_queue_lst)))
-		_request_item_free (request_item);
+    while ((request_item =
+                c_list_first_entry(&priv->request_queue_lst_head, RequestItem, request_queue_lst)))
+        _request_item_free(request_item);
 }
 
 static void
-prepare_one_interface (NMDnsSystemdResolved *self, InterfaceConfig *ic)
+prepare_one_interface(NMDnsSystemdResolved *self, InterfaceConfig *ic)
 {
-	NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE (self);
-	GVariantBuilder dns, domains;
-	NMCListElem *elem;
-	NMSettingConnectionMdns mdns = NM_SETTING_CONNECTION_MDNS_DEFAULT;
-	NMSettingConnectionLlmnr llmnr = NM_SETTING_CONNECTION_LLMNR_DEFAULT;
-	const char *mdns_arg = NULL, *llmnr_arg = NULL;
-
-	g_variant_builder_init (&dns, G_VARIANT_TYPE ("(ia(iay))"));
-	g_variant_builder_add (&dns, "i", ic->ifindex);
-	g_variant_builder_open (&dns, G_VARIANT_TYPE ("a(iay)"));
-
-	g_variant_builder_init (&domains, G_VARIANT_TYPE ("(ia(sb))"));
-	g_variant_builder_add (&domains, "i", ic->ifindex);
-	g_variant_builder_open (&domains, G_VARIANT_TYPE ("a(sb)"));
-
-	c_list_for_each_entry (elem, &ic->configs_lst_head, lst) {
-		NMDnsIPConfigData *data = elem->data;
-		NMIPConfig *ip_config = data->ip_config;
-
-		update_add_ip_config (self, &dns, &domains, data);
-
-		if (NM_IS_IP4_CONFIG (ip_config)) {
-			mdns = NM_MAX (mdns, nm_ip4_config_mdns_get (NM_IP4_CONFIG (ip_config)));
-			llmnr = NM_MAX (llmnr, nm_ip4_config_llmnr_get (NM_IP4_CONFIG (ip_config)));
-		}
-	}
-
-	g_variant_builder_close (&dns);
-	g_variant_builder_close (&domains);
-
-	switch (mdns) {
-	case NM_SETTING_CONNECTION_MDNS_NO:
-		mdns_arg = "no";
-		break;
-	case NM_SETTING_CONNECTION_MDNS_RESOLVE:
-		mdns_arg = "resolve";
-		break;
-	case NM_SETTING_CONNECTION_MDNS_YES:
-		mdns_arg = "yes";
-		break;
-	case NM_SETTING_CONNECTION_MDNS_DEFAULT:
-		mdns_arg = "";
-		break;
-	}
-	nm_assert (mdns_arg);
-
-	switch (llmnr) {
-	case NM_SETTING_CONNECTION_LLMNR_NO:
-		llmnr_arg = "no";
-		break;
-	case NM_SETTING_CONNECTION_LLMNR_RESOLVE:
-		llmnr_arg = "resolve";
-		break;
-	case NM_SETTING_CONNECTION_LLMNR_YES:
-		llmnr_arg = "yes";
-		break;
-	case NM_SETTING_CONNECTION_LLMNR_DEFAULT:
-		llmnr_arg = "";
-		break;
-	}
-	nm_assert (llmnr_arg);
-
-	_request_item_append (&priv->request_queue_lst_head,
-	                      "SetLinkDNS",
-	                      g_variant_builder_end (&dns));
-	_request_item_append (&priv->request_queue_lst_head,
-	                      "SetLinkDomains",
-	                      g_variant_builder_end (&domains));
-	_request_item_append (&priv->request_queue_lst_head,
-	                      "SetLinkMulticastDNS",
-	                      g_variant_new ("(is)", ic->ifindex, mdns_arg ?: ""));
-	_request_item_append (&priv->request_queue_lst_head,
-	                      "SetLinkLLMNR",
-	                      g_variant_new ("(is)", ic->ifindex, llmnr_arg ?: ""));
+    NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self);
+    GVariantBuilder              dns, domains;
+    NMCListElem *                elem;
+    NMSettingConnectionMdns      mdns     = NM_SETTING_CONNECTION_MDNS_DEFAULT;
+    NMSettingConnectionLlmnr     llmnr    = NM_SETTING_CONNECTION_LLMNR_DEFAULT;
+    const char *                 mdns_arg = NULL, *llmnr_arg = NULL;
+
+    g_variant_builder_init(&dns, G_VARIANT_TYPE("(ia(iay))"));
+    g_variant_builder_add(&dns, "i", ic->ifindex);
+    g_variant_builder_open(&dns, G_VARIANT_TYPE("a(iay)"));
+
+    g_variant_builder_init(&domains, G_VARIANT_TYPE("(ia(sb))"));
+    g_variant_builder_add(&domains, "i", ic->ifindex);
+    g_variant_builder_open(&domains, G_VARIANT_TYPE("a(sb)"));
+
+    c_list_for_each_entry (elem, &ic->configs_lst_head, lst) {
+        NMDnsIPConfigData *data      = elem->data;
+        NMIPConfig *       ip_config = data->ip_config;
+
+        update_add_ip_config(self, &dns, &domains, data);
+
+        if (NM_IS_IP4_CONFIG(ip_config)) {
+            mdns  = NM_MAX(mdns, nm_ip4_config_mdns_get(NM_IP4_CONFIG(ip_config)));
+            llmnr = NM_MAX(llmnr, nm_ip4_config_llmnr_get(NM_IP4_CONFIG(ip_config)));
+        }
+    }
+
+    g_variant_builder_close(&dns);
+    g_variant_builder_close(&domains);
+
+    switch (mdns) {
+    case NM_SETTING_CONNECTION_MDNS_NO:
+        mdns_arg = "no";
+        break;
+    case NM_SETTING_CONNECTION_MDNS_RESOLVE:
+        mdns_arg = "resolve";
+        break;
+    case NM_SETTING_CONNECTION_MDNS_YES:
+        mdns_arg = "yes";
+        break;
+    case NM_SETTING_CONNECTION_MDNS_DEFAULT:
+        mdns_arg = "";
+        break;
+    }
+    nm_assert(mdns_arg);
+
+    switch (llmnr) {
+    case NM_SETTING_CONNECTION_LLMNR_NO:
+        llmnr_arg = "no";
+        break;
+    case NM_SETTING_CONNECTION_LLMNR_RESOLVE:
+        llmnr_arg = "resolve";
+        break;
+    case NM_SETTING_CONNECTION_LLMNR_YES:
+        llmnr_arg = "yes";
+        break;
+    case NM_SETTING_CONNECTION_LLMNR_DEFAULT:
+        llmnr_arg = "";
+        break;
+    }
+    nm_assert(llmnr_arg);
+
+    _request_item_append(&priv->request_queue_lst_head, "SetLinkDNS", g_variant_builder_end(&dns));
+    _request_item_append(&priv->request_queue_lst_head,
+                         "SetLinkDomains",
+                         g_variant_builder_end(&domains));
+    _request_item_append(&priv->request_queue_lst_head,
+                         "SetLinkMulticastDNS",
+                         g_variant_new("(is)", ic->ifindex, mdns_arg ?: ""));
+    _request_item_append(&priv->request_queue_lst_head,
+                         "SetLinkLLMNR",
+                         g_variant_new("(is)", ic->ifindex, llmnr_arg ?: ""));
 }
 
 static void
-send_updates (NMDnsSystemdResolved *self)
+send_updates(NMDnsSystemdResolved *self)
 {
-	NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE (self);
-	RequestItem *request_item;
-
-	if (c_list_is_empty (&priv->request_queue_lst_head)) {
-		/* nothing to do. */
-		return;
-	}
-
-	if (!priv->dbus_initied) {
-		_LOGT ("send-updates: D-Bus connection not ready");
-		return;
-	}
-
-	if (!priv->dbus_has_owner) {
-		if (priv->try_start_blocked) {
-			/* we have no name owner and we already tried poking the service to
-			 * autostart. */
-			_LOGT ("send-updates: no name owner");
-			return;
-		}
-
-		_LOGT ("send-updates: no name owner. Try start service...");
-		priv->try_start_blocked = TRUE;
-
-		nm_dbus_connection_call_start_service_by_name (priv->dbus_connection,
-		                                               SYSTEMD_RESOLVED_DBUS_SERVICE,
-		                                               -1,
-		                                               NULL,
-		                                               NULL,
-		                                               NULL);
-		return;
-	}
-
-	_LOGT ("send-updates: start %lu requests",
-	       c_list_length (&priv->request_queue_lst_head));
-
-	nm_clear_g_cancellable (&priv->cancellable);
-
-	priv->cancellable = g_cancellable_new ();
-
-	while ((request_item = c_list_first_entry (&priv->request_queue_lst_head,
-	                                           RequestItem,
-	                                           request_queue_lst))) {
-		/* Above we explicitly call "StartServiceByName" trying to avoid D-Bus activating systmd-resolved
-		 * multiple times. There is still a race, were we might hit this line although actually
-		 * the service just quit this very moment. In that case, we would try to D-Bus activate the
-		 * service multiple times during each call (something we wanted to avoid).
-		 *
-		 * But this is hard to avoid, because we'd have to check the error failure to detect the reason
-		 * and retry. The race is not critical, because at worst it results in logging a warning
-		 * about failure to start systemd.resolved. */
-		g_dbus_connection_call (priv->dbus_connection,
-		                        SYSTEMD_RESOLVED_DBUS_SERVICE,
-		                        SYSTEMD_RESOLVED_DBUS_PATH,
-		                        SYSTEMD_RESOLVED_MANAGER_IFACE,
-		                        request_item->operation,
-		                        request_item->argument,
-		                        NULL,
-		                        G_DBUS_CALL_FLAGS_NONE,
-		                        -1,
-		                        priv->cancellable,
-		                        call_done,
-		                        self);
-		_request_item_free (request_item);
-	}
+    NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self);
+    RequestItem *                request_item;
+
+    if (c_list_is_empty(&priv->request_queue_lst_head)) {
+        /* nothing to do. */
+        return;
+    }
+
+    if (!priv->dbus_initied) {
+        _LOGT("send-updates: D-Bus connection not ready");
+        return;
+    }
+
+    if (!priv->dbus_has_owner) {
+        if (priv->try_start_blocked) {
+            /* we have no name owner and we already tried poking the service to
+             * autostart. */
+            _LOGT("send-updates: no name owner");
+            return;
+        }
+
+        _LOGT("send-updates: no name owner. Try start service...");
+        priv->try_start_blocked = TRUE;
+
+        nm_dbus_connection_call_start_service_by_name(priv->dbus_connection,
+                                                      SYSTEMD_RESOLVED_DBUS_SERVICE,
+                                                      -1,
+                                                      NULL,
+                                                      NULL,
+                                                      NULL);
+        return;
+    }
+
+    _LOGT("send-updates: start %lu requests", c_list_length(&priv->request_queue_lst_head));
+
+    nm_clear_g_cancellable(&priv->cancellable);
+
+    priv->cancellable = g_cancellable_new();
+
+    while (
+        (request_item =
+             c_list_first_entry(&priv->request_queue_lst_head, RequestItem, request_queue_lst))) {
+        /* Above we explicitly call "StartServiceByName" trying to avoid D-Bus activating systmd-resolved
+         * multiple times. There is still a race, were we might hit this line although actually
+         * the service just quit this very moment. In that case, we would try to D-Bus activate the
+         * service multiple times during each call (something we wanted to avoid).
+         *
+         * But this is hard to avoid, because we'd have to check the error failure to detect the reason
+         * and retry. The race is not critical, because at worst it results in logging a warning
+         * about failure to start systemd.resolved. */
+        g_dbus_connection_call(priv->dbus_connection,
+                               SYSTEMD_RESOLVED_DBUS_SERVICE,
+                               SYSTEMD_RESOLVED_DBUS_PATH,
+                               SYSTEMD_RESOLVED_MANAGER_IFACE,
+                               request_item->operation,
+                               request_item->argument,
+                               NULL,
+                               G_DBUS_CALL_FLAGS_NONE,
+                               -1,
+                               priv->cancellable,
+                               call_done,
+                               self);
+        _request_item_free(request_item);
+    }
 }
 
 static gboolean
-update (NMDnsPlugin *plugin,
-        const NMGlobalDnsConfig *global_config,
-        const CList *ip_config_lst_head,
-        const char *hostname,
-        GError **error)
+update(NMDnsPlugin *            plugin,
+       const NMGlobalDnsConfig *global_config,
+       const CList *            ip_config_lst_head,
+       const char *             hostname,
+       GError **                error)
 {
-	NMDnsSystemdResolved *self = NM_DNS_SYSTEMD_RESOLVED (plugin);
-	gs_unref_hashtable GHashTable *interfaces = NULL;
-	gs_free gpointer *interfaces_keys = NULL;
-	guint interfaces_len;
-	guint i;
-	NMDnsIPConfigData *ip_data;
-
-	interfaces = g_hash_table_new_full (nm_direct_hash, NULL,
-	                                    NULL, (GDestroyNotify) _interface_config_free);
-
-	c_list_for_each_entry (ip_data, ip_config_lst_head, ip_config_lst) {
-		InterfaceConfig *ic = NULL;
-		int ifindex;
-
-		ifindex = ip_data->data->ifindex;
-		nm_assert (ifindex == nm_ip_config_get_ifindex (ip_data->ip_config));
-
-		ic = g_hash_table_lookup (interfaces, GINT_TO_POINTER (ifindex));
-		if (!ic) {
-			ic = g_slice_new (InterfaceConfig);
-			ic->ifindex = ifindex;
-			c_list_init (&ic->configs_lst_head);
-			g_hash_table_insert (interfaces, GINT_TO_POINTER (ifindex), ic);
-		}
-
-		c_list_link_tail (&ic->configs_lst_head,
-		                  &nm_c_list_elem_new_stale (ip_data)->lst);
-	}
-
-	free_pending_updates (self);
-
-	interfaces_keys = nm_utils_hash_keys_to_array (interfaces,
-	                                               nm_cmp_int2ptr_p_with_data,
-	                                               NULL,
-	                                               &interfaces_len);
-	for (i = 0; i < interfaces_len; i++) {
-		InterfaceConfig *ic = g_hash_table_lookup (interfaces, GINT_TO_POINTER (interfaces_keys[i]));
-
-		prepare_one_interface (self, ic);
-	}
-
-	send_updates (self);
-
-	return TRUE;
+    NMDnsSystemdResolved *self                = NM_DNS_SYSTEMD_RESOLVED(plugin);
+    gs_unref_hashtable GHashTable *interfaces = NULL;
+    gs_free gpointer * interfaces_keys        = NULL;
+    guint              interfaces_len;
+    guint              i;
+    NMDnsIPConfigData *ip_data;
+
+    interfaces =
+        g_hash_table_new_full(nm_direct_hash, NULL, NULL, (GDestroyNotify) _interface_config_free);
+
+    c_list_for_each_entry (ip_data, ip_config_lst_head, ip_config_lst) {
+        InterfaceConfig *ic = NULL;
+        int              ifindex;
+
+        ifindex = ip_data->data->ifindex;
+        nm_assert(ifindex == nm_ip_config_get_ifindex(ip_data->ip_config));
+
+        ic = g_hash_table_lookup(interfaces, GINT_TO_POINTER(ifindex));
+        if (!ic) {
+            ic          = g_slice_new(InterfaceConfig);
+            ic->ifindex = ifindex;
+            c_list_init(&ic->configs_lst_head);
+            g_hash_table_insert(interfaces, GINT_TO_POINTER(ifindex), ic);
+        }
+
+        c_list_link_tail(&ic->configs_lst_head, &nm_c_list_elem_new_stale(ip_data)->lst);
+    }
+
+    free_pending_updates(self);
+
+    interfaces_keys =
+        nm_utils_hash_keys_to_array(interfaces, nm_cmp_int2ptr_p_with_data, NULL, &interfaces_len);
+    for (i = 0; i < interfaces_len; i++) {
+        InterfaceConfig *ic = g_hash_table_lookup(interfaces, GINT_TO_POINTER(interfaces_keys[i]));
+
+        prepare_one_interface(self, ic);
+    }
+
+    send_updates(self);
+
+    return TRUE;
 }
 
 /*****************************************************************************/
 
 static void
-name_owner_changed (NMDnsSystemdResolved *self,
-                    const char *owner)
+name_owner_changed(NMDnsSystemdResolved *self, const char *owner)
 {
-	NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE (self);
+    NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self);
 
-	owner = nm_str_not_empty (owner);
+    owner = nm_str_not_empty(owner);
 
-	if (!owner)
-		_LOGT ("D-Bus name for systemd-resolved has no owner");
-	else
-		_LOGT ("D-Bus name for systemd-resolved has owner %s", owner);
+    if (!owner)
+        _LOGT("D-Bus name for systemd-resolved has no owner");
+    else
+        _LOGT("D-Bus name for systemd-resolved has owner %s", owner);
 
-	priv->dbus_has_owner = !!owner;
-	if (owner)
-		priv->try_start_blocked = FALSE;
+    priv->dbus_has_owner = !!owner;
+    if (owner)
+        priv->try_start_blocked = FALSE;
 
-	send_updates (self);
+    send_updates(self);
 }
 
 static void
-name_owner_changed_cb (GDBusConnection *connection,
-                       const char *sender_name,
-                       const char *object_path,
-                       const char *interface_name,
-                       const char *signal_name,
-                       GVariant *parameters,
-                       gpointer user_data)
+name_owner_changed_cb(GDBusConnection *connection,
+                      const char *     sender_name,
+                      const char *     object_path,
+                      const char *     interface_name,
+                      const char *     signal_name,
+                      GVariant *       parameters,
+                      gpointer         user_data)
 {
-	NMDnsSystemdResolved *self = user_data;
-	NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE (self);
-	const char *new_owner;
-
-	if (!g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(sss)")))
-		return;
-
-	g_variant_get (parameters,
-	               "(&s&s&s)",
-	               NULL,
-	               NULL,
-	               &new_owner);
-
-	if (!priv->dbus_initied) {
-		/* There was a race and we got a NameOwnerChanged signal before GetNameOwner
-		 * returns. */
-		priv->dbus_initied = TRUE;
-		nm_clear_g_cancellable (&priv->cancellable);
-	}
-
-	name_owner_changed (user_data, new_owner);
+    NMDnsSystemdResolved *       self = user_data;
+    NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self);
+    const char *                 new_owner;
+
+    if (!g_variant_is_of_type(parameters, G_VARIANT_TYPE("(sss)")))
+        return;
+
+    g_variant_get(parameters, "(&s&s&s)", NULL, NULL, &new_owner);
+
+    if (!priv->dbus_initied) {
+        /* There was a race and we got a NameOwnerChanged signal before GetNameOwner
+         * returns. */
+        priv->dbus_initied = TRUE;
+        nm_clear_g_cancellable(&priv->cancellable);
+    }
+
+    name_owner_changed(user_data, new_owner);
 }
 
 static void
-get_name_owner_cb (const char *name_owner,
-                   GError *error,
-                   gpointer user_data)
+get_name_owner_cb(const char *name_owner, GError *error, gpointer user_data)
 {
-	NMDnsSystemdResolved *self;
-	NMDnsSystemdResolvedPrivate *priv;
+    NMDnsSystemdResolved *       self;
+    NMDnsSystemdResolvedPrivate *priv;
 
-	if (   !name_owner
-	    && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
-		return;
+    if (!name_owner && g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+        return;
 
-	self = user_data;
-	priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE (self);
+    self = user_data;
+    priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self);
 
-	g_clear_object (&priv->cancellable);
+    g_clear_object(&priv->cancellable);
 
-	priv->dbus_initied = TRUE;
+    priv->dbus_initied = TRUE;
 
-	name_owner_changed (self, name_owner);
+    name_owner_changed(self, name_owner);
 }
 
 /*****************************************************************************/
 
 gboolean
-nm_dns_systemd_resolved_is_running (NMDnsSystemdResolved *self)
+nm_dns_systemd_resolved_is_running(NMDnsSystemdResolved *self)
 {
-	NMDnsSystemdResolvedPrivate *priv;
+    NMDnsSystemdResolvedPrivate *priv;
 
-	g_return_val_if_fail (NM_IS_DNS_SYSTEMD_RESOLVED (self), FALSE);
+    g_return_val_if_fail(NM_IS_DNS_SYSTEMD_RESOLVED(self), FALSE);
 
-	priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE (self);
+    priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self);
 
-	return    priv->dbus_initied
-	       && (   priv->dbus_has_owner
-	           || !priv->try_start_blocked);
+    return priv->dbus_initied && (priv->dbus_has_owner || !priv->try_start_blocked);
 }
 
 /*****************************************************************************/
 
 static void
-nm_dns_systemd_resolved_init (NMDnsSystemdResolved *self)
+nm_dns_systemd_resolved_init(NMDnsSystemdResolved *self)
 {
-	NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE (self);
-
-	c_list_init (&priv->request_queue_lst_head);
-
-	priv->dbus_connection = nm_g_object_ref (NM_MAIN_DBUS_CONNECTION_GET);
-	if (!priv->dbus_connection) {
-		_LOGD ("no D-Bus connection");
-		return;
-	}
-
-	priv->name_owner_changed_id = nm_dbus_connection_signal_subscribe_name_owner_changed (priv->dbus_connection,
-	                                                                                      SYSTEMD_RESOLVED_DBUS_SERVICE,
-	                                                                                      name_owner_changed_cb,
-	                                                                                      self,
-	                                                                                      NULL);
-	priv->cancellable = g_cancellable_new ();
-	nm_dbus_connection_call_get_name_owner (priv->dbus_connection,
-	                                        SYSTEMD_RESOLVED_DBUS_SERVICE,
-	                                        -1,
-	                                        priv->cancellable,
-	                                        get_name_owner_cb,
-	                                        self);
+    NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self);
+
+    c_list_init(&priv->request_queue_lst_head);
+
+    priv->dbus_connection = nm_g_object_ref(NM_MAIN_DBUS_CONNECTION_GET);
+    if (!priv->dbus_connection) {
+        _LOGD("no D-Bus connection");
+        return;
+    }
+
+    priv->name_owner_changed_id =
+        nm_dbus_connection_signal_subscribe_name_owner_changed(priv->dbus_connection,
+                                                               SYSTEMD_RESOLVED_DBUS_SERVICE,
+                                                               name_owner_changed_cb,
+                                                               self,
+                                                               NULL);
+    priv->cancellable = g_cancellable_new();
+    nm_dbus_connection_call_get_name_owner(priv->dbus_connection,
+                                           SYSTEMD_RESOLVED_DBUS_SERVICE,
+                                           -1,
+                                           priv->cancellable,
+                                           get_name_owner_cb,
+                                           self);
 }
 
 NMDnsPlugin *
-nm_dns_systemd_resolved_new (void)
+nm_dns_systemd_resolved_new(void)
 {
-	return g_object_new (NM_TYPE_DNS_SYSTEMD_RESOLVED, NULL);
+    return g_object_new(NM_TYPE_DNS_SYSTEMD_RESOLVED, NULL);
 }
 
 static void
-dispose (GObject *object)
+dispose(GObject *object)
 {
-	NMDnsSystemdResolved *self = NM_DNS_SYSTEMD_RESOLVED (object);
-	NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE (self);
+    NMDnsSystemdResolved *       self = NM_DNS_SYSTEMD_RESOLVED(object);
+    NMDnsSystemdResolvedPrivate *priv = NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self);
 
-	free_pending_updates (self);
+    free_pending_updates(self);
 
-	nm_clear_g_dbus_connection_signal (priv->dbus_connection,
-	                                   &priv->name_owner_changed_id);
+    nm_clear_g_dbus_connection_signal(priv->dbus_connection, &priv->name_owner_changed_id);
 
-	nm_clear_g_cancellable (&priv->cancellable);
+    nm_clear_g_cancellable(&priv->cancellable);
 
-	g_clear_object (&priv->dbus_connection);
+    g_clear_object(&priv->dbus_connection);
 
-	G_OBJECT_CLASS (nm_dns_systemd_resolved_parent_class)->dispose (object);
+    G_OBJECT_CLASS(nm_dns_systemd_resolved_parent_class)->dispose(object);
 }
 
 static void
-nm_dns_systemd_resolved_class_init (NMDnsSystemdResolvedClass *dns_class)
+nm_dns_systemd_resolved_class_init(NMDnsSystemdResolvedClass *dns_class)
 {
-	NMDnsPluginClass *plugin_class = NM_DNS_PLUGIN_CLASS (dns_class);
-	GObjectClass *object_class = G_OBJECT_CLASS (dns_class);
+    NMDnsPluginClass *plugin_class = NM_DNS_PLUGIN_CLASS(dns_class);
+    GObjectClass *    object_class = G_OBJECT_CLASS(dns_class);
 
-	object_class->dispose = dispose;
+    object_class->dispose = dispose;
 
-	plugin_class->plugin_name = "systemd-resolved";
-	plugin_class->is_caching  = TRUE;
-	plugin_class->update      = update;
+    plugin_class->plugin_name = "systemd-resolved";
+    plugin_class->is_caching  = TRUE;
+    plugin_class->update      = update;
 }