summaryrefslogtreecommitdiff
path: root/src/dns/nm-dns-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dns/nm-dns-manager.c')
-rw-r--r--src/dns/nm-dns-manager.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c
index 3c58f681c5..a096ddacfd 100644
--- a/src/dns/nm-dns-manager.c
+++ b/src/dns/nm-dns-manager.c
@@ -891,6 +891,40 @@ update_resolv_conf (NMDnsManager *self,
}
static void
+update_resolv_conf_unsymlink (NMDnsManager *self)
+{
+ gs_free char *path = NULL;
+ gs_free char *contents = NULL;
+ gs_free_error GError *error = NULL;
+
+ if (nm_utils_file_is_immutable (_PATH_RESCONF) > 0) {
+ _LOGT ("unsymlink: nothing to do (\"%s\" is immutable)", _PATH_RESCONF);
+ return;
+ }
+
+ path = g_file_read_link (_PATH_RESCONF, NULL);
+ if (!nm_streq0 (path, MY_RESOLV_CONF)) {
+ _LOGT ("unsymlink: nothing to do (\"%s\" does not point to \"%s\")", _PATH_RESCONF, MY_RESOLV_CONF);
+ return;
+ }
+
+ if (nm_utils_file_get_contents (-1, MY_RESOLV_CONF,
+ 0, &contents, NULL, &error) < 0) {
+ _LOGT ("unsymlink: failed reading private resolv-conf from \"%s\": %s",
+ MY_RESOLV_CONF, error->message);
+ return;
+ }
+
+ if (!nm_utils_file_set_contents (_PATH_RESCONF, contents, -1, 0644, &error)) {
+ _LOGT ("unsymlink: failed writing \"%s\": %s",
+ _PATH_RESCONF, error->message);
+ return;
+ }
+
+ _LOGT ("unsymlink: update \"%s\" with content from \"%s\"", _PATH_RESCONF, MY_RESOLV_CONF);
+}
+
+static void
compute_hash (NMDnsManager *self, const NMGlobalDnsConfig *global, guint8 buffer[HASH_LEN])
{
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
@@ -1573,6 +1607,9 @@ nm_dns_manager_stop (NMDnsManager *self)
_LOGW ("could not commit DNS changes on shutdown: %s", error->message);
g_clear_error (&error);
}
+
+ update_resolv_conf_unsymlink (self);
+
priv->dns_touched = FALSE;
}