If we receive nameservers from vpnd we must set them in provider.
The connman_provider_set_nameservers() function needs changes
because we get the nameservers as an array, it makes no sense to
convert the array to string and then back to array.
---
include/provider.h | 2 +-
plugins/vpn.c | 9 ++++++++-
src/provider.c | 14 ++++----------
3 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/include/provider.h b/include/provider.h
index fdd8ae0..1f33552 100644
--- a/include/provider.h
+++ b/include/provider.h
@@ -109,7 +109,7 @@ void connman_provider_put(struct connman_provider
*provider);
int connman_provider_set_domain(struct connman_provider *provider,
const char *domain);
int connman_provider_set_nameservers(struct connman_provider *provider,
- const char *nameservers);
+ char * const *nameservers);
int connman_provider_append_route(struct connman_provider *provider,
const char *key, const char *value);
diff --git a/plugins/vpn.c b/plugins/vpn.c
index 038a833..d33d7c1 100644
--- a/plugins/vpn.c
+++ b/plugins/vpn.c
@@ -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);
@@ -1756,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) {
diff --git a/src/provider.c b/src/provider.c
index f7bb4e1..1c36017 100644
--- a/src/provider.c
+++ b/src/provider.c
@@ -552,26 +552,20 @@ int connman_provider_set_domain(struct connman_provider
*provider,
}
int connman_provider_set_nameservers(struct connman_provider *provider,
- const char *nameservers)
+ char * const * nameservers)
{
int i;
- char **nameservers_array = NULL;
- DBG("provider %p nameservers %s", provider, nameservers);
+ DBG("provider %p nameservers %p", provider, nameservers);
__connman_service_nameserver_clear(provider->vpn_service);
if (nameservers == NULL)
return 0;
- nameservers_array = g_strsplit(nameservers, " ", 0);
-
- for (i = 0; nameservers_array[i] != NULL; i++) {
+ for (i = 0; nameservers[i] != NULL; i++)
__connman_service_nameserver_append(provider->vpn_service,
- nameservers_array[i], FALSE);
- }
-
- g_strfreev(nameservers_array);
+ nameservers[i], FALSE);
return 0;
}
--
1.7.11.4
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman