[PATCH] Introduce "PairableDefaultStatus" property in the main.conf file.
DORMANTno replies
From: Bassem Boubaker <hidden>
Date: 2018-03-08 14:35:22
Subsystem:
the rest · Maintainer:
Linus Torvalds
This property sets the default pairable status at the adapter start. By default, bluez activate the pairable status (wether forever or for a specific period of time with PairableTimeout property). We can choose to disable it directly for security reason. Signed-off-by: Bassem Boubaker <redacted> --- src/adapter.c | 13 +++++++++++-- src/hcid.h | 1 + src/main.c | 10 ++++++++++ src/main.conf | 4 ++++ 4 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/adapter.c b/src/adapter.c
index 6d7d615..c9fe020 100644
--- a/src/adapter.c
+++ b/src/adapter.c@@ -207,6 +207,7 @@ struct btd_adapter { bool stored_discoverable; /* stored discoverable mode */ uint32_t discoverable_timeout; /* discoverable time(sec) */ uint32_t pairable_timeout; /* pairable time(sec) */ + bool pairable_default_status; /*The default status of pairable when booting*/ char *current_alias; /* current adapter name alias */ char *stored_alias; /* stored adapter name alias */
@@ -5713,6 +5714,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) main_opts.did_version); adapter->discoverable_timeout = main_opts.discovto; adapter->pairable_timeout = main_opts.pairto; + adapter->pairable_default_status = main_opts.pair_default_status; DBG("System name: %s", adapter->system_name); DBG("Major class: %u", adapter->major_class);
@@ -5720,6 +5722,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) DBG("Modalias: %s", adapter->modalias); DBG("Discoverable timeout: %u seconds", adapter->discoverable_timeout); DBG("Pairable timeout: %u seconds", adapter->pairable_timeout); + DBG("Pairable Default status: %d", adapter->pairable_default_status); adapter->auths = g_queue_new();
@@ -8657,8 +8660,14 @@ 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)) - set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x01); + if (adapter->pairable_default_status){ + if (!(adapter->current_settings & MGMT_SETTING_BONDABLE)) + set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x01); + } + else { + if ((adapter->current_settings & MGMT_SETTING_BONDABLE)) + set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x00); + } if (!kernel_conn_control) set_mode(adapter, MGMT_OP_SET_CONNECTABLE, 0x01);
diff --git a/src/hcid.h b/src/hcid.h
index 62e2bd6..6fc1d26 100644
--- a/src/hcid.h
+++ b/src/hcid.h@@ -46,6 +46,7 @@ struct main_opts { gboolean name_resolv; gboolean debug_keys; gboolean fast_conn; + gboolean pair_default_status; uint16_t did_source; uint16_t did_vendor;
diff --git a/src/main.c b/src/main.c
index 21f0b14..347a587 100644
--- a/src/main.c
+++ b/src/main.c@@ -90,6 +90,7 @@ static const char *supported_options[] = { "MultiProfile", "FastConnectable", "Privacy", + "PairableDefaultStatus", NULL };
@@ -398,6 +399,14 @@ static void parse_config(GKeyFile *config) else main_opts.fast_conn = boolean; + boolean = g_key_file_get_boolean(config, "General", + "PairableDefaultStatus", &err); + if (err) + g_clear_error(&err); + else + main_opts.pair_default_status = boolean; + + str = g_key_file_get_string(config, "GATT", "Cache", &err); if (err) { g_clear_error(&err);
@@ -423,6 +432,7 @@ static void init_defaults(void) main_opts.reverse_sdp = TRUE; main_opts.name_resolv = TRUE; main_opts.debug_keys = FALSE; + main_opts.pair_default_status = TRUE; if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2) return;
diff --git a/src/main.conf b/src/main.conf
index 21986b3..c126b3d 100644
--- a/src/main.conf
+++ b/src/main.conf@@ -18,6 +18,10 @@ # 0 = disable timer, i.e. stay pairable forever #PairableTimeout = 0 +# Permanently enable/disable the pairable property for adapters at start (for +# security reason). Default is true. Uncomment line below to override it. +#PairableDefaultStatus = true + # Use vendor id source (assigner), vendor, product and version information for # DID profile support. The values are separated by ":" and assigner, VID, PID # and version.
--
2.7.4