summaryrefslogtreecommitdiff
path: root/src/ipconfig.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2012-03-04 20:45:54 -0800
committerMarcel Holtmann <marcel@holtmann.org>2012-03-04 20:45:54 -0800
commit842eb0b8d703fdf30829af25818b48ee995abbc1 (patch)
tree679315aed5258266cbb7fdedecbaa89448631401 /src/ipconfig.c
parent956cc0ebe4ff3c63e0036475dd2c20720ffb2448 (diff)
downloadconnman-842eb0b8d703fdf30829af25818b48ee995abbc1.tar.gz
connman-842eb0b8d703fdf30829af25818b48ee995abbc1.tar.bz2
connman-842eb0b8d703fdf30829af25818b48ee995abbc1.zip
ipconfig: Fix broken attempt to handle {IPv4,IPv6}.Configuration
Diffstat (limited to 'src/ipconfig.c')
-rw-r--r--src/ipconfig.c59
1 files changed, 14 insertions, 45 deletions
diff --git a/src/ipconfig.c b/src/ipconfig.c
index 802fbefb..79aed71a 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -2015,7 +2015,7 @@ int __connman_ipconfig_set_config(struct connman_ipconfig *ipconfig,
dbus_message_iter_recurse(array, &dict);
while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) {
- DBusMessageIter entry;
+ DBusMessageIter entry, value;
const char *key;
int type;
@@ -2027,85 +2027,54 @@ int __connman_ipconfig_set_config(struct connman_ipconfig *ipconfig,
dbus_message_iter_get_basic(&entry, &key);
dbus_message_iter_next(&entry);
- type = dbus_message_iter_get_arg_type(&entry);
+ if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_VARIANT)
+ return -EINVAL;
+
+ dbus_message_iter_recurse(&entry, &value);
+
+ type = dbus_message_iter_get_arg_type(&value);
if (g_str_equal(key, "Method") == TRUE) {
const char *str;
- if (type == DBUS_TYPE_VARIANT) {
- DBusMessageIter variant = entry;
- dbus_message_iter_recurse(&variant, &entry);
- type = dbus_message_iter_get_arg_type(&entry);
- }
-
if (type != DBUS_TYPE_STRING)
return -EINVAL;
- dbus_message_iter_get_basic(&entry, &str);
+ dbus_message_iter_get_basic(&value, &str);
method = __connman_ipconfig_string2method(str);
} else if (g_str_equal(key, "Address") == TRUE) {
- if (type == DBUS_TYPE_VARIANT) {
- DBusMessageIter variant = entry;
- dbus_message_iter_recurse(&variant, &entry);
- type = dbus_message_iter_get_arg_type(&entry);
- }
-
if (type != DBUS_TYPE_STRING)
return -EINVAL;
- dbus_message_iter_get_basic(&entry, &address);
+ dbus_message_iter_get_basic(&value, &address);
} else if (g_str_equal(key, "PrefixLength") == TRUE) {
- if (type == DBUS_TYPE_VARIANT) {
- DBusMessageIter variant = entry;
- dbus_message_iter_recurse(&variant, &entry);
- type = dbus_message_iter_get_arg_type(&entry);
- }
-
if (type != DBUS_TYPE_STRING)
return -EINVAL;
- dbus_message_iter_get_basic(&entry,
+ dbus_message_iter_get_basic(&value,
&prefix_length_string);
prefix_length = atoi(prefix_length_string);
if (prefix_length < 0 || prefix_length > 128)
return -EINVAL;
-
} else if (g_str_equal(key, "Netmask") == TRUE) {
- if (type == DBUS_TYPE_VARIANT) {
- DBusMessageIter variant = entry;
- dbus_message_iter_recurse(&variant, &entry);
- type = dbus_message_iter_get_arg_type(&entry);
- }
-
if (type != DBUS_TYPE_STRING)
return -EINVAL;
- dbus_message_iter_get_basic(&entry, &netmask);
+ dbus_message_iter_get_basic(&value, &netmask);
} else if (g_str_equal(key, "Gateway") == TRUE) {
- if (type == DBUS_TYPE_VARIANT) {
- DBusMessageIter variant = entry;
- dbus_message_iter_recurse(&variant, &entry);
- type = dbus_message_iter_get_arg_type(&entry);
- }
-
if (type != DBUS_TYPE_STRING)
return -EINVAL;
- dbus_message_iter_get_basic(&entry, &gateway);
+ dbus_message_iter_get_basic(&value, &gateway);
} else if (g_str_equal(key, "Privacy") == TRUE) {
- if (type == DBUS_TYPE_VARIANT) {
- DBusMessageIter variant = entry;
- dbus_message_iter_recurse(&variant, &entry);
- type = dbus_message_iter_get_arg_type(&entry);
- }
-
if (type != DBUS_TYPE_STRING)
return -EINVAL;
- dbus_message_iter_get_basic(&entry, &privacy_string);
+ dbus_message_iter_get_basic(&value, &privacy_string);
privacy = string2privacy(privacy_string);
}
+
dbus_message_iter_next(&dict);
}