1 /* 2 * 3 * BlueZ - Bluetooth protocol stack for Linux 4 * 5 * Copyright (C) 2006-2010 Nokia Corporation 6 * Copyright (C) 2004-2010 Marcel Holtmann <marcel (at) holtmann.org> 7 * 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 22 * 23 */ 24 25 #ifdef HAVE_CONFIG_H 26 #include <config.h> 27 #endif 28 29 #define _GNU_SOURCE 30 #include <stdio.h> 31 #include <errno.h> 32 #include <unistd.h> 33 #include <stdlib.h> 34 #include <string.h> 35 #include <sys/param.h> 36 #include <sys/ioctl.h> 37 #include <sys/socket.h> 38 39 #include <bluetooth/bluetooth.h> 40 #include <bluetooth/hci.h> 41 #include <bluetooth/hci_lib.h> 42 #include <bluetooth/sdp.h> 43 44 #include <glib.h> 45 #include <dbus/dbus.h> 46 #include <gdbus.h> 47 48 #include "log.h" 49 #include "textfile.h" 50 51 #include "hcid.h" 52 #include "manager.h" 53 #include "adapter.h" 54 #include "device.h" 55 #include "error.h" 56 #include "glib-helper.h" 57 #include "dbus-common.h" 58 #include "agent.h" 59 #include "storage.h" 60 #include "dbus-hci.h" 61 62 struct oob_availability_req { 63 struct btd_device *device; 64 uint8_t auth; 65 uint8_t capa; 66 }; 67 68 static DBusConnection *connection = NULL; 69 70 gboolean get_adapter_and_device(bdaddr_t *src, bdaddr_t *dst, 71 struct btd_adapter **adapter, 72 struct btd_device **device, 73 gboolean create) 74 { 75 char peer_addr[18]; 76 77 *adapter = manager_find_adapter(src); 78 if (!*adapter) { 79 error("Unable to find matching adapter"); 80 return FALSE; 81 } 82 83 ba2str(dst, peer_addr); 84 85 if (create) 86 *device = adapter_get_device(connection, *adapter, peer_addr); 87 else 88 *device = adapter_find_device(*adapter, peer_addr); 89 90 if (create && !*device) { 91 error("Unable to get device object!"); 92 return FALSE; 93 } 94 95 return TRUE; 96 } 97 98 const char *class_to_icon(uint32_t class) 99 { 100 switch ((class & 0x1f00) >> 8) { 101 case 0x01: 102 return "computer"; 103 case 0x02: 104 switch ((class & 0xfc) >> 2) { 105 case 0x01: 106 case 0x02: 107 case 0x03: 108 case 0x05: 109 return "phone"; 110 case 0x04: 111 return "modem"; 112 } 113 break; 114 case 0x03: 115 return "network-wireless"; 116 case 0x04: 117 switch ((class & 0xfc) >> 2) { 118 case 0x01: 119 case 0x02: 120 return "audio-card"; /* Headset */ 121 case 0x06: 122 return "audio-card"; /* Headphone */ 123 case 0x0b: /* VCR */ 124 case 0x0c: /* Video Camera */ 125 case 0x0d: /* Camcorder */ 126 return "camera-video"; 127 default: 128 return "audio-card"; /* Other audio device */ 129 } 130 break; 131 case 0x05: 132 switch ((class & 0xc0) >> 6) { 133 case 0x00: 134 switch ((class & 0x1e) >> 2) { 135 case 0x01: 136 case 0x02: 137 return "input-gaming"; 138 } 139 break; 140 case 0x01: 141 return "input-keyboard"; 142 case 0x02: 143 switch ((class & 0x1e) >> 2) { 144 case 0x05: 145 return "input-tablet"; 146 default: 147 return "input-mouse"; 148 } 149 } 150 break; 151 case 0x06: 152 if (class & 0x80) 153 return "printer"; 154 if (class & 0x20) 155 return "camera-photo"; 156 break; 157 } 158 159 return NULL; 160 } 161 162 /***************************************************************** 163 * 164 * Section reserved to HCI commands confirmation handling and low 165 * level events(eg: device attached/dettached. 166 * 167 *****************************************************************/ 168 169 static void pincode_cb(struct agent *agent, DBusError *err, 170 const char *pincode, struct btd_device *device) 171 { 172 struct btd_adapter *adapter = device_get_adapter(device); 173 pin_code_reply_cp pr; 174 bdaddr_t sba, dba; 175 size_t len; 176 int dev; 177 uint16_t dev_id = adapter_get_dev_id(adapter); 178 179 dev = hci_open_dev(dev_id); 180 if (dev < 0) { 181 error("hci_open_dev(%d): %s (%d)", dev_id, 182 strerror(errno), errno); 183 return; 184 } 185 186 adapter_get_address(adapter, &sba); 187 device_get_address(device, &dba); 188 189 if (err) { 190 hci_send_cmd(dev, OGF_LINK_CTL, 191 OCF_PIN_CODE_NEG_REPLY, 6, &dba); 192 goto done; 193 } 194 195 len = strlen(pincode); 196 197 set_pin_length(&sba, len); 198 199 memset(&pr, 0, sizeof(pr)); 200 bacpy(&pr.bdaddr, &dba); 201 memcpy(pr.pin_code, pincode, len); 202 pr.pin_len = len; 203 hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_REPLY, 204 PIN_CODE_REPLY_CP_SIZE, &pr); 205 206 done: 207 hci_close_dev(dev); 208 } 209 210 int hcid_dbus_request_pin(int dev, bdaddr_t *sba, struct hci_conn_info *ci) 211 { 212 struct btd_adapter *adapter; 213 struct btd_device *device; 214 215 if (!get_adapter_and_device(sba, &ci->bdaddr, &adapter, &device, TRUE)) 216 return -ENODEV; 217 218 /* Check if the adapter is not pairable and if there isn't a bonding in 219 * progress */ 220 if (!adapter_is_pairable(adapter) && !device_is_bonding(device, NULL)) 221 return -EPERM; 222 223 return device_request_authentication(device, AUTH_TYPE_PINCODE, 0, 224 pincode_cb); 225 } 226 227 static int confirm_reply(struct btd_adapter *adapter, 228 struct btd_device *device, gboolean success) 229 { 230 int dd; 231 user_confirm_reply_cp cp; 232 uint16_t dev_id = adapter_get_dev_id(adapter); 233 234 dd = hci_open_dev(dev_id); 235 if (dd < 0) { 236 error("Unable to open hci%d", dev_id); 237 return dd; 238 } 239 240 memset(&cp, 0, sizeof(cp)); 241 device_get_address(device, &cp.bdaddr); 242 243 if (success) 244 hci_send_cmd(dd, OGF_LINK_CTL, OCF_USER_CONFIRM_REPLY, 245 USER_CONFIRM_REPLY_CP_SIZE, &cp); 246 else 247 hci_send_cmd(dd, OGF_LINK_CTL, OCF_USER_CONFIRM_NEG_REPLY, 248 USER_CONFIRM_REPLY_CP_SIZE, &cp); 249 250 hci_close_dev(dd); 251 252 return 0; 253 } 254 255 static void confirm_cb(struct agent *agent, DBusError *err, void *user_data) 256 { 257 struct btd_device *device = user_data; 258 struct btd_adapter *adapter = device_get_adapter(device); 259 gboolean success = (err == NULL) ? TRUE : FALSE; 260 261 confirm_reply(adapter, device, success); 262 } 263 264 static void passkey_cb(struct agent *agent, DBusError *err, uint32_t passkey, 265 void *user_data) 266 { 267 struct btd_device *device = user_data; 268 struct btd_adapter *adapter = device_get_adapter(device); 269 user_passkey_reply_cp cp; 270 bdaddr_t dba; 271 int dd; 272 uint16_t dev_id = adapter_get_dev_id(adapter); 273 274 dd = hci_open_dev(dev_id); 275 if (dd < 0) { 276 error("Unable to open hci%d", dev_id); 277 return; 278 } 279 280 device_get_address(device, &dba); 281 282 memset(&cp, 0, sizeof(cp)); 283 bacpy(&cp.bdaddr, &dba); 284 cp.passkey = passkey; 285 286 if (err) 287 hci_send_cmd(dd, OGF_LINK_CTL, 288 OCF_USER_PASSKEY_NEG_REPLY, 6, &dba); 289 else 290 hci_send_cmd(dd, OGF_LINK_CTL, OCF_USER_PASSKEY_REPLY, 291 USER_PASSKEY_REPLY_CP_SIZE, &cp); 292 293 hci_close_dev(dd); 294 } 295 296 static void oob_data_cb(struct agent *agent, DBusError *err, uint8_t *hash, 297 uint8_t *randomizer, void *user_data) 298 { 299 struct btd_device *device = user_data; 300 struct btd_adapter *adapter = device_get_adapter(device); 301 remote_oob_data_reply_cp cp; 302 bdaddr_t dba; 303 int dd; 304 uint16_t dev_id = adapter_get_dev_id(adapter); 305 306 dd = hci_open_dev(dev_id); 307 if (dd < 0) { 308 error("Unable to open hci%d", dev_id); 309 return; 310 } 311 312 device_get_address(device, &dba); 313 memset(&cp, 0, sizeof(cp)); 314 bacpy(&cp.bdaddr, &dba); 315 316 memcpy(&cp.hash, hash, 16); 317 memcpy(&cp.randomizer, randomizer, 16); 318 319 if (err) 320 hci_send_cmd(dd, OGF_LINK_CTL, OCF_REMOTE_OOB_DATA_NEG_REPLY, 321 6, &dba); 322 323 else 324 hci_send_cmd(dd, OGF_LINK_CTL, OCF_REMOTE_OOB_DATA_REPLY, 325 REMOTE_OOB_DATA_REPLY_CP_SIZE, &cp); 326 327 hci_close_dev(dd); 328 } 329 330 static void io_capa_oob_response(struct btd_adapter *adapter, struct btd_device *device, 331 uint8_t cap, uint8_t auth, gboolean oob) 332 { 333 io_capability_reply_cp cp; 334 int dd; 335 uint16_t dev_id = adapter_get_dev_id(adapter); 336 337 dd = hci_open_dev(dev_id); 338 if (dd < 0) { 339 error("Unable to open hci%d", dev_id); 340 return; 341 } 342 memset(&cp, 0, sizeof(cp)); 343 device_get_address(device, &cp.bdaddr); 344 345 cp.capability = cap; 346 if (oob) 347 cp.oob_data = 0x01; 348 else 349 cp.oob_data = 0x00; 350 cp.authentication = auth; 351 352 hci_send_cmd(dd, OGF_LINK_CTL, OCF_IO_CAPABILITY_REPLY, 353 IO_CAPABILITY_REPLY_CP_SIZE, &cp); 354 hci_close_dev(dd); 355 } 356 357 static void oob_availability_cb(struct agent *agent, DBusError *err, 358 void *user_data) 359 { 360 struct oob_availability_req *oob = user_data; 361 struct btd_device *device = oob->device; 362 struct btd_adapter *adapter = device_get_adapter(device); 363 364 if (err) { 365 io_capa_oob_response(adapter, device, oob->capa, oob->auth, FALSE); 366 } else { 367 io_capa_oob_response(adapter, device, oob->capa, oob->auth, TRUE); 368 } 369 } 370 371 372 static void pairing_consent_cb(struct agent *agent, DBusError *err, 373 void *user_data) 374 { 375 struct btd_device *device = user_data; 376 struct btd_adapter *adapter = device_get_adapter(device); 377 user_confirm_reply_cp cp; 378 int dd; 379 uint16_t dev_id = adapter_get_dev_id(adapter); 380 381 dd = hci_open_dev(dev_id); 382 if (dd < 0) { 383 error("Unable to open hci%d", dev_id); 384 return; 385 } 386 387 memset(&cp, 0, sizeof(cp)); 388 device_get_address(device, &cp.bdaddr); 389 390 if (err) 391 hci_send_cmd(dd, OGF_LINK_CTL, OCF_USER_CONFIRM_NEG_REPLY, 392 USER_CONFIRM_REPLY_CP_SIZE, &cp); 393 else 394 hci_send_cmd(dd, OGF_LINK_CTL, OCF_USER_CONFIRM_REPLY, 395 USER_CONFIRM_REPLY_CP_SIZE, &cp); 396 397 hci_close_dev(dd); 398 } 399 400 static int get_auth_requirements(bdaddr_t *local, bdaddr_t *remote, 401 uint8_t *auth) 402 { 403 struct hci_auth_info_req req; 404 char addr[18]; 405 int err, dd, dev_id; 406 407 ba2str(local, addr); 408 409 dev_id = hci_devid(addr); 410 if (dev_id < 0) 411 return dev_id; 412 413 dd = hci_open_dev(dev_id); 414 if (dd < 0) 415 return dd; 416 417 memset(&req, 0, sizeof(req)); 418 bacpy(&req.bdaddr, remote); 419 420 err = ioctl(dd, HCIGETAUTHINFO, (unsigned long) &req); 421 if (err < 0) { 422 DBG("HCIGETAUTHINFO failed: %s (%d)", 423 strerror(errno), errno); 424 hci_close_dev(dd); 425 return err; 426 } 427 428 hci_close_dev(dd); 429 430 if (auth) 431 *auth = req.type; 432 433 return 0; 434 } 435 436 int hcid_dbus_user_confirm(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey) 437 { 438 struct btd_adapter *adapter; 439 struct btd_device *device; 440 struct agent *agent; 441 uint8_t rem_cap, rem_auth, loc_cap, loc_auth; 442 gboolean bonding_initiator; 443 444 if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE)) 445 return -ENODEV; 446 447 if (get_auth_requirements(sba, dba, &loc_auth) < 0) { 448 error("Unable to get local authentication requirements"); 449 goto fail; 450 } 451 452 agent = device_get_agent(device); 453 if (agent == NULL) { 454 error("No agent available for user confirmation"); 455 goto fail; 456 } 457 458 loc_cap = agent_get_io_capability(agent); 459 460 DBG("confirm IO capabilities are 0x%02x", loc_cap); 461 DBG("confirm authentication requirement is 0x%02x", loc_auth); 462 463 rem_cap = device_get_cap(device); 464 rem_auth = device_get_auth(device); 465 466 DBG("remote IO capabilities are 0x%02x", rem_cap); 467 DBG("remote authentication requirement is 0x%02x", rem_auth); 468 469 /* If we require MITM but the remote device can't provide that 470 * (it has NoInputNoOutput) then reject the confirmation 471 * request. The only exception is when we're dedicated bonding 472 * initiators since then we always have the MITM bit set. */ 473 bonding_initiator = device_is_bonding(device, NULL); 474 if (!bonding_initiator && (loc_auth & 0x01) && rem_cap == 0x03) { 475 error("Rejecting request: remote device can't provide MITM"); 476 goto fail; 477 } 478 479 /* If local IO capabilities are DisplayYesNo and remote IO 480 * capabiltiies are DisplayOnly or NoInputNoOutput; 481 * call PairingConsent callback for incoming requests. */ 482 agent = device_get_agent(device); 483 if (!agent) { 484 agent = adapter_get_agent(adapter); 485 if ((agent_get_io_capability(agent) & 0x01) && 486 (rem_cap == 0x00 || rem_cap == 0x03)) 487 return device_request_authentication(device, 488 AUTH_TYPE_PAIRING_CONSENT, 0, 489 pairing_consent_cb); 490 } 491 492 /* If no side requires MITM protection; auto-accept */ 493 if ((loc_auth == 0xff || !(loc_auth & 0x01) || rem_cap == 0x03) && 494 (!(rem_auth & 0x01) || loc_cap == 0x03)) { 495 DBG("auto accept of confirmation"); 496 497 /* Wait 5 milliseconds before doing auto-accept */ 498 usleep(5000); 499 500 if (confirm_reply(adapter, device, TRUE) < 0) 501 return -EIO; 502 503 return device_request_authentication(device, AUTH_TYPE_AUTO, 504 0, NULL); 505 } 506 507 return device_request_authentication(device, AUTH_TYPE_CONFIRM, 508 passkey, confirm_cb); 509 510 fail: 511 return confirm_reply(adapter, device, FALSE); 512 } 513 514 int hcid_dbus_user_passkey(bdaddr_t *sba, bdaddr_t *dba) 515 { 516 struct btd_adapter *adapter; 517 struct btd_device *device; 518 519 if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE)) 520 return -ENODEV; 521 522 return device_request_authentication(device, AUTH_TYPE_PASSKEY, 0, 523 passkey_cb); 524 } 525 526 int hcid_dbus_user_notify(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey) 527 { 528 struct btd_adapter *adapter; 529 struct btd_device *device; 530 531 if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE)) 532 return -ENODEV; 533 534 return device_request_authentication(device, AUTH_TYPE_NOTIFY, 535 passkey, NULL); 536 } 537 538 void hcid_dbus_bonding_process_complete(bdaddr_t *local, bdaddr_t *peer, 539 uint8_t status) 540 { 541 struct btd_adapter *adapter; 542 struct btd_device *device; 543 544 DBG("status=%02x", status); 545 546 if (!get_adapter_and_device(local, peer, &adapter, &device, TRUE)) 547 return; 548 549 if (!device_is_authenticating(device)) { 550 /* This means that there was no pending PIN or SSP token 551 * request from the controller, i.e. this is not a new 552 * pairing */ 553 DBG("no pending auth request"); 554 return; 555 } 556 557 /* If this is a new pairing send the appropriate reply and signal for 558 * it and proceed with service discovery */ 559 device_bonding_complete(device, status); 560 } 561 562 void hcid_dbus_simple_pairing_complete(bdaddr_t *local, bdaddr_t *peer, 563 uint8_t status) 564 { 565 struct btd_adapter *adapter; 566 struct btd_device *device; 567 568 DBG("status=%02x", status); 569 570 if (!get_adapter_and_device(local, peer, &adapter, &device, TRUE)) 571 return; 572 573 device_simple_pairing_complete(device, status); 574 } 575 576 static char *extract_eir_name(uint8_t *data, uint8_t *type) 577 { 578 if (!data || !type) 579 return NULL; 580 581 if (data[0] == 0) 582 return NULL; 583 584 *type = data[1]; 585 586 switch (*type) { 587 case 0x08: 588 case 0x09: 589 return strndup((char *) (data + 2), data[0] - 1); 590 } 591 592 return NULL; 593 } 594 595 void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, 596 int8_t rssi, uint8_t *data) 597 { 598 char filename[PATH_MAX + 1]; 599 struct btd_adapter *adapter; 600 struct btd_device *device; 601 char local_addr[18], peer_addr[18], *alias, *name, *tmp_name; 602 struct remote_dev_info *dev, match; 603 uint8_t name_type = 0x00; 604 name_status_t name_status; 605 int state; 606 dbus_bool_t legacy; 607 unsigned char features[8]; 608 609 ba2str(local, local_addr); 610 ba2str(peer, peer_addr); 611 612 if (!get_adapter_and_device(local, peer, &adapter, &device, FALSE)) { 613 error("No matching adapter found"); 614 return; 615 } 616 617 write_remote_class(local, peer, class); 618 619 if (data) 620 write_remote_eir(local, peer, data); 621 622 /* 623 * workaround to identify situation when the daemon started and 624 * a standard inquiry or periodic inquiry was already running 625 */ 626 if (!(adapter_get_state(adapter) & STD_INQUIRY) && 627 !(adapter_get_state(adapter) & PERIODIC_INQUIRY)) { 628 state = adapter_get_state(adapter); 629 state |= PERIODIC_INQUIRY; 630 adapter_set_state(adapter, state); 631 } 632 633 memset(&match, 0, sizeof(struct remote_dev_info)); 634 bacpy(&match.bdaddr, peer); 635 match.name_status = NAME_SENT; 636 /* if found: don't send the name again */ 637 dev = adapter_search_found_devices(adapter, &match); 638 if (dev) { 639 adapter_update_found_devices(adapter, peer, rssi, class, 640 NULL, NULL, dev->legacy, 641 NAME_NOT_REQUIRED); 642 return; 643 } 644 645 /* the inquiry result can be triggered by NON D-Bus client */ 646 if (adapter_get_state(adapter) & RESOLVE_NAME) 647 name_status = NAME_REQUIRED; 648 else 649 name_status = NAME_NOT_REQUIRED; 650 651 create_name(filename, PATH_MAX, STORAGEDIR, local_addr, "aliases"); 652 alias = textfile_get(filename, peer_addr); 653 654 create_name(filename, PATH_MAX, STORAGEDIR, local_addr, "names"); 655 name = textfile_get(filename, peer_addr); 656 657 if (data) 658 legacy = FALSE; 659 else if (name == NULL) 660 legacy = TRUE; 661 else if (read_remote_features(local, peer, NULL, features) == 0) { 662 if (features[0] & 0x01) 663 legacy = FALSE; 664 else 665 legacy = TRUE; 666 } else 667 legacy = TRUE; 668 669 tmp_name = extract_eir_name(data, &name_type); 670 if (tmp_name) { 671 if (name_type == 0x09) { 672 write_device_name(local, peer, tmp_name); 673 name_status = NAME_NOT_REQUIRED; 674 675 if (name) 676 g_free(name); 677 678 name = tmp_name; 679 } else { 680 if (name) 681 free(tmp_name); 682 else 683 name = tmp_name; 684 } 685 } 686 687 if (name && name_type != 0x08) 688 name_status = NAME_SENT; 689 690 /* add in the list to track name sent/pending */ 691 adapter_update_found_devices(adapter, peer, rssi, class, name, alias, 692 legacy, name_status); 693 694 g_free(name); 695 g_free(alias); 696 } 697 698 void hcid_dbus_set_legacy_pairing(bdaddr_t *local, bdaddr_t *peer, 699 gboolean legacy) 700 { 701 struct btd_adapter *adapter; 702 struct btd_device *device; 703 struct remote_dev_info *dev, match; 704 705 if (!get_adapter_and_device(local, peer, &adapter, &device, FALSE)) { 706 error("No matching adapter found"); 707 return; 708 } 709 710 memset(&match, 0, sizeof(struct remote_dev_info)); 711 bacpy(&match.bdaddr, peer); 712 match.name_status = NAME_ANY; 713 714 dev = adapter_search_found_devices(adapter, &match); 715 if (dev) 716 dev->legacy = legacy; 717 } 718 719 void hcid_dbus_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class) 720 { 721 uint32_t old_class = 0; 722 struct btd_adapter *adapter; 723 struct btd_device *device; 724 const gchar *dev_path; 725 726 read_remote_class(local, peer, &old_class); 727 728 if (old_class == class) 729 return; 730 731 if (!get_adapter_and_device(local, peer, &adapter, &device, FALSE)) 732 return; 733 734 if (!device) 735 return; 736 737 dev_path = device_get_path(device); 738 739 emit_property_changed(connection, dev_path, DEVICE_INTERFACE, "Class", 740 DBUS_TYPE_UINT32, &class); 741 } 742 743 void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status, 744 char *name) 745 { 746 struct btd_adapter *adapter; 747 char srcaddr[18], dstaddr[18]; 748 int state; 749 struct btd_device *device; 750 struct remote_dev_info match, *dev_info; 751 752 if (!get_adapter_and_device(local, peer, &adapter, &device, FALSE)) 753 return; 754 755 ba2str(local, srcaddr); 756 ba2str(peer, dstaddr); 757 758 if (status != 0) 759 goto proceed; 760 761 bacpy(&match.bdaddr, peer); 762 match.name_status = NAME_ANY; 763 764 dev_info = adapter_search_found_devices(adapter, &match); 765 if (dev_info) { 766 g_free(dev_info->name); 767 dev_info->name = g_strdup(name); 768 adapter_emit_device_found(adapter, dev_info); 769 } 770 771 if (device) 772 device_set_name(device, name); 773 774 proceed: 775 /* remove from remote name request list */ 776 adapter_remove_found_device(adapter, peer); 777 778 /* check if there is more devices to request names */ 779 if (adapter_resolve_names(adapter) == 0) 780 return; 781 782 state = adapter_get_state(adapter); 783 state &= ~PERIODIC_INQUIRY; 784 state &= ~STD_INQUIRY; 785 adapter_set_state(adapter, state); 786 } 787 788 int hcid_dbus_link_key_notify(bdaddr_t *local, bdaddr_t *peer, 789 uint8_t *key, uint8_t key_type, 790 int pin_length, uint8_t old_key_type) 791 { 792 struct btd_device *device; 793 struct btd_adapter *adapter; 794 uint8_t local_auth = 0xff, remote_auth, new_key_type; 795 gboolean bonding, temporary = FALSE; 796 797 if (!get_adapter_and_device(local, peer, &adapter, &device, TRUE)) 798 return -ENODEV; 799 800 new_key_type = key_type; 801 802 if (key_type == 0x06) { 803 if (device_get_debug_key(device, NULL)) 804 old_key_type = 0x03; 805 if (old_key_type != 0xff) 806 new_key_type = old_key_type; 807 else 808 /* This is Changed Combination Link Key for 809 * a temporary link key.*/ 810 return 0; 811 } 812 813 get_auth_requirements(local, peer, &local_auth); 814 remote_auth = device_get_auth(device); 815 bonding = device_is_bonding(device, NULL); 816 817 DBG("key type 0x%02x old key type 0x%02x new key type 0x%02x", 818 key_type, old_key_type, new_key_type); 819 820 DBG("local auth 0x%02x and remote auth 0x%02x", 821 local_auth, remote_auth); 822 823 /* Clear any previous debug key */ 824 device_set_debug_key(device, NULL); 825 826 /* If this is not the first link key set a flag so a subsequent auth 827 * complete event doesn't trigger SDP and remove any stored key */ 828 if (old_key_type != 0xff) { 829 device_set_renewed_key(device, TRUE); 830 device_remove_bonding(device); 831 } 832 833 /* Store the link key only in runtime memory if it's a debug 834 * key, else store the link key persistently if one of the 835 * following is true: 836 * 1. this is a legacy link key 837 * 2. this is a changed combination key and there was a previously 838 * stored one 839 * 3. neither local nor remote side had no-bonding as a requirement 840 * 4. the local side had dedicated bonding as a requirement 841 * 5. the remote side is using dedicated bonding since in that case 842 * also the local requirements are set to dedicated bonding 843 * If none of the above match only keep the link key around for 844 * this connection and set the temporary flag for the device. 845 */ 846 if (new_key_type == 0x03) { 847 DBG("Storing debug key in runtime memory"); 848 device_set_debug_key(device, key); 849 } else if (key_type < 0x03 || 850 (key_type == 0x06 && old_key_type != 0xff) || 851 (local_auth > 0x01 && remote_auth > 0x01) || 852 (local_auth == 0x02 || local_auth == 0x03) || 853 (remote_auth == 0x02 || remote_auth == 0x03)) { 854 int err; 855 856 DBG("storing link key of type 0x%02x", key_type); 857 858 err = write_link_key(local, peer, key, new_key_type, 859 pin_length); 860 if (err < 0) { 861 error("write_link_key: %s (%d)", strerror(-err), -err); 862 return err; 863 } 864 } else 865 temporary = TRUE; 866 867 if (!device_is_connected(device)) 868 device_set_secmode3_conn(device, TRUE); 869 else if (!bonding && old_key_type == 0xff) 870 hcid_dbus_bonding_process_complete(local, peer, 0); 871 872 device_set_temporary(device, temporary); 873 874 return 0; 875 } 876 877 int hcid_dbus_get_oob_data(bdaddr_t *sba, bdaddr_t * dba) 878 { 879 struct btd_adapter *adapter; 880 struct btd_device *device; 881 struct agent *agent = NULL; 882 883 if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE)) 884 return -ENODEV; 885 886 agent = device_get_agent(device); 887 if (agent == NULL) { 888 error("No agent available for device"); 889 return -1; 890 } 891 892 return device_request_authentication(device, AUTH_TYPE_OOB, 0, 893 oob_data_cb); 894 } 895 896 void hcid_dbus_conn_complete(bdaddr_t *local, uint8_t status, uint16_t handle, 897 bdaddr_t *peer) 898 { 899 struct btd_adapter *adapter; 900 struct btd_device *device; 901 902 if (!get_adapter_and_device(local, peer, &adapter, &device, TRUE)) 903 return; 904 905 if (status) { 906 gboolean secmode3 = device_get_secmode3_conn(device); 907 908 device_set_secmode3_conn(device, FALSE); 909 910 if (device_is_bonding(device, NULL)) 911 device_bonding_complete(device, status); 912 if (device_is_temporary(device)) 913 adapter_remove_device(connection, adapter, device, 914 secmode3); 915 return; 916 } 917 918 /* add in the device connetions list */ 919 adapter_add_connection(adapter, device, handle); 920 } 921 922 void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status, 923 uint16_t handle, uint8_t reason) 924 { 925 struct btd_adapter *adapter; 926 struct btd_device *device; 927 928 if (status) { 929 error("Disconnection failed: 0x%02x", status); 930 return; 931 } 932 933 adapter = manager_find_adapter(local); 934 if (!adapter) { 935 error("No matching adapter found"); 936 return; 937 } 938 939 device = adapter_find_connection(adapter, handle); 940 if (!device) { 941 DBG("No matching connection found for handle %u", handle); 942 return; 943 } 944 945 adapter_remove_connection(adapter, device, handle); 946 } 947 948 /* Section reserved to device HCI callbacks */ 949 950 void hcid_dbus_setscan_enable_complete(bdaddr_t *local) 951 { 952 struct btd_adapter *adapter; 953 read_scan_enable_rp rp; 954 struct hci_request rq; 955 int dd = -1; 956 uint16_t dev_id; 957 958 adapter = manager_find_adapter(local); 959 if (!adapter) { 960 error("No matching adapter found"); 961 return; 962 } 963 964 if (adapter_powering_down(adapter)) 965 return; 966 967 dev_id = adapter_get_dev_id(adapter); 968 969 dd = hci_open_dev(dev_id); 970 if (dd < 0) { 971 error("HCI device open failed: hci%d", dev_id); 972 return; 973 } 974 975 memset(&rq, 0, sizeof(rq)); 976 rq.ogf = OGF_HOST_CTL; 977 rq.ocf = OCF_READ_SCAN_ENABLE; 978 rq.rparam = &rp; 979 rq.rlen = READ_SCAN_ENABLE_RP_SIZE; 980 rq.event = EVT_CMD_COMPLETE; 981 982 if (hci_send_req(dd, &rq, HCI_REQ_TIMEOUT) < 0) { 983 error("Sending read scan enable command failed: %s (%d)", 984 strerror(errno), errno); 985 goto failed; 986 } 987 988 if (rp.status) { 989 error("Getting scan enable failed with status 0x%02x", 990 rp.status); 991 goto failed; 992 } 993 994 adapter_mode_changed(adapter, rp.enable); 995 996 failed: 997 if (dd >= 0) 998 hci_close_dev(dd); 999 } 1000 1001 void hcid_dbus_write_simple_pairing_mode_complete(bdaddr_t *local) 1002 { 1003 struct btd_adapter *adapter; 1004 int dd; 1005 uint8_t mode; 1006 uint16_t dev_id; 1007 const gchar *path; 1008 1009 adapter = manager_find_adapter(local); 1010 if (!adapter) { 1011 error("No matching adapter found"); 1012 return; 1013 } 1014 1015 dev_id = adapter_get_dev_id(adapter); 1016 path = adapter_get_path(adapter); 1017 1018 dd = hci_open_dev(dev_id); 1019 if (dd < 0) { 1020 error("HCI adapter open failed: %s", path); 1021 return; 1022 } 1023 1024 if (hci_read_simple_pairing_mode(dd, &mode, 1025 HCI_REQ_TIMEOUT) < 0) { 1026 error("Can't read simple pairing mode for %s: %s(%d)", 1027 path, strerror(errno), errno); 1028 hci_close_dev(dd); 1029 return; 1030 } 1031 1032 hci_close_dev(dd); 1033 1034 adapter_update_ssp_mode(adapter, mode); 1035 } 1036 1037 void hcid_dbus_returned_link_key(bdaddr_t *local, bdaddr_t *peer) 1038 { 1039 struct btd_adapter *adapter; 1040 struct btd_device *device; 1041 1042 if (!get_adapter_and_device(local, peer, &adapter, &device, TRUE)) 1043 return; 1044 1045 device_set_paired(device, TRUE); 1046 } 1047 1048 int hcid_dbus_get_io_cap(bdaddr_t *local, bdaddr_t *remote) 1049 { 1050 struct btd_adapter *adapter; 1051 struct btd_device *device; 1052 struct oob_availability_req *oob_req; 1053 struct agent *agent = NULL; 1054 uint8_t agent_cap, auth, cap; 1055 gboolean oob = FALSE; 1056 int ret; 1057 1058 if (!get_adapter_and_device(local, remote, &adapter, &device, TRUE)) 1059 return -ENODEV; 1060 1061 if (get_auth_requirements(local, remote, &auth) < 0) 1062 return -1; 1063 1064 DBG("initial authentication requirement is 0x%02x", auth); 1065 1066 if (auth == 0xff) 1067 auth = device_get_auth(device); 1068 1069 /* Check if the adapter is not pairable and if there isn't a bonding 1070 * in progress */ 1071 if (!adapter_is_pairable(adapter) && 1072 !device_is_bonding(device, NULL)) { 1073 if (device_get_auth(device) < 0x02) { 1074 DBG("Allowing no bonding in non-bondable mode"); 1075 /* No input, no output */ 1076 cap = 0x03; 1077 /* Kernel defaults to general bonding and so 1078 * overwrite for this special case. Otherwise 1079 * non-pairable test cases will fail. */ 1080 auth = 0x00; 1081 goto done; 1082 } 1083 return -EPERM; 1084 } 1085 1086 /* For CreatePairedDevice use dedicated bonding */ 1087 agent = device_get_agent(device); 1088 if (!agent) { 1089 /* This is the non bondable mode case */ 1090 if (device_get_auth(device) > 0x01) { 1091 DBG("Bonding request, but no agent present"); 1092 return -1; 1093 } 1094 1095 /* No agent available, and no bonding case */ 1096 if (auth == 0x00 || auth == 0x04) { 1097 DBG("Allowing no bonding without agent"); 1098 /* No input, no output */ 1099 cap = 0x03; 1100 /* If kernel defaults to general bonding, set it 1101 * back to no bonding */ 1102 auth = 0x00; 1103 goto done; 1104 } 1105 1106 error("No agent available for IO capability"); 1107 return -1; 1108 } 1109 1110 agent_cap = agent_get_io_capability(agent); 1111 1112 if (auth == 0x00 || auth == 0x04) { 1113 /* If remote requests dedicated bonding follow that lead */ 1114 if (device_get_auth(device) == 0x02 || 1115 device_get_auth(device) == 0x03) { 1116 1117 /* If both remote and local IO capabilities allow MITM 1118 * then require it, otherwise don't */ 1119 if (device_get_cap(device) == 0x03 || 1120 agent_cap == 0x03) 1121 auth = 0x02; 1122 else 1123 auth = 0x03; 1124 } 1125 1126 /* If remote indicates no bonding then follow that. This 1127 * is important since the kernel might give general bonding 1128 * as default. */ 1129 if (device_get_auth(device) == 0x00 || 1130 device_get_auth(device) == 0x01) 1131 auth = 0x00; 1132 1133 /* If remote requires MITM then also require it, unless 1134 * our IO capability is NoInputNoOutput (so some 1135 * just-works security cases can be tested) */ 1136 if (device_get_auth(device) != 0xff && 1137 (device_get_auth(device) & 0x01) && 1138 agent_cap != 0x03) 1139 auth |= 0x01; 1140 } 1141 1142 DBG("final authentication requirement is 0x%02x", auth); 1143 cap = agent_get_io_capability(agent); 1144 oob = agent_get_oob_capability(agent); 1145 1146 // if pairing is not locally initiated 1147 if (oob && agent == adapter_get_agent(adapter)) { 1148 oob_req = g_new0(struct oob_availability_req, 1); 1149 oob_req->device = device; 1150 oob_req->auth = auth; 1151 oob_req->capa = cap; 1152 1153 ret = device_request_oob_availability(device, oob_availability_cb, 1154 oob_req); 1155 if (ret < 0) { 1156 g_free(oob_req); 1157 oob = FALSE; 1158 goto done; 1159 } 1160 return ret; 1161 } 1162 1163 done: 1164 io_capa_oob_response(adapter, device, cap, auth, oob); 1165 return 0; 1166 } 1167 1168 int hcid_dbus_set_io_cap(bdaddr_t *local, bdaddr_t *remote, 1169 uint8_t cap, uint8_t auth) 1170 { 1171 struct btd_adapter *adapter; 1172 struct btd_device *device; 1173 1174 if (!get_adapter_and_device(local, remote, &adapter, &device, TRUE)) 1175 return -ENODEV; 1176 1177 device_set_cap(device, cap); 1178 device_set_auth(device, auth); 1179 1180 return 0; 1181 } 1182 1183 /* Most of the functions in this module require easy access to a connection so 1184 * we keep it global here and provide these access functions the other (few) 1185 * modules that require access to it */ 1186 1187 void set_dbus_connection(DBusConnection *conn) 1188 { 1189 connection = conn; 1190 } 1191 1192 DBusConnection *get_dbus_connection(void) 1193 { 1194 return connection; 1195 } 1196