summaryrefslogtreecommitdiffstats
path: root/hcid/security.c
diff options
context:
space:
mode:
Diffstat (limited to 'hcid/security.c')
-rw-r--r--hcid/security.c46
1 files changed, 18 insertions, 28 deletions
diff --git a/hcid/security.c b/hcid/security.c
index 0df255ab..1a711e18 100644
--- a/hcid/security.c
+++ b/hcid/security.c
@@ -365,6 +365,8 @@ static void user_confirm_request(int dev, bdaddr_t *sba, void *ptr)
if (hcid_dbus_user_confirm(sba, &req->bdaddr, req->passkey) < 0)
hci_send_cmd(dev, OGF_LINK_CTL, OCF_USER_CONFIRM_NEG_REPLY,
6, ptr);
+ else
+ hcid_dbus_new_auth_request(sba, &req->bdaddr, AUTH_TYPE_CONFIRM);
}
static void user_passkey_request(int dev, bdaddr_t *sba, void *ptr)
@@ -374,6 +376,8 @@ static void user_passkey_request(int dev, bdaddr_t *sba, void *ptr)
if (hcid_dbus_user_passkey(sba, &req->bdaddr) < 0)
hci_send_cmd(dev, OGF_LINK_CTL, OCF_USER_PASSKEY_NEG_REPLY,
6, ptr);
+ else
+ hcid_dbus_new_auth_request(sba, &req->bdaddr, AUTH_TYPE_PASSKEY);
}
static void remote_oob_data_request(int dev, bdaddr_t *sba, void *ptr)
@@ -459,39 +463,27 @@ static void pin_code_request(int dev, bdaddr_t *sba, bdaddr_t *dba)
} else if (pairing == HCID_PAIRING_NONE)
goto reject;
- if (hcid.security == HCID_SEC_AUTO) {
- if (!ci->out) {
- /* Incomming connection */
- set_pin_length(sba, hcid.pin_len);
- memcpy(pr.pin_code, hcid.pin_code, hcid.pin_len);
- pr.pin_len = hcid.pin_len;
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
+ if (hcid.security == HCID_SEC_AUTO && !ci->out) {
+ set_pin_length(sba, hcid.pin_len);
+ memcpy(pr.pin_code, hcid.pin_code, hcid.pin_len);
+ pr.pin_len = hcid.pin_len;
+ hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
PIN_CODE_REPLY_CP_SIZE, &pr);
- } else {
- /* Outgoing connection */
- if (pinlen > 0) {
- set_pin_length(sba, pinlen);
- memcpy(pr.pin_code, pin, pinlen);
- pr.pin_len = pinlen;
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
- PIN_CODE_REPLY_CP_SIZE, &pr);
- } else {
- /* Request PIN from passkey agent */
- hcid_dbus_request_pin(dev, sba, ci);
- }
- }
} else {
if (pinlen > 0) {
- /* Confirm PIN by passkey agent */
- hcid_dbus_confirm_pin(dev, sba, ci, pin);
+ set_pin_length(sba, pinlen);
+ memcpy(pr.pin_code, pin, pinlen);
+ pr.pin_len = pinlen;
+ hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
+ PIN_CODE_REPLY_CP_SIZE, &pr);
} else {
- /* Request PIN from passkey agent */
- hcid_dbus_request_pin(dev, sba, ci);
+ /* Request PIN from passkey agent */
+ if (hcid_dbus_request_pin(dev, sba, ci) < 0)
+ goto reject;
+ hcid_dbus_new_auth_request(sba, dba, AUTH_TYPE_PINCODE);
}
}
- hcid_dbus_pending_pin_req_add(sba, &ci->bdaddr);
-
g_free(cr);
return;
@@ -500,8 +492,6 @@ reject:
g_free(cr);
hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
-
- return;
}
static inline void cmd_status(int dev, bdaddr_t *sba, void *ptr)