Diff between 33241f889cda7cd737ca403cb6186e2096c099d6 and 355d1bf857caee6885bb758f37cba3155f6e44b0

Changed Files

File Additions Deletions Status
plugins/dbusoob.c +9 -0 modified
src/adapter.c +5 -0 modified
src/adapter.h +2 -0 modified
src/mgmt.c +7 -0 modified
src/mgmt.h +2 -0 modified

Full Patch

diff --git a/plugins/dbusoob.c b/plugins/dbusoob.c
index 0e0eeca..885f247 100644
--- a/plugins/dbusoob.c
+++ b/plugins/dbusoob.c
@@ -137,6 +137,9 @@ static DBusMessage *read_local_data(DBusConnection *conn, DBusMessage *msg,
 	struct btd_adapter *adapter = data;
 	struct oob_request *oob_request;
 
+	if (!btd_adapter_ssp_enabled(adapter))
+		return btd_error_not_supported(msg);
+
 	if (find_oob_request(adapter))
 		return btd_error_in_progress(msg);
 
@@ -258,6 +261,9 @@ static DBusMessage *add_remote_data(DBusConnection *conn, DBusMessage *msg,
 	struct oob_data remote_data;
 	struct btd_device *device;
 
+	if (!btd_adapter_ssp_enabled(adapter))
+		return btd_error_not_supported(msg);
+
 	memset(&remote_data, 0, sizeof(remote_data));
 
 	dbus_message_iter_init(msg, &args);
@@ -290,6 +296,9 @@ static DBusMessage *remove_remote_data(DBusConnection *conn, DBusMessage *msg,
 	const char *addr;
 	bdaddr_t bdaddr;
 
+	if (!btd_adapter_ssp_enabled(adapter))
+		return btd_error_not_supported(msg);
+
 	if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &addr,
 			DBUS_TYPE_INVALID))
 		return btd_error_invalid_args(msg);
diff --git a/src/adapter.c b/src/adapter.c
index b7691d0..e6b5559 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -3498,3 +3498,8 @@ int btd_adapter_remove_remote_oob_data(struct btd_adapter *adapter,
 {
 	return mgmt_remove_remote_oob_data(adapter->dev_id, bdaddr);
 }
+
+int btd_adapter_ssp_enabled(struct btd_adapter *adapter)
+{
+	return mgmt_ssp_enabled(adapter->dev_id);
+}
diff --git a/src/adapter.h b/src/adapter.h
index d8a1bb1..5a0247e 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -230,3 +230,5 @@ int btd_adapter_remove_remote_oob_data(struct btd_adapter *adapter,
 
 int btd_adapter_gatt_server_start(struct btd_adapter *adapter);
 void btd_adapter_gatt_server_stop(struct btd_adapter *adapter);
+
+int btd_adapter_ssp_enabled(struct btd_adapter *adapter);
diff --git a/src/mgmt.c b/src/mgmt.c
index c893972..b3ae776 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
@@ -2474,3 +2474,10 @@ int mgmt_load_ltks(int index, GSList *keys)
 
 	return err;
 }
+
+int mgmt_ssp_enabled(int index)
+{
+	struct controller_info *info = &controllers[index];
+
+	return mgmt_ssp(info->current_settings);
+}
diff --git a/src/mgmt.h b/src/mgmt.h
index 0658198..95245d2 100644
--- a/src/mgmt.h
+++ b/src/mgmt.h
@@ -78,3 +78,5 @@ int mgmt_remove_remote_oob_data(int index, bdaddr_t *bdaddr);
 
 int mgmt_confirm_name(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type,
 							gboolean name_known);
+
+int mgmt_ssp_enabled(int index);