summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-02-04 21:20:54 +0100
committerThomas Haller <thaller@redhat.com>2017-02-10 18:24:55 +0100
commit04364c67c104e9c579d0d0f47d39139f783a1366 (patch)
treed3efb1d6bf8eda665f9273ca8c9206ab02c0da34
parent3c39409c63502debcdec547e8ba19eafb19fee70 (diff)
downloadNetworkManager-th/dns-unsymlink-resolv-conf-rh1367551.tar.gz
dns: restore /etc/resolv.conf on NetworkManager exit from symlinkth/dns-unsymlink-resolv-conf-rh1367551
https://bugzilla.redhat.com/show_bug.cgi?id=1367551
-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;
}