summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2018-07-27 11:14:04 +0300
committerhimanshu <h.himanshu@samsung.com>2020-01-14 14:23:35 +0530
commit24735cbbbfd408cec4e31b95060af886253fcc19 (patch)
tree582327c6a254154a712e75fe9c724f79740c03c2
parent2d6b8fe603ffdd0b884a27ea90ebc4c90cd5d5ff (diff)
downloadbluez-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.c16
-rwxr-xr-xsrc/agent.h7
-rw-r--r--src/device.c2
-rwxr-xr-xsrc/hcid.h1
-rwxr-xr-xsrc/main.c11
-rwxr-xr-xsrc/main.conf5
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
diff --git a/src/hcid.h b/src/hcid.h
index 93ab5dbe..04de724b 100755
--- a/src/hcid.h
+++ b/src/hcid.h
@@ -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;
diff --git a/src/main.c b/src/main.c
index ec7f40bd..8435e4e7 100755
--- a/src/main.c
+++ b/src/main.c
@@ -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