summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@linux.intel.com>2012-01-03 14:36:28 +0200
committerDaniel Wagner <daniel.wagner@bmw-carit.de>2012-01-05 11:09:16 +0100
commit70ce3cd0a6130605a5f3c1f4f334bd501bece184 (patch)
tree70b21b96f9c5b9e8b7b534c7da0def4bf8650150
parent097f0059d972e639d75ac7d0b27db759fbf05e5c (diff)
downloadconnman-70ce3cd0a6130605a5f3c1f4f334bd501bece184.tar.gz
connman-70ce3cd0a6130605a5f3c1f4f334bd501bece184.tar.bz2
connman-70ce3cd0a6130605a5f3c1f4f334bd501bece184.zip
service: Return all system defined nameservers when asked
The connman_service_get_nameservers() is changed to return all system defined nameservers. This means that the function now returns an allocated array of all nameservers and caller must deallocate the returned array. The change is needed so that we can combine the nameservers that are set by DHCP code and the IPv6 nameservers that are set by router advertisements.
-rw-r--r--plugins/pacrunner.c1
-rw-r--r--src/service.c27
-rw-r--r--src/wispr.c4
-rw-r--r--src/wpad.c7
4 files changed, 34 insertions, 5 deletions
diff --git a/plugins/pacrunner.c b/plugins/pacrunner.c
index 84c22ab0..0a9fa553 100644
--- a/plugins/pacrunner.c
+++ b/plugins/pacrunner.c
@@ -183,6 +183,7 @@ static void create_proxy_configuration(void)
connman_dbus_dict_append_array(&dict, "Nameservers",
DBUS_TYPE_STRING, append_string_list,
str_list);
+ g_strfreev(str_list);
connman_dbus_dict_close(&iter, &dict);
diff --git a/src/service.c b/src/service.c
index ef25069d..02f494b5 100644
--- a/src/service.c
+++ b/src/service.c
@@ -2127,9 +2127,30 @@ char **connman_service_get_nameservers(struct connman_service *service)
return NULL;
if (service->nameservers_config != NULL)
- return service->nameservers_config;
- else if (service->nameservers != NULL)
- return service->nameservers;
+ return g_strdupv(service->nameservers_config);
+ else if (service->nameservers != NULL ||
+ service->nameservers_auto != NULL) {
+ int len = 0, len_auto = 0, i;
+ char **nameservers;
+
+ if (service->nameservers != NULL)
+ len = g_strv_length(service->nameservers);
+ if (service->nameservers_auto != NULL)
+ len_auto = g_strv_length(service->nameservers_auto);
+
+ nameservers = g_try_new0(char *, len + len_auto + 1);
+ if (nameservers == NULL)
+ return NULL;
+
+ for (i = 0; i < len; i++)
+ nameservers[i] = g_strdup(service->nameservers[i]);
+
+ for (i = 0; i < len_auto; i++)
+ nameservers[i + len] =
+ g_strdup(service->nameservers_auto[i]);
+
+ return nameservers;
+ }
return NULL;
}
diff --git a/src/wispr.c b/src/wispr.c
index 31f4caa6..9c45c72e 100644
--- a/src/wispr.c
+++ b/src/wispr.c
@@ -627,7 +627,7 @@ static int wispr_portal_detect(struct connman_wispr_portal_context *wp_context)
{
enum connman_service_type service_type;
char *interface = NULL;
- char **nameservers;
+ char **nameservers = NULL;
int if_index;
int err = 0;
int i;
@@ -695,6 +695,8 @@ static int wispr_portal_detect(struct connman_wispr_portal_context *wp_context)
err = -EINVAL;
done:
+ g_strfreev(nameservers);
+
g_free(interface);
return err;
}
diff --git a/src/wpad.c b/src/wpad.c
index dd25c7c6..e6d77e7d 100644
--- a/src/wpad.c
+++ b/src/wpad.c
@@ -147,12 +147,15 @@ int __connman_wpad_start(struct connman_service *service)
return -EINVAL;
wpad = g_try_new0(struct connman_wpad, 1);
- if (wpad == NULL)
+ if (wpad == NULL) {
+ g_strfreev(nameservers);
return -ENOMEM;
+ }
wpad->service = service;
wpad->resolv = g_resolv_new(index);
if (wpad->resolv == NULL) {
+ g_strfreev(nameservers);
g_free(wpad);
return -ENOMEM;
}
@@ -163,6 +166,8 @@ int __connman_wpad_start(struct connman_service *service)
for (i = 0; nameservers[i] != NULL; i++)
g_resolv_add_nameserver(wpad->resolv, nameservers[i], 53, 0);
+ g_strfreev(nameservers);
+
wpad->hostname = g_strdup_printf("wpad.%s", domainname);
DBG("hostname %s", wpad->hostname);