dns: don't update routing and DNS if no devices were ever managed

Avoids blowing away existing routes and resolv.conf if NM never
managed any devices.
This commit is contained in:
Mathieu Trudel-Lapierre
2011-11-02 15:05:43 -05:00
committed by Dan Williams
parent 184d01c27f
commit 0051b44a09
2 changed files with 22 additions and 8 deletions

View File

@@ -1097,15 +1097,20 @@ dispose (GObject *object)
g_slist_free (priv->plugins);
priv->plugins = NULL;
/* If we're quitting leave a valid resolv.conf in place, not one
* pointing to 127.0.0.1 if any plugins were active. Thus update
* DNS after disposing of all plugins.
/* If last_iface is NULL, this means we haven't done a DNS update before,
* so no reason to try and take down entries from resolv.conf.
*/
if (!update_dns (self, priv->last_iface, TRUE, &error)) {
nm_log_warn (LOGD_DNS, "could not commit DNS changes on shutdown: (%d) %s",
error ? error->code : -1,
error && error->message ? error->message : "(unknown)");
g_clear_error (&error);
if (priv->last_iface != NULL) {
/* If we're quitting leave a valid resolv.conf in place, not one
* pointing to 127.0.0.1 if any plugins were active. Thus update
* DNS after disposing of all plugins.
*/
if (!update_dns (self, priv->last_iface, TRUE, &error)) {
nm_log_warn (LOGD_DNS, "could not commit DNS changes on shutdown: (%d) %s",
error ? error->code : -1,
error && error->message ? error->message : "(unknown)");
g_clear_error (&error);
}
}
g_slist_foreach (priv->configs, (GFunc) g_object_unref, NULL);

View File

@@ -1023,6 +1023,15 @@ device_state_changed (NMDevice *device,
update_routing_and_dns (policy, FALSE);
break;
case NM_DEVICE_STATE_UNMANAGED:
if ( old_state == NM_DEVICE_STATE_UNAVAILABLE
|| old_state == NM_DEVICE_STATE_DISCONNECTED) {
/* If the device was never activated, there's no point in
* updating routing or DNS. This allows us to keep the previous
* resolv.conf or routes from before NM started if no device was
* ever managed by NM.
*/
break;
}
case NM_DEVICE_STATE_UNAVAILABLE:
update_routing_and_dns (policy, FALSE);
break;