diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2018-07-27 11:14:04 +0300 |
---|---|---|
committer | himanshu <h.himanshu@samsung.com> | 2020-01-14 14:23:35 +0530 |
commit | 24735cbbbfd408cec4e31b95060af886253fcc19 (patch) | |
tree | 582327c6a254154a712e75fe9c724f79740c03c2 | |
parent | 2d6b8fe603ffdd0b884a27ea90ebc4c90cd5d5ff (diff) | |
download | bluez-24735cbbbfd408cec4e31b95060af886253fcc19.tar.gz bluez-24735cbbbfd408cec4e31b95060af886253fcc19.tar.bz2 bluez-24735cbbbfd408cec4e31b95060af886253fcc19.zip |
core: Add AlwaysPairable to main.conf
This adds a new option called AlwaysPairable to main.conf, it can be
used to enable Adapter.Pairable even in case there is no Agent
available.
Since that could be consider a security problem to allow pairing
without user's consent the option defaults to false.
Change-Id: I67e534d5e8a6490ed2c99950c629d6e1ab493e30
Signed-off-by: himanshu <h.himanshu@samsung.com>
-rw-r--r-- | src/adapter.c | 16 | ||||
-rwxr-xr-x | src/agent.h | 7 | ||||
-rw-r--r-- | src/device.c | 2 | ||||
-rwxr-xr-x | src/hcid.h | 1 | ||||
-rwxr-xr-x | src/main.c | 11 | ||||
-rwxr-xr-x | src/main.conf | 5 |
6 files changed, 39 insertions, 3 deletions
diff --git a/src/adapter.c b/src/adapter.c index b0207e20..5d5b3cc8 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -13143,6 +13143,19 @@ int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap) { struct mgmt_cp_set_io_capability cp; + if (!main_opts.pairable) { + if (io_cap == IO_CAPABILITY_INVALID) { + if (adapter->current_settings & MGMT_SETTING_BONDABLE) + set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x00); + + return 0; + } + + if (!(adapter->current_settings & MGMT_SETTING_BONDABLE)) + set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x01); + } else if (io_cap == IO_CAPABILITY_INVALID) + io_cap = IO_CAPABILITY_NOINPUTNOOUTPUT; + memset(&cp, 0, sizeof(cp)); cp.io_capability = io_cap; @@ -14609,7 +14622,8 @@ static void read_info_complete(uint8_t status, uint16_t length, set_name(adapter, btd_adapter_get_name(adapter)); - if (!(adapter->current_settings & MGMT_SETTING_BONDABLE)) + if (main_opts.pairable && + !(adapter->current_settings & MGMT_SETTING_BONDABLE)) set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x01); if (!kernel_conn_control) diff --git a/src/agent.h b/src/agent.h index 1e469203..f14d1432 100755 --- a/src/agent.h +++ b/src/agent.h @@ -22,6 +22,13 @@ * */ +#define IO_CAPABILITY_DISPLAYONLY 0x00 +#define IO_CAPABILITY_DISPLAYYESNO 0x01 +#define IO_CAPABILITY_KEYBOARDONLY 0x02 +#define IO_CAPABILITY_NOINPUTNOOUTPUT 0x03 +#define IO_CAPABILITY_KEYBOARDDISPLAY 0x04 +#define IO_CAPABILITY_INVALID 0xFF + struct agent; typedef void (*agent_cb) (struct agent *agent, DBusError *err, diff --git a/src/device.c b/src/device.c index d105c83c..0aedf9df 100644 --- a/src/device.c +++ b/src/device.c @@ -82,8 +82,6 @@ #endif /* TIZEN_FEATURE_BLUEZ_BATTERY_WATCH */ #endif -#define IO_CAPABILITY_NOINPUTNOOUTPUT 0x03 - #define DISCONNECT_TIMER 2 #define DISCOVERY_TIMER 1 #define INVALID_FLAGS 0xff @@ -38,6 +38,7 @@ typedef enum { struct main_opts { char *name; uint32_t class; + gboolean pairable; uint32_t pairto; uint32_t discovto; uint8_t privacy; @@ -82,6 +82,7 @@ static const char *supported_options[] = { "Name", "Class", "DiscoverableTimeout", + "AlwaysPairable" "PairableTimeout", "DeviceID", "ReverseServiceDiscovery", @@ -294,6 +295,16 @@ static void parse_config(GKeyFile *config) main_opts.discovto = val; } + boolean = g_key_file_get_boolean(config, "General", + "AlwaysPairable", &err); + if (err) { + DBG("%s", err->message); + g_clear_error(&err); + } else { + DBG("pairable=%s", boolean ? "true" : "false"); + main_opts.pairable = boolean; + } + val = g_key_file_get_integer(config, "General", "PairableTimeout", &err); if (err) { diff --git a/src/main.conf b/src/main.conf index 89b7922a..e66b1d92 100755 --- a/src/main.conf +++ b/src/main.conf @@ -13,6 +13,11 @@ # 0 = disable timer, i.e. stay discoverable forever #DiscoverableTimeout = 0 +# Always allow pairing even if there are no agent registered +# Possible values: true, false +# Default: false +#AlwaysPairable = false + # How long to stay in pairable mode before going back to non-discoverable # The value is in seconds. Default is 0. # 0 = disable timer, i.e. stay pairable forever |