From ff0d2b9c6e427035d5fdf1d412b80892294b6ead Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Mon, 25 Mar 2013 16:58:56 +0200 Subject: [PATCH] provider: Set nameservers if we receive them from vpnd 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; } -- 2.7.4