summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2022-08-01 17:05:36 -0700
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2022-08-02 09:34:01 -0700
commita65ddf710584f2b3dad04fb5e3d725ba340ea1ef (patch)
tree00a4f11208a14a3ba3e79c9df1da2940dfd02449
parent7adb3aa7efc3d70381c411c031f579ff63786994 (diff)
downloadbluez-a65ddf710584f2b3dad04fb5e3d725ba340ea1ef.tar.gz
sixaxis: Fix fliping device.trusted automatically
device.trusted is a user preference which controls if the devices needs to be authorized or not so the plugin shall not overwrite it and instead just honor what user has set and skip authorizing if already trusted. Fixes: https://github.com/bluez/bluez/issues/372
-rw-r--r--plugins/sixaxis.c9
-rw-r--r--src/device.c6
-rw-r--r--src/device.h1
3 files changed, 10 insertions, 6 deletions
diff --git a/plugins/sixaxis.c b/plugins/sixaxis.c
index 10cf15948..544ab399a 100644
--- a/plugins/sixaxis.c
+++ b/plugins/sixaxis.c
@@ -294,7 +294,6 @@ static void agent_auth_cb(DBusError *derr, void *user_data)
}
remove_device = false;
- btd_device_set_trusted(closure->device, true);
btd_device_set_temporary(closure->device, false);
if (closure->type == CABLE_PAIRING_SIXAXIS)
@@ -336,10 +335,9 @@ static bool setup_device(int fd, const char *sysfs_path,
* connected eg. to charge up battery. */
device = btd_adapter_find_device(adapter, &device_bdaddr,
BDADDR_BREDR);
- if (device != NULL &&
- btd_device_is_connected(device) &&
- g_slist_find_custom(btd_device_get_uuids(device), HID_UUID,
- (GCompareFunc)strcasecmp)) {
+ if (device && btd_device_has_uuid(device, HID_UUID) &&
+ (btd_device_is_connected(device) ||
+ btd_device_is_trusted(device))) {
char device_addr[18];
ba2str(&device_bdaddr, device_addr);
DBG("device %s already known, skipping", device_addr);
@@ -352,7 +350,6 @@ static bool setup_device(int fd, const char *sysfs_path,
btd_device_device_set_name(device, cp->name);
btd_device_set_pnpid(device, cp->source, cp->vid, cp->pid, cp->version);
- btd_device_set_trusted(device, false);
btd_device_set_temporary(device, true);
closure = g_new0(struct authentication_closure, 1);
diff --git a/src/device.c b/src/device.c
index 60762ac35..bc9942022 100644
--- a/src/device.c
+++ b/src/device.c
@@ -4509,6 +4509,12 @@ GSList *btd_device_get_uuids(struct btd_device *device)
return device->uuids;
}
+bool btd_device_has_uuid(struct btd_device *device, const char *uuid)
+{
+ return g_slist_find_custom(device->uuids, uuid,
+ (GCompareFunc)strcasecmp);
+}
+
struct probe_data {
struct btd_device *dev;
GSList *uuids;
diff --git a/src/device.h b/src/device.h
index 004d3a78b..cc474bd88 100644
--- a/src/device.h
+++ b/src/device.h
@@ -54,6 +54,7 @@ struct device_addr_type {
int device_addr_type_cmp(gconstpointer a, gconstpointer b);
GSList *btd_device_get_uuids(struct btd_device *device);
+bool btd_device_has_uuid(struct btd_device *device, const char *uuid);
void device_probe_profiles(struct btd_device *device, GSList *profiles);
void btd_device_set_record(struct btd_device *device, const char *uuid,