provider: Set nameservers if we receive them from vpnd
[platform/upstream/connman.git] / plugins / vpn.c
index 04318a9..d33d7c1 100644 (file)
@@ -643,6 +643,10 @@ static void add_connection(const char *path, DBusMessageIter *properties,
 
        resolv_host_addr(data);
 
+       if (data->nameservers != NULL)
+               connman_provider_set_nameservers(data->provider,
+                                               data->nameservers);
+
        if (data->connect_pending == TRUE)
                connect_provider(data, data->cb_data);
 
@@ -1508,6 +1512,7 @@ static gboolean connection_removed(DBusConnection *conn, DBusMessage *message,
 {
        const char *path;
        const char *signature = DBUS_TYPE_OBJECT_PATH_AS_STRING;
+       struct connection_data *data;
 
        if (dbus_message_has_signature(message, signature) == FALSE) {
                connman_error("vpn removed signature \"%s\" does not match "
@@ -1518,7 +1523,11 @@ static gboolean connection_removed(DBusConnection *conn, DBusMessage *message,
 
        dbus_message_get_args(message, NULL, DBUS_TYPE_OBJECT_PATH, &path,
                                DBUS_TYPE_INVALID);
-       remove_connection(conn, path);
+
+       data = g_hash_table_lookup(vpn_connections, get_ident(path));
+       if (data != NULL)
+               remove_connection(conn, path);
+
        return TRUE;
 }
 
@@ -1751,7 +1760,10 @@ static gboolean property_changed(DBusConnection *conn,
                        set_routes(data->provider,
                                                CONNMAN_PROVIDER_ROUTE_USER);
        } else if (g_str_equal(key, "Nameservers") == TRUE) {
-               extract_nameservers(&value, data);
+               if (extract_nameservers(&value, data) == 0 &&
+                                               data->nameservers != NULL)
+                       connman_provider_set_nameservers(data->provider,
+                                                       data->nameservers);
        }
 
        if (ip_set == TRUE && err == 0) {