diff --git a/src/device.c b/src/device.c
index a01a524..0961ff6 100644
--- a/src/device.c
+++ b/src/device.c
device_set_bonded(device, TRUE);
}
- if (device_is_le(device) && has_longtermkeys(&src, &device->bdaddr)) {
+ if (device_is_le(device) && has_longtermkeys(&src, &device->bdaddr,
+ device->bdaddr_type)) {
device_set_paired(device, TRUE);
device_set_bonded(device, TRUE);
}
static void device_remove_stored(struct btd_device *device)
{
bdaddr_t src;
- char addr[18];
+ char key[20];
DBusConnection *conn = get_dbus_connection();
adapter_get_address(device->adapter, &src);
- ba2str(&device->bdaddr, addr);
+ ba2str(&device->bdaddr, key);
+
+ /* key: address only */
+ delete_entry(&src, "profiles", key);
+ delete_entry(&src, "trusts", key);
if (device_is_bonded(device)) {
- delete_entry(&src, "linkkeys", addr);
- delete_entry(&src, "aliases", addr);
- delete_entry(&src, "longtermkeys", addr);
+ delete_entry(&src, "linkkeys", key);
+ delete_entry(&src, "aliases", key);
+
+ /* key: address#type */
+ sprintf(&key[17], "#%hhu", device->bdaddr_type);
+
+ delete_entry(&src, "longtermkeys", key);
+
device_set_bonded(device, FALSE);
device->paired = FALSE;
btd_adapter_remove_bonding(device->adapter, &device->bdaddr,
device->bdaddr_type);
}
- delete_entry(&src, "profiles", addr);
- delete_entry(&src, "trusts", addr);
+
delete_all_records(&src, &device->bdaddr);
delete_device_service(&src, &device->bdaddr, device->bdaddr_type);
diff --git a/src/event.c b/src/event.c
index 8ecb942..ec5926f 100644
--- a/src/event.c
+++ b/src/event.c
newkey = g_string_new(val);
g_free(val);
- g_string_append_printf(newkey, " %d %d %d %d %d ", bdaddr_type,
- authenticated, master, enc_size, ediv);
+ g_string_append_printf(newkey, " %d %d %d %d ", authenticated, master,
+ enc_size, ediv);
str = buf2str(rand, 8);
if (str == NULL) {
newkey = g_string_append(newkey, str);
g_free(str);
- err = write_longtermkeys(local, peer, newkey->str);
+ err = write_longtermkeys(local, peer, bdaddr_type, newkey->str);
g_string_free(newkey, TRUE);
diff --git a/src/storage.c b/src/storage.c
index 3cde9c1..f8e9679 100644
--- a/src/storage.c
+++ b/src/storage.c
delete_by_pattern(filename, addr);
}
-int write_longtermkeys(bdaddr_t *local, bdaddr_t *peer, const char *key)
+int write_longtermkeys(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
+ const char *key)
{
- char filename[PATH_MAX + 1], addr[18];
+ char filename[PATH_MAX + 1], addr[20];
if (!key)
return -EINVAL;
create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
ba2str(peer, addr);
+ sprintf(&addr[17], "#%hhu", bdaddr_type);
+
return textfile_put(filename, addr, key);
}
-gboolean has_longtermkeys(bdaddr_t *local, bdaddr_t *peer)
+gboolean has_longtermkeys(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type)
{
- char filename[PATH_MAX + 1], addr[18], *str;
+ char filename[PATH_MAX + 1], key[20], *str;
create_filename(filename, PATH_MAX, local, "longtermkeys");
- ba2str(peer, addr);
+ ba2str(peer, key);
+ sprintf(&key[17], "#%hhu", bdaddr_type);
- str = textfile_caseget(filename, addr);
+ str = textfile_caseget(filename, key);
if (str) {
free(str);
return TRUE;
diff --git a/src/storage.h b/src/storage.h
index b6d24e9..69ade35 100644
--- a/src/storage.h
+++ b/src/storage.h
int write_device_ccc(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
uint16_t handle, uint16_t value);
void delete_device_ccc(bdaddr_t *local, bdaddr_t *peer);
-int write_longtermkeys(bdaddr_t *local, bdaddr_t *peer, const char *key);
-gboolean has_longtermkeys(bdaddr_t *local, bdaddr_t *peer);
+int write_longtermkeys(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
+ const char *key);
+gboolean has_longtermkeys(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type);
#define PNP_UUID "00001200-0000-1000-8000-00805f9b34fb"