From 0b95857f52f88596c45679351f6e80ef17d6fc58 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 21 Jan 2009 01:36:32 +0100 Subject: [PATCH] Verify argument type before processing --- src/connection.c | 3 +++ src/device.c | 12 ++++++++++++ src/network.c | 12 ++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/connection.c b/src/connection.c index 980b770..f617dde 100644 --- a/src/connection.c +++ b/src/connection.c @@ -291,6 +291,7 @@ static DBusMessage *set_property(DBusConnection *conn, { DBusMessageIter iter, value; const char *name; + int type; DBG("conn %p", conn); @@ -305,6 +306,8 @@ static DBusMessage *set_property(DBusConnection *conn, CONNMAN_SECURITY_PRIVILEGE_MODIFY) < 0) return __connman_error_permission_denied(msg); + type = dbus_message_iter_get_arg_type(&value); + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } diff --git a/src/device.c b/src/device.c index cc5b761..6e2575b 100644 --- a/src/device.c +++ b/src/device.c @@ -317,6 +317,7 @@ static DBusMessage *set_property(DBusConnection *conn, struct connman_device *device = data; DBusMessageIter iter, value; const char *name; + int type; DBG("conn %p", conn); @@ -331,10 +332,15 @@ static DBusMessage *set_property(DBusConnection *conn, CONNMAN_SECURITY_PRIVILEGE_MODIFY) < 0) return __connman_error_permission_denied(msg); + type = dbus_message_iter_get_arg_type(&value); + if (g_str_equal(name, "Powered") == TRUE) { connman_bool_t powered; int err; + if (type != DBUS_TYPE_BOOLEAN) + return __connman_error_invalid_arguments(msg); + dbus_message_iter_get_basic(&value, &powered); if (device->powered == powered) @@ -348,6 +354,9 @@ static DBusMessage *set_property(DBusConnection *conn, const char *str; int err; + if (type != DBUS_TYPE_STRING) + return __connman_error_invalid_arguments(msg); + dbus_message_iter_get_basic(&value, &str); policy = string2policy(str); if (policy == CONNMAN_DEVICE_POLICY_UNKNOWN) @@ -359,6 +368,9 @@ static DBusMessage *set_property(DBusConnection *conn, } else if (g_str_equal(name, "Priority") == TRUE) { connman_uint8_t priority; + if (type != DBUS_TYPE_BYTE) + return __connman_error_invalid_arguments(msg); + dbus_message_iter_get_basic(&value, &priority); device->priority = priority; diff --git a/src/network.c b/src/network.c index 1e616e4..3e27e7e 100644 --- a/src/network.c +++ b/src/network.c @@ -158,6 +158,7 @@ static DBusMessage *set_property(DBusConnection *conn, struct connman_network *network = data; DBusMessageIter iter, value; const char *name; + int type; DBG("conn %p", conn); @@ -172,9 +173,14 @@ static DBusMessage *set_property(DBusConnection *conn, CONNMAN_SECURITY_PRIVILEGE_MODIFY) < 0) return __connman_error_permission_denied(msg); + type = dbus_message_iter_get_arg_type(&value); + if (g_str_equal(name, "Remember") == TRUE) { connman_bool_t remember; + if (type != DBUS_TYPE_BOOLEAN) + return __connman_error_invalid_arguments(msg); + dbus_message_iter_get_basic(&value, &remember); if (network->remember == remember) @@ -184,6 +190,9 @@ static DBusMessage *set_property(DBusConnection *conn, } else if (g_str_equal(name, "WiFi.Passphrase") == TRUE) { const char *passphrase; + if (type != DBUS_TYPE_STRING) + return __connman_error_invalid_arguments(msg); + if (__connman_security_check_privilege(msg, CONNMAN_SECURITY_PRIVILEGE_SECRET) < 0) return __connman_error_permission_denied(msg); @@ -195,6 +204,9 @@ static DBusMessage *set_property(DBusConnection *conn, } else if (g_str_equal(name, "Priority") == TRUE) { connman_uint8_t priority; + if (type != DBUS_TYPE_BYTE) + return __connman_error_invalid_arguments(msg); + dbus_message_iter_get_basic(&value, &priority); network->priority = priority; -- 1.7.9.5