diff options
author | Patrik Flykt <patrik.flykt@linux.intel.com> | 2013-02-20 15:55:44 +0200 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2013-02-21 16:22:37 +0200 |
commit | 61b57233f5325b657a57b1664ce18a290ae6dec3 (patch) | |
tree | 8eec74e5e57c22ef6a9b72a91204ea184bac3e82 /client | |
parent | df9e11ae7a5c23ea3112cefff672795213c8a978 (diff) | |
download | connman-61b57233f5325b657a57b1664ce18a290ae6dec3.tar.gz connman-61b57233f5325b657a57b1664ce18a290ae6dec3.tar.bz2 connman-61b57233f5325b657a57b1664ce18a290ae6dec3.zip |
client: Quick fix for parsing IPv6.Configuration correctly
Fixes BMC#25925
Diffstat (limited to 'client')
-rw-r--r-- | client/services.c | 33 |
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); |