From 5ec33b84bc64502c6d6fa38a247ef807008c57e9 Mon Sep 17 00:00:00 2001 From: Yunjin Lee Date: Thu, 2 Apr 2015 20:54:32 +0900 Subject: [PATCH] Fix build macro and code for 64bit and askuser/ Modify privilege_manager code to verify privilege list Change-Id: I08df6861516103d365ba5a4bb5cca6aa75534396 Signed-off-by: Yunjin Lee --- capi/CMakeLists.txt | 20 +- capi/capi-security-privilege-manager.pc.in | 5 +- capi/include/privilege_db_manager.h | 26 +- capi/include/privilege_info.h | 18 +- capi/include/privilege_manager.h | 56 +--- capi/res/dbspace/core_db_generator.sh | 6 +- capi/res/dbspace/core_privilege_info.csv | 121 ++++----- capi/res/dbspace/core_privilege_info.db | Bin 22528 -> 21504 bytes capi/res/dbspace/wrt_privilege_info.csv | 15 +- capi/res/dbspace/wrt_privilege_info.db | Bin 31744 -> 30720 bytes capi/src/privilege_db_manager.c | 96 ++++--- capi/src/privilege_info.c | 153 ++--------- capi/src/privilege_manager.c | 423 +++++++++++++++++++++-------- packaging/privilege-checker.spec | 33 ++- 14 files changed, 541 insertions(+), 431 deletions(-) diff --git a/capi/CMakeLists.txt b/capi/CMakeLists.txt index 3a3f35f..96f6cbc 100644 --- a/capi/CMakeLists.txt +++ b/capi/CMakeLists.txt @@ -9,7 +9,7 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(INC_DIR include) INCLUDE_DIRECTORIES( - "${INC_DIR}" + "${INC_DIR}" ) SET(pc_requires "capi-base-common cert-svc") @@ -30,13 +30,17 @@ ENDIF("${ARCH}" STREQUAL "arm") ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"") ADD_DEFINITIONS("-DSLP_DEBUG") MESSAGE("PROFILE_TYPE = ${PROFILE_TYPE}") -IF("${PROFILE_TYPE}" STREQUAL "WEARABLE") +IF("${PROFILE_TYPE}" STREQUAL "TV") + ADD_DEFINITIONS("-DPROFILE_TYPE_TV") +ELSEIF("${PROFILE_TYPE}" STREQUAL "WEARABLE") ADD_DEFINITIONS("-DPROFILE_TYPE_WEARABLE") -ELSE() +ELSEIF("${PROFILE_TYPE}" STREQUAL "MOBILE") ADD_DEFINITIONS("-DPROFILE_TYPE_MOBILE") +ELSE() + ADD_DEFINITIONS("-DPROFILE_TYPE_COMMON") ENDIF() -SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib") +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIBDIR}") aux_source_directory(src SOURCES) ADD_LIBRARY(${fw_name} SHARED ${SOURCES}) @@ -50,9 +54,9 @@ SET_TARGET_PROPERTIES(${fw_name} CLEAN_DIRECT_OUTPUT 1 ) -INSTALL(TARGETS ${fw_name} DESTINATION ../lib) +INSTALL(TARGETS ${fw_name} DESTINATION ${LIBDIR}) INSTALL( - DIRECTORY ${INC_DIR}/ DESTINATION ../include/privilegemgr + DIRECTORY ${INC_DIR}/ DESTINATION ${INCLUDEDIR}/privilegemgr FILES_MATCHING PATTERN "*_private.h" EXCLUDE PATTERN "${INC_DIR}/*.h" @@ -64,7 +68,7 @@ SET(PC_LDFLAGS -l${fw_name}) SET(PC_CFLAGS -I\${includedir}/privilegemgr) CONFIGURE_FILE(${fw_name}.pc.in ${fw_name}.pc @ONLY) -INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION ../lib/pkgconfig) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION ${LIBDIR}/pkgconfig) IF(UNIX) @@ -124,6 +128,6 @@ ENDFOREACH(_file ${_pofiles}) ADD_CUSTOM_TARGET(privilege-string ALL DEPENDS ${mo_files}) -INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/cmake_build_tmp/output/target/generic/root/usr/share/locale DESTINATION ../share) +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/cmake_build_tmp/output/target/generic/root/usr/share/locale DESTINATION ${DATADIR}) diff --git a/capi/capi-security-privilege-manager.pc.in b/capi/capi-security-privilege-manager.pc.in index 8d12dfc..fedb6bc 100755 --- a/capi/capi-security-privilege-manager.pc.in +++ b/capi/capi-security-privilege-manager.pc.in @@ -2,9 +2,8 @@ # Package Information for pkg-config prefix=@PREFIX@ -exec_prefix=/usr -libdir=/usr/lib -includedir=/usr/include/privilegemgr +libdir=@LIBDIR@ +includedir=@INCLUDEDIR@/privilegemgr Name: @PC_NAME@ Description: @PACKAGE_DESCRIPTION@ diff --git a/capi/include/privilege_db_manager.h b/capi/include/privilege_db_manager.h index ae6f8b8..be87159 100755 --- a/capi/include/privilege_db_manager.h +++ b/capi/include/privilege_db_manager.h @@ -31,36 +31,38 @@ typedef struct char* privilege_description; int privilege_level_id; char* privilege_level; - char* version; + char* issued_version; + char* expired_version; + char* changed_to; } privilege_info_db_row_s; typedef enum { - PRIVILIEGE_DB_MANAGER_ERR_NONE = TIZEN_ERROR_NONE, - PRIVILIEGE_DB_NO_EXIST_RESULT = TIZEN_ERROR_NO_DATA, - PRIVILIEGE_DB_MANAGER_ERR_CONNECTION_FAIL = TIZEN_ERROR_UNKNOWN, - PRIVILIEGE_DB_MANAGER_ERR_INVALID_QUERY = TIZEN_ERROR_INVALID_PARAMETER, - PRIVILIEGE_DB_MANAGER_ERR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, + PRIVILEGE_DB_MANAGER_ERR_NONE = TIZEN_ERROR_NONE, + PRIVILEGE_DB_NO_EXIST_RESULT = TIZEN_ERROR_NO_DATA, + PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL = TIZEN_ERROR_UNKNOWN, + PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY = TIZEN_ERROR_INVALID_PARAMETER, + PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, } privilege_db_manager_error_e; typedef enum { - PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PUBLIC = 0, - PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PARTNER = 1, - PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM = 2 + PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PUBLIC = 0, + PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PARTNER = 1, + PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM = 2 } privilege_db_manager_privilege_level_e; typedef enum { - PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_WRT = 0, - PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_CORE = 1 + PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT = 0, + PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE = 1 } privilege_db_manager_package_type_e; #ifdef __cplusplus extern "C" { #endif -int privilege_db_manager_get_privilege_list(GList** privilege_list); +int privilege_db_manager_get_privilege_list(const char* api_version, privilege_db_manager_package_type_e package_type, GList** privilege_list); int privilege_db_manager_get_privilege_display(privilege_db_manager_package_type_e package_type, const char* privilege_name, const char* api_version, char** privilege_display); diff --git a/capi/include/privilege_info.h b/capi/include/privilege_info.h index 37dd5ae..2feb9bf 100644 --- a/capi/include/privilege_info.h +++ b/capi/include/privilege_info.h @@ -18,13 +18,27 @@ #define __TIZEN_SECURITY_PRIVILEGE_INFO_H #include -#include "privilege_manager.h" - #ifdef __cplusplus extern "C" { #endif /** + * @brief Enumerations of error code for Privilege Information. + */ +typedef enum +{ + PRVMGR_ERR_NONE = 0, + PRVMGR_ERR_INVALID_PARAMETER = 1, + PRVMGR_ERR_OUT_OF_MEMORY = 2, + PRVMGR_ERR_INTERNAL_ERROR = 3, + PRVMGR_ERR_NO_DATA = 4, + PRVMGR_ERR_NO_EXIST_PRIVILEGE = 5, + PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL = 6, + PRVMGR_ERR_INVALID_PRIVILEGE = 7, + PRVMGR_ERR_DEPRECATED_PRIVILEGE = 8, +} privilege_manager_error_e; + +/** * @brief Called to get a privilege group once for specific package. * @param[in] privilege_group The privilege group * @param[in] user_data The user data passed from the foreach function diff --git a/capi/include/privilege_manager.h b/capi/include/privilege_manager.h index cbdc7a1..0f08820 100755 --- a/capi/include/privilege_manager.h +++ b/capi/include/privilege_manager.h @@ -20,7 +20,7 @@ #include #include #include - +#include "privilege_info.h" #ifdef __cplusplus extern "C" { #endif @@ -36,23 +36,11 @@ typedef enum typedef enum { - PRVMGR_PACKAGE_TYPE_CORE = 0, - PRVMGR_PACKAGE_TYPE_NATIVE = 1, + PRVMGR_PACKAGE_TYPE_WRT = 0, + PRVMGR_PACKAGE_TYPE_CORE = 1, } privilege_manager_package_type_e; -/** - * @brief Enumerations of error code for Privilege Information. - */ -typedef enum -{ - PRVMGR_ERR_NONE = 0, - PRVMGR_ERR_INVALID_PARAMETER = 1, - PRVMGR_ERR_OUT_OF_MEMORY = 2, - PRVMGR_ERR_INTERNAL_ERROR = 3, - PRVMGR_ERR_NO_DATA = 4, - PRVMGR_ERR_NO_EXIST_PRIVILEGE = 5, - PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL = 6 -} privilege_manager_error_e; + /** * @brief verify privilege name and level in the privilege list. @@ -72,41 +60,7 @@ typedef enum */ EXPORT_API int privilege_manager_verify_privilege_list(privilege_manager_package_type_e package_type, GList* privilege_list, privilege_manager_visibility_e visibility, char **error_privilege_name); -/** - * @brief verify privilege name in the privilege list. - * @remarks @a privilege_list must be released with free() by you. - * @remarks @a error_privilege_name_list must be released with free() by you. - * @param [in] privilege_manager_package_type_e The privilege_manager_package_type_e - * @param [in] privilege_list The privilege_list - * @param [out] error_privilege_name_list The error_privilege_name_list's value is assigned when PRVMGR_ERR_NO_EXIST_PRIVILEGE is returned, otherwise null is assigned. - * @return 0 on success, otherwise a negative error value. - * @retval #PRVMGR_ERR_NONE Successful - * @retval #PRVMGR_ERR_NO_EXIST_PRIVILEGE privilege don't exist. Error_privilege_name'value is assigned. - * @retval #PRVMGR_ERR_OUT_OF_MEMORY Out of memory - * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter - * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error - */ -EXPORT_API int privilege_manager_verify_privilege_name(privilege_manager_package_type_e package_type, GList* privilege_list, GList **error_privilege_name_list); - -/** - * @brief verify privilege name and level in the privilege list. - * @remarks @a privilege_list must be released with free() by you. - * @remarks @a error_privilege_name_list must be released with free() by you. - * @remarks @a error_privilege_level_list must be released with free() by you. - * @param [in] privilege_manager_package_type_e The privilege_manager_package_type_e - * @param [in] privilege_list The privilege_list - * @param [in] privilege_manager_visibility_e The privilege_manager_visibility_e - * @param [out] error_privilege_name_list The error_privilege_name_list's value is assigned when PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL is returned, otherwise null is assigned. - * @param [out] error_privilege_level_list The error_privilege_level_list's value is assigned when PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL is returned, otherwise null is assigned. - * @return 0 on success, otherwise a negative error value. - * @retval #PRVMGR_ERR_NONE Successful - * @retval #PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL privilege level is higher than visibility. Error_privilege_name_list and error_privilege_level_list 'value is assigned. - * @retval #PRVMGR_ERR_OUT_OF_MEMORY Out of memory - * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter - * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error - */ -EXPORT_API int privilege_manager_verify_privilege_level(privilege_manager_package_type_e package_type, GList* privilege_list, privilege_manager_visibility_e visibility, GList **error_privilege_name_list, GList **error_privilege_level_list); - +EXPORT_API int privilege_manager_verify_privilege(const char* api_version, privilege_manager_package_type_e package_type, GList* privilege_list, privilege_manager_visibility_e visibility, char **error_message); #ifdef __cplusplus } diff --git a/capi/res/dbspace/core_db_generator.sh b/capi/res/dbspace/core_db_generator.sh index 5cd924d..0583b74 100755 --- a/capi/res/dbspace/core_db_generator.sh +++ b/capi/res/dbspace/core_db_generator.sh @@ -7,7 +7,7 @@ echo "Creating $DB_NAME ..." touch $DB_NAME echo "Creating PRIVILEGE_INFO table ..." -sqlite3 $DB_NAME "CREATE TABLE PRIVILEGE_INFO (PROFILE_ID NUMERIC, PROFILE TEXT, PACKAGE_TYPE_ID NUMERIC, PACKAGE_TYPE TEXT, PRIVILEGE_LEVEL_ID NUMERIC, PRIVILEGE_LEVEL TEXT, API_VERSION_ISSUED TEXT, API_VERSION_EXPIRED TEXT, DOCUMENTED INTEGER, PRIVILEGE_NAME TEXT, PRIVILEGE_DISPLAY TEXT, PRIVILEGE_DESCRIPTION TEXT, PRIVILEGE_GROUP_ID NUMERIC, PRIVLEGE_GROUP TEXT);" +sqlite3 $DB_NAME "CREATE TABLE PRIVILEGE_INFO (PROFILE_ID NUMERIC, PROFILE TEXT, PACKAGE_TYPE_ID NUMERIC, PACKAGE_TYPE TEXT, PRIVILEGE_LEVEL_ID NUMERIC, PRIVILEGE_LEVEL TEXT, API_VERSION_ISSUED TEXT, API_VERSION_EXPIRED TEXT, DOCUMENTED INTEGER, PRIVILEGE_NAME TEXT, PRIVILEGE_DISPLAY TEXT, PRIVILEGE_DESCRIPTION TEXT, PRIVILEGE_GROUP_ID NUMERIC, PRIVLEGE_GROUP TEXT, CHANGED_TO TEXT);" echo "Inserting data ..." LIST=`cat core_privilege_info.csv | sed 's/ //g'` @@ -125,9 +125,11 @@ do exit fi + CHANGED_TO=`echo $i | cut -d "," -f 11` + echo "Inserting $PRIVILEGE_NAME ..." - sqlite3 $DB_NAME "insert into privilege_info values ( $PROFILE_ID, '$PROFILE', $PACKAGE_TYPE_ID, '$PACKAGE_TYPE', $PRIVILEGE_LEVEL_ID, '$PRIVILEGE_LEVEL', '$API_VERSION_ISSUED', '$API_VERSION_EXPIRED', '$DOCUMENTED', '$PRIVILEGE_NAME', '$PRIVILEGE_DISPLAY', '$PRIVILEGE_DESCRIPTION', $PRIVILEGE_GROUP_ID, '$PRIVILEGE_GROUP')" + sqlite3 $DB_NAME "insert into privilege_info values ( $PROFILE_ID, '$PROFILE', $PACKAGE_TYPE_ID, '$PACKAGE_TYPE', $PRIVILEGE_LEVEL_ID, '$PRIVILEGE_LEVEL', '$API_VERSION_ISSUED', '$API_VERSION_EXPIRED', '$DOCUMENTED', '$PRIVILEGE_NAME', '$PRIVILEGE_DISPLAY', '$PRIVILEGE_DESCRIPTION', $PRIVILEGE_GROUP_ID, '$PRIVILEGE_GROUP', '$CHANGED_TO')" done echo "Check inserted data" diff --git a/capi/res/dbspace/core_privilege_info.csv b/capi/res/dbspace/core_privilege_info.csv index 1034ffe..ea624ca 100644 --- a/capi/res/dbspace/core_privilege_info.csv +++ b/capi/res/dbspace/core_privilege_info.csv @@ -1,61 +1,60 @@ -#PROFILE,#PACKAGE_TYPE,#PRIVILEGE_LEVEL,#API_VERSION_ISSUED,#API_VERSION_EXPIRED,#DOCUMENTED,#PRIVILEGE_NAME,#PRIVILEGE_DISPLAY,#PRIVILEGE_DESCRIPTION,#PRIVILEGE_GROUP -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/account.read,IDS_TPLATFORM_BODY_READING_ACCOUNTS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_ACCOUNTS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/account.write,IDS_TPLATFORM_BODY_MANAGING_ACCOUNTS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CREATE_EDIT_AND_DELETE_ACCOUNTS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/alarm.get,IDS_TPLATFORM_HEADER_RETRIEVING_ALARMS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_INFORMATION_ABOUT_YOUR_SAVED_ALARMS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/alarm.set,IDS_TPLATFORM_BODY_SETTING_ALARMS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_SET_ALARMS_AND_WAKE_THE_DEVICE_UP_AT_SCHEDULED_TIMES,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,platform,2.3,9.9,no,http://tizen.org/privilege/antivirus,IDS_TPLATFORM_HEADER_SCANNING_FOR_AND_ERASING_VIRUSES,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_ERASE_DATA_IN_ANY_OTHER_APPLICATION_MSG,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/appmanager.kill,IDS_TPLATFORM_BODY_CLOSING_APPLICATIONS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CLOSE_OTHER_APPLICATIONS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/appmanager.launch,IDS_TPLATFORM_HEADER_OPENING_AND_RESUMING_APPLICATIONS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_OPEN_OTHER_APPLICATIONS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/bluetooth,IDS_TPLATFORM_BODY_USING_UNRESTRICTED_BLUETOOTH_SERVICES_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_PERFORM_UNRESTRICTED_ACTIONS_USING_BLUETOOTH_SUCH_AS_SCANNING_FOR_AND_CONNECTING_TO_OTHER_DEVICES,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/bluetooth.admin,IDS_TPLATFORM_HEADER_CHANGING_BLUETOOTH_SETTINGS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CHANGE_BLUETOOTH_SETTINGS_SUCH_AS_TURNING_BLUETOOTH_ON_OR_OFF_SETTING_THE_DEVICE_NAME_AND_ENABLING_OR_DISABLING_AV_REMOTE_CONTROL,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/bookmark.admin,IDS_TPLATFORM_BODY_ACCESSING_INTERNET_BOOKMARKS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RETRIEVE_CREATE_EDIT_AND_DELETE_INTERNET_BOOKMARKS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/calendar.read,IDS_TPLATFORM_BODY_READING_CALENDAR,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_EVENTS_AND_TASKS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/calendar.write,IDS_TPLATFORM_BODY_MANAGING_CALENDAR,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CREATE_UPDATE_AND_DELETE_EVENTS_AND_TASKS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/call,IDS_TPLATFORM_HEADER_MAKING_PHONE_CALLS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MAKE_PHONE_CALLS_TO_NUMBERS_WHEN_THEY_ARE_TAPPED_WITHOUT_FURTHER_CONFIRMATION,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/callhistory.read,IDS_TPLATFORM_BODY_READING_CALL_LOGS,IDS_TPLATFORM_SBODY_THIS_APPLICATION_CAN_READ_CALL_LOG_ITEMS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/callhistory.write,IDS_TPLATFORM_BODY_MANAGING_CALL_LOGS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CREATE_UPDATE_AND_DELETE_CALL_LOG_ITEMS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/camera,IDS_TPLATFORM_BODY_USING_CAMERA,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_TAKE_AND_PREVIEW_PICTURES,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/contact.read,IDS_TPLATFORM_BODY_READING_CONTACTS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_YOUR_PROFILE_CONTACTS_AND_CONTACT_HISTORY_CONTACT_HISTORY_CAN_INCLUDE_SOCIAL_NETWORK_ACTIVITY,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/contact.write,IDS_TPLATFORM_BODY_MANAGING_CONTACTS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CREATE_UPDATE_AND_DELETE_YOUR_PROFILE_CONTACTS_AND_ANY_CONTACT_HISTORY_MSG,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/content.write,IDS_TPLATFORM_BODY_MANAGING_CONTENT,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CHANGE_MEDIA_INFORMATION_THIS_INFORMATION_CAN_BE_USED_BY_OTHER_APPLICATIONS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/datasharing,IDS_TPLATFORM_BODY_SHARING_DATA_BETWEEN_APPLICATIONS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_SHARE_DATA_WITH_OTHER_APPLICATIONS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/display,IDS_TPLATFORM_BODY_MANAGING_DISPLAY_SETTINGS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_DISPLAY_SETTINGS_SUCH_AS_THE_BRIGHTNESS_THIS_MAY_INCREASE_BATTERY_CONSUMPTION,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/download,IDS_TPLATFORM_BODY_DOWNLOADING_VIA_HTTP,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_HTTP_DOWNLOADS_THIS_MAY_RESULT_IN_ADDITIONAL_CHARGES_DEPENDING_ON_YOUR_PAYMENT_PLAN,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB -mobile,core,public,2.3,9.9,yes,http://tizen.org/privilege/email,IDS_TPLATFORM_BODY_MANAGING_EMAIL_ACCOUNTS_MAILBOXES_AND_EMAILS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_YOUR_EMAIL_ACCOUNTS_INCLUDING_YOUR_FOLDERS_AND_EMAILS,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB -mobile,core,platform,2.3,9.9,yes,http://tizen.org/privilege/email.admin,IDS_TPLATFORM_BODY_MANAGING_EMAIL_CONFIGURATIONS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_THE_SETTINGS_OF_EMAIL_APPLICATIONS,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/externalstorage,IDS_TPLATFORM_BODY_ACCESSING_EXTERNAL_STORAGE_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_FILES_THAT_ARE_SAVED_TO_EXTERNAL_STORAGE_SUCH_AS_SD_CARDS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/externalstorage.appdata,IDS_TPLATFORM_BODY_ACCESSING_APPLICATION_DATA_IN_EXTERNAL_STORAGE_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_ITS_OWN_FILES_IN_EXTERNAL_STORAGE_SUCH_AS_SD_CARDS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/haptic,IDS_TPLATFORM_BODY_MANAGING_VIBRATION_FEEDBACK_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CONTROL_VIBRATION_FEEDBACK,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.4,9.9,yes,http://tizen.org/privilege/healthinfo,IDS_TPLATFORM_HEADER_READING_HEALTH_INFORMATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_HEALTH_INFORMATION_GATHERED_BY_THE_DEVICE_SENSORS_SUCH_AS_THE_PEDOMETER_AND_THE_HEART_RATE_MONITOR,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/internet,IDS_TPLATFORM_BODY_ACCESSING_INTERNET,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ACCESS_THE_INTERNET_THIS_MAY_RESULT_IN_ADDITIONAL_CHARGES_DEPENDING_ON_YOUR_PAYMENT_PLAN,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/keymanager,IDS_TPLATFORM_BODY_USING_SECURE_REPOSITORY_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_SAVE_KEYS_CERTIFICATES_AND_DATA_TO_AND_RETRIEVE_AND_DELETE_THEM_FROM_PASSWORD_PROTECTED_STORAGE,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/keymanager.admin,IDS_TPLATFORM_BODY_LOCKING_UNLOCKING_SECURE_REPOSITORY_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_LOCK_AND_UNLOCK_PASSWORD_PROTECTED_STORAGE_AND_MANAGE_PASSWORD_CHANGES_FOR_IT,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/led,IDS_TPLATFORM_BODY_MANAGING_LEDS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_TURN_LEDS_ON_OR_OFF_SUCH_AS_THE_LED_ON_THE_FRONT_OF_THE_DEVICE_AND_THE_CAMERA_FLASH,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/location,IDS_TPLATFORM_BODY_USING_USER_LOCATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_USE_YOUR_LOCATION_DATA,IDS_TPLATFORM_OPT_LOCATION_T_LBS -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/location.enable,IDS_TPLATFORM_BODY_MANAGING_LOCATION_SETTINGS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CONTROL_YOUR_LOCATION_SERVICE_SETTINGS,IDS_TPLATFORM_OPT_LOCATION_T_LBS -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/mediastorage,IDS_TPLATFORM_HEADER_ACCESSING_MEDIA_FOLDERS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_FILES_IN_MEDIA_FOLDERS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/message.read,IDS_TPLATFORM_BODY_READING_TEXT_AND_MULTIMEDIA_MESSAGES_AND_RELATED_INFORMATION_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_TEXT_AND_MULTIMEDIA_MESSAGES_AND_ANY_INFORMATION_RELATED_TO_THEM,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/message.write,IDS_TPLATFORM_BODY_SENDING_TEXT_AND_MULTIMEDIA_MESSAGES_AND_UPDATING_THEIR_STATUSES_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_WRITE_SEND_DELETE_AND_MOVE_TEXT_AND_MULTIMEDIA_MESSAGES_AND_CHANGE_THE_SETTINGS_AND_STATUSES_OF_MESSAGES_MSG,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/network.get,IDS_TPLATFORM_HEADER_READING_NETWORK_INFORMATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RETRIEVE_NETWORK_INFORMATION_SUCH_AS_THE_STATUS_OF_EACH_NETWORK_ITS_TYPE_AND_DETAILED_NETWORK_PROFILE_INFORMATION,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/network.profile,IDS_TPLATFORM_HEADER_MANAGING_NETWORK_PROFILES,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ADD_REMOVE_AND_EDIT_NETWORK_PROFILES,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/network.set,IDS_TPLATFORM_HEADER_MANAGING_NETWORK_CONNECTIONS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_TURN_WI_FI_AND_ON_AND_OFF_AND_CONNECT_TO_AND_DISCONNECT_FROM_WI_FI_AND_MOBILE_NETWORKS,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/nfc,IDS_TPLATFORM_HEADER_USING_BASIC_NFC_SERVICES,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_NFC_TAG_INFORMATION_AND_SEND_NFC_MESSAGES_TO_OTHER_DEVICES,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/nfc.admin,IDS_TPLATFORM_BODY_MANAGING_NFC_GENERAL_SETTINGS,IDS_TPLATFORM_SBODY_THIS_APPLICATION_CAN_CHANGE_NFC_SETTINGS_SUCH_AS_TURNING_NFC_ON_OR_OFF,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/nfc.cardemulation,IDS_TPLATFORM_HEADER_USING_NFC_CARD_EMULATION_MODE,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ACCESS_SMART_CARD_DETAILS_SUCH_AS_CREDIT_CARD_DETAILS_AND_ALLOW_USERS_TO_MAKE_PAYMENTS_VIA_NFC,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/notification,IDS_TPLATFORM_BODY_PROVIDING_NOTIFICATIONS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_SHOW_AND_HIDE_ITS_OWN_NOTIFICATIONS_AND_BADGES,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/packagemanager.admin,IDS_TPLATFORM_HEADER_INSTALLING_UNINSTALLING_APPLICATION_PACKAGES_AND_CLEARING_CACHES,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_INSTALL_AND_UNINSTALL_APPLICATION_PACKAGES_AND_CLEAR_APPLICATIONS_CACHES,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/packagemanager.info,IDS_TPLATFORM_HEADER_RETRIEVING_DETAILED_PACKAGE_INFORMATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RETRIEVE_DETAILED_APPLICATION_PACKAGE_INFORMATION,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/power,IDS_TPLATFORM_BODY_MANAGING_POWER,IDS_TPLATFORM_SBODY_THIS_APPLICATION_CAN_CONTROL_POWER_RELATED_SETTINGS_SUCH_AS_DIMMING_THE_SCREEN,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB -mobile,core,public,2.3,9.9,yes,http://tizen.org/privilege/push,IDS_TPLATFORM_BODY_RECEIVING_PUSH_NOTIFICATIONS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RECEIVE_NOTIFICATIONS_VIA_THE_INTERNET,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/recorder,IDS_TPLATFORM_HEADER_RECORDING_VIDEO_AND_AUDIO,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RECORD_VIDEO_AND_AUDIO,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/screenshot,IDS_TPLATFORM_HEADER_CAPTURING_DEVICE_SCREEN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CAPTURE_SCREENSHOTS,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/shortcut,IDS_TPLATFORM_HEADER_MANAGING_SHORTCUTS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CREATE_AND_DELETE_SHORTCUTS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/systemsettings,IDS_TPLATFORM_HEADER_MANAGING_UNRESTRICTED_SYSTEM_SETTINGS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_UNRESTRICTED_SYSTEM_SETTINGS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/systemsettings.admin,IDS_TPLATFORM_HEADER_MANAGING_ALL_SYSTEM_SETTINGS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_ALL_SYSTEM_SETTINGS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/telephony,IDS_TPLATFORM_BODY_ACCESSING_TELEPHONY_INFORMATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RETRIEVE_TELEPHONY_INFORMATION_SUCH_AS_THE_NETWORK_AND_SIM_CARD_USED_THE_IMEI_AND_THE_STATUSES_OF_CALLS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/telephony.admin,IDS_TPLATFORM_HEADER_MANAGING_TELEPHONY_SETTINGS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_TELEPHONY_SETTINGS_SUCH_AS_THOSE_FOR_INCOMING_AND_OUTGOING_CALLS_FORWARDING_AND_HOLDING_CALLS_NETWORKS_AND_SIM_CARDS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/tethering.admin,IDS_TPLATFORM_HEADER_ACCESSING_TETHERING_SERVICES,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ENABLE_AND_DISABLE_TETHERING_SERVICES,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/volume.set,IDS_TPLATFORM_HEADER_ADJUSTING_VOLUME,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ADJUST_THE_VOLUME_FOR_DIFFERENT_FEATURES_SUCH_AS_NOTIFICATION_ALERTS_RINGTONES_AND_MEDIA,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB -common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/web-history.admin,IDS_TPLATFORM_HEADER_MANAGING_INTERNET_HISTORY,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_YOUR_INTERNET_HISTORY,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/wifidirect,IDS_TPLATFORM_HEADER_MANAGING_WI_FI_DIRECT_INFORMATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ENABLE_AND_DISABLE_WI_FI_DIRECT_MANAGE_WI_FI_DIRECT_CONNECTIONS_AND_CHANGE_WI_FI_DIRECT_SETTINGS,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB -common,core,public,2.3,9.9,yes,http://tizen.org/privilege/window.priority.set,IDS_TPLATFORM_HEADER_DISPLAYING_WINDOWS_ON_TOP_OF_OTHER_APPLICATIONS_AND_SCREENS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_APPEAR_ON_TOP_OF_OTHER_WINDOWS_AND_SCREENS_MSG,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB +#PROFILE,#PACKAGE_TYPE,#PRIVILEGE_LEVEL,#API_VERSION_ISSUED,#API_VERSION_EXPIRED,#DOCUMENTED,#PRIVILEGE_NAME,#PRIVILEGE_DISPLAY,#PRIVILEGE_DESCRIPTION,#PRIVILEGE_GROUP,#CHANGED_TO +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/account.read,IDS_TPLATFORM_BODY_READING_ACCOUNTS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_ACCOUNTS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/account.write,IDS_TPLATFORM_BODY_MANAGING_ACCOUNTS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CREATE_EDIT_AND_DELETE_ACCOUNTS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/alarm.get,IDS_TPLATFORM_HEADER_RETRIEVING_ALARMS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_INFORMATION_ABOUT_YOUR_SAVED_ALARMS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/alarm.set,IDS_TPLATFORM_BODY_SETTING_ALARMS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_SET_ALARMS_AND_WAKE_THE_DEVICE_UP_AT_SCHEDULED_TIMES,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,platform,2.3,9.9,no,http://tizen.org/privilege/antivirus,IDS_TPLATFORM_HEADER_SCANNING_FOR_AND_ERASING_VIRUSES,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_ERASE_DATA_IN_ANY_OTHER_APPLICATION_MSG,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/appmanager.kill,IDS_TPLATFORM_BODY_CLOSING_APPLICATIONS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CLOSE_OTHER_APPLICATIONS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/appmanager.launch,IDS_TPLATFORM_HEADER_OPENING_AND_RESUMING_APPLICATIONS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_OPEN_OTHER_APPLICATIONS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/bluetooth,IDS_TPLATFORM_BODY_USING_UNRESTRICTED_BLUETOOTH_SERVICES_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_PERFORM_UNRESTRICTED_ACTIONS_USING_BLUETOOTH_SUCH_AS_SCANNING_FOR_AND_CONNECTING_TO_OTHER_DEVICES,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB, +common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/bluetooth.admin,IDS_TPLATFORM_HEADER_CHANGING_BLUETOOTH_SETTINGS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CHANGE_BLUETOOTH_SETTINGS_SUCH_AS_TURNING_BLUETOOTH_ON_OR_OFF_SETTING_THE_DEVICE_NAME_AND_ENABLING_OR_DISABLING_AV_REMOTE_CONTROL,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB, +common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/bookmark.admin,IDS_TPLATFORM_BODY_ACCESSING_INTERNET_BOOKMARKS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RETRIEVE_CREATE_EDIT_AND_DELETE_INTERNET_BOOKMARKS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/calendar.read,IDS_TPLATFORM_BODY_READING_CALENDAR,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_EVENTS_AND_TASKS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/calendar.write,IDS_TPLATFORM_BODY_MANAGING_CALENDAR,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CREATE_UPDATE_AND_DELETE_EVENTS_AND_TASKS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/call,IDS_TPLATFORM_HEADER_MAKING_PHONE_CALLS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MAKE_PHONE_CALLS_TO_NUMBERS_WHEN_THEY_ARE_TAPPED_WITHOUT_FURTHER_CONFIRMATION,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/callhistory.read,IDS_TPLATFORM_BODY_READING_CALL_LOGS,IDS_TPLATFORM_SBODY_THIS_APPLICATION_CAN_READ_CALL_LOG_ITEMS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +mobile,core,public,2.3,9.9,yes,http://tizen.org/privilege/callhistory.write,IDS_TPLATFORM_BODY_MANAGING_CALL_LOGS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CREATE_UPDATE_AND_DELETE_CALL_LOG_ITEMS,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/camera,IDS_TPLATFORM_BODY_USING_CAMERA,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_TAKE_AND_PREVIEW_PICTURES,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/contact.read,IDS_TPLATFORM_BODY_READING_CONTACTS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_YOUR_PROFILE_CONTACTS_AND_CONTACT_HISTORY_CONTACT_HISTORY_CAN_INCLUDE_SOCIAL_NETWORK_ACTIVITY,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/contact.write,IDS_TPLATFORM_BODY_MANAGING_CONTACTS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CREATE_UPDATE_AND_DELETE_YOUR_PROFILE_CONTACTS_AND_ANY_CONTACT_HISTORY_MSG,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/content.write,IDS_TPLATFORM_BODY_MANAGING_CONTENT,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CHANGE_MEDIA_INFORMATION_THIS_INFORMATION_CAN_BE_USED_BY_OTHER_APPLICATIONS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/datasharing,IDS_TPLATFORM_BODY_SHARING_DATA_BETWEEN_APPLICATIONS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_SHARE_DATA_WITH_OTHER_APPLICATIONS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/display,IDS_TPLATFORM_BODY_MANAGING_DISPLAY_SETTINGS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_DISPLAY_SETTINGS_SUCH_AS_THE_BRIGHTNESS_THIS_MAY_INCREASE_BATTERY_CONSUMPTION,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/download,IDS_TPLATFORM_BODY_DOWNLOADING_VIA_HTTP,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_HTTP_DOWNLOADS_THIS_MAY_RESULT_IN_ADDITIONAL_CHARGES_DEPENDING_ON_YOUR_PAYMENT_PLAN,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB, +mobile,core,public,2.3,9.9,yes,http://tizen.org/privilege/email,IDS_TPLATFORM_BODY_MANAGING_EMAIL_ACCOUNTS_MAILBOXES_AND_EMAILS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_YOUR_EMAIL_ACCOUNTS_INCLUDING_YOUR_FOLDERS_AND_EMAILS,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB, +mobile,core,platform,2.3,9.9,yes,http://tizen.org/privilege/email.admin,IDS_TPLATFORM_BODY_MANAGING_EMAIL_CONFIGURATIONS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_THE_SETTINGS_OF_EMAIL_APPLICATIONS,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/externalstorage,IDS_TPLATFORM_BODY_ACCESSING_EXTERNAL_STORAGE_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_FILES_THAT_ARE_SAVED_TO_EXTERNAL_STORAGE_SUCH_AS_SD_CARDS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/externalstorage.appdata,IDS_TPLATFORM_BODY_ACCESSING_APPLICATION_DATA_IN_EXTERNAL_STORAGE_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_ITS_OWN_FILES_IN_EXTERNAL_STORAGE_SUCH_AS_SD_CARDS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/haptic,IDS_TPLATFORM_BODY_MANAGING_VIBRATION_FEEDBACK_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CONTROL_VIBRATION_FEEDBACK,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/internet,IDS_TPLATFORM_BODY_ACCESSING_INTERNET,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ACCESS_THE_INTERNET_THIS_MAY_RESULT_IN_ADDITIONAL_CHARGES_DEPENDING_ON_YOUR_PAYMENT_PLAN,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB, +mobile,core,public,2.3,9.9,yes,http://tizen.org/privilege/keymanager,IDS_TPLATFORM_BODY_USING_SECURE_REPOSITORY_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_SAVE_KEYS_CERTIFICATES_AND_DATA_TO_AND_RETRIEVE_AND_DELETE_THEM_FROM_PASSWORD_PROTECTED_STORAGE,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +mobile,core,platform,2.3,9.9,yes,http://tizen.org/privilege/keymanager.admin,IDS_TPLATFORM_BODY_LOCKING_UNLOCKING_SECURE_REPOSITORY_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_LOCK_AND_UNLOCK_PASSWORD_PROTECTED_STORAGE_AND_MANAGE_PASSWORD_CHANGES_FOR_IT,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/led,IDS_TPLATFORM_BODY_MANAGING_LEDS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_TURN_LEDS_ON_OR_OFF_SUCH_AS_THE_LED_ON_THE_FRONT_OF_THE_DEVICE_AND_THE_CAMERA_FLASH,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/location,IDS_TPLATFORM_BODY_USING_USER_LOCATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_USE_YOUR_LOCATION_DATA,IDS_TPLATFORM_OPT_LOCATION_T_LBS, +common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/location.enable,IDS_TPLATFORM_BODY_MANAGING_LOCATION_SETTINGS_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CONTROL_YOUR_LOCATION_SERVICE_SETTINGS,IDS_TPLATFORM_OPT_LOCATION_T_LBS, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/mediastorage,IDS_TPLATFORM_HEADER_ACCESSING_MEDIA_FOLDERS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_FILES_IN_MEDIA_FOLDERS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/message.read,IDS_TPLATFORM_BODY_READING_TEXT_AND_MULTIMEDIA_MESSAGES_AND_RELATED_INFORMATION_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_TEXT_AND_MULTIMEDIA_MESSAGES_AND_ANY_INFORMATION_RELATED_TO_THEM,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/message.write,IDS_TPLATFORM_BODY_SENDING_TEXT_AND_MULTIMEDIA_MESSAGES_AND_UPDATING_THEIR_STATUSES_M_NOUN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_WRITE_SEND_DELETE_AND_MOVE_TEXT_AND_MULTIMEDIA_MESSAGES_AND_CHANGE_THE_SETTINGS_AND_STATUSES_OF_MESSAGES_MSG,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/network.get,IDS_TPLATFORM_HEADER_READING_NETWORK_INFORMATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RETRIEVE_NETWORK_INFORMATION_SUCH_AS_THE_STATUS_OF_EACH_NETWORK_ITS_TYPE_AND_DETAILED_NETWORK_PROFILE_INFORMATION,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/network.profile,IDS_TPLATFORM_HEADER_MANAGING_NETWORK_PROFILES,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ADD_REMOVE_AND_EDIT_NETWORK_PROFILES,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/network.set,IDS_TPLATFORM_HEADER_MANAGING_NETWORK_CONNECTIONS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_TURN_WI_FI_AND_ON_AND_OFF_AND_CONNECT_TO_AND_DISCONNECT_FROM_WI_FI_AND_MOBILE_NETWORKS,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB, +mobile,core,public,2.3,9.9,yes,http://tizen.org/privilege/nfc,IDS_TPLATFORM_HEADER_USING_BASIC_NFC_SERVICES,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_NFC_TAG_INFORMATION_AND_SEND_NFC_MESSAGES_TO_OTHER_DEVICES,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +mobile,core,platform,2.3,9.9,yes,http://tizen.org/privilege/nfc.admin,IDS_TPLATFORM_BODY_MANAGING_NFC_GENERAL_SETTINGS,IDS_TPLATFORM_SBODY_THIS_APPLICATION_CAN_CHANGE_NFC_SETTINGS_SUCH_AS_TURNING_NFC_ON_OR_OFF,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +mobile,core,public,2.3,9.9,yes,http://tizen.org/privilege/nfc.cardemulation,IDS_TPLATFORM_HEADER_USING_NFC_CARD_EMULATION_MODE,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ACCESS_SMART_CARD_DETAILS_SUCH_AS_CREDIT_CARD_DETAILS_AND_ALLOW_USERS_TO_MAKE_PAYMENTS_VIA_NFC,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/notification,IDS_TPLATFORM_BODY_PROVIDING_NOTIFICATIONS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_SHOW_AND_HIDE_ITS_OWN_NOTIFICATIONS_AND_BADGES,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/packagemanager.admin,IDS_TPLATFORM_HEADER_INSTALLING_UNINSTALLING_APPLICATION_PACKAGES_AND_CLEARING_CACHES,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_INSTALL_AND_UNINSTALL_APPLICATION_PACKAGES_AND_CLEAR_APPLICATIONS_CACHES,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/packagemanager.info,IDS_TPLATFORM_HEADER_RETRIEVING_DETAILED_PACKAGE_INFORMATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RETRIEVE_DETAILED_APPLICATION_PACKAGE_INFORMATION,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/power,IDS_TPLATFORM_BODY_MANAGING_POWER,IDS_TPLATFORM_SBODY_THIS_APPLICATION_CAN_CONTROL_POWER_RELATED_SETTINGS_SUCH_AS_DIMMING_THE_SCREEN,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB, +mobile,core,public,2.3,9.9,yes,http://tizen.org/privilege/push,IDS_TPLATFORM_BODY_RECEIVING_PUSH_NOTIFICATIONS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RECEIVE_NOTIFICATIONS_VIA_THE_INTERNET,IDS_TPLATFORM_BODY_NETWORK_CONNECTIONS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/recorder,IDS_TPLATFORM_HEADER_RECORDING_VIDEO_AND_AUDIO,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RECORD_VIDEO_AND_AUDIO,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB, +common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/screenshot,IDS_TPLATFORM_HEADER_CAPTURING_DEVICE_SCREEN,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CAPTURE_SCREENSHOTS,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/shortcut,IDS_TPLATFORM_HEADER_MANAGING_SHORTCUTS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_CREATE_AND_DELETE_SHORTCUTS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/systemsettings,IDS_TPLATFORM_HEADER_MANAGING_UNRESTRICTED_SYSTEM_SETTINGS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_UNRESTRICTED_SYSTEM_SETTINGS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/systemsettings.admin,IDS_TPLATFORM_HEADER_MANAGING_ALL_SYSTEM_SETTINGS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_READ_AND_WRITE_ALL_SYSTEM_SETTINGS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/telephony,IDS_TPLATFORM_BODY_ACCESSING_TELEPHONY_INFORMATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_RETRIEVE_TELEPHONY_INFORMATION_SUCH_AS_THE_NETWORK_AND_SIM_CARD_USED_THE_IMEI_AND_THE_STATUSES_OF_CALLS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/telephony.admin,IDS_TPLATFORM_HEADER_MANAGING_TELEPHONY_SETTINGS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_TELEPHONY_SETTINGS_SUCH_AS_THOSE_FOR_INCOMING_AND_OUTGOING_CALLS_FORWARDING_AND_HOLDING_CALLS_NETWORKS_AND_SIM_CARDS,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/tethering.admin,IDS_TPLATFORM_HEADER_ACCESSING_TETHERING_SERVICES,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ENABLE_AND_DISABLE_TETHERING_SERVICES,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/volume.set,IDS_TPLATFORM_HEADER_ADJUSTING_VOLUME,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ADJUST_THE_VOLUME_FOR_DIFFERENT_FEATURES_SUCH_AS_NOTIFICATION_ALERTS_RINGTONES_AND_MEDIA,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, +common,core,platform,2.3,9.9,yes,http://tizen.org/privilege/web-history.admin,IDS_TPLATFORM_HEADER_MANAGING_INTERNET_HISTORY,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_MANAGE_YOUR_INTERNET_HISTORY,IDS_TPLATFORM_BODY_PERSONAL_INFORMATION_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/wifidirect,IDS_TPLATFORM_HEADER_MANAGING_WI_FI_DIRECT_INFORMATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ENABLE_AND_DISABLE_WI_FI_DIRECT_MANAGE_WI_FI_DIRECT_CONNECTIONS_AND_CHANGE_WI_FI_DIRECT_SETTINGS,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB, +common,core,public,2.3,9.9,yes,http://tizen.org/privilege/window.priority.set,IDS_TPLATFORM_HEADER_DISPLAYING_WINDOWS_ON_TOP_OF_OTHER_APPLICATIONS_AND_SCREENS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_APPEAR_ON_TOP_OF_OTHER_WINDOWS_AND_SCREENS_MSG,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB, diff --git a/capi/res/dbspace/core_privilege_info.db b/capi/res/dbspace/core_privilege_info.db index 27586db618be4fc44ca005815dad4a9b26573d8a..72e3393b75a047dd53cbf4bc96be2455a4065618 100644 GIT binary patch delta 2132 zcmY+FZERCj7{|}Kec4^NuDw0?ZY$kJ3uB{fb&d_%j=>z;m~(CwOH-T6vea3YW{h#g zxik>u9AY9-BDW_HG-60dlo-*$5DjV~0U}_+OCp5CXpjJg55BNyB;eb$;v>7qn>`JeK#g6-cz$T0PZn9kQr9O8sI~`wK1Cag(+P z4cg+a*A`b$TS{u^`GS>>eqgEL!f*}fSCv&F9=8h63nl192qj{;3#Od(RBM>N!+(S} zS>~`54w;M=zK=F?j145P4-OgoHW%^qb;kiu61r#e%JB(?_wf?o{^Xocni7h6h{g+8 zqD&4KnMLH1B0B0kgof<~uhaylW$e_sB1EZN@-DL5W|@$fz$*>rqcyG@d>7zO!u6nw z3hoFJ9kYRGFo)Z9If~Fi_qs12xsb8+C>ewU&M8Icg<=QqnQb9~i^zP9=-wQ%Bj^YM zO9i(8xCKckSqg5@{~n8DrNJ1FU9EY^!%k9wgm&)b7? zF2*uRT&M3l=nvDF?^FIF;O@XH;G(L0B@rMpM^e~=17;f)m7gIGVp%k)TTE72^$jZX z%wY+vn93UGU*&fJ?i&0U?4p8yo4BxyRp`TBoPcTP)Iq-oqUutXA}$j_12cpAFz`L9 zl^9#Qh1ksI0t;{RdjaI`({aV}@R7UrJZkp5add?aKTDPO8d>B5AB-xsqeVr{~gbEo-rF|!Bnxn?gRch;LgKIa9vd{h&bVAf$@-!UZz}Ik%Zxp}Tpvoj(mMkaK|3s`80MIu|nYWE{oA z<|*334@Laa0#;4V;967jD~(6cwt&HA?(jGc>N52^JhAjxzS-)qfKI^eh8>_&RhEl* zTMf&U&f-OeH4$oUIgYv)F_s!7Z6@PZ{3DUg)lA?3ZYRqg37n$KYGJW%wmH zp(=-c#2RFx5~JFikowVDn?+`sS#a8p&j6>%=g;xbt* z=_93AX?%7PRYh2Vq<)7VeLI)LuZehjm~Bjt8TUco_{G!5^KL88!To?c1NR?Q-hdJb fu3&CvamYOXF!d*Ih$PxFr%sMkny&o*%)S2r-?jZ} delta 2234 zcmYk8du&rx9LLYOUAx=v(e~W#MJc1~SwyS30U)=D2Nwa!bO6_&YdSHOWN z;~c|33sG)wf@mO-Xrhv^Y)r*ROne3mF^W1dAs8^C@{hnjY9u6{+uro-pOf}}e!uVU zaenvL9(fxcS%Amw`d$D)xxBW|+zZ^lI!ov`$jtz5W~rsX$eCU=z`_cb3m)CNG|e4` zB`!TR5Oing3Cfk?f?7^@hFU(Ot1IiKk8GVP_Rs^h(!;uu9+oD0m>cO)TBm$n*lUUa zT?6NZgCHVH{Q}-sV1ZSz3|0w(5D()3Oem>9hw>^vk0y01Py)L(BpcsC6C6XMacqZU zS+D6LUYRqUw(f-Hyl65ylcy*6O2GZgnPKIkWP&t!A(KfT#6?!DKX1(^9>+zbnnK!+Hw*$axq;5X)j|QdWuHU9W2HG6wQ*x{tk;SR z+l!SWHW`(cFg%pRGg@iMvP47Ddmc{Ls?#X4b_x0jcAfsDN;xBKj(E+U&hdmy+p4S=B&BJp9I|B@OyAlmga1v zV-=H^umg))iuQW5a<}#-a#k^&)P6jf$JbC{We%x>mpDXkC#C$d(W~?~e94~&Is|_N z=Vj?lfmAz~M0A9dXjyvK|16O1)r^fykX)0?V7rnsISqT#si*htQ63(!D+?ZjAsFy& zj|G)aJe$)#znJ?b4u-abBg4MfU^pah^~HjLNWd@lCq(*5^apkh4g|z#AQTNpqGB{Y z5EOmUEP5p14-W@ofr#h}`Lj=`UL+<)e6fHy91ab}!V%?exf@N`S%TpiY}M+2tm!O2 z3%GCKD_~ZZB!QHzWp;x}qSN|)-~Fx7R-J3H+NUvGn4NI-6{~2zEs#xXnBT}0v1|Hz z*X@i&Z-gG8b8$`3vnVytEwHzS87I@YK{JlGozj6ftVo|8hI8)O24L@Sz6AQ{%WU&)-8^>KRH* zlD<6Rl@p$SGK~g)9&mrbKf$~#y)KZBCT5qjOBsuSKLvC;_&zu#OE1|-#YR^9IM(An&GurCnU3nGHnPpl z?t21vWZxNeZ(i(y5Iwhn1xlu{S93-WEoJ-$Q@^^l%&-yk%Tg=doUJVBku+9^$~x4g z%x-xNJ=wx^qT}>Vv+GwG+j^Rg$tK2zCg?2WHb$@S96Hd<&~O;<(A?Vl7c;eV+)CBW zZGoj{Bsy)g9u|FKD!bRLLw9V%)Xo|pVu;(aHFPS+{GX#;ZA?F!#6lK*r}l6fa9_b` zFfB_@2>69gCY_qf4zhY1+r#e)B+{{hO_C^;P+9RdzGMC-SVr=MKA>SZ4Mvhzr3{l_ zszZ0P7kk>fjBi=M1|rzZqR@?@SS9wGTzId&hRK7qINEd%_HpS)!d~H-Occd|h+=|C zbmv4o->@Bbw%+F{5`4WN<-KYn}u3`RPVwq@1ut+6fip0v{4`CXVkX z^AJNrDi34Yhp9IKMzt@dI)G+IaL;6>VAY{+`Vu5?dHOTnZl@(5evppCA^a)*sd1uI z&KNJJ4Ofo_VH_PZzZmWk=78VGT~+$Zs#K+(UA3L}ZG1tt!N?Hau+*a^Yr??Xa=~Ob z9#74ta?{z&N#*sV_Q%{C0EabK7Qi_3Zw|8<;Xk7ulexWclvnA+?{aQP<111Yruo5^ s;RrhBmtab}HGcvitJNLf0+7Msg(aBN9xns|X0^@}7a8QV?@u}5Z;h}N@&Et; delta 1140 zcmZXTZA?>V6vv-)pSDzOX|J~^rBq;>W$w*sJ@UMWdTxz22B-5kE%hLY;`d3wG8G1>h&DYeuIXD33nT=!7C&z zi(V>q9l#TH-@twh)t}+_@n8i3tb!nPhSNqEM!qr+2e-X|FFU@qrAzkmV1F)eT{ocyt&P7>X;U?8 z>%y-O`=APQ>ynB^w|SA!8ZH5gWKkB+Qt2%R#y$T+J;s}E80wz+GYR}KI{l59_MXU< zJcl!3lMrHID^9se@QNn~R~ueed^&vr;qGt(6s(E{pwhex>zW^flPR|0DgT=^ZEsM$ zZaXL~I{ih$-GEEvqAZ>f(%{Jm3qmL+}x@_Z9p=9?0TPf)w{0wmz+?W+t?Fr{#C0P^Vub)WmHiYqIz~P4Dun-*xX|SAC-y-GL|kk!*)x z;(s3A3x1>&YI3!tlyG;sT4*Mpl2X~3Z#)?=Z>$4*?xbSM$AGaI%lmS$EK+S~&*plu zI8^gAaV640rBoZf)O8P9F)#Enw5VT%Y@qaL*k-s11+E{i!%lLQxMi_|6T9)9=nRDL zpJ)oYFfn)`S1RbtDi7lQ*oN|NJsr@2j@}gr;*Y&g6pMBXloNWEL%0OxtD+r@slLoX zlhCS|s`1un8I@*xacBQu(1W&tM-avflP(NJE7lk7G~uqo+n^(-WpR!>8O7~G3+!Rv zXY5z4!xaD#wRxlol(8ik#pSWfFoMUEZhSX3z&^&$u@4PHnT7%%VNM(H=6E{{qCLK* ze@Lhu{vZ!!@mF4&AKw^&jg4<$PO{=>=0j+nFk)$9nWlHg)ISsD0Ap(L1b|^OBWe=D z>$e!2+zS)T_bj}ITar_dU?!H~RkWv;Ag+FyItDPUR!tWHOkuaU1S$2A*bb0Xy|W)s K5Y@Z$JK#Um>^m0# diff --git a/capi/src/privilege_db_manager.c b/capi/src/privilege_db_manager.c index 8c23a51..4e5a8e9 100755 --- a/capi/src/privilege_db_manager.c +++ b/capi/src/privilege_db_manager.c @@ -13,17 +13,20 @@ typedef enum { - PRIVILIEGE_DB_MANAGER_PROFILE_TYPE_COMMON = 0, - PRIVILIEGE_DB_MANAGER_PROFILE_TYPE_MOBILE = 1, - PRIVILIEGE_DB_MANAGER_PROFILE_TYPE_WEARABLE = 2 + PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON = 0, + PRIVILEGE_DB_MANAGER_PROFILE_TYPE_MOBILE = 1, + PRIVILEGE_DB_MANAGER_PROFILE_TYPE_WEARABLE = 2, + PRIVILEGE_DB_MANAGER_PROFILE_TYPE_TV = 3 } privilege_db_manager_profile_type_e; #ifdef PROFILE_TYPE_MOBILE - static privilege_db_manager_profile_type_e g_privilege_db_manager_profile_type = PRIVILIEGE_DB_MANAGER_PROFILE_TYPE_MOBILE; + static privilege_db_manager_profile_type_e g_privilege_db_manager_profile_type = PRIVILEGE_DB_MANAGER_PROFILE_TYPE_MOBILE; #elif PROFILE_TYPE_WEARABLE - static privilege_db_manager_profile_type_e g_privilege_db_manager_profile_type = PRIVILIEGE_DB_MANAGER_PROFILE_TYPE_WEARABLE; + static privilege_db_manager_profile_type_e g_privilege_db_manager_profile_type = PRIVILEGE_DB_MANAGER_PROFILE_TYPE_WEARABLE; +#elif PROFILE_TYPE_TV + static privilege_db_manager_profile_type_e g_privilege_db_manager_profile_type = PRIVILEGE_DB_MANAGER_PROFILE_TYPE_TV; #else - static privilege_db_manager_profile_type_e g_privilege_db_manager_profile_type = PRIVILIEGE_DB_MANAGER_PROFILE_TYPE_COMMON; + static privilege_db_manager_profile_type_e g_privilege_db_manager_profile_type = PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON; #endif #define TryReturn(condition, returnValue, ...) \ @@ -37,7 +40,7 @@ int __initialize_db(sqlite3** db, privilege_db_manager_package_type_e package_ty { char* db_path = NULL; - if(package_type == PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_CORE){ + if(package_type == PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE){ db_path = PRIVILEGE_INFO_CORE_DB_PATH; }else{ db_path = PRIVILEGE_INFO_WRT_DB_PATH; @@ -48,9 +51,9 @@ int __initialize_db(sqlite3** db, privilege_db_manager_package_type_e package_ty { LOGE("[DB_FAIL] Can't open database %s : %s", db_path, sqlite3_errmsg(*db)); sqlite3_close(*db); - return PRIVILIEGE_DB_MANAGER_ERR_CONNECTION_FAIL; + return PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL; } - return PRIVILIEGE_DB_MANAGER_ERR_NONE; + return PRIVILEGE_DB_MANAGER_ERR_NONE; } void __finalize_db(sqlite3* db, sqlite3_stmt* stmt) { @@ -61,25 +64,25 @@ void __finalize_db(sqlite3* db, sqlite3_stmt* stmt) sqlite3_close(db); } -int privilege_db_manager_get_privilege_list(GList** privilege_list) +int privilege_db_manager_get_privilege_list(const char* api_version, privilege_db_manager_package_type_e package_type, GList** privilege_list) { sqlite3* db = NULL; sqlite3_stmt* stmt = NULL; int ret; - ret = __initialize_db(&db, PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_CORE); - if(ret != PRIVILIEGE_DB_MANAGER_ERR_NONE) + ret = __initialize_db(&db, package_type); + if(ret != PRIVILEGE_DB_MANAGER_ERR_NONE) return ret; GList* temp_privilege_list = NULL; - char* sql = sqlite3_mprintf("select privilege_name, privilege_level_id from privilege_info where profile_id=%d or profile_id=%d", PRIVILIEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type); + char* sql = sqlite3_mprintf("select privilege_name, privilege_level_id, changed_to, api_version_issued, api_version_expired from privilege_info where (profile_id=%d or profile_id=%d) and package_type_id=%d", PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type); ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL); if(ret != SQLITE_OK) { LOGE("[DB_FAIL] fail to prepare database : %s", sqlite3_errmsg(db)); sqlite3_close(db); - return PRIVILIEGE_DB_MANAGER_ERR_INVALID_QUERY; + return PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY; } do{ @@ -94,8 +97,10 @@ int privilege_db_manager_get_privilege_list(GList** privilege_list) privilege_info_db_row->privilege_display = NULL; privilege_info_db_row->privilege_description = NULL; privilege_info_db_row->privilege_level = NULL; - privilege_info_db_row->version = NULL; + privilege_info_db_row->issued_version = NULL; + privilege_info_db_row->expired_version = NULL; privilege_info_db_row->package_type = NULL; + privilege_info_db_row->changed_to = NULL; privilege_info_db_row->profile_id = 0; privilege_info_db_row->package_type_id = 0; privilege_info_db_row->privilege_level_id = 0; @@ -103,11 +108,32 @@ int privilege_db_manager_get_privilege_list(GList** privilege_list) privilege_info_db_row->privilege_name = strdup((char*)sqlite3_column_text(stmt,0)); if(privilege_info_db_row->privilege_name == NULL) { - LOGE("[PRIVILIEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed."); + LOGE("[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed."); free(privilege_info_db_row); - return PRIVILIEGE_DB_MANAGER_ERR_OUT_OF_MEMORY; + return PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY; } privilege_info_db_row->privilege_level_id = sqlite3_column_int(stmt,1); + privilege_info_db_row->changed_to = strdup((char*)sqlite3_column_text(stmt,2)); + if(privilege_info_db_row->changed_to == NULL) + { + LOGE("[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] changed_to's strdup is failed."); + free(privilege_info_db_row); + return PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY; + } + privilege_info_db_row->issued_version = strdup((char*)sqlite3_column_text(stmt,3)); + if(privilege_info_db_row->issued_version == NULL) + { + LOGE("[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] api_version_issued's strdup is failed."); + free(privilege_info_db_row); + return PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY; + } + privilege_info_db_row->expired_version = strdup((char*)sqlite3_column_text(stmt,4)); + if(privilege_info_db_row->expired_version == NULL) + { + LOGE("[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] api_version_expired's strdup is failed."); + free(privilege_info_db_row); + return PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY; + } temp_privilege_list = g_list_append(temp_privilege_list, privilege_info_db_row); } }while (ret == SQLITE_ROW); @@ -116,7 +142,7 @@ int privilege_db_manager_get_privilege_list(GList** privilege_list) __finalize_db(db, stmt); - return PRIVILIEGE_DB_MANAGER_ERR_NONE; + return PRIVILEGE_DB_MANAGER_ERR_NONE; } int privilege_db_manager_get_privilege_display(privilege_db_manager_package_type_e package_type, const char* privilege_name, const char* api_version, char** privilege_display) @@ -125,18 +151,18 @@ int privilege_db_manager_get_privilege_display(privilege_db_manager_package_type sqlite3_stmt* stmt = NULL; int ret; ret = __initialize_db(&db, package_type); - if(ret != PRIVILIEGE_DB_MANAGER_ERR_NONE) + if(ret != PRIVILEGE_DB_MANAGER_ERR_NONE) return ret; char* sql = sqlite3_mprintf("select privilege_display from privilege_info where (profile_id=%d or profile_id=%d) and package_type_id=%d and privilege_name=%Q and api_version_issued<=%Q and api_version_expired>=%Q", - PRIVILIEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type, privilege_name, api_version, api_version); + PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type, privilege_name, api_version, api_version); ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL); if(ret != SQLITE_OK) { LOGE("[DB_FAIL] fail to prepare database : %s", sqlite3_errmsg(db)); sqlite3_close(db); - return PRIVILIEGE_DB_MANAGER_ERR_INVALID_QUERY; + return PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY; } ret = sqlite3_step(stmt); @@ -145,13 +171,13 @@ int privilege_db_manager_get_privilege_display(privilege_db_manager_package_type LOGD("privilege_display = %s", (char*)sqlite3_column_text(stmt,0)); *privilege_display = strdup((char*)sqlite3_column_text(stmt,0)); - TryReturn(*privilege_display != NULL, PRIVILIEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILIEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed."); + TryReturn(*privilege_display != NULL, PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed."); __finalize_db(db, stmt); - return PRIVILIEGE_DB_MANAGER_ERR_NONE; + return PRIVILEGE_DB_MANAGER_ERR_NONE; } __finalize_db(db, stmt); - return PRIVILIEGE_DB_NO_EXIST_RESULT; + return PRIVILEGE_DB_NO_EXIST_RESULT; } int privilege_db_manager_get_privilege_description(privilege_db_manager_package_type_e package_type, const char* privilege_name, const char* api_version, char** privilege_description) @@ -160,18 +186,18 @@ int privilege_db_manager_get_privilege_description(privilege_db_manager_package_ sqlite3_stmt* stmt = NULL; int ret; ret = __initialize_db(&db, package_type); - if(ret != PRIVILIEGE_DB_MANAGER_ERR_NONE) + if(ret != PRIVILEGE_DB_MANAGER_ERR_NONE) return ret; char* sql = sqlite3_mprintf("select privilege_description from privilege_info where (profile_id=%d or profile_id=%d) and package_type_id=%d and privilege_name=%Q and api_version_issued<=%Q and api_version_expired>=%Q", - PRIVILIEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type, privilege_name, api_version, api_version); + PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type, privilege_name, api_version, api_version); ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL); if(ret != SQLITE_OK) { LOGE("[DB_FAIL] fail to prepare database : %s", sqlite3_errmsg(db)); sqlite3_close(db); - return PRIVILIEGE_DB_MANAGER_ERR_INVALID_QUERY; + return PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY; } ret = sqlite3_step(stmt); @@ -180,14 +206,14 @@ int privilege_db_manager_get_privilege_description(privilege_db_manager_package_ LOGD("privilege_description = %s", (char*)sqlite3_column_text(stmt,0)); *privilege_description = strdup((char*)sqlite3_column_text(stmt,0)); - TryReturn(*privilege_description != NULL, PRIVILIEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILIEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed."); + TryReturn(*privilege_description != NULL, PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed."); __finalize_db(db, stmt); - return PRIVILIEGE_DB_MANAGER_ERR_NONE; + return PRIVILEGE_DB_MANAGER_ERR_NONE; } __finalize_db(db, stmt); - return PRIVILIEGE_DB_NO_EXIST_RESULT; + return PRIVILEGE_DB_NO_EXIST_RESULT; } int privilege_db_manager_get_privilege_group_display(privilege_db_manager_package_type_e package_type, const char* privilege_name, const char* api_version, int* privilege_group_number) @@ -196,18 +222,18 @@ int privilege_db_manager_get_privilege_group_display(privilege_db_manager_packag sqlite3_stmt* stmt = NULL; int ret; ret = __initialize_db(&db, package_type); - if(ret != PRIVILIEGE_DB_MANAGER_ERR_NONE) + if(ret != PRIVILEGE_DB_MANAGER_ERR_NONE) return ret; char* sql = sqlite3_mprintf("select privilege_group_id from privilege_info where (profile_id=%d or profile_id=%d) and package_type_id=%d and privilege_name=%Q and api_version_issued<=%Q and api_version_expired>=%Q", - PRIVILIEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type, privilege_name, api_version, api_version); + PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type, privilege_name, api_version, api_version); ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL); if(ret != SQLITE_OK) { LOGE("[DB_FAIL] fail to prepare database : %s", sqlite3_errmsg(db)); sqlite3_close(db); - return PRIVILIEGE_DB_MANAGER_ERR_INVALID_QUERY; + return PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY; } ret = sqlite3_step(stmt); @@ -217,11 +243,11 @@ int privilege_db_manager_get_privilege_group_display(privilege_db_manager_packag LOGD("privilege_group_number = %d", *privilege_group_number); __finalize_db(db, stmt); - return PRIVILIEGE_DB_MANAGER_ERR_NONE; + return PRIVILEGE_DB_MANAGER_ERR_NONE; } __finalize_db(db, stmt); - return PRIVILIEGE_DB_NO_EXIST_RESULT; + return PRIVILEGE_DB_NO_EXIST_RESULT; } diff --git a/capi/src/privilege_info.c b/capi/src/privilege_info.c index a77632e..67c0f0d 100644 --- a/capi/src/privilege_info.c +++ b/capi/src/privilege_info.c @@ -23,6 +23,7 @@ #include "privilege_db_manager.h" #include "privilege_info.h" #include "privilege_info_types.h" +#include "privilege_manager.h" #ifdef LOG_TAG #undef LOG_TAG @@ -46,28 +47,28 @@ int privilege_info_privilege_list_by_pkgid_callback (const char *privilege_name, int group_id = 6; //Native - int ret = privilege_db_manager_get_privilege_group_display(PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege_name, "2.3", &group_id); - if(ret == PRIVILIEGE_DB_MANAGER_ERR_NONE) + int ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege_name, "2.3", &group_id); + if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { LOGD("group_id = %d", group_id); groupTable[group_id] = 1; return PRVMGR_ERR_NONE; } - else if(ret != PRIVILIEGE_DB_NO_EXIST_RESULT) + else if(ret != PRIVILEGE_DB_NO_EXIST_RESULT) { return PRVMGR_ERR_INTERNAL_ERROR; } //Web - ret = privilege_db_manager_get_privilege_group_display(PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege_name, "2.3", &group_id); - if(ret == PRIVILIEGE_DB_MANAGER_ERR_NONE) + ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege_name, "2.3", &group_id); + if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { LOGD("group_id = %d", group_id); groupTable[group_id] = 1; return PRVMGR_ERR_NONE; } - else if(ret != PRIVILIEGE_DB_NO_EXIST_RESULT) + else if(ret != PRIVILEGE_DB_NO_EXIST_RESULT) { return PRVMGR_ERR_INTERNAL_ERROR; } @@ -122,8 +123,8 @@ int privilege_info_privilege_list_callback (const char *privilege_name, void *us TryReturn(user_data != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] user_data is NULL"); //Native - int ret = privilege_db_manager_get_privilege_group_display(PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege_name, "2.3", &group_id); - if(ret == PRIVILIEGE_DB_MANAGER_ERR_NONE) + int ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege_name, "2.3", &group_id); + if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { if(group_id == data.privilege_group){ LOGD("data.privilege_group = %d", data.privilege_group); @@ -133,14 +134,14 @@ int privilege_info_privilege_list_callback (const char *privilege_name, void *us return PRVMGR_ERR_NONE; } } - else if(ret != PRIVILIEGE_DB_NO_EXIST_RESULT) + else if(ret != PRIVILEGE_DB_NO_EXIST_RESULT) { return PRVMGR_ERR_INTERNAL_ERROR; } //Web - ret = privilege_db_manager_get_privilege_group_display(PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege_name, "2.3", &group_id); - if(ret == PRIVILIEGE_DB_MANAGER_ERR_NONE) + ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege_name, "2.3", &group_id); + if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { if(group_id == data.privilege_group){ LOGD("data.privilege_group = %d", data.privilege_group); @@ -150,7 +151,7 @@ int privilege_info_privilege_list_callback (const char *privilege_name, void *us return PRVMGR_ERR_NONE; } } - else if(ret != PRIVILIEGE_DB_NO_EXIST_RESULT) + else if(ret != PRIVILEGE_DB_NO_EXIST_RESULT) { return PRVMGR_ERR_INTERNAL_ERROR; } @@ -288,11 +289,11 @@ int privilege_info_get_name_string_id(const char *privilege, char **name_string_ char* temp = NULL; // Check Native - int ret = privilege_db_manager_get_privilege_display(PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege, "2.3", &temp); + int ret = privilege_db_manager_get_privilege_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege, "2.3", &temp); LOGD("privilege = %s, string id = %s", privilege, temp); - if(ret == PRIVILIEGE_DB_MANAGER_ERR_NONE) + if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { if(temp == NULL) { @@ -317,7 +318,7 @@ int privilege_info_get_name_string_id(const char *privilege, char **name_string_ return PRVMGR_ERR_NONE; } } - else if(ret != PRIVILIEGE_DB_NO_EXIST_RESULT) + else if(ret != PRIVILEGE_DB_NO_EXIST_RESULT) { free(temp); return PRVMGR_ERR_INTERNAL_ERROR; @@ -330,9 +331,9 @@ int privilege_info_get_name_string_id(const char *privilege, char **name_string_ } // Check WRT - ret = privilege_db_manager_get_privilege_display(PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege, "2.3", &temp); + ret = privilege_db_manager_get_privilege_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege, "2.3", &temp); - if(ret == PRIVILIEGE_DB_MANAGER_ERR_NONE) + if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { if(temp == NULL) { @@ -363,7 +364,7 @@ int privilege_info_get_name_string_id(const char *privilege, char **name_string_ return PRVMGR_ERR_NONE; } } - else if(ret == PRIVILIEGE_DB_NO_EXIST_RESULT) + else if(ret == PRIVILEGE_DB_NO_EXIST_RESULT) { *name_string_id = NULL; free(temp); @@ -443,9 +444,9 @@ int privilege_info_get_description_string_id(const char *privilege, char **descr char* temp = NULL; // Check Native - int ret = privilege_db_manager_get_privilege_description(PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege, "2.3", &temp); + int ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege, "2.3", &temp); - if(ret == PRIVILIEGE_DB_MANAGER_ERR_NONE) + if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { if(temp == NULL) { @@ -470,7 +471,7 @@ int privilege_info_get_description_string_id(const char *privilege, char **descr return PRVMGR_ERR_NONE; } } - else if(ret != PRIVILIEGE_DB_NO_EXIST_RESULT) + else if(ret != PRIVILEGE_DB_NO_EXIST_RESULT) { free(temp); return PRVMGR_ERR_INTERNAL_ERROR; @@ -483,9 +484,9 @@ int privilege_info_get_description_string_id(const char *privilege, char **descr } // Check Web - ret = privilege_db_manager_get_privilege_description(PRIVILIEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege, "2.3", &temp); + ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege, "2.3", &temp); - if(ret == PRIVILIEGE_DB_MANAGER_ERR_NONE) + if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { if(temp == NULL) { @@ -516,7 +517,7 @@ int privilege_info_get_description_string_id(const char *privilege, char **descr return PRVMGR_ERR_NONE; } } - else if(ret == PRIVILIEGE_DB_NO_EXIST_RESULT) + else if(ret == PRIVILEGE_DB_NO_EXIST_RESULT) { *description_string_id = NULL; free(temp); @@ -580,109 +581,5 @@ int privilege_info_get_privilege_description(const char *privilege, char **descr return PRVMGR_ERR_NONE; } -static void __free_privilege_list(GList* privilege_list) -{ - GList* l = NULL; - for (l = privilege_list; l != NULL; l = l->next) - { - privilege_info_db_row_s* privilege_info_db_row = (privilege_info_db_row_s*)l->data; - if(privilege_info_db_row->privilege_name != NULL) - free(privilege_info_db_row->privilege_name); - } -} - - -static int __privilege_manager_core_privilege_level(const char* privilege, int* privilege_level) -{ - TryReturn(privilege != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); - - int ret; - GList* privilege_list; - ret = privilege_db_manager_get_privilege_list(&privilege_list); - if(ret != PRIVILIEGE_DB_MANAGER_ERR_NONE){ - LOGE("[FAIL TO CALL FUNCTION] privilege_db_manager_get_privilege_list()"); - return PRVMGR_ERR_INTERNAL_ERROR; - } - GList* l = NULL; - for (l = privilege_list; l != NULL; l = l->next) - { - privilege_info_db_row_s* privilege_info_db_row = (privilege_info_db_row_s*)l->data; - if (strcmp(privilege_info_db_row->privilege_name, privilege) == 0) - { - *privilege_level = privilege_info_db_row->privilege_level_id; - __free_privilege_list(privilege_list); - return PRVMGR_ERR_NONE; - } - } - __free_privilege_list(privilege_list); - - return PRVMGR_ERR_NO_EXIST_PRIVILEGE; -} - -int privilege_manager_verify_privilege_list(privilege_manager_package_type_e package_type, GList* privilege_list, privilege_manager_visibility_e visibility, char** error_privilege_name) -{ - LOGD("privilege_info_compare_privilege_level called"); - GList *l; - int ret; - int i = 0; - *error_privilege_name = NULL; - - TryReturn(privilege_list != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_list is NULL"); - - for (l = privilege_list; l != NULL; l = l->next) - { - int privilege_level_id; - char* privilege_name = (char*)l->data; - - TryReturn(privilege_name != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_list[%d] is NULL", i); - i++; - - LOGD("Checking privilege : %s", privilege_name); - - ret = __privilege_manager_core_privilege_level(privilege_name, &privilege_level_id); - if(ret == PRVMGR_ERR_NO_EXIST_PRIVILEGE) - { - LOGE("[PRVMGR_ERR_NO_EXIST_PRIVILEGE] There are no privilege %s in DB", privilege_name); - *error_privilege_name = (char*)calloc(strlen(privilege_name) + 1, sizeof(char)); - TryReturn(*error_privilege_name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); - memcpy(*error_privilege_name, privilege_name, strlen(privilege_name)); - - return PRVMGR_ERR_NO_EXIST_PRIVILEGE; - } - else if(ret == PRVMGR_ERR_NONE) - { - if(visibility == PRVMGR_PACKAGE_VISIBILITY_PARTNER){ - if(privilege_level_id == PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM) - { - LOGE("[PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL] Visibility and Privilege level are mismatched"); - LOGE("[PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL] Visibility : partner, Privilege Level : %d", privilege_level_id); - *error_privilege_name = (char*)calloc(strlen(privilege_name) + 1, sizeof(char)); - TryReturn(*error_privilege_name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); - memcpy(*error_privilege_name, privilege_name, strlen(privilege_name)); - - return PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL; - } - } - else if(visibility == PRVMGR_PACKAGE_VISIBILITY_PUBLIC){ - if(privilege_level_id == PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PARTNER || privilege_level_id == PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM) - { - LOGE("[PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL] Visibility and Privilege level are mismatched"); - LOGE("[PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL] Visibility : public, Privilege Level : %d", privilege_level_id); - *error_privilege_name = (char*)calloc(strlen(privilege_name) + 1, sizeof(char)); - TryReturn(*error_privilege_name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); - memcpy(*error_privilege_name, privilege_name, strlen(privilege_name)); - - return PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL; - } - } - } - else - { - return ret; - } - } - - return PRVMGR_ERR_NONE; -} diff --git a/capi/src/privilege_manager.c b/capi/src/privilege_manager.c index 6495872..fb965fb 100755 --- a/capi/src/privilege_manager.c +++ b/capi/src/privilege_manager.c @@ -1,10 +1,11 @@ - #include #include +#include #include "privilege_db_manager.h" #include "privilege_manager.h" - +#define MESSAGE_SIZE 512 +#define MESSAGE_LIST_SIZE 10000 #ifdef LOG_TAG #undef LOG_TAG @@ -17,6 +18,14 @@ return returnValue; \ } \ else {;} +/* +#ifdef CURRENT_TIZEN_VERSION + static char* privilege_manager_current_tizen_version = (char*)CURRENT_TIZEN_VERSION; +#else + static char* privilege_manager_current_tizen_version = "2.4" +#endif +*/ + static void __free_privilege_list(GList* privilege_list) { @@ -29,106 +38,328 @@ static void __free_privilege_list(GList* privilege_list) } } -static int __privilege_manager_check_privilege_list(const char* privilege, int* privilege_level) + +static int __privilege_manager_check_privilege_list(const char* api_version, const char* privilege, GList* vaild_privilege_list, int* privilege_level, char** changed_to, char** valid_api_version) { TryReturn(privilege != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); - - int ret; - GList* privilege_list; - ret = privilege_db_manager_get_privilege_list(&privilege_list); - if(ret != PRIVILIEGE_DB_MANAGER_ERR_NONE){ - LOGE("[FAIL TO CALL FUNCTION] privilege_db_manager_get_privilege_list()"); - return PRVMGR_ERR_INTERNAL_ERROR; - } - + int i, is_valid_version = 0; GList* l = NULL; - for (l = privilege_list; l != NULL; l = l->next) + for (l = vaild_privilege_list; l != NULL; l = l->next) { privilege_info_db_row_s* privilege_info_db_row = (privilege_info_db_row_s*)l->data; if (strcmp(privilege_info_db_row->privilege_name, privilege) == 0) { - *privilege_level = privilege_info_db_row->privilege_level_id; - __free_privilege_list(privilege_list); - return PRVMGR_ERR_NONE; + LOGD("Matched privilege name exist"); + LOGD("Check api version"); + for(i=0; i<3; i++) + { + if( !(api_version[i] <= privilege_info_db_row->expired_version[i]) ) + { + is_valid_version = 1; + } + else if ( !(api_version[i] >= privilege_info_db_row->issued_version[i])) + { + is_valid_version = 2; + } + } + + if(is_valid_version > 0) + { + LOGD("%s is invalid in tizen version: %s", privilege_info_db_row->privilege_name, api_version); + } + + if(is_valid_version == 0) + { + *privilege_level = privilege_info_db_row->privilege_level_id; + return PRVMGR_ERR_NONE; + } + else if(is_valid_version == 1) + { + LOGD("privilege deprecated version is lower than api version"); + *valid_api_version = strdup(privilege_info_db_row->expired_version); + TryReturn(valid_api_version != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] valid_api_version's strdup is failed."); + if(privilege_info_db_row->changed_to != NULL && strcmp(privilege_info_db_row->changed_to, "") != 0 ) + { + LOGE("%s was changed to %s", privilege, privilege_info_db_row->changed_to); + + *changed_to = strdup(privilege_info_db_row->changed_to); + TryReturn(changed_to != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] changed_to's strdup is failed."); + } + return PRVMGR_ERR_DEPRECATED_PRIVILEGE; + } + else if(is_valid_version == 2) + { + LOGD("privilege issued version is higher than api version"); + *valid_api_version = strdup(privilege_info_db_row->issued_version); + TryReturn(valid_api_version != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] valid_api_version's strdup is failed."); + return PRVMGR_ERR_NO_EXIST_PRIVILEGE; + } } } - __free_privilege_list(privilege_list); return PRVMGR_ERR_NO_EXIST_PRIVILEGE; } +const char* __get_privilege_level_string(privilege_db_manager_privilege_level_e privilege_db_manager_privilege_level) +{ + if(privilege_db_manager_privilege_level == PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PUBLIC){ + return "public"; + }else if(privilege_db_manager_privilege_level == PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PARTNER){ + return "partner"; + }else if(privilege_db_manager_privilege_level == PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM){ + return "platform"; + }else{ + return "not defined privilege"; + } +} + -int privilege_manager_verify_privilege_name(privilege_manager_package_type_e package_type, GList* privilege_list, GList **error_privilege_name_list) +int privilege_manager_verify_privilege(const char* api_version, privilege_manager_package_type_e package_type, GList* privilege_list, privilege_manager_visibility_e visibility, char **error_message) { - LOGD("privilege_manager_verify_privilege_name called"); + LOGD("privilege_manager_verify_privilege called"); GList *l; int ret; int ret_val = PRVMGR_ERR_NONE; - int i = 0; - GList* temp_error_privilege_list = NULL; + char message_list[MESSAGE_LIST_SIZE] = {0,}; + char message[MESSAGE_SIZE] = {0,}; + char* changed_to = NULL; + char* valid_api_version = NULL; + GList* vaild_privilege_list; + char* wrt_active_version = "2.4"; + int is_vaild_wrt_version; + + //Check invaild parameters + if (api_version == NULL){ + LOGE("[PRVMGR_ERR_INVALID_PARAMETER] api_version is NULL"); + *error_message = strdup("[PRVMGR_ERR_INVALID_PARAMETER] api_version is NULL"); + TryReturn(error_message != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_message's strdup is failed."); + + return PRVMGR_ERR_INVALID_PARAMETER; + }else{ + int i; + int is_vaild_version_type = 1; + int api_version_size = strlen(api_version); + if( api_version_size % 2 == 1 && (3 <= api_version_size && api_version_size <= 7) ){ + for(i=0; i= wrt_active_version[i]) ){ + is_vaild_wrt_version = 0; + } + } + } + + if(privilege_list == NULL){ + LOGE("[PRVMGR_ERR_INVALID_PARAMETER] privilege_list is NULL"); + *error_message = strdup("[PRVMGR_ERR_INVALID_PARAMETER] privilege_list is NULL"); + TryReturn(error_message != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_message's strdup is failed."); + + return PRVMGR_ERR_INVALID_PARAMETER; + } + + + //Get vaild privilege list + ret = privilege_db_manager_get_privilege_list(api_version, package_type, &vaild_privilege_list); + if(ret != PRIVILEGE_DB_MANAGER_ERR_NONE){ + LOGE("[FAIL TO CALL FUNCTION] privilege_db_manager_get_privilege_list()"); + *error_message = strdup("[PRVMGR_ERR_INTERNAL_ERROR] failed to get privilege list from DB"); + return PRVMGR_ERR_INTERNAL_ERROR; + } + + //Compare received privilege with valid privilege list for (l = privilege_list; l != NULL; l = l->next) { - int privilege_level_id; + int privilege_level_id = PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PUBLIC; char* privilege_name = (char*)l->data; - if(privilege_name == NULL) + LOGD("Checking privilege = %s", privilege_name); + ret = __privilege_manager_check_privilege_list(api_version, privilege_name, vaild_privilege_list, &privilege_level_id, &changed_to, &valid_api_version); + + if( is_vaild_wrt_version == 0 ) { - g_list_free(temp_error_privilege_list); - LOGE("[PRVMGR_ERR_INVALID_PARAMETER] privilege_list[%d] is NULL", i); - return PRVMGR_ERR_INVALID_PARAMETER; + ret = PRVMGR_ERR_NONE; } - i++; - LOGD("Checking privilege : %s", privilege_name); - - ret = __privilege_manager_check_privilege_list(privilege_name, &privilege_level_id); if(ret == PRVMGR_ERR_NO_EXIST_PRIVILEGE) { - LOGE("[PRVMGR_ERR_NO_EXIST_PRIVILEGE] There are no privilege %s in DB", privilege_name); + LOGE("[PRVMGR_ERR_NO_EXIST_PRIVILEGE] There are no privilege %s in Tizen version %s", privilege_name, api_version); - char* error_privilege_name = strdup(privilege_name); - TryReturn(privilege_name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_privilege_name's strdup is failed."); + memset(message, 0, MESSAGE_SIZE); + if(valid_api_version != NULL && strcmp(valid_api_version, "") != 0) + { + sprintf(message, "[NO_EXIST_PRIVILEGE]%s is issued at Tizen version %s\n", privilege_name, valid_api_version); + } + else + { + sprintf(message, "[NO_EXIST_PRIVILEGE]%s is an invalid privilege\n", privilege_name); + } + + strcat(message_list, message); + + ret_val = PRVMGR_ERR_INVALID_PRIVILEGE; + + }else if(ret == PRVMGR_ERR_DEPRECATED_PRIVILEGE){ + + LOGE("[PRVMGR_ERR_DEPRECATED_PRIVILEGE]%s is deprecated before Tizen version %s", privilege_name, api_version); + + memset(message, 0, MESSAGE_SIZE); + if(changed_to != NULL && strcmp(changed_to, "") != 0) + { + sprintf(message, "[DEPRECATED_PRIVILEGE]Use %s instead of %s\n", changed_to, privilege_name); + } + else + { + sprintf(message, "[DEPRECATED_PRIVIELGE]%s is deprecated after Tizen version %s\n", privilege_name, valid_api_version); + } + strcat(message_list, message); + + ret_val = PRVMGR_ERR_INVALID_PRIVILEGE; + + }else if(ret == PRVMGR_ERR_NONE){ + LOGD("visibility = %d", visibility); + LOGD("privilege level = %d", privilege_level_id); + + if((visibility & PRVMGR_PACKAGE_VISIBILITY_PUBLIC) == PRVMGR_PACKAGE_VISIBILITY_PUBLIC){ + if(privilege_level_id == PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PARTNER || privilege_level_id == PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM) + { + LOGE("[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL] Visibility and Privilege level are mismatched"); + LOGE("[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL] Visibility = public, Privilege Level = %s", __get_privilege_level_string(privilege_level_id)); + + memset(message, 0, MESSAGE_SIZE); + sprintf(message, "[MISMATCHED_PRIVILEGE_LEVEL]Signature Level is too low to use %s - Signature Level = public, Privilege Level = %s\n", privilege_name, __get_privilege_level_string(privilege_level_id)); + + strcat(message_list, message); + + ret_val = PRVMGR_ERR_INVALID_PRIVILEGE; + } + } + else if((visibility & PRVMGR_PACKAGE_VISIBILITY_PARTNER) == PRVMGR_PACKAGE_VISIBILITY_PARTNER){ + if(privilege_level_id == PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM) + { + LOGE("[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL] Visibility and Privilege level are mismatched"); + LOGE("[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL] Visibility = partner, Privilege Level = %s", __get_privilege_level_string(privilege_level_id)); + + memset(message, 0, MESSAGE_SIZE); + sprintf(message, "[MISMATCHED_PRIVILEGE_LEVEL]Signature Level is too low to use %s - Signature Level = partner, Privilege Level = %s\n", privilege_name, __get_privilege_level_string(privilege_level_id)); + + strcat(message_list, message); + + ret_val = PRVMGR_ERR_INVALID_PRIVILEGE; + } + } + } + else if(ret == PRVMGR_ERR_INVALID_PARAMETER) + { + LOGE("[PRVMGR_ERR_INVALID_PARAMETER] privilege_name is NULL"); + *error_message = strdup("[INVALID_PARAMETER] Invaild parameter was passed."); + TryReturn(error_message != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_message's strdup is failed."); - temp_error_privilege_list = g_list_append(temp_error_privilege_list, error_privilege_name); - ret_val = PRVMGR_ERR_NO_EXIST_PRIVILEGE; + ret_val = PRVMGR_ERR_INVALID_PARAMETER; + goto FINISH; } - else if(ret == PRVMGR_ERR_INTERNAL_ERROR || ret == PRVMGR_ERR_INVALID_PARAMETER) + else if(ret == PRVMGR_ERR_INTERNAL_ERROR) { - return ret; + LOGE("[PRVMGR_ERR_INVALID_PARAMETER] Unknown Error occured."); + *error_message = strdup("[INTERNAL_ERROR] Unknown Error occured."); + TryReturn(error_message != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_message's strdup is failed."); + + ret_val = PRVMGR_ERR_INTERNAL_ERROR; + goto FINISH; } } - *error_privilege_name_list = temp_error_privilege_list; + if(ret_val != PRVMGR_ERR_NONE){ + *error_message = strdup(message_list); + TryReturn(error_message != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_message's strdup is failed."); + } +FINISH: + g_list_free(vaild_privilege_list); return ret_val; } -const char* __get_privilege_level_string(privilege_db_manager_privilege_level_e privilege_db_manager_privilege_level) +static int __privilege_manager_core_privilege_level(const char* privilege, int* privilege_level) { - if(privilege_db_manager_privilege_level == PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PUBLIC){ - return "public"; - }else if(privilege_db_manager_privilege_level == PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PARTNER){ - return "partner"; - }else if(privilege_db_manager_privilege_level == PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM){ - return "platform"; - }else{ - return "not defined privilege"; + TryReturn(privilege != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); + + int ret; + GList* privilege_list; + ret = privilege_db_manager_get_privilege_list("2.4",PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, &privilege_list); + if(ret != PRIVILEGE_DB_MANAGER_ERR_NONE){ + LOGE("[FAIL TO CALL FUNCTION] privilege_db_manager_get_privilege_list()"); + return PRVMGR_ERR_INTERNAL_ERROR; + } + + GList* l = NULL; + for (l = privilege_list; l != NULL; l = l->next) + { + privilege_info_db_row_s* privilege_info_db_row = (privilege_info_db_row_s*)l->data; + if (strcmp(privilege_info_db_row->privilege_name, privilege) == 0) + { + *privilege_level = privilege_info_db_row->privilege_level_id; + __free_privilege_list(privilege_list); + return PRVMGR_ERR_NONE; + } } + __free_privilege_list(privilege_list); + + return PRVMGR_ERR_NO_EXIST_PRIVILEGE; } -int privilege_manager_verify_privilege_level(privilege_manager_package_type_e package_type, GList* privilege_list, privilege_manager_visibility_e visibility, GList **error_privilege_name_list, GList **error_privilege_level_list) +int privilege_manager_verify_privilege_list(privilege_manager_package_type_e package_type, GList* privilege_list, privilege_manager_visibility_e visibility, char** error_privilege_name) { - LOGD("privilege_manager_verify_privilege_level called"); + LOGD("privilege_info_compare_privilege_level called"); GList *l; int ret; - int ret_val = PRVMGR_ERR_NONE; int i = 0; - GList* temp_error_privilege_name_list = NULL; - GList* temp_error_privilege_level_list = NULL; + *error_privilege_name = NULL; TryReturn(privilege_list != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_list is NULL"); @@ -137,78 +368,54 @@ int privilege_manager_verify_privilege_level(privilege_manager_package_type_e pa int privilege_level_id; char* privilege_name = (char*)l->data; - if(privilege_name == NULL) - { - g_list_free(temp_error_privilege_level_list); - g_list_free(temp_error_privilege_name_list); - LOGE("[PRVMGR_ERR_INVALID_PARAMETER] privilege_list[%d] is NULL", i); - return PRVMGR_ERR_INVALID_PARAMETER; - } + TryReturn(privilege_name != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_list[%d] is NULL", i); i++; LOGD("Checking privilege : %s", privilege_name); - ret = __privilege_manager_check_privilege_list(privilege_name, &privilege_level_id); - if(ret == PRVMGR_ERR_NONE) + + ret = __privilege_manager_core_privilege_level(privilege_name, &privilege_level_id); + if(ret == PRVMGR_ERR_NO_EXIST_PRIVILEGE) { - LOGD("visibility : %d", visibility); - LOGD("privilege level : %d", privilege_level_id); + LOGE("[PRVMGR_ERR_NO_EXIST_PRIVILEGE] There are no privilege %s in DB", privilege_name); + *error_privilege_name = (char*)calloc(strlen(privilege_name) + 1, sizeof(char)); + TryReturn(*error_privilege_name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + memcpy(*error_privilege_name, privilege_name, strlen(privilege_name)); - if((visibility & PRVMGR_PACKAGE_VISIBILITY_PUBLIC) == PRVMGR_PACKAGE_VISIBILITY_PUBLIC){ - if(privilege_level_id == PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PARTNER || privilege_level_id == PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM) + return PRVMGR_ERR_NO_EXIST_PRIVILEGE; + } + else if(ret == PRVMGR_ERR_NONE) + { + if(visibility == PRVMGR_PACKAGE_VISIBILITY_PARTNER){ + if(privilege_level_id == PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM) { LOGE("[PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL] Visibility and Privilege level are mismatched"); - LOGE("[PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL] Visibility : public, Privilege Level : %s", __get_privilege_level_string(privilege_level_id)); - char* error_privilege_name = strdup(privilege_name); - TryReturn(error_privilege_name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_privilege_name's strdup is failed."); - char* error_privilege_level = strdup(__get_privilege_level_string(privilege_level_id)); - if(error_privilege_level == NULL) - { - free(error_privilege_name); - LOGE("[PRVMGR_ERR_OUT_OF_MEMORY] error_privilege_level's strdup is failed."); - return PRVMGR_ERR_OUT_OF_MEMORY; - } - temp_error_privilege_name_list = g_list_append(temp_error_privilege_name_list, error_privilege_name); - temp_error_privilege_level_list = g_list_append(temp_error_privilege_level_list, error_privilege_level); - ret_val = PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL; + LOGE("[PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL] Visibility : partner, Privilege Level : %d", privilege_level_id); + *error_privilege_name = (char*)calloc(strlen(privilege_name) + 1, sizeof(char)); + TryReturn(*error_privilege_name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + memcpy(*error_privilege_name, privilege_name, strlen(privilege_name)); + + return PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL; } } - else if((visibility & PRVMGR_PACKAGE_VISIBILITY_PARTNER) == PRVMGR_PACKAGE_VISIBILITY_PARTNER){ - if(privilege_level_id == PRIVILIEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM) + else if(visibility == PRVMGR_PACKAGE_VISIBILITY_PUBLIC){ + if(privilege_level_id == PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PARTNER || privilege_level_id == PRIVILEGE_DB_MANAGER_PRIVILEGE_LEVEL_PLATFORM) { LOGE("[PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL] Visibility and Privilege level are mismatched"); - LOGE("[PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL] Visibility : partner, Privilege Level : %s", __get_privilege_level_string(privilege_level_id)); - char* error_privilege_name = strdup(privilege_name); - TryReturn(error_privilege_name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_privilege_name's strdup is failed."); - char* error_privilege_level = strdup(__get_privilege_level_string(privilege_level_id)); - if(error_privilege_level == NULL) - { - free(error_privilege_name); - LOGE("[PRVMGR_ERR_OUT_OF_MEMORY] error_privilege_level's strdup is failed."); - return PRVMGR_ERR_OUT_OF_MEMORY; - } - temp_error_privilege_name_list = g_list_append(temp_error_privilege_name_list, error_privilege_name); - temp_error_privilege_level_list = g_list_append(temp_error_privilege_level_list, error_privilege_level); - ret_val = PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL; - } - } - else if((visibility & PRVMGR_PACKAGE_VISIBILITY_PLATFORM) == PRVMGR_PACKAGE_VISIBILITY_PLATFORM){ + LOGE("[PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL] Visibility : public, Privilege Level : %d", privilege_level_id); + *error_privilege_name = (char*)calloc(strlen(privilege_name) + 1, sizeof(char)); + TryReturn(*error_privilege_name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + memcpy(*error_privilege_name, privilege_name, strlen(privilege_name)); - } - else{ - LOGE("[PRVMGR_ERR_INVALID_PARAMETER] visibility dont include any public, partner, platform"); - g_list_free(temp_error_privilege_name_list); - g_list_free(temp_error_privilege_level_list); - return PRVMGR_ERR_INVALID_PARAMETER; + return PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL; + } } } - else if(ret == PRVMGR_ERR_INTERNAL_ERROR || ret == PRVMGR_ERR_INVALID_PARAMETER) + else { return ret; } } - *error_privilege_name_list = temp_error_privilege_name_list; - *error_privilege_level_list = temp_error_privilege_level_list; - - return ret_val; + return PRVMGR_ERR_NONE; } + diff --git a/packaging/privilege-checker.spec b/packaging/privilege-checker.spec index 2376b58..9511db0 100644 --- a/packaging/privilege-checker.spec +++ b/packaging/privilege-checker.spec @@ -36,6 +36,7 @@ BuildRequires: gettext-tools BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: pkgconfig(capi-appfw-package-manager) BuildRequires: cert-svc-devel +BuildRequires: pkgconfig(glib-2.0) %description -n capi-security-privilege-manager The Privilege Manager API provides functions to get information about privilege information of installed packages. @@ -60,10 +61,14 @@ The Privilege Manager API provides functions to get information about privilege %build -%if "%{?tizen_profile_name}" == "wearable" +%if "%{?profile}" == "tv" + __PROFILE_TYPE="TV" +%else if "%{?profile}" == "wearable" __PROFILE_TYPE="WEARABLE" -%else +%else if "%{?profile}" == "mobile" __PROFILE_TYPE="MOBILE" +%else + __PROFILE_TYPE="COMMON" %endif export CFLAGS="$CFLAGS -DTIZEN_ENGINEER_MODE" @@ -77,6 +82,7 @@ echo cmake . -DPREFIX=%{_prefix} \ -DCMAKE_BUILD_TYPE=%{build_type} \ -DVERSION=%{version} \ -DDPL_LOG="ON" \ + -DDATADIR=%{_datadir} \ -DPROFILE_TYPE="${__PROFILE_TYPE}" cmake . -DPREFIX=%{_prefix} \ @@ -86,31 +92,32 @@ cmake . -DPREFIX=%{_prefix} \ -DCMAKE_BUILD_TYPE=%{build_type} \ -DVERSION=%{version} \ -DDPL_LOG="ON" \ + -DDATADIR=%{_datadir} \ -DPROFILE_TYPE="${__PROFILE_TYPE}" make %{?jobs:-j%jobs} %install rm -rf %{buildroot} -mkdir -p %{buildroot}/usr/share/license -cp LICENSE.APLv2 %{buildroot}/usr/share/license/privilege-checker +mkdir -p %{buildroot}%{_datadir}/license +cp LICENSE.APLv2 %{buildroot}%{_datadir}/license/privilege-checker mkdir -p %{buildroot}/opt/dbspace -mkdir -p %{buildroot}/usr/share/privilege-manager -cp capi/res/dbspace/core_privilege_info.db %{buildroot}/usr/share/privilege-manager/.core_privilege_info.db -sqlite3 /%{buildroot}/usr/share/privilege-manager/.core_privilege_info.db "select * from privilege_info" -cp capi/res/dbspace/wrt_privilege_info.db %{buildroot}/usr/share/privilege-manager/.wrt_privilege_info.db -sqlite3 /%{buildroot}/usr/share/privilege-manager/.wrt_privilege_info.db "select * from privilege_info" +mkdir -p %{buildroot}%{_datadir}/privilege-manager +cp capi/res/dbspace/core_privilege_info.db %{buildroot}%{_datadir}/privilege-manager/.core_privilege_info.db +sqlite3 /%{buildroot}%{_datadir}/privilege-manager/.core_privilege_info.db "select * from privilege_info" +cp capi/res/dbspace/wrt_privilege_info.db %{buildroot}%{_datadir}/privilege-manager/.wrt_privilege_info.db +sqlite3 /%{buildroot}%{_datadir}/privilege-manager/.wrt_privilege_info.db "select * from privilege_info" %make_install %files -n privilege-checker -/usr/share/license/privilege-checker +%{_datadir}/license/privilege-checker %manifest packaging/privilege-checker.manifest %files -n capi-security-privilege-manager %{_libdir}/libcapi-security-privilege-manager.so* -/usr/share/locale/* -/usr/share/privilege-manager/.core_privilege_info.db -/usr/share/privilege-manager/.wrt_privilege_info.db +%{_datadir}/locale/* +%{_datadir}/privilege-manager/.core_privilege_info.db +%{_datadir}/privilege-manager/.wrt_privilege_info.db %manifest packaging/capi-security-privilege-manager.manifest %files -n capi-security-privilege-manager-devel -- 2.7.4