From 158d1fca355cbede44a17d0f682234502e881537 Mon Sep 17 00:00:00 2001 From: Sungmin Kwak Date: Sun, 21 Jun 2015 18:56:50 +0900 Subject: [PATCH 01/16] Changes for TCT coverage #2 Change-Id: Iab8f4963e68731f48641f3d863e0747d6e28d5c8 --- src/inputmethod.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index d27749b..25a8d0d 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -803,16 +803,16 @@ int ime_update_preedit_string(const char *str, Eina_List *attrs) int ime_request_surrounding_text(int maxlen_before, int maxlen_after) { - if (!g_running) { - LOGW("IME_ERROR_NOT_RUNNING"); - return IME_ERROR_NOT_RUNNING; - } - if (!g_event_callback.surrounding_text_updated) { LOGW("IME_ERROR_NO_CALLBACK_FUNCTION"); return IME_ERROR_NO_CALLBACK_FUNCTION; } + if (!g_running) { + LOGW("IME_ERROR_NOT_RUNNING"); + return IME_ERROR_NOT_RUNNING; + } + g_core.get_surrounding_text(NULL, maxlen_before, maxlen_after); return IME_ERROR_NONE; @@ -884,16 +884,16 @@ int ime_set_size(int portrait_width, int portrait_height, int landscape_width, i int ime_create_option_window(void) { - if (!g_running) { - LOGW("IME_ERROR_NOT_RUNNING"); - return IME_ERROR_NOT_RUNNING; - } - if (!g_event_callback.option_window_created || !g_event_callback.option_window_destroyed) { LOGW("ime_create_option_window_cb() and ime_destroy_option_window_cb() callback functions are not set."); return IME_ERROR_NO_CALLBACK_FUNCTION; } + if (!g_running) { + LOGW("IME_ERROR_NOT_RUNNING"); + return IME_ERROR_NOT_RUNNING; + } + if (g_core.create_option_window()) return IME_ERROR_NONE; else { @@ -904,6 +904,11 @@ int ime_create_option_window(void) int ime_destroy_option_window(Evas_Object *window) { + if (!g_event_callback.option_window_created || !g_event_callback.option_window_destroyed) { + LOGW("ime_create_option_window_cb() and ime_destroy_option_window_cb() callback functions are not set."); + return IME_ERROR_NO_CALLBACK_FUNCTION; + } + if (!window) { LOGW("Window pointer is null."); return IME_ERROR_INVALID_PARAMETER; @@ -914,11 +919,6 @@ int ime_destroy_option_window(Evas_Object *window) return IME_ERROR_NOT_RUNNING; } - if (!g_event_callback.option_window_created || !g_event_callback.option_window_destroyed) { - LOGW("ime_create_option_window_cb() and ime_destroy_option_window_cb() callback functions are not set."); - return IME_ERROR_NO_CALLBACK_FUNCTION; - } - g_core.destroy_option_window(window); return IME_ERROR_NONE; -- 2.7.4 From 5245cb64cd17c19caef08bafdaa4f2f66790082a Mon Sep 17 00:00:00 2001 From: Sungmin Kwak Date: Thu, 9 Jul 2015 19:59:45 +0900 Subject: [PATCH 02/16] Modify the description of ime_update_preedit_string function Change-Id: I5d2f2666229e9a1f6ae8879121928478309db8ce --- include/inputmethod.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/inputmethod.h b/include/inputmethod.h index 615adcc..13102cd 100644 --- a/include/inputmethod.h +++ b/include/inputmethod.h @@ -1414,6 +1414,8 @@ EXPORT_API int ime_hide_preedit_string(void); * @retval #IME_ERROR_PERMISSION_DENIED The application does not have the privilege to call this function * @retval #IME_ERROR_NOT_RUNNING IME main loop isn't started yet * + * @post This function is supposed to be followed by the ime_show_preedit_string() function. + * * @see ime_preedit_attribute, ime_commit_string, ime_show_preedit_string, ime_hide_preedit_string * * @code -- 2.7.4 From 0a57453b7ecbd6d51976be5b1abe6def56932d94 Mon Sep 17 00:00:00 2001 From: Sungmin Kwak Date: Thu, 9 Jul 2015 20:02:46 +0900 Subject: [PATCH 03/16] Update package version to 0.0.2 Change-Id: Id0fbaa63463d27d92b7eaaa9a1447fe10d8bbb62 --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index 8749b1a..a6e250b 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.0.1 +Version: 0.0.2 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From ae60f096ba669e24454575bbe02b250b7999e4ea Mon Sep 17 00:00:00 2001 From: Sungmin Kwak Date: Thu, 23 Jul 2015 10:41:29 +0900 Subject: [PATCH 04/16] Replace "<> with "<> Change-Id: I19bb02b53511fe6147b86d07bf2a8a2d49ad43ee --- include/inputmethod.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/inputmethod.h b/include/inputmethod.h index 13102cd..ff310c4 100644 --- a/include/inputmethod.h +++ b/include/inputmethod.h @@ -75,7 +75,7 @@ typedef enum typedef enum { IME_LAYOUT_NORMAL_VARIATION_NORMAL = 0, /**< The plain normal layout */ - IME_LAYOUT_NORMAL_VARIATION_FILENAME, /**< Filename layout; symbols such as '/', '*', '\', '|', '<', '>', '?', '"' and ':' should be disabled */ + IME_LAYOUT_NORMAL_VARIATION_FILENAME, /**< Filename layout; symbols such as '/', '*', '\', '|', '<', '>', '?', '"' and ':' should be disabled */ IME_LAYOUT_NORMAL_VARIATION_PERSON_NAME, /**< The name of a person */ IME_LAYOUT_NUMBERONLY_VARIATION_NORMAL = 0, /**< The plain normal number layout */ IME_LAYOUT_NUMBERONLY_VARIATION_SIGNED, /**< The number layout to allow a negative sign */ @@ -350,7 +350,7 @@ typedef void (*ime_cursor_position_updated_cb)(int cursor_pos, void *user_data); * @privilege %http://tizen.org/privilege/ime * * @param[in] user_data User data to be passed from the callback registration function - * @param[out] lang_code Input panel's current input language code (e.g., "en_US") + * @param[out] lang_code Input panel's current input language code (e.g., "en_US") * * @pre The callback can be registered using ime_event_set_language_requested_cb() function. * -- 2.7.4 From 74496096cbe9e62ed311f23e1f8715b2236eadc6 Mon Sep 17 00:00:00 2001 From: Sungmin Kwak Date: Thu, 23 Jul 2015 10:53:18 +0900 Subject: [PATCH 05/16] Update package version to 0.0.3 Change-Id: Id709be9e3e8077adc2634d2059f4e60a4de476a9 --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index a6e250b..31efb01 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.0.2 +Version: 0.0.3 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From a877fe70431c937553fd5df5cd9f6485c4c0d5f9 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Thu, 12 Nov 2015 10:40:14 +0900 Subject: [PATCH 06/16] Fix issue return key disabled event callback wasn't called Change-Id: Idb6d01bf9cabb6eb44211a4d3dc5acaa5a61a166 --- src/inputmethod.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index 25a8d0d..1c0c4ad 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -46,7 +46,7 @@ class CCoreEventCallback : public ISCLCoreEventCallback void on_get_imdata(sclchar **buf, sclu32 *len); void on_get_language_locale(sclint ic, sclchar **locale); void on_set_return_key_type(Ecore_IMF_Input_Panel_Return_Key_Type type); - void on_set_return_key_disable(bool disabled); + void on_set_return_key_disable(sclu32 disabled); void on_set_layout(Ecore_IMF_Input_Panel_Layout layout); void on_reset_input_context(sclint ic, const sclchar *uuid); void on_process_key_event(scim::KeyEvent &key, sclu32 *ret); @@ -251,10 +251,12 @@ void CCoreEventCallback::on_set_return_key_type(Ecore_IMF_Input_Panel_Return_Key } } -void CCoreEventCallback::on_set_return_key_disable(bool disabled) +void CCoreEventCallback::on_set_return_key_disable(sclu32 disabled) { + bool return_key_disabled = !!disabled; + if (g_event_callback.return_key_state_set) { - g_event_callback.return_key_state_set(disabled, g_event_callback.return_key_state_set_user_data); + g_event_callback.return_key_state_set(return_key_disabled, g_event_callback.return_key_state_set_user_data); } } -- 2.7.4 From f2567f1523359297becde38e95d73c79214c0dfc Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Thu, 12 Nov 2015 10:42:41 +0900 Subject: [PATCH 07/16] Update package version to 0.0.5 Change-Id: Ie9bd1a491bcd868a964bca7db108d637ab069024 --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index 31efb01..9acd6b9 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.0.3 +Version: 0.0.5 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From 904787fed5a34d78c6adbd99bf5080ac70d726f7 Mon Sep 17 00:00:00 2001 From: inhonghan Date: Tue, 29 Dec 2015 14:55:44 +0900 Subject: [PATCH 08/16] Fix indentation Change-Id: I28d64b1b12f76036132dd96d50c57a1c53c3b22a --- src/inputmethod.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index 1c0c4ad..71d3832 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -121,13 +121,13 @@ void CCoreEventCallback::on_init() void CCoreEventCallback::on_run(int argc, char **argv) { - LOGD ("on_run"); + LOGD("on_run"); ime_app_main(argc, argv); } void CCoreEventCallback::on_exit() { - LOGD ("on_exit"); + LOGD("on_exit"); if (g_basic_callback.terminate) { g_basic_callback.terminate(g_user_data); } -- 2.7.4 From d98515889c5cb65d482e49aa0c375f8eaedaa428 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Fri, 11 Mar 2016 20:43:48 +0900 Subject: [PATCH 09/16] Fix build warning Change-Id: I09665e863e094b1215d0e3e4330f4dae74f7c0e5 --- src/inputmethod.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index 71d3832..a592a4a 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -787,10 +787,12 @@ int ime_update_preedit_string(const char *str, Eina_List *attrs) } scim::AttributeList attrv; + void *data = NULL; ime_preedit_attribute *attr = NULL; if (attrs) { - EINA_LIST_FREE(attrs, attr) { + EINA_LIST_FREE(attrs, data) { + attr = (ime_preedit_attribute *)data; if (attr) { attrv.push_back(scim::Attribute(attr->start, attr->length, (scim::AttributeType)attr->type, attr->value)); free(attr); -- 2.7.4 From b218f4dbd7b25b1b17d68cac130950cc1415e6c9 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Fri, 11 Mar 2016 20:54:25 +0900 Subject: [PATCH 10/16] Add -Werror build option Change-Id: I6ad09c6f8a5af720fc2cb8807488d5a89ad8ed90 --- packaging/capi-ui-inputmethod.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index 9acd6b9..a8bdcf3 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -34,8 +34,8 @@ Input Method Library (Development) %build -export CFLAGS+=" -DTIZEN_DEBUG_ENABLE -fPIC -fvisibility=hidden" -export CXXFLAGS+=" -DTIZEN_DEBUG_ENABLE -fPIC -fvisibility=hidden" +export CFLAGS+=" -DTIZEN_DEBUG_ENABLE -fPIC -fvisibility=hidden -Werror" +export CXXFLAGS+=" -DTIZEN_DEBUG_ENABLE -fPIC -fvisibility=hidden -Werror" export FFLAGS+=" -DTIZEN_DEBUG_ENABLE -fPIC -fvisibility=hidden" rm -rf CMakeFiles -- 2.7.4 From c7ae518689f45bf8290f38e0de302dc3d6be3d78 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 16 Mar 2016 07:27:54 +0900 Subject: [PATCH 11/16] Update package version to 0.0.6 Change-Id: I1380ca834c824211afa4bfdcc2b149e38fc8d017 --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index a8bdcf3..42726b2 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.0.5 +Version: 0.0.6 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From ca1034de21470f585187448a098300ce650a7aa9 Mon Sep 17 00:00:00 2001 From: "sungwook79.park" Date: Wed, 16 Mar 2016 13:28:12 +0900 Subject: [PATCH 12/16] Add check privilege by cynara Change-Id: Icc3069b3b98a8b6eadac44ebd307687593ed6f20 Signed-off-by: sungwook79.park --- CMakeLists.txt | 2 +- include/privilege_checker_private.h | 10 + packaging/capi-ui-inputmethod.spec | 2 + src/inputmethod.cpp | 385 ++++++++++++++++++++++++++++++++++++ src/privilege_checker.cpp | 71 +++++++ 5 files changed, 469 insertions(+), 1 deletion(-) create mode 100644 include/privilege_checker_private.h create mode 100644 src/privilege_checker.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index c37ccc5..34a1775 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ SET(maintainer "Ji-hoon Lee ") SET(description "Input Method APIs") SET(service "ui") SET(submodule "inputmethod") -SET(dependents "capi-base-common dlog elementary ecore-imf libscl-core isf") +SET(dependents "capi-base-common dlog elementary ecore-imf libscl-core isf cynara-client cynara-session") SET(LIBDIR ${LIB_INSTALL_DIR}) SET(Services diff --git a/include/privilege_checker_private.h b/include/privilege_checker_private.h new file mode 100644 index 0000000..f9b8967 --- /dev/null +++ b/include/privilege_checker_private.h @@ -0,0 +1,10 @@ +#ifndef __PRIVILEGE_CHECKER_H +#define __PRIVILEGE_CHECKER_H + +#define IME_PRIVILEGE "http://tizen.org/privilege/ime" + +bool inputmethod_cynara_initialize(); +void inputmethod_cynara_finish(); +bool check_privilege(const char *uid, const char *privilege); + +#endif //__PRIVILEGE_CHECKER_H diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index 42726b2..55926a8 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -12,6 +12,8 @@ BuildRequires: pkgconfig(elementary) BuildRequires: pkgconfig(ecore-imf) BuildRequires: pkgconfig(libscl-core) BuildRequires: pkgconfig(isf) +BuildRequires: pkgconfig(cynara-client) +BuildRequires: pkgconfig(cynara-session) Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index a592a4a..db9e4b1 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include "inputmethod_private.h" #include @@ -341,8 +343,32 @@ void CCoreEventCallback::on_check_option_window_availability(sclboolean *ret) } } +ime_error_e _check_privilege() +{ + char uid[16]; + ime_error_e ret = IME_ERROR_NONE; + + if (inputmethod_cynara_initialize() == false) { + LOGE("inputmethod_cynara_initialize () == false"); + return IME_ERROR_PERMISSION_DENIED; + } + + snprintf(uid, 16, "%d", getuid()); + if (check_privilege(uid, IME_PRIVILEGE) == false) { + LOGE("check_privilege(uid, IME_PRIVILEGE) == false"); + LOGE("uid : %s.", uid); + ret = IME_ERROR_PERMISSION_DENIED; + } + + inputmethod_cynara_finish (); + + return ret; +} + int ime_run(ime_callback_s *basic_cb, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (g_running) { LOGE("inputmethod main loop is already running."); return IME_ERROR_OPERATION_FAILED; @@ -353,6 +379,12 @@ int ime_run(ime_callback_s *basic_cb, void *user_data) return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_basic_callback = *basic_cb; if (!g_basic_callback.create || !g_basic_callback.terminate || @@ -378,6 +410,8 @@ int ime_run(ime_callback_s *basic_cb, void *user_data) int ime_event_set_focus_in_cb(ime_focus_in_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -388,6 +422,12 @@ int ime_event_set_focus_in_cb(ime_focus_in_cb callback_func, void *user_data) return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.focus_in = callback_func; g_event_callback.focus_in_user_data = user_data; @@ -396,6 +436,8 @@ int ime_event_set_focus_in_cb(ime_focus_in_cb callback_func, void *user_data) int ime_event_set_focus_out_cb(ime_focus_out_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -406,6 +448,12 @@ int ime_event_set_focus_out_cb(ime_focus_out_cb callback_func, void *user_data) return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.focus_out = callback_func; g_event_callback.focus_out_user_data = user_data; @@ -414,6 +462,8 @@ int ime_event_set_focus_out_cb(ime_focus_out_cb callback_func, void *user_data) int ime_event_set_surrounding_text_updated_cb(ime_surrounding_text_updated_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -424,6 +474,12 @@ int ime_event_set_surrounding_text_updated_cb(ime_surrounding_text_updated_cb ca return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.surrounding_text_updated = callback_func; g_event_callback.surrounding_text_updated_user_data = user_data; @@ -432,6 +488,8 @@ int ime_event_set_surrounding_text_updated_cb(ime_surrounding_text_updated_cb ca int ime_event_set_input_context_reset_cb(ime_input_context_reset_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -442,6 +500,12 @@ int ime_event_set_input_context_reset_cb(ime_input_context_reset_cb callback_fun return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.input_context_reset = callback_func; g_event_callback.input_context_reset_user_data = user_data; @@ -450,6 +514,8 @@ int ime_event_set_input_context_reset_cb(ime_input_context_reset_cb callback_fun int ime_event_set_cursor_position_updated_cb(ime_cursor_position_updated_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -460,6 +526,12 @@ int ime_event_set_cursor_position_updated_cb(ime_cursor_position_updated_cb call return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.cursor_position_updated = callback_func; g_event_callback.cursor_position_updated_user_data = user_data; @@ -468,6 +540,8 @@ int ime_event_set_cursor_position_updated_cb(ime_cursor_position_updated_cb call int ime_event_set_language_requested_cb(ime_language_requested_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -478,6 +552,12 @@ int ime_event_set_language_requested_cb(ime_language_requested_cb callback_func, return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.language_requested = callback_func; g_event_callback.language_requested_user_data = user_data; @@ -486,6 +566,8 @@ int ime_event_set_language_requested_cb(ime_language_requested_cb callback_func, int ime_event_set_language_set_cb(ime_language_set_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -496,6 +578,12 @@ int ime_event_set_language_set_cb(ime_language_set_cb callback_func, void *user_ return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.language_set = callback_func; g_event_callback.language_set_user_data = user_data; @@ -504,6 +592,8 @@ int ime_event_set_language_set_cb(ime_language_set_cb callback_func, void *user_ int ime_event_set_imdata_set_cb(ime_imdata_set_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -514,6 +604,12 @@ int ime_event_set_imdata_set_cb(ime_imdata_set_cb callback_func, void *user_data return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.imdata_set = callback_func; g_event_callback.imdata_set_user_data = user_data; @@ -522,6 +618,8 @@ int ime_event_set_imdata_set_cb(ime_imdata_set_cb callback_func, void *user_data int ime_event_set_imdata_requested_cb(ime_imdata_requested_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -532,6 +630,12 @@ int ime_event_set_imdata_requested_cb(ime_imdata_requested_cb callback_func, voi return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.imdata_requested = callback_func; g_event_callback.imdata_requested_user_data = user_data; @@ -540,6 +644,8 @@ int ime_event_set_imdata_requested_cb(ime_imdata_requested_cb callback_func, voi int ime_event_set_layout_set_cb(ime_layout_set_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -550,6 +656,12 @@ int ime_event_set_layout_set_cb(ime_layout_set_cb callback_func, void *user_data return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.layout_set = callback_func; g_event_callback.layout_set_user_data = user_data; @@ -558,6 +670,8 @@ int ime_event_set_layout_set_cb(ime_layout_set_cb callback_func, void *user_data int ime_event_set_return_key_type_set_cb(ime_return_key_type_set_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -568,6 +682,12 @@ int ime_event_set_return_key_type_set_cb(ime_return_key_type_set_cb callback_fun return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.return_key_type_set = callback_func; g_event_callback.return_key_type_set_user_data = user_data; @@ -576,6 +696,8 @@ int ime_event_set_return_key_type_set_cb(ime_return_key_type_set_cb callback_fun int ime_event_set_return_key_state_set_cb(ime_return_key_state_set_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -586,6 +708,12 @@ int ime_event_set_return_key_state_set_cb(ime_return_key_state_set_cb callback_f return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.return_key_state_set = callback_func; g_event_callback.return_key_state_set_user_data = user_data; @@ -594,6 +722,8 @@ int ime_event_set_return_key_state_set_cb(ime_return_key_state_set_cb callback_f int ime_event_set_geometry_requested_cb(ime_geometry_requested_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -604,6 +734,12 @@ int ime_event_set_geometry_requested_cb(ime_geometry_requested_cb callback_func, return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.geometry_requested = callback_func; g_event_callback.geometry_requested_user_data = user_data; @@ -612,6 +748,8 @@ int ime_event_set_geometry_requested_cb(ime_geometry_requested_cb callback_func, int ime_event_set_process_key_event_cb(ime_process_key_event_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -622,6 +760,12 @@ int ime_event_set_process_key_event_cb(ime_process_key_event_cb callback_func, v return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.process_key_event = callback_func; g_event_callback.process_key_event_user_data = user_data; @@ -630,6 +774,8 @@ int ime_event_set_process_key_event_cb(ime_process_key_event_cb callback_func, v int ime_event_set_display_language_changed_cb(ime_display_language_changed_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -640,6 +786,12 @@ int ime_event_set_display_language_changed_cb(ime_display_language_changed_cb ca return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.display_language_changed = callback_func; g_event_callback.display_language_changed_user_data = user_data; @@ -648,6 +800,8 @@ int ime_event_set_display_language_changed_cb(ime_display_language_changed_cb ca int ime_event_set_rotation_degree_changed_cb(ime_rotation_degree_changed_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -658,6 +812,12 @@ int ime_event_set_rotation_degree_changed_cb(ime_rotation_degree_changed_cb call return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.rotation_degree_changed = callback_func; g_event_callback.rotation_degree_changed_user_data = user_data; @@ -666,6 +826,8 @@ int ime_event_set_rotation_degree_changed_cb(ime_rotation_degree_changed_cb call int ime_event_set_accessibility_state_changed_cb(ime_accessibility_state_changed_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -676,6 +838,12 @@ int ime_event_set_accessibility_state_changed_cb(ime_accessibility_state_changed return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.accessibility_state_changed = callback_func; g_event_callback.accessibility_state_changed_user_data = user_data; @@ -684,6 +852,8 @@ int ime_event_set_accessibility_state_changed_cb(ime_accessibility_state_changed int ime_event_set_option_window_created_cb(ime_option_window_created_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -694,6 +864,12 @@ int ime_event_set_option_window_created_cb(ime_option_window_created_cb callback return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.option_window_created = callback_func; g_event_callback.option_window_created_user_data = user_data; @@ -702,6 +878,8 @@ int ime_event_set_option_window_created_cb(ime_option_window_created_cb callback int ime_event_set_option_window_destroyed_cb(ime_option_window_destroyed_cb callback_func, void *user_data) { + ime_error_e retVal = IME_ERROR_NONE; + if (!callback_func) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -712,6 +890,12 @@ int ime_event_set_option_window_destroyed_cb(ime_option_window_destroyed_cb call return IME_ERROR_OPERATION_FAILED; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_event_callback.option_window_destroyed = callback_func; g_event_callback.option_window_destroyed_user_data = user_data; @@ -720,11 +904,19 @@ int ime_event_set_option_window_destroyed_cb(ime_option_window_destroyed_cb call int ime_send_key_event(ime_key_code_e keycode, ime_key_mask_e keymask, bool forward_key) { + ime_error_e retVal = IME_ERROR_NONE; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + if (forward_key) g_core.forward_key_event(-1, NULL, (sclu32)keycode, (sclu16)keymask); else @@ -735,6 +927,8 @@ int ime_send_key_event(ime_key_code_e keycode, ime_key_mask_e keymask, bool forw int ime_commit_string(const char *str) { + ime_error_e retVal = IME_ERROR_NONE; + if (!str) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -745,6 +939,12 @@ int ime_commit_string(const char *str) return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_core.commit_string(-1, NULL, str); return IME_ERROR_NONE; @@ -752,11 +952,19 @@ int ime_commit_string(const char *str) int ime_show_preedit_string(void) { + ime_error_e retVal = IME_ERROR_NONE; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_core.show_preedit_string(-1, NULL); return IME_ERROR_NONE; @@ -764,11 +972,19 @@ int ime_show_preedit_string(void) int ime_hide_preedit_string(void) { + ime_error_e retVal = IME_ERROR_NONE; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_core.hide_preedit_string(-1, NULL); return IME_ERROR_NONE; @@ -776,6 +992,8 @@ int ime_hide_preedit_string(void) int ime_update_preedit_string(const char *str, Eina_List *attrs) { + ime_error_e retVal = IME_ERROR_NONE; + if (!str) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -786,6 +1004,12 @@ int ime_update_preedit_string(const char *str, Eina_List *attrs) return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + scim::AttributeList attrv; void *data = NULL; ime_preedit_attribute *attr = NULL; @@ -807,6 +1031,8 @@ int ime_update_preedit_string(const char *str, Eina_List *attrs) int ime_request_surrounding_text(int maxlen_before, int maxlen_after) { + ime_error_e retVal = IME_ERROR_NONE; + if (!g_event_callback.surrounding_text_updated) { LOGW("IME_ERROR_NO_CALLBACK_FUNCTION"); return IME_ERROR_NO_CALLBACK_FUNCTION; @@ -817,6 +1043,12 @@ int ime_request_surrounding_text(int maxlen_before, int maxlen_after) return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_core.get_surrounding_text(NULL, maxlen_before, maxlen_after); return IME_ERROR_NONE; @@ -824,6 +1056,8 @@ int ime_request_surrounding_text(int maxlen_before, int maxlen_after) int ime_delete_surrounding_text(int offset, int len) { + ime_error_e retVal = IME_ERROR_NONE; + if (len <= 0) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -834,6 +1068,12 @@ int ime_delete_surrounding_text(int offset, int len) return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_core.delete_surrounding_text(offset, len); return IME_ERROR_NONE; @@ -841,6 +1081,8 @@ int ime_delete_surrounding_text(int offset, int len) Evas_Object* ime_get_main_window(void) { + ime_error_e retVal = IME_ERROR_NONE; + Evas_Object *win = NULL; if (!g_running) { @@ -849,6 +1091,13 @@ Evas_Object* ime_get_main_window(void) return NULL; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + set_last_result(retVal); + return NULL; + } + win = static_cast(g_core.get_main_window()); if (win) { set_last_result(IME_ERROR_NONE); @@ -863,6 +1112,8 @@ Evas_Object* ime_get_main_window(void) int ime_set_size(int portrait_width, int portrait_height, int landscape_width, int landscape_height) { + ime_error_e retVal = IME_ERROR_NONE; + SclSize portrait_size, landscape_size; if (portrait_width < 1 || portrait_height < 1 || landscape_width < 1 || landscape_height < 1) { @@ -875,6 +1126,12 @@ int ime_set_size(int portrait_width, int portrait_height, int landscape_width, i return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + portrait_size.width = portrait_width; portrait_size.height = portrait_height; @@ -888,6 +1145,8 @@ int ime_set_size(int portrait_width, int portrait_height, int landscape_width, i int ime_create_option_window(void) { + ime_error_e retVal = IME_ERROR_NONE; + if (!g_event_callback.option_window_created || !g_event_callback.option_window_destroyed) { LOGW("ime_create_option_window_cb() and ime_destroy_option_window_cb() callback functions are not set."); return IME_ERROR_NO_CALLBACK_FUNCTION; @@ -898,6 +1157,12 @@ int ime_create_option_window(void) return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + if (g_core.create_option_window()) return IME_ERROR_NONE; else { @@ -908,6 +1173,8 @@ int ime_create_option_window(void) int ime_destroy_option_window(Evas_Object *window) { + ime_error_e retVal = IME_ERROR_NONE; + if (!g_event_callback.option_window_created || !g_event_callback.option_window_destroyed) { LOGW("ime_create_option_window_cb() and ime_destroy_option_window_cb() callback functions are not set."); return IME_ERROR_NO_CALLBACK_FUNCTION; @@ -923,6 +1190,12 @@ int ime_destroy_option_window(Evas_Object *window) return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + g_core.destroy_option_window(window); return IME_ERROR_NONE; @@ -930,6 +1203,8 @@ int ime_destroy_option_window(Evas_Object *window) int ime_context_get_layout(ime_context_h context, Ecore_IMF_Input_Panel_Layout *layout) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !layout) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -940,6 +1215,12 @@ int ime_context_get_layout(ime_context_h context, Ecore_IMF_Input_Panel_Layout * return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *layout = context->layout; return IME_ERROR_NONE; @@ -947,6 +1228,8 @@ int ime_context_get_layout(ime_context_h context, Ecore_IMF_Input_Panel_Layout * int ime_context_get_layout_variation(ime_context_h context, ime_layout_variation_e *layout_variation) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !layout_variation) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -957,6 +1240,12 @@ int ime_context_get_layout_variation(ime_context_h context, ime_layout_variation return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *layout_variation = static_cast(context->layout_variation); return IME_ERROR_NONE; @@ -964,6 +1253,8 @@ int ime_context_get_layout_variation(ime_context_h context, ime_layout_variation int ime_context_get_cursor_position(ime_context_h context, int *cursor_pos) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !cursor_pos) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -974,6 +1265,12 @@ int ime_context_get_cursor_position(ime_context_h context, int *cursor_pos) return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *cursor_pos = context->cursor_pos; return IME_ERROR_NONE; @@ -981,6 +1278,8 @@ int ime_context_get_cursor_position(ime_context_h context, int *cursor_pos) int ime_context_get_autocapital_type(ime_context_h context, Ecore_IMF_Autocapital_Type *autocapital_type) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !autocapital_type) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -991,6 +1290,12 @@ int ime_context_get_autocapital_type(ime_context_h context, Ecore_IMF_Autocapita return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *autocapital_type = context->autocapital_type; return IME_ERROR_NONE; @@ -998,6 +1303,8 @@ int ime_context_get_autocapital_type(ime_context_h context, Ecore_IMF_Autocapita int ime_context_get_return_key_type(ime_context_h context, Ecore_IMF_Input_Panel_Return_Key_Type *return_key_type) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !return_key_type) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -1008,6 +1315,12 @@ int ime_context_get_return_key_type(ime_context_h context, Ecore_IMF_Input_Panel return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *return_key_type = context->return_key_type; return IME_ERROR_NONE; @@ -1015,6 +1328,8 @@ int ime_context_get_return_key_type(ime_context_h context, Ecore_IMF_Input_Panel int ime_context_get_return_key_state(ime_context_h context, bool *return_key_state) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !return_key_state) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -1025,6 +1340,12 @@ int ime_context_get_return_key_state(ime_context_h context, bool *return_key_sta return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *return_key_state = static_cast(context->return_key_disabled); return IME_ERROR_NONE; @@ -1032,6 +1353,8 @@ int ime_context_get_return_key_state(ime_context_h context, bool *return_key_sta int ime_context_get_prediction_mode(ime_context_h context, bool *prediction_mode) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !prediction_mode) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -1042,6 +1365,12 @@ int ime_context_get_prediction_mode(ime_context_h context, bool *prediction_mode return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *prediction_mode = static_cast(context->prediction_allow); return IME_ERROR_NONE; @@ -1049,6 +1378,8 @@ int ime_context_get_prediction_mode(ime_context_h context, bool *prediction_mode int ime_context_get_password_mode(ime_context_h context, bool *password_mode) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !password_mode) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -1059,6 +1390,12 @@ int ime_context_get_password_mode(ime_context_h context, bool *password_mode) return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *password_mode = static_cast(context->password_mode); return IME_ERROR_NONE; @@ -1066,6 +1403,8 @@ int ime_context_get_password_mode(ime_context_h context, bool *password_mode) int ime_context_get_input_hint(ime_context_h context, Ecore_IMF_Input_Hints *input_hint) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !input_hint) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -1076,6 +1415,12 @@ int ime_context_get_input_hint(ime_context_h context, Ecore_IMF_Input_Hints *inp return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *input_hint = context->input_hint; return IME_ERROR_NONE; @@ -1083,6 +1428,8 @@ int ime_context_get_input_hint(ime_context_h context, Ecore_IMF_Input_Hints *inp int ime_context_get_bidi_direction(ime_context_h context, Ecore_IMF_BiDi_Direction *bidi) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !bidi) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -1093,6 +1440,12 @@ int ime_context_get_bidi_direction(ime_context_h context, Ecore_IMF_BiDi_Directi return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *bidi = context->bidi_direction; return IME_ERROR_NONE; @@ -1100,6 +1453,8 @@ int ime_context_get_bidi_direction(ime_context_h context, Ecore_IMF_BiDi_Directi int ime_context_get_language(ime_context_h context, Ecore_IMF_Input_Panel_Lang *language) { + ime_error_e retVal = IME_ERROR_NONE; + if (!context || !language) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -1110,6 +1465,12 @@ int ime_context_get_language(ime_context_h context, Ecore_IMF_Input_Panel_Lang * return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *language = context->language; return IME_ERROR_NONE; @@ -1117,6 +1478,8 @@ int ime_context_get_language(ime_context_h context, Ecore_IMF_Input_Panel_Lang * int ime_device_info_get_name(ime_device_info_h dev_info, char **dev_name) { + ime_error_e retVal = IME_ERROR_NONE; + if (!dev_info || !dev_name) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -1127,6 +1490,12 @@ int ime_device_info_get_name(ime_device_info_h dev_info, char **dev_name) return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + if (!dev_info->dev_name) *dev_name = strdup(""); else @@ -1137,6 +1506,8 @@ int ime_device_info_get_name(ime_device_info_h dev_info, char **dev_name) int ime_device_info_get_class(ime_device_info_h dev_info, Ecore_IMF_Device_Class *dev_class) { + ime_error_e retVal = IME_ERROR_NONE; + if (!dev_info || !dev_class) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -1147,6 +1518,12 @@ int ime_device_info_get_class(ime_device_info_h dev_info, Ecore_IMF_Device_Class return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *dev_class = dev_info->dev_class; return IME_ERROR_NONE; @@ -1154,6 +1531,8 @@ int ime_device_info_get_class(ime_device_info_h dev_info, Ecore_IMF_Device_Class int ime_device_info_get_subclass(ime_device_info_h dev_info, Ecore_IMF_Device_Subclass *dev_subclass) { + ime_error_e retVal = IME_ERROR_NONE; + if (!dev_info || !dev_subclass) { LOGW("IME_ERROR_INVALID_PARAMETER"); return IME_ERROR_INVALID_PARAMETER; @@ -1164,6 +1543,12 @@ int ime_device_info_get_subclass(ime_device_info_h dev_info, Ecore_IMF_Device_Su return IME_ERROR_NOT_RUNNING; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + *dev_subclass = dev_info->dev_subclass; return IME_ERROR_NONE; diff --git a/src/privilege_checker.cpp b/src/privilege_checker.cpp new file mode 100644 index 0000000..bba0f35 --- /dev/null +++ b/src/privilege_checker.cpp @@ -0,0 +1,71 @@ +#include "privilege_checker_private.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifdef LOG_TAG +#undef LOG_TAG +#endif +#define LOG_TAG "INPUTMETHOD" + +namespace +{ + +cynara *p_cynara = NULL; + +} + +bool +inputmethod_cynara_initialize() +{ + int ret = cynara_initialize(&p_cynara, NULL); + LOGD("[inputmethod_cynara_initialize]_check_privilege returned %d.", ret); + return ret == CYNARA_API_SUCCESS; +} + +void +inputmethod_cynara_finish() +{ + if (p_cynara) + cynara_finish(p_cynara); + + p_cynara = NULL; +} + +bool +check_privilege(const char *uid, const char *privilege) +{ + FILE *fp = NULL; + char smack_label[1024] = "/proc/self/attr/current"; + + if (!p_cynara) { + return false; + } + + fp = fopen("/proc/self/attr/current", "r"); + if (fp != NULL) { + if (fread(smack_label, 1, sizeof(smack_label), fp) <= 0) + LOGW("Error : fread"); + + fclose(fp); + } + + pid_t pid = getpid(); + char *session = cynara_session_from_pid(pid); + int ret = cynara_check(p_cynara, smack_label, session, uid, privilege); + LOGD("[check_privilege]_check_privilege returned %d.", ret); + if (session) + free(session); + + if (ret != CYNARA_API_ACCESS_ALLOWED) + return false; + return true; +} + -- 2.7.4 From 69090b84238601084dd33063f98813420f0cb9a6 Mon Sep 17 00:00:00 2001 From: "sungwook79.park" Date: Wed, 16 Mar 2016 14:10:48 +0900 Subject: [PATCH 13/16] Update package version to 0.0.7 Change-Id: I8c9d2df1f61a774a3e902682f9f4df249ce296b0 Signed-off-by: sungwook79.park --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index 55926a8..47d9b70 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.0.6 +Version: 0.0.7 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From 6cbf33346a4c273a9197750084d341b40bb4ecf7 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 16 Mar 2016 19:14:41 +0900 Subject: [PATCH 14/16] Fix coding style Change-Id: I3a2b3773b700022a274ef4dd2d5df83973670e97 --- src/inputmethod.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index db9e4b1..6e2305c 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -360,7 +360,7 @@ ime_error_e _check_privilege() ret = IME_ERROR_PERMISSION_DENIED; } - inputmethod_cynara_finish (); + inputmethod_cynara_finish(); return ret; } -- 2.7.4 From 9fbf2c3c8de2d165091972fd95e51f39d703ce82 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 22 Mar 2016 15:55:29 +0900 Subject: [PATCH 15/16] Reduce log Change-Id: Ia5b84d56781756c360a62e37f0e25f7966b5e90b --- src/inputmethod.cpp | 3 +-- src/privilege_checker.cpp | 11 +++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index 6e2305c..cecc9cf 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -355,8 +355,7 @@ ime_error_e _check_privilege() snprintf(uid, 16, "%d", getuid()); if (check_privilege(uid, IME_PRIVILEGE) == false) { - LOGE("check_privilege(uid, IME_PRIVILEGE) == false"); - LOGE("uid : %s.", uid); + LOGE("check_privilege(uid, IME_PRIVILEGE) == false. uid : %s", uid); ret = IME_ERROR_PERMISSION_DENIED; } diff --git a/src/privilege_checker.cpp b/src/privilege_checker.cpp index bba0f35..ffd6d26 100644 --- a/src/privilege_checker.cpp +++ b/src/privilege_checker.cpp @@ -26,7 +26,9 @@ bool inputmethod_cynara_initialize() { int ret = cynara_initialize(&p_cynara, NULL); - LOGD("[inputmethod_cynara_initialize]_check_privilege returned %d.", ret); + if (ret != CYNARA_API_SUCCESS) + LOGW("Failed to call cynara_initialize (). ret : %d.", ret); + return ret == CYNARA_API_SUCCESS; } @@ -49,7 +51,7 @@ check_privilege(const char *uid, const char *privilege) return false; } - fp = fopen("/proc/self/attr/current", "r"); + fp = fopen(smack_label, "r"); if (fp != NULL) { if (fread(smack_label, 1, sizeof(smack_label), fp) <= 0) LOGW("Error : fread"); @@ -60,12 +62,13 @@ check_privilege(const char *uid, const char *privilege) pid_t pid = getpid(); char *session = cynara_session_from_pid(pid); int ret = cynara_check(p_cynara, smack_label, session, uid, privilege); - LOGD("[check_privilege]_check_privilege returned %d.", ret); if (session) free(session); - if (ret != CYNARA_API_ACCESS_ALLOWED) + if (ret != CYNARA_API_ACCESS_ALLOWED) { + LOGW("Access denied. The result of cynara_check() : %d.", ret); return false; + } return true; } -- 2.7.4 From 1d2127f9b39214240b72183578891e076a198170 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 23 Mar 2016 16:53:58 +0900 Subject: [PATCH 16/16] Update package version to 0.0.8 Change-Id: I852f105841cd2c4d0f81ef176937517d6098a157 --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index 47d9b70..de0eeac 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.0.7 +Version: 0.0.8 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4