summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorYun-Hao Chung <howardchung@chromium.org>2021-08-11 15:17:57 +0800
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2021-08-11 11:22:00 -0700
commit561c500795a5bc06c06543ce85477040b708b547 (patch)
tree20e244f126d5b61679d80a37966386c360dc0d5c /plugins
parentbb0714be2123f4b1ac98b8a1a97a19d12b3b1b7d (diff)
downloadbluez-561c500795a5bc06c06543ce85477040b708b547.tar.gz
plugins/admin: add uuid duplicate check
SetServiceAllowlist should ignore those duplicated UUIDs. Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
Diffstat (limited to 'plugins')
-rw-r--r--plugins/admin.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/plugins/admin.c b/plugins/admin.c
index 428a5528c..aea33cb71 100644
--- a/plugins/admin.c
+++ b/plugins/admin.c
@@ -85,6 +85,14 @@ static void admin_policy_free(void *data)
g_free(admin_policy);
}
+static bool uuid_match(const void *data, const void *match_data)
+{
+ const bt_uuid_t *uuid = data;
+ const bt_uuid_t *match_uuid = match_data;
+
+ return bt_uuid_cmp(uuid, match_uuid) == 0;
+}
+
static struct queue *parse_allow_service_list(struct btd_adapter *adapter,
DBusMessage *msg)
{
@@ -119,9 +127,15 @@ static struct queue *parse_allow_service_list(struct btd_adapter *adapter,
goto failed;
}
+ dbus_message_iter_next(&arr_iter);
+
+ if (queue_find(uuid_list, uuid_match, uuid)) {
+ g_free(uuid);
+ continue;
+ }
+
queue_push_head(uuid_list, uuid);
- dbus_message_iter_next(&arr_iter);
} while (true);
return uuid_list;