diff options
author | Thomas Haller <thaller@redhat.com> | 2017-02-04 21:20:54 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-02-10 18:24:55 +0100 |
commit | 04364c67c104e9c579d0d0f47d39139f783a1366 (patch) | |
tree | d3efb1d6bf8eda665f9273ca8c9206ab02c0da34 | |
parent | 3c39409c63502debcdec547e8ba19eafb19fee70 (diff) | |
download | NetworkManager-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.c | 37 |
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; } |