summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrik Flykt <patrik.flykt@linux.intel.com>2013-02-20 15:55:44 +0200
committerPatrik Flykt <patrik.flykt@linux.intel.com>2013-02-21 16:22:37 +0200
commit61b57233f5325b657a57b1664ce18a290ae6dec3 (patch)
tree8eec74e5e57c22ef6a9b72a91204ea184bac3e82
parentdf9e11ae7a5c23ea3112cefff672795213c8a978 (diff)
downloadconnman-61b57233f5325b657a57b1664ce18a290ae6dec3.tar.gz
connman-61b57233f5325b657a57b1664ce18a290ae6dec3.tar.bz2
connman-61b57233f5325b657a57b1664ce18a290ae6dec3.zip
client: Quick fix for parsing IPv6.Configuration correctly
Fixes BMC#25925
-rw-r--r--client/services.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/client/services.c b/client/services.c
index d2ec8b3b..97e6c2f6 100644
--- a/client/services.c
+++ b/client/services.c
@@ -91,9 +91,11 @@ static int append_property_array(DBusMessageIter *iter, char *property,
static int append_property_dict(DBusMessageIter *iter, char *property,
char **keys, char **data, int num_args)
{
+ int is_ipv6 = 0;
DBusMessageIter value, dict, entry, dict_key;
int i = 0;
unsigned char prefix;
+ char *property_value;
dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &property);
@@ -102,6 +104,9 @@ static int append_property_dict(DBusMessageIter *iter, char *property,
dbus_dict_open(&value, &dict);
+ if (strcmp(property, "IPv6.Configuration") == 0)
+ is_ipv6 = 1;
+
while (keys[i] != NULL && data[i] != NULL
&& strncmp(data[i], "--", 2) != 0) {
@@ -113,12 +118,9 @@ static int append_property_dict(DBusMessageIter *iter, char *property,
dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING,
&keys[i]);
- if (strcmp(property, "IPv6.Configuration") == 0 &&
- g_strcmp0(keys[i], "PrefixLength")) {
- if (data[i] == NULL) {
- fprintf(stderr, "No values entered!\n");
- exit(EXIT_FAILURE);
- }
+ property_value = data[i];
+
+ if (is_ipv6 == 1 && g_strcmp0(keys[i], "PrefixLength") == 0) {
prefix = atoi(data[i]);
dbus_message_iter_open_container(&entry,
@@ -128,14 +130,31 @@ static int append_property_dict(DBusMessageIter *iter, char *property,
dbus_message_iter_append_basic(&dict_key,
DBUS_TYPE_BYTE, &prefix);
} else {
+ if (is_ipv6 == 1 && strcmp(keys[i], "Privacy") == 0) {
+ switch (parse_boolean(property_value)) {
+ case 0:
+ property_value = "disabled";
+ break;
+ case 1:
+ property_value = "enabled";
+ break;
+ case -1:
+ if (strcmp(property_value,
+ "prefered") != 0)
+ return -EINVAL;
+ break;
+ }
+ }
+
dbus_message_iter_open_container(&entry,
DBUS_TYPE_VARIANT,
DBUS_TYPE_STRING_AS_STRING,
&dict_key);
dbus_message_iter_append_basic(&dict_key,
DBUS_TYPE_STRING,
- &data[i]);
+ &property_value);
}
+
dbus_message_iter_close_container(&entry, &dict_key);
dbus_message_iter_close_container(&dict, &entry);