2013-07-08 08:17:20

by martin.xu

[permalink] [raw]
Subject: [PATCH] Profile: fix set default external profile authorize

From: Martin <[email protected]>

authorize is always set as "true" in function ext_set_defaults() by mistake.

the static variable authorize of default_settings will be 0(false),
if it is not initialized. So item authorize needs to be initized onlyif
the value is true (non-0).
And then function ext_set_defaults() can set default authorize properly.
---
src/profile.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/profile.c b/src/profile.c
index c745811..5795ca7 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -1907,12 +1907,14 @@ static struct default_settings {
.uuid = SPP_UUID,
.name = "Serial Port",
.channel = SPP_DEFAULT_CHANNEL,
+ .authorize = true,
.get_record = get_spp_record,
.version = 0x0102,
}, {
.uuid = DUN_GW_UUID,
.name = "Dial-Up Networking",
.channel = DUN_DEFAULT_CHANNEL,
+ .authorize = true,
.get_record = get_dun_record,
.version = 0x0102,
}, {
@@ -1921,6 +1923,7 @@ static struct default_settings {
.priority = BTD_PROFILE_PRIORITY_HIGH,
.remote_uuid = HFP_AG_UUID,
.channel = HFP_HF_DEFAULT_CHANNEL,
+ .authorize = true,
.auto_connect = true,
.get_record = get_hfp_hf_record,
.version = 0x0105,
@@ -1930,6 +1933,7 @@ static struct default_settings {
.priority = BTD_PROFILE_PRIORITY_HIGH,
.remote_uuid = HFP_HS_UUID,
.channel = HFP_AG_DEFAULT_CHANNEL,
+ .authorize = true,
.auto_connect = true,
.get_record = get_hfp_ag_record,
.version = 0x0105,
@@ -1939,6 +1943,7 @@ static struct default_settings {
.priority = BTD_PROFILE_PRIORITY_HIGH,
.remote_uuid = HSP_HS_UUID,
.channel = HSP_AG_DEFAULT_CHANNEL,
+ .authorize = true,
.auto_connect = true,
}, {
.uuid = OBEX_OPP_UUID,
@@ -1947,7 +1952,6 @@ static struct default_settings {
.psm = BTD_PROFILE_PSM_AUTO,
.mode = BT_IO_MODE_ERTM,
.sec_level = BT_IO_SEC_LOW,
- .authorize = false,
.get_record = get_opp_record,
.version = 0x0102,
}, {
@@ -1956,30 +1960,35 @@ static struct default_settings {
.channel = FTP_DEFAULT_CHANNEL,
.psm = BTD_PROFILE_PSM_AUTO,
.mode = BT_IO_MODE_ERTM,
+ .authorize = true,
.get_record = get_ftp_record,
.version = 0x0102,
}, {
.uuid = OBEX_SYNC_UUID,
.name = "Synchronization",
.channel = SYNC_DEFAULT_CHANNEL,
+ .authorize = true,
.get_record = get_sync_record,
.version = 0x0100,
}, {
.uuid = OBEX_PSE_UUID,
.name = "Phone Book Access",
.channel = PBAP_DEFAULT_CHANNEL,
+ .authorize = true,
.get_record = get_pse_record,
.version = 0x0101,
}, {
.uuid = OBEX_PCE_UUID,
.name = "Phone Book Access Client",
.remote_uuid = OBEX_PSE_UUID,
+ .authorize = true,
.get_record = get_pce_record,
.version = 0x0101,
}, {
.uuid = OBEX_MAS_UUID,
.name = "Message Access",
.channel = MAS_DEFAULT_CHANNEL,
+ .authorize = true,
.get_record = get_mas_record,
.version = 0x0100
}, {
@@ -1987,6 +1996,7 @@ static struct default_settings {
.name = "Message Notification",
.channel = MNS_DEFAULT_CHANNEL,
.psm = BTD_PROFILE_PSM_AUTO,
+ .authorize = true,
.get_record = get_mns_record,
.version = 0x0100
},
@@ -1998,7 +2008,7 @@ static void ext_set_defaults(struct ext_profile *ext)

ext->mode = BT_IO_MODE_BASIC;
ext->sec_level = BT_IO_SEC_MEDIUM;
- ext->authorize = true;
+ ext->authorize = false;
ext->enable_client = true;
ext->enable_server = true;
ext->remote_uuid = NULL;
@@ -2029,6 +2039,9 @@ static void ext_set_defaults(struct ext_profile *ext)
if (settings->mode)
ext->mode = settings->mode;

+ if (settings->authorize)
+ ext->authorize = true;
+
if (settings->auto_connect)
ext->p.auto_connect = true;

--
1.7.10.4



2013-07-09 12:05:05

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH] Profile: fix set default external profile authorize

Hi Martin,

On Mon, Jul 08, 2013, [email protected] wrote:
> From: Martin <[email protected]>

Please fix your git settings to include your full name here (i.e.
"Martin Xu").

> @@ -1998,7 +2008,7 @@ static void ext_set_defaults(struct ext_profile *ext)
>
> ext->mode = BT_IO_MODE_BASIC;
> ext->sec_level = BT_IO_SEC_MEDIUM;
> - ext->authorize = true;
> + ext->authorize = false;
> ext->enable_client = true;
> ext->enable_server = true;
> ext->remote_uuid = NULL;

The patch is ok except for the above change. The above change will cause
a break in the external D-Bus API behavior where previously you didn't
need to explicitly say RequireAuthorization=true to get authorization.
With your patch such applications would loose their authorization
requirement. Instead, ext->authorize should still default to true.

> @@ -2029,6 +2039,9 @@ static void ext_set_defaults(struct ext_profile *ext)
> if (settings->mode)
> ext->mode = settings->mode;
>
> + if (settings->authorize)
> + ext->authorize = true;
> +

Once you make the previous fix you'll need to drop the if-statement and
unconditionally do "ext->authorize = settings->authorize".

Johan