From c58ffb0c0b55aa3788b98768a66a7bb3a5cb4c15 Mon Sep 17 00:00:00 2001 From: DoHyun Pyun Date: Wed, 30 Mar 2016 10:56:20 +0900 Subject: [PATCH] Fix the crash when recieves "NameOwnerChanged" signal We should handle OPP sending IPC methods only using Cynara. And the cynara operation was not verified. After verifying operations, will enable cynara flag. 01-01 09:13:39.682+0900 4647 4647 D BLUETOOTH_SHARE: bt-share-ipc.c: __event_filter(286) > member (NameOwnerChanged) 01-01 09:13:39.694+0900 4647 4647 E BLUETOOTH_SHARE: bt-share-cynara.c: _bt_share_cynara_get_creds(61) > cynara_creds_dbus_get_pid failed: (null) 01-01 09:13:39.694+0900 4647 4647 E BLUETOOTH_SHARE: bt-share-ipc.c: __event_filter(291) > acquiring cynara creds failed 01-01 09:13:40.333+0900 4647 4647 D BLUETOOTH_SHARE: bt-share-ipc.c: __event_filter(286) > member (NameOwnerChanged) Change-Id: I637cd912387fd76da5651ab0a7f7ff42c34d432d Signed-off-by: DoHyun Pyun --- bt-share/include/bt-share-cynara.h | 2 ++ bt-share/src/bt-share-ipc.c | 32 ++++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/bt-share/include/bt-share-cynara.h b/bt-share/include/bt-share-cynara.h index 79d28dd..cb37cd4 100644 --- a/bt-share/include/bt-share-cynara.h +++ b/bt-share/include/bt-share-cynara.h @@ -25,6 +25,8 @@ #define BT_SHARE_PRIVILEGE "http://tizen.org/privilege/bluetooth" +/* #define CYNARA_ENABLE 1 */ + typedef struct { pid_t pid; diff --git a/bt-share/src/bt-share-ipc.c b/bt-share/src/bt-share-ipc.c index ea96378..0afbea9 100644 --- a/bt-share/src/bt-share-ipc.c +++ b/bt-share/src/bt-share-ipc.c @@ -272,9 +272,12 @@ static DBusHandlerResult __event_filter(DBusConnection *sys_conn, int ret; char *member; struct bt_appdata *ad = app_state; - const char *sender; const char *path = dbus_message_get_path(msg); + +#ifdef CYNARA_ENABLE + const char *sender; bt_share_cynara_creds sender_creds; +#endif if (dbus_message_get_type(msg) != DBUS_MESSAGE_TYPE_SIGNAL) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; @@ -285,13 +288,6 @@ static DBusHandlerResult __event_filter(DBusConnection *sys_conn, member = (char *)dbus_message_get_member(msg); DBG("member (%s)\n", member); - sender = dbus_message_get_sender(msg); - ret = _bt_share_cynara_get_creds(sys_conn, sender, &sender_creds); - if (ret != 0) { - ERR("acquiring cynara creds failed\n"); - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - } - if (dbus_message_is_signal(msg, BT_SYSPOPUP_INTERFACE, BT_SYSPOPUP_METHOD_RESPONSE)) { int res = 0; dbus_message_get_args(msg, NULL, @@ -301,11 +297,19 @@ static DBusHandlerResult __event_filter(DBusConnection *sys_conn, } else if (dbus_message_is_signal(msg, BT_UG_IPC_INTERFACE, BT_UG_IPC_METHOD_SEND)) { opc_transfer_info_t *node; +#ifdef CYNARA_ENABLE + sender = dbus_message_get_sender(msg); + ret = _bt_share_cynara_get_creds(sys_conn, sender, &sender_creds); + if (ret != 0) { + ERR("acquiring cynara creds failed\n"); + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + } + if (_bt_share_cynara_check(&sender_creds, BT_SHARE_PRIVILEGE) != BT_SHARE_FAIL) { ERR("Cynara denied file send\n"); return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } - +#endif node = __add_transfer_info(msg); if (node == NULL) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; @@ -348,11 +352,19 @@ static DBusHandlerResult __event_filter(DBusConnection *sys_conn, BT_SHARE_UI_SIGNAL_SEND_FILE)) { opc_transfer_info_t *node; +#ifdef CYNARA_ENABLE + sender = dbus_message_get_sender(msg); + ret = _bt_share_cynara_get_creds(sys_conn, sender, &sender_creds); + if (ret != 0) { + ERR("acquiring cynara creds failed\n"); + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + } + if (_bt_share_cynara_check(&sender_creds, BT_SHARE_PRIVILEGE) != BT_SHARE_FAIL) { ERR("Cynara denied file send\n"); return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } - +#endif node = __add_transfer_info(msg); if (node == NULL) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -- 2.7.4