From 5a917fac0174bf5337c55c4aa83a7f7a178d049e Mon Sep 17 00:00:00 2001 From: Yunjin Lee Date: Thu, 22 Oct 2015 16:03:16 +0900 Subject: [PATCH] 1. Add privilege_db_manager api to handle NULL api version 2. Modify api version check logic for version extensibility 3. Modify db script to insert space for changed_to comment 4. Apply secure coding on privilege_info and privilege_manager Change-Id: I53931b82456a5d89fddfc587a973145e7f9ca713 Signed-off-by: Yunjin Lee --- capi/include/privilege_db_manager.h | 1 + capi/include/privilege_info.h | 14 +- capi/res/dbspace/core_db_generator.sh | 6 +- capi/res/dbspace/tv_core_db_generator.sh | 6 +- capi/res/dbspace/tv_wrt_db_generator.sh | 6 +- capi/res/dbspace/wrt_db_generator.sh | 6 +- capi/res/dbspace/wrt_privilege_info.db | Bin 33792 -> 33792 bytes capi/src/privilege_db_manager.c | 23 ++- capi/src/privilege_info.c | 276 +++++++++++++++++-------------- capi/src/privilege_manager.c | 251 +++++++++++++++++----------- packaging/privilege-checker.spec | 12 +- test/tc-privilege-db-manager.c | 77 +++++++-- 12 files changed, 414 insertions(+), 264 deletions(-) mode change 100644 => 100755 capi/src/privilege_info.c diff --git a/capi/include/privilege_db_manager.h b/capi/include/privilege_db_manager.h index d60ad1d..55099f7 100755 --- a/capi/include/privilege_db_manager.h +++ b/capi/include/privilege_db_manager.h @@ -63,6 +63,7 @@ typedef enum 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); 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); diff --git a/capi/include/privilege_info.h b/capi/include/privilege_info.h index 55b245e..c258f90 100644 --- a/capi/include/privilege_info.h +++ b/capi/include/privilege_info.h @@ -44,7 +44,7 @@ typedef enum * @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 - * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative. + * @return 0 if success, nonzero value(>0) if fail. Callback is not called if return value is nonzero. * @pre privilege_info_foreach_privilege_group_list_by_pkgid() will invoke this callback. * @see privilege_info_foreach_privilege_group_list_by_pkgid() */ @@ -54,7 +54,7 @@ typedef int (*privilege_info_privilege_groups_cb) (const char *privilege_group, * @brief Called to get a privilege in the privilege group once for specific package. * @param[in] privilege The privilege * @param[in] user_data The user data passed from the foreach function - * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative. + * @return 0 if success, nonzero value(>0) if fail. Callback is not called if return value is nonzero. * @pre privilege_info_foreach_privilege_list_by_pkgid_and_privilege_group() will invoke this callback. * @see privilege_info_foreach_privilege_list_by_pkgid_and_privilege_group() */ @@ -65,7 +65,7 @@ typedef int (*privilege_info_privileges_cb) (const char *privilege, void* user_d * @param [in] package_id The package id * @param [in] callback The callback function to invoke * @param [in] user_data The user data to be passed to the callback function - * @return 0 on success, otherwise a negative error value. + * @return 0 on success, otherwise a nonzero error value. * @retval #PRVMGR_ERR_NONE Successful * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter @@ -79,7 +79,7 @@ EXPORT_API int privilege_info_foreach_privilege_group_list_by_pkgid(const char * * @param [in] package_id The package id * @param [in] callback The callback function to invoke * @param [in] user_data The user data to be passed to the callback function - * @return 0 on success, otherwise a negative error value. + * @return 0 on success, otherwise a nonzero error value. * @retval #PRVMGR_ERR_NONE Successful * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter @@ -92,7 +92,7 @@ EXPORT_API int privilege_info_foreach_privilege_list_by_pkgid_and_privilege_grou * @remarks @a name must be released with free() by you. * @param [in] privilege_group The privilege group * @param [out] name The display name of the privilege group - * @return 0 on success, otherwise a negative error value. + * @return 0 on success, otherwise a nonzero error value. * @retval #PRVMGR_ERR_NONE Successful * @retval #PRVMGR_ERR_OUT_OF_MEMORY Out of memory * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter @@ -104,7 +104,7 @@ EXPORT_API int privilege_info_get_privilege_group_display_name(const char *privi * @remarks @a name must be released with free() by you. * @param [in] privilege The privilege * @param [out] name The display name of the privilege - * @return 0 on success, otherwise a negative error value. + * @return 0 on success, otherwise a nonzero error value. * @retval #PRVMGR_ERR_NONE Successful * @retval #PRVMGR_ERR_OUT_OF_MEMORY Out of memory * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter @@ -116,7 +116,7 @@ EXPORT_API int privilege_info_get_privilege_display_name(const char *privilege, * @remarks @a description must be released with free() by you. * @param [in] privilege The privilege * @param [out] description The description of the privilege - * @return 0 on success, otherwise a negative error value. + * @return 0 on success, otherwise a nonzero error value. * @retval #PRVMGR_ERR_NONE Successful * @retval #PRVMGR_ERR_OUT_OF_MEMORY Out of memory * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter diff --git a/capi/res/dbspace/core_db_generator.sh b/capi/res/dbspace/core_db_generator.sh index db35708..44855ed 100755 --- a/capi/res/dbspace/core_db_generator.sh +++ b/capi/res/dbspace/core_db_generator.sh @@ -10,8 +10,8 @@ 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, CHANGED_TO_2_3_1 TEXT, CHANGED_TO_2_4_0 TEXT);" echo "Inserting data ..." -LIST=`cat core_privilege_info.csv | sed 's/ //g'` -for i in $LIST +IFS=$'\n' +for i in `cat core_privilege_info.csv` do temp=`echo $i | awk '/^#/'` if [ ! "$temp" = "" ] @@ -50,7 +50,7 @@ do PACKAGE_TYPE_ID=1 else - echo "Fail to create table : PACKAGE_TYPE must be osp, wrt or core" + echo "Fail to create table : PACKAGE_TYPE must be wrt or core" exit fi diff --git a/capi/res/dbspace/tv_core_db_generator.sh b/capi/res/dbspace/tv_core_db_generator.sh index d475721..309a7c9 100755 --- a/capi/res/dbspace/tv_core_db_generator.sh +++ b/capi/res/dbspace/tv_core_db_generator.sh @@ -10,8 +10,8 @@ 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, CHANGED_TO_2_4_0 TEXT);" echo "Inserting data ..." -LIST=`cat tv_core_privilege_info.csv | sed 's/ //g'` -for i in $LIST +IFS=$'\n' +for i in `cat tv_core_privilege_info.csv` do temp=`echo $i | awk '/^#/'` if [ ! "$temp" = "" ] @@ -52,7 +52,7 @@ do PACKAGE_TYPE_ID=1 else - echo "Fail to create table : PACKAGE_TYPE must be osp, wrt or core" + echo "Fail to create table : PACKAGE_TYPE must be wrt or core" exit fi diff --git a/capi/res/dbspace/tv_wrt_db_generator.sh b/capi/res/dbspace/tv_wrt_db_generator.sh index ce44b82..e60e9d8 100755 --- a/capi/res/dbspace/tv_wrt_db_generator.sh +++ b/capi/res/dbspace/tv_wrt_db_generator.sh @@ -10,8 +10,8 @@ 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, CHANGED_TO_2_4_0 TEXT);" echo "Inserting data ..." -LIST=`cat tv_wrt_privilege_info.csv | sed 's/ //g'` -for i in $LIST +IFS=$'\n' +for i in `cat tv_wrt_privilege_info.csv` do temp=`echo $i | awk '/^#/'` if [ ! "$temp" = "" ] @@ -52,7 +52,7 @@ do PACKAGE_TYPE_ID=1 else - echo "Fail to create table : PACKAGE_TYPE must be osp, wrt or core" + echo "Fail to create table : PACKAGE_TYPE must be wrt or core" exit fi diff --git a/capi/res/dbspace/wrt_db_generator.sh b/capi/res/dbspace/wrt_db_generator.sh index 4087a52..97c574a 100755 --- a/capi/res/dbspace/wrt_db_generator.sh +++ b/capi/res/dbspace/wrt_db_generator.sh @@ -10,8 +10,8 @@ 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, CHANGED_TO_2_3_1 TEXT,CHANGED_TO_2_4_0 TEXT);" echo "Inserting data ..." -LIST=`cat wrt_privilege_info.csv | sed 's/ //g'` -for i in $LIST +IFS=$'\n' +for i in `cat wrt_privilege_info.csv` do temp=`echo $i | awk '/^#/'` if [ ! "$temp" = "" ] @@ -50,7 +50,7 @@ do PACKAGE_TYPE_ID=1 else - echo "Fail to create table : PACKAGE_TYPE must be osp, wrt or core" + echo "Fail to create table : PACKAGE_TYPE must be wrt or core" exit fi diff --git a/capi/res/dbspace/wrt_privilege_info.db b/capi/res/dbspace/wrt_privilege_info.db index ec5d520fb5bcaff3696e1e8c86d2763103b316db..bcd5d41c8673c9fb63743689822373f503d75c50 100644 GIT binary patch delta 775 zcmZqZU~1@K+Q6p4CC0$a%lL|sn?Y=|h{kP3Q3V-c4oMCm=I0j<=H+EfZZvN+pL|}| zX!3e3*2&gdAuI~{MGBKAY6Zd=nv;38e{$SsV0yv0mEr!x!i$q1>s%K#P(YXy4K~NQ z(HUsYB#1UfL!HU}dfIT#<`;T$tQ?ydn0_6SujN7Llfo6OU-oPoXy|N1UR`Y8JKP`{$-S8u$)+^x!KlX0h6ezKEj-Eplc!< z?HlbU$Mfq?{@~0tS=$-vnT=A?KmmctE1k6SeQMz z-se28f(^pRXrR-~C!Y=EoIKk%4CWg7$wGbxaL(przr~CkDGW@97+V=qCKiSXHOV<3 zOb7)!Ds=KYC*#Tep`4Sq1^B`3pFBUzWKtjtGM|5QYhWWA+X)7yQw%327VZ&iu6IQk z<;ly-5!)=^ED!ddY@|Ozt3x8|WdA50WC1Q@4hwsMQ2{u9K_TIg$TFENN*!4NiP|?G zkFuBL$Yx-cXI#aQJ+Ux$bAE*bqgYXb2q!F!g{L=i1EWK}QGRklsQ#o{w#mOLcOa}h zUxkQ?$>*y$C(Bnq=P6)dI?5Em_>8fbp1>;VJ#}f;$PQI^mT~tQ_p*NbBmod4~zR`Y?meJ(D zx(OhCiF)A>N@w#6Jvmm6Z46Am86Prin^?GF^ClA=Mp1EfgaLtI1N0m9Cutc>es9J$ zS<@^Sr2C_<{N(v&1_&nS=HF)AoLsgHOm~${mCDkxhAVS2ZGGlC?yT#3QS(^tOez6{@^Ue!Bx+|9Kw{t=*v()u`qvfwa!IhK$LA714rH4hYSmK&OOG{-bF; zSw4_+@}>Ykm^lrY-~3em`*X=m{@p5tU2EmVTLC!FGp-Me=|SGJG_x# zn;E0zC)Y>vf{Xw$*GIBJnXCmy1yI3%k?Jsc0!lX@kFuBL$Y)@dXI#gSKd~@zb9RLT zqgY;o2q!Fkgr_%h0|QmMQF`*h%C|75^Vf4u)~Z!R=E_$;=P6-eI?5Em_>8fbp=4rV dl2~I+8p1oi;Mf5f)K*i2tP|Cs&Be97Yykg@&X@oI diff --git a/capi/src/privilege_db_manager.c b/capi/src/privilege_db_manager.c index 3cc1bd5..16e13bc 100755 --- a/capi/src/privilege_db_manager.c +++ b/capi/src/privilege_db_manager.c @@ -162,8 +162,15 @@ int privilege_db_manager_get_privilege_display(privilege_db_manager_package_type 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", - PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type, privilege_name, api_version, api_version); + char* sql = NULL; + + if (api_version == NULL) { // api_version == NULL then get display name regardless of api version + 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", + PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type, privilege_name); + } else { + 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", + 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) @@ -197,8 +204,15 @@ int privilege_db_manager_get_privilege_description(privilege_db_manager_package_ 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", - PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type, privilege_name, api_version, api_version); + char* sql = NULL; + + if (api_version == NULL) { + 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", + PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, package_type, privilege_name);; + } else { + 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", + 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) @@ -224,6 +238,7 @@ int privilege_db_manager_get_privilege_description(privilege_db_manager_package_ 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) { sqlite3* db = NULL; diff --git a/capi/src/privilege_info.c b/capi/src/privilege_info.c old mode 100644 new mode 100755 index 020d4c5..ece86ed --- a/capi/src/privilege_info.c +++ b/capi/src/privilege_info.c @@ -22,17 +22,17 @@ #include "privilege_db_manager.h" #include "privilege_info.h" #include "privilege_info_types.h" -#include "privilege_manager.h" #ifdef LOG_TAG #undef LOG_TAG #define LOG_TAG "PRIVILEGE_INFO" #endif -#define TryReturn(condition, returnValue, ...) \ +#define TryReturn(condition, expr, returnValue, ...) \ if (!(condition)) { \ LOGE(__VA_ARGS__); \ - return returnValue; \ + expr; \ + return returnValue; \ } \ else {;} @@ -41,12 +41,12 @@ int privilege_info_privilege_list_by_pkgid_callback (const char *privilege_name, LOGD("privilege name = %s", privilege_name); int* groupTable = (int*)user_data; - TryReturn(privilege_name != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_name is NULL"); - TryReturn(user_data != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] user_data is NULL"); + TryReturn(privilege_name != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_name is NULL"); + TryReturn(user_data != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] user_data is NULL"); int group_id = 6; - //Native - int ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege_name, "2.3", &group_id); + //core + int ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege_name, "9.9", &group_id); if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { LOGD("group_id = %d", group_id); @@ -58,8 +58,8 @@ int privilege_info_privilege_list_by_pkgid_callback (const char *privilege_name, { return PRVMGR_ERR_INTERNAL_ERROR; } - //Web - ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege_name, "2.3", &group_id); + //wrt + ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege_name, "9.9", &group_id); if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { LOGD("group_id = %d", group_id); @@ -85,16 +85,16 @@ int privilege_info_foreach_privilege_group_list_by_pkgid(const char *package_id, int i = 0; int res = PRVMGR_ERR_NONE; - TryReturn(package_id != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] package_id is NULL"); - TryReturn(callback != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] callback is NULL"); + TryReturn(package_id != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] package_id is NULL"); + TryReturn(callback != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] callback is NULL"); pkgmgrinfo_pkginfo_h handle; res = pkgmgrinfo_pkginfo_get_pkginfo(package_id, &handle); - TryReturn(res == PMINFO_R_OK, PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] pkgmgrinfo_pkginfo_get_pkginfo is failed."); + TryReturn(res == PMINFO_R_OK, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] pkgmgrinfo_pkginfo_get_pkginfo is failed."); res = pkgmgrinfo_pkginfo_foreach_privilege(handle, privilege_info_privilege_list_by_pkgid_callback, &groupTable); pkgmgrinfo_pkginfo_destroy_pkginfo(handle); - TryReturn(res == PMINFO_R_OK, PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] pkgmgrinfo_pkginfo_foreach_privilege is failed.") + TryReturn(res == PMINFO_R_OK, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] pkgmgrinfo_pkginfo_foreach_privilege is failed.") for (i = 0; i < MAX_PRV_GROUP; i++) { @@ -103,7 +103,7 @@ int privilege_info_foreach_privilege_group_list_by_pkgid(const char *package_id, res = callback(privilege_group_info_table[i].privilege_group, user_data); LOGD("group = %s", privilege_group_info_table[i].privilege_group); - TryReturn(res >= 0, PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] return value of callback function is negative."); + TryReturn(res >= 0, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] return value of callback function is negative."); } } @@ -118,17 +118,17 @@ int privilege_info_privilege_list_callback (const char *privilege_name, void *us privilege_list_cb_data data = *((privilege_list_cb_data*)(user_data)); int group_id = 6; - TryReturn(privilege_name != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_name is NULL"); - TryReturn(user_data != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] user_data is NULL"); + TryReturn(privilege_name != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_name is NULL"); + 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(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege_name, "2.3", &group_id); + //core + int ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege_name, "9.9", &group_id); if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { if(group_id == data.privilege_group){ LOGD("data.privilege_group = %d", data.privilege_group); res = data.callback(privilege_name, data.user_data); - TryReturn(res >= 0, PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] return value of callback function is negative."); + TryReturn(res >= 0, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] return value of callback function is negative."); return PRVMGR_ERR_NONE; } @@ -138,14 +138,14 @@ int privilege_info_privilege_list_callback (const char *privilege_name, void *us return PRVMGR_ERR_INTERNAL_ERROR; } - //Web - ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege_name, "2.3", &group_id); + //wrt + ret = privilege_db_manager_get_privilege_group_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege_name, "9.9", &group_id); if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { if(group_id == data.privilege_group){ LOGD("data.privilege_group = %d", data.privilege_group); res = data.callback(privilege_name, data.user_data); - TryReturn(res >= 0, PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] return value of callback function is negative."); + TryReturn(res >= 0, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] return value of callback function is negative."); return PRVMGR_ERR_NONE; } @@ -159,7 +159,7 @@ int privilege_info_privilege_list_callback (const char *privilege_name, void *us { LOGD("data.privilege_group = %d", data.privilege_group); res = data.callback(privilege_name, data.user_data); - TryReturn(res >= 0, PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] return value of callback function is negative."); + TryReturn(res >= 0, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] return value of callback function is negative."); } return PRVMGR_ERR_NONE; @@ -173,9 +173,9 @@ int privilege_info_foreach_privilege_list_by_pkgid_and_privilege_group(const cha int res = PRVMGR_ERR_NONE; privilege_list_cb_data data; - TryReturn(package_id != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] package_id is NULL"); - TryReturn(privilege_group != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_group is NULL"); - TryReturn(callback != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] callback is NULL"); + TryReturn(package_id != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] package_id is NULL"); + TryReturn(privilege_group != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_group is NULL"); + TryReturn(callback != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] callback is NULL"); data.privilege_group = -1; data.callback = callback; @@ -194,11 +194,11 @@ int privilege_info_foreach_privilege_list_by_pkgid_and_privilege_group(const cha { pkgmgrinfo_pkginfo_h handle; res = pkgmgrinfo_pkginfo_get_pkginfo(package_id, &handle); - TryReturn(res == PMINFO_R_OK, PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] pkgmgrinfo_pkginfo_get_pkginfo is failed.") + TryReturn(res == PMINFO_R_OK, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] pkgmgrinfo_pkginfo_get_pkginfo is failed.") res = pkgmgrinfo_pkginfo_foreach_privilege(handle, privilege_info_privilege_list_callback, &data); pkgmgrinfo_pkginfo_destroy_pkginfo(handle); - TryReturn(res == PMINFO_R_OK, PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] pkgmgrinfo_pkginfo_foreach_privilege is failed.") + TryReturn(res == PMINFO_R_OK, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] pkgmgrinfo_pkginfo_foreach_privilege is failed.") } return PRVMGR_ERR_NONE; @@ -209,14 +209,14 @@ int privilege_info_get_group_name_string_id(const char *privilege_group, char ** LOGD("privilege_group = %s", privilege_group); int index = 0; - TryReturn(privilege_group != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); + TryReturn(privilege_group != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); for (index = 0; index < MAX_PRV_GROUP; index++) { if (strcmp(privilege_group_info_table[index].privilege_group, privilege_group) == 0) { *group_string_id = (char*)calloc(strlen(privilege_group_info_table[index].name_string_id) + 1, sizeof(char)); - TryReturn(*group_string_id != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + TryReturn(*group_string_id != NULL, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); memcpy(*group_string_id, privilege_group_info_table[index].name_string_id, strlen(privilege_group_info_table[index].name_string_id)); break; @@ -232,12 +232,12 @@ int privilege_info_get_privilege_group_display_name_by_string_id(const char *str char *temp = NULL; - TryReturn(string_id != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] string_id is NULL"); + TryReturn(string_id != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] string_id is NULL"); temp = dgettext("privilege", string_id); *name = (char*)calloc(strlen(temp) + 1, sizeof(char)); - TryReturn(*name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + TryReturn(*name != NULL, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); memcpy(*name, temp, strlen(temp)); @@ -251,7 +251,7 @@ int privilege_info_get_privilege_group_display_name(const char *privilege_group, int ret = 0; char* name_string_id = NULL; - TryReturn(privilege_group != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); + TryReturn(privilege_group != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); ret = privilege_info_get_group_name_string_id(privilege_group, &name_string_id); @@ -260,15 +260,16 @@ int privilege_info_get_privilege_group_display_name(const char *privilege_group, char tempPrivilegeGroup[256] = {0,}; char* temp = NULL; char* buffer = NULL; + char* save = NULL; memcpy(tempPrivilegeGroup, privilege_group, strlen(privilege_group)); - temp = strtok(tempPrivilegeGroup, "/"); + temp = strtok_r(tempPrivilegeGroup, "/", &save); while(temp) { buffer = temp; - temp = strtok(NULL, "/"); + temp = strtok_r(NULL, "/", &save); } *name = (char*)calloc(strlen(buffer) + 1, sizeof(char)); - TryReturn(*name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + TryReturn(*name != NULL, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); memcpy(*name, buffer, strlen(buffer)); } @@ -276,19 +277,19 @@ int privilege_info_get_privilege_group_display_name(const char *privilege_group, { ret = privilege_info_get_privilege_group_display_name_by_string_id(name_string_id, name); free(name_string_id); - TryReturn(ret == PRVMGR_ERR_NONE, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + TryReturn(ret == PRVMGR_ERR_NONE, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); } return PRVMGR_ERR_NONE; } int privilege_info_get_name_string_id(const char *privilege, char **name_string_id) { - TryReturn(privilege != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); + TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); char* temp = NULL; // Check Native - int ret = privilege_db_manager_get_privilege_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege, "2.3", &temp); + int ret = privilege_db_manager_get_privilege_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege, NULL, &temp); LOGD("privilege = %s, string id = %s", privilege, temp); @@ -300,26 +301,33 @@ int privilege_info_get_name_string_id(const char *privilege, char **name_string_ } else if(strcmp(temp,"") == 0) { - *name_string_id = NULL; + //*name_string_id = NULL; + *name_string_id = strdup(""); + if(temp != NULL){ + free(temp); + temp = NULL; + } + return PRVMGR_ERR_NONE; } else { *name_string_id = (char*)calloc(strlen(temp) + 1, sizeof(char)); - if(*name_string_id == NULL) - { - LOGE("[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation is failed."); - free(temp); - return PRVMGR_ERR_OUT_OF_MEMORY; - } + TryReturn(*name_string_id != NULL, free(temp), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation is failed."); memcpy(*name_string_id, temp, strlen(temp)); LOGD("display_name_string_id = %s", *name_string_id); - free(temp); + if(temp != NULL){ + free(temp); + temp = NULL; + } return PRVMGR_ERR_NONE; } } else if(ret != PRIVILEGE_DB_NO_EXIST_RESULT) { - free(temp); + if(temp != NULL){ + free(temp); + temp = NULL; + } return PRVMGR_ERR_INTERNAL_ERROR; } @@ -330,58 +338,54 @@ int privilege_info_get_name_string_id(const char *privilege, char **name_string_ } // Check WRT - ret = privilege_db_manager_get_privilege_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege, "2.3", &temp); + ret = privilege_db_manager_get_privilege_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege, NULL, &temp); if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { if(temp == NULL) { *name_string_id = NULL; - free(temp); - LOGE("There is no %s's string id in db", privilege); - return PRVMGR_ERR_NONE; } - else if(strcmp(temp,"") == 0) + else if(strcmp(temp, "") == 0) { - *name_string_id = NULL; - free(temp); - LOGE("There is no %s's string id in db", privilege); + //*name_string_id = NULL; + *name_string_id = strdup(""); + if(temp != NULL){ + free(temp); + temp = NULL; + } return PRVMGR_ERR_NONE; } else { *name_string_id = (char*)calloc(strlen(temp) + 1, sizeof(char)); - if(*name_string_id == NULL) - { - LOGE("[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation is failed."); + TryReturn(*name_string_id != NULL, free(temp), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation is failed."); + memcpy(*name_string_id, temp, strlen(temp)); + LOGE("display_name_string_id = %s", *name_string_id); + if(temp != NULL){ free(temp); - return PRVMGR_ERR_OUT_OF_MEMORY; + temp = NULL; } - memcpy(*name_string_id, temp, strlen(temp)); - LOGD("display_name_string_id = %s", *name_string_id); - free(temp); return PRVMGR_ERR_NONE; } } - else if(ret == PRIVILEGE_DB_NO_EXIST_RESULT) + else if(ret != PRIVILEGE_DB_NO_EXIST_RESULT) { - *name_string_id = NULL; - free(temp); - LOGD("There is no %s in db", privilege); - return PRVMGR_ERR_NONE; + if(temp != NULL){ + free(temp); + temp = NULL; + } + return PRVMGR_ERR_INTERNAL_ERROR; } else { - free(temp); + if(temp != NULL){ + free(temp); + temp = NULL; + } return PRVMGR_ERR_INTERNAL_ERROR; } - if(temp != NULL) - { - free(temp); - temp = NULL; - } - return PRVMGR_ERR_NONE; } @@ -389,12 +393,12 @@ int privilege_info_get_privilege_display_name_by_string_id(const char *string_id { char *temp = NULL; - TryReturn(string_id != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] string_id is NULL"); + TryReturn(string_id != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] string_id is NULL"); temp = dgettext("privilege", string_id); *name = (char*)calloc(strlen(temp) + 1, sizeof(char)); - TryReturn(*name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + TryReturn(*name != NULL, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); memcpy(*name, temp, strlen(temp)); @@ -406,11 +410,12 @@ int privilege_info_get_privilege_display_name(const char *privilege, char **name int ret = 0; char* name_string_id = NULL; - TryReturn(privilege != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); + TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); ret = privilege_info_get_name_string_id(privilege, &name_string_id); if (name_string_id == NULL) { + /* char tempPrivilege[256] = {0,}; char* temp = NULL; char* buffer = NULL; @@ -425,25 +430,34 @@ int privilege_info_get_privilege_display_name(const char *privilege, char **name TryReturn(*name != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); memcpy(*name, buffer, strlen(buffer)); + */ + //*name = strdup(""); + } + else if(strcmp(name_string_id,"") == 0){ + *name = strdup("display string is not defined yet"); } else { ret = privilege_info_get_privilege_display_name_by_string_id(name_string_id, name); free(name_string_id); - TryReturn(ret == PRVMGR_ERR_NONE, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + name_string_id = NULL; + TryReturn(ret == PRVMGR_ERR_NONE, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); } + if(name_string_id != NULL) + free(name_string_id); + return PRVMGR_ERR_NONE; } int privilege_info_get_description_string_id(const char *privilege, char **description_string_id) { - TryReturn(privilege != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); + TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); char* temp = NULL; // Check Native - int ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege, "2.3", &temp); + int ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege, NULL, &temp); if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { @@ -453,26 +467,33 @@ int privilege_info_get_description_string_id(const char *privilege, char **descr } else if(strcmp(temp, "") == 0) { - *description_string_id = NULL; + //*description_string_id = NULL; + *description_string_id = strdup(""); + if(temp != NULL){ + free(temp); + temp = NULL; + } + return PRVMGR_ERR_NONE; } else { *description_string_id = (char*)calloc(strlen(temp) + 1, sizeof(char)); - if(*description_string_id == NULL) - { - LOGE("[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation is failed."); - free(temp); - return PRVMGR_ERR_OUT_OF_MEMORY; - } + TryReturn(*description_string_id != NULL, free(temp), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation is failed."); memcpy(*description_string_id, temp, strlen(temp)); LOGD("description_string_id = %s", *description_string_id); - free(temp); + if(temp != NULL){ + free(temp); + temp = NULL; + } return PRVMGR_ERR_NONE; } } else if(ret != PRIVILEGE_DB_NO_EXIST_RESULT) { - free(temp); + if(temp != NULL){ + free(temp); + temp = NULL; + } return PRVMGR_ERR_INTERNAL_ERROR; } @@ -482,59 +503,55 @@ int privilege_info_get_description_string_id(const char *privilege, char **descr temp = NULL; } - // Check Web - ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege, "2.3", &temp); + // Check WRT + ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, privilege, NULL, &temp); if(ret == PRIVILEGE_DB_MANAGER_ERR_NONE) { if(temp == NULL) { *description_string_id = NULL; - free(temp); - LOGE("There is no %s's string id in db", privilege); - return PRVMGR_ERR_NONE; } - else if(strcmp(temp,"") == 0) + else if(strcmp(temp, "") == 0) { - *description_string_id = NULL; - free(temp); - LOGE("There is no %s's string id in db", privilege); + //*description_string_id = NULL; + *description_string_id = strdup(""); + if(temp != NULL){ + free(temp); + temp = NULL; + } return PRVMGR_ERR_NONE; } else { *description_string_id = (char*)calloc(strlen(temp) + 1, sizeof(char)); - if(*description_string_id == NULL) - { - LOGE("[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation is failed."); + TryReturn(*description_string_id != NULL, free(temp), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation is failed."); + memcpy(*description_string_id, temp, strlen(temp)); + LOGE("description_string_id = %s", *description_string_id); + if(temp != NULL){ free(temp); - return PRVMGR_ERR_OUT_OF_MEMORY; + temp = NULL; } - memcpy(*description_string_id, temp, strlen(temp)); - LOGD("description_string_id = %s", *description_string_id); - free(temp); return PRVMGR_ERR_NONE; } } - else if(ret == PRIVILEGE_DB_NO_EXIST_RESULT) + else if(ret != PRIVILEGE_DB_NO_EXIST_RESULT) { - *description_string_id = NULL; - free(temp); - LOGE("There is no %s in db", privilege); - return PRVMGR_ERR_NONE; + if(temp != NULL){ + free(temp); + temp = NULL; + } + return PRVMGR_ERR_INTERNAL_ERROR; } else { - free(temp); + if(temp != NULL){ + free(temp); + temp = NULL; + } return PRVMGR_ERR_INTERNAL_ERROR; } - if(temp != NULL) - { - free(temp); - temp = NULL; - } - return PRVMGR_ERR_NONE; } @@ -542,12 +559,12 @@ int privilege_info_get_privilege_description_by_string_id(const char *string_id, { char *temp = NULL; - TryReturn(string_id != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] string_id is NULL"); + TryReturn(string_id != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] string_id is NULL"); temp = dgettext("privilege", string_id); *description = (char*)calloc(strlen(temp) + 1, sizeof(char)); - TryReturn(*description != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + TryReturn(*description != NULL, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); memcpy(*description, temp, strlen(temp)); @@ -559,26 +576,37 @@ int privilege_info_get_privilege_description(const char *privilege, char **descr int ret = 0; char* description_string_id = NULL; - TryReturn(privilege != NULL, PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); + TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL"); ret = privilege_info_get_description_string_id(privilege, &description_string_id); if (description_string_id == NULL) { + /* char *temp = NULL; temp = dgettext("privilege", "IDS_TPLATFORM_BODY_THIS_PRIVILEGE_IS_NOT_DEFINED"); *description = (char*)calloc(strlen(temp) + 1, sizeof(char)); - TryReturn(*description != NULL, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + TryReturn(*description != NULL, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); memcpy(*description, temp, strlen(temp)); + */ + //*description = strdup(""); + } + else if(strcmp(description_string_id,"") == 0){ + + *description = strdup("description string is not defined yet"); } else { ret = privilege_info_get_privilege_display_name_by_string_id(description_string_id, description); free(description_string_id); - TryReturn(ret == PRVMGR_ERR_NONE, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); + description_string_id = NULL; + TryReturn(ret == PRVMGR_ERR_NONE, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed."); } + + if(description_string_id != NULL) + free(description_string_id); + return PRVMGR_ERR_NONE; } - diff --git a/capi/src/privilege_manager.c b/capi/src/privilege_manager.c index 0094eab..7ee796c 100755 --- a/capi/src/privilege_manager.c +++ b/capi/src/privilege_manager.c @@ -4,22 +4,25 @@ #include "privilege_db_manager.h" #include "privilege_manager.h" -#define MESSAGE_SIZE 512 -#define MESSAGE_LIST_SIZE 10000 -#define TOTAL_MESSAGE_LIST_SIZE 30000 +#define MESSAGE_SIZE 512 #ifdef LOG_TAG #undef LOG_TAG #define LOG_TAG "PRIVILEGE_MANAGER" #endif +#define API_VERSION_PADDING ".0" +#define API_VERSION_PADDING_LEN strlen(API_VERSION_PADDING) +#define MAX_API_VERSION_LEN 5 + #define TryReturn(condition, expr, returnValue, ...) \ if (!(condition)) { \ - expr; \ LOGE(__VA_ARGS__); \ + expr; \ return returnValue; \ } \ else {;} + 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"); @@ -52,47 +55,44 @@ static int __privilege_manager_check_privilege_list(const char* api_version, con free(tmp_expired_version); tmp_expired_version = NULL; } - is_valid_version = 0; + is_valid_version = 0; + + tmp_api_version = strdup(api_version); + TryReturn(tmp_api_version != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] tmp_api_version's strdup is failed."); + size_t new_size = snprintf(0, 0, "%s%s", tmp_api_version, API_VERSION_PADDING) + 1; + tmp_api_version = realloc(tmp_api_version, new_size*sizeof(char)); + TryReturn(tmp_api_version != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] tmp_api_version's realloc is failed."); + strncat(tmp_api_version, API_VERSION_PADDING, API_VERSION_PADDING_LEN); - tmp_api_version = strdup(api_version); - TryReturn(tmp_api_version != NULL, free(tmp_api_version); free(tmp_expired_version); free(tmp_issued_version), PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] tmp_api_version's strdup is failed."); - strncat(tmp_api_version, ".0", strlen(".0")); tmp_expired_version = strdup(privilege_info_db_row->expired_version); - TryReturn(tmp_expired_version != NULL, free(tmp_api_version); free(tmp_expired_version); free(tmp_issued_version), PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] tmp_expired_version's strdup is failed."); - strncat(tmp_expired_version, ".0", strlen(".0")); + TryReturn(tmp_expired_version != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] tmp_expired_version's strdup is failed."); + new_size = snprintf(0, 0, "%s%s", tmp_expired_version, API_VERSION_PADDING) + 1; + tmp_expired_version = realloc(tmp_expired_version, new_size*sizeof(char)); + TryReturn(tmp_expired_version != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] tmp_expired_version's realloc is failed."); + strncat(tmp_expired_version, API_VERSION_PADDING, API_VERSION_PADDING_LEN); + tmp_issued_version = strdup(privilege_info_db_row->issued_version); - TryReturn(tmp_issued_version != NULL, free(tmp_api_version); free(tmp_expired_version); free(tmp_issued_version), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] tmp_issued_version's strdup is failed."); - strncat(tmp_issued_version, ".0", strlen(".0")); + TryReturn(tmp_issued_version != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] tmp_issued_version's strdup is failed."); + new_size = snprintf(0, 0, "%s%s", tmp_issued_version, API_VERSION_PADDING) + 1; + tmp_issued_version = realloc(tmp_issued_version, new_size*sizeof(char)); + TryReturn(tmp_issued_version != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] tmp_issued_version's realloc is failed."); + strncat(tmp_issued_version, API_VERSION_PADDING, API_VERSION_PADDING_LEN); - for(i=0; i<5; i++) + for(i = 0; is_valid_version == 0 && i < MAX_API_VERSION_LEN; i++) { - if( !(tmp_api_version[i] <= tmp_expired_version[i]) ) - { - if(i >= 2) - { - if( !(tmp_api_version[i-2] < tmp_expired_version[i-2]) ) - { - is_valid_version = 1; - } - } - else - { - is_valid_version = 1; - } + if (tmp_api_version[i] > tmp_expired_version[i]) { + is_valid_version = 1; + } else if (tmp_api_version[i] < tmp_expired_version[i]) { + break; } - else if ( !(tmp_api_version[i] >= tmp_issued_version[i])) - { - if( i >= 2 ) - { - if( !(tmp_api_version[i-2] > tmp_issued_version[i-2]) ) - { - is_valid_version = 2; - } - } - else - { - is_valid_version = 2; - } + } + + for(i = 0; is_valid_version == 0 && i < MAX_API_VERSION_LEN; i++) + { + if (tmp_api_version[i] < tmp_issued_version[i]) { + is_valid_version = 2; + } else if (tmp_api_version[i] > tmp_issued_version[i]) { + break; } } @@ -104,21 +104,28 @@ static int __privilege_manager_check_privilege_list(const char* api_version, con if(is_valid_version == 0) { *privilege_level = privilege_info_db_row->privilege_level_id; - ret_val = PRVMGR_ERR_NONE; goto FINISH; } else if(is_valid_version == 1) { LOGD("privilege deprecated version is lower than api version"); + if (*valid_api_version != NULL) { + free(*valid_api_version); + *valid_api_version = NULL; + } *valid_api_version = strdup(privilege_info_db_row->expired_version); - TryReturn(valid_api_version != NULL, free(tmp_api_version); free(tmp_issued_version); free(tmp_expired_version), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] valid_api_version's strdup is failed."); + TryReturn(valid_api_version != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, 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 ) { LOGD("%s was changed to %s.", privilege, privilege_info_db_row->changed_to); + if (*changed_to != NULL) { + free(*changed_to); + *changed_to = NULL; + } *changed_to = strdup(privilege_info_db_row->changed_to); - TryReturn(changed_to != NULL, free(tmp_api_version); free(tmp_issued_version); free(tmp_expired_version), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] changed_to's strdup is failed."); + TryReturn(changed_to != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] changed_to's strdup is failed."); } ret_val = PRVMGR_ERR_DEPRECATED_PRIVILEGE; @@ -126,8 +133,12 @@ static int __privilege_manager_check_privilege_list(const char* api_version, con else if(is_valid_version == 2) { LOGD("privilege issued version is higher than api version"); + if (*valid_api_version != NULL) { + free(*valid_api_version); + *valid_api_version = NULL; + } *valid_api_version = strdup(privilege_info_db_row->issued_version); - TryReturn(valid_api_version != NULL, free(tmp_api_version); free(tmp_issued_version); free(tmp_expired_version), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] valid_api_version's strdup is failed."); + TryReturn(valid_api_version != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] valid_api_version's strdup is failed."); ret_val = PRVMGR_ERR_NO_EXIST_PRIVILEGE; } @@ -161,12 +172,12 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage GList *l; int ret; int ret_val = PRVMGR_ERR_NONE; - char message_list[TOTAL_MESSAGE_LIST_SIZE] = {0,}; - char noexist_message[MESSAGE_LIST_SIZE] = {0,}; - char deprecated_message[MESSAGE_LIST_SIZE] = {0,}; - char mismatched_message[MESSAGE_LIST_SIZE] = {0,}; + char* message_list = NULL; + char* noexist_message = NULL; + char* deprecated_message = NULL; + char* mismatched_message = NULL; char message[MESSAGE_SIZE] = {0,}; - char guide_message[MESSAGE_SIZE] = {0.}; + char guide_message[MESSAGE_SIZE] = {0,}; char* changed_to = NULL; char* valid_api_version = NULL; GList* vaild_privilege_list; @@ -174,6 +185,7 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage int is_valid_wrt_version = 1; char* pkg_type = NULL; int i = 0; + //Check invaild parameters if (api_version == NULL){ LOGE("[PRVMGR_ERR_INVALID_PARAMETER] api_version is NULL"); @@ -242,14 +254,14 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage pkg_type = strdup("WRT"); TryReturn(pkg_type != NULL, free(tmp_api_version), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] pkg_type's strdup is failed."); LOGD("package type = %s, api version %s, is valid wrt version %d", pkg_type, api_version, is_valid_wrt_version); - snprintf(guide_message, MESSAGE_SIZE, "Check config.xml| - Current required_version(=api version) = %s,| ", api_version); + snprintf(guide_message, MESSAGE_SIZE, "Check config.xml| - Current required_version(=api version) = %s,| ", api_version); free(tmp_api_version); } else if(package_type == PRVMGR_PACKAGE_TYPE_CORE) { pkg_type = strdup("Native"); TryReturn(pkg_type != NULL,, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] pkg_type's strdup is failed."); - snprintf(guide_message, MESSAGE_SIZE, "Check tizen-manifest.xml| - Current api-version = %s,| ", api_version); + snprintf(guide_message, MESSAGE_SIZE, "Check tizen-manifest.xml| - Current api-version = %s,| ", api_version); } if( (visibility & PRVMGR_PACKAGE_VISIBILITY_PUBLIC) != PRVMGR_PACKAGE_VISIBILITY_PUBLIC @@ -263,12 +275,12 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage return PRVMGR_ERR_INVALID_PARAMETER; } - if((visibility & PRVMGR_PACKAGE_VISIBILITY_PUBLIC) == PRVMGR_PACKAGE_VISIBILITY_PUBLIC) - strncat(guide_message, "certificate signature level = public|", strlen("certificate signature level = public|")); - else if((visibility & PRVMGR_PACKAGE_VISIBILITY_PARTNER) == PRVMGR_PACKAGE_VISIBILITY_PARTNER) - strncat(guide_message, "certificate signature level = partner|", strlen("certificate signature level = partner|")); - else - strncat(guide_message, "certificate signature level = platform|", strlen("certificate signature level = platform|")); + if((visibility & PRVMGR_PACKAGE_VISIBILITY_PUBLIC) == PRVMGR_PACKAGE_VISIBILITY_PUBLIC) + strncat(guide_message, "certificate signature level = public||", strlen("certificate signature level = public||")); + else if((visibility & PRVMGR_PACKAGE_VISIBILITY_PARTNER) == PRVMGR_PACKAGE_VISIBILITY_PARTNER) + strncat(guide_message, "certificate signature level = partner||", strlen("certificate signature level = partner||")); + else + strncat(guide_message, "certificate signature level = platform||", strlen("certificate signature level = platform||")); if(privilege_list == NULL){ LOGE("[PRVMGR_ERR_INVALID_PARAMETER] privilege_list is NULL"); @@ -295,14 +307,14 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage char* privilege_name = (char*)l->data; LOGD("Checking privilege = %s", privilege_name); - if (valid_api_version != NULL) { - free(valid_api_version); - valid_api_version = NULL; - } - if (changed_to != NULL) { - free(changed_to); - changed_to = NULL; - } + if (valid_api_version != NULL) { + free(valid_api_version); + valid_api_version = NULL; + } + if (changed_to != NULL) { + free(changed_to); + changed_to = NULL; + } ret = __privilege_manager_check_privilege_list(api_version, privilege_name, vaild_privilege_list, &privilege_level_id, &changed_to, &valid_api_version); if( is_valid_wrt_version == 0 ) @@ -315,14 +327,23 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage memset(message, 0, MESSAGE_SIZE); if(valid_api_version != NULL && strcmp(valid_api_version, "") != 0) { - LOGE("[NO_EXIST_PRIVILEGE]%s %s privilege is valid from Tizen version %s and your api version is %s. Use at least api version %s or remove the privilege.", pkg_type, privilege_name, valid_api_version, api_version, valid_api_version); + LOGE("[NO_EXIST_PRIVILEGE]%s %s privilege is valid from Tizen version %s and your api version is %s. Use at least api version %s or remove the privilege.", pkg_type, privilege_name, valid_api_version, api_version, valid_api_version); snprintf(message, MESSAGE_SIZE, " - %s| >> Use at least api version %s or remove the privilege.|", privilege_name, valid_api_version); } else { - LOGE("[NO_EXIST_PRIVILEGE]%s %s is an invalid privilege. Check spelling or remove the privilege.", pkg_type, privilege_name); + LOGE("[NO_EXIST_PRIVILEGE]%s %s is an invalid privilege. Check spelling or remove the privilege.", pkg_type, privilege_name); snprintf(message, MESSAGE_SIZE, " - %s| >> Check spelling or remove the privilege.|", privilege_name); } + + if(noexist_message == NULL) { + noexist_message = strdup(""); + TryReturn(noexist_message != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] noexist_message's strdup is failed."); + } + size_t new_size = snprintf(0, 0, "%s%s", noexist_message, message) + 1; + noexist_message = realloc(noexist_message, new_size*sizeof(char)); + TryReturn(noexist_message != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] noexist_message's realloc is failed."); + strncat(noexist_message, message, strlen(message)); ret_val = PRVMGR_ERR_INVALID_PRIVILEGE; @@ -332,14 +353,23 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage memset(message, 0, MESSAGE_SIZE); if(changed_to != NULL && strcmp(changed_to, "") != 0) { - LOGE("[DEPRECATED_PRIVILEGE]%s %s is a deprecated after Tizen version %s and your api version is %s. Use %s instead or change api version to %s.", pkg_type, privilege_name, valid_api_version, api_version, changed_to, valid_api_version); + LOGE("[DEPRECATED_PRIVILEGE]%s %s is a deprecated after Tizen version %s and your api version is %s. Use %s instead or change api version to %s.", pkg_type, privilege_name, valid_api_version, api_version, changed_to, valid_api_version); snprintf(message, MESSAGE_SIZE, " - %s| >> Use %s instead of it or change api version to %s.|", privilege_name, changed_to, valid_api_version); } else { - LOGE("[DEPRECATED_PRIVILEGE]%s %s is deprecated after Tizen version %s and your api version is %s. Remove the privilege.", pkg_type, privilege_name, valid_api_version, api_version); + LOGE("[DEPRECATED_PRIVILEGE]%s %s is deprecated after Tizen version %s and your api version is %s. Remove the privilege.", pkg_type, privilege_name, valid_api_version, api_version); snprintf(message, MESSAGE_SIZE, " - %s| >> Remove the privilege.|", privilege_name); } + + if(deprecated_message == NULL) { + deprecated_message = strdup(""); + TryReturn(deprecated_message != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] deprecated_message's strdup is failed."); + } + size_t new_size = snprintf(0, 0, "%s%s", deprecated_message, message) + 1; + deprecated_message = realloc(deprecated_message, new_size*sizeof(char)); + TryReturn(deprecated_message != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] deprecated_message's realloc is failed."); + strncat(deprecated_message, message, strlen(message)); ret_val = PRVMGR_ERR_INVALID_PRIVILEGE; @@ -357,6 +387,13 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage memset(message, 0, MESSAGE_SIZE); snprintf(message, MESSAGE_SIZE, " - %s| >> Use at least %s signatured certificate.|", privilege_name, __get_privilege_level_string(privilege_level_id)); + if (mismatched_message == NULL) { + mismatched_message = strdup(""); + TryReturn(mismatched_message != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] mismatched_message's strdup is failed."); + } + size_t new_size = snprintf(0, 0, "%s%s", mismatched_message, message) + 1; + mismatched_message = realloc(mismatched_message, new_size*sizeof(char)); + TryReturn(mismatched_message != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] mismatched_message's realloc is failed."); strncat(mismatched_message, message, strlen(message)); ret_val = PRVMGR_ERR_INVALID_PRIVILEGE; @@ -371,8 +408,14 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage memset(message, 0, MESSAGE_SIZE); snprintf(message, MESSAGE_SIZE, " - %s| >> Use at least %s signatured certificate.|", privilege_name, __get_privilege_level_string(privilege_level_id)); + if (mismatched_message == NULL) { + mismatched_message = strdup(""); + TryReturn(mismatched_message != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY,"[PRVMGR_ERR_OUT_OF_MEMORY] mismatched_message's strdup is failed."); + } + size_t new_size = snprintf(0, 0, "%s%s", mismatched_message, message) + 1; + mismatched_message = realloc(mismatched_message, new_size*sizeof(char)); + TryReturn(mismatched_message, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] mismatched_message's realloc is failed."); strncat(mismatched_message, message, strlen(message)); - ret_val = PRVMGR_ERR_INVALID_PRIVILEGE; } } @@ -381,7 +424,7 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage { 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."); + TryReturn(error_message != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_message's strdup is failed."); ret_val = PRVMGR_ERR_INVALID_PARAMETER; goto FINISH; @@ -390,46 +433,55 @@ int privilege_manager_verify_privilege(const char* api_version, privilege_manage { 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."); + TryReturn(error_message != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_message's strdup is failed."); ret_val = PRVMGR_ERR_INTERNAL_ERROR; goto FINISH; } } - char error_code[MESSAGE_SIZE] = {0,}; - char* newline = "|"; - - if (strlen(noexist_message) > 0) - strncat(error_code, "[NO_EXIST_PRIVILEGE] ", strlen("[NO_EXIST_PRIVILEGE]")); - - if (strlen(deprecated_message) > 0) - strncat(error_code, "[PRVMGR_ERR_DEPRECATED_PRIVILEGE] ", strlen("[PRVMGR_ERR_DEPRECATED_PRIVILEGE]")); - - if (strlen(mismatched_message) > 0) - strncat(error_code, "[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL]", strlen("[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL]")); + char* newline = "|"; if(ret_val != PRVMGR_ERR_NONE){ - strncat(message_list, guide_message, strlen(guide_message)); - strncat(message_list, newline, strlen(newline)); - if (strlen(noexist_message) > 0) { - strncat(message_list, "[NO_EXIST_PRIVILEGE]|", strlen("[NO_EXIST_PRIVILEGE]|")); - strncat(message_list, noexist_message, strlen(noexist_message)); - } - if (strlen(deprecated_message) > 0) { - strncat(message_list, "[PRVMGR_ERR_DEPRECATED_PRIVILEGE]|", strlen("[PRVMGR_ERR_DEPRECATED_PRIVILEGE]|")); - strncat(message_list, deprecated_message, strlen(deprecated_message)); - } - if (strlen(mismatched_message) > 0) { - strncat(message_list, "[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL]|", strlen("[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL]|")); - strncat(message_list, mismatched_message, strlen(mismatched_message)); - } - strncat(message_list, newline, strlen(newline)); - + message_list = strdup(guide_message); + TryReturn(message_list != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] message_list's strdup is failed."); + if (noexist_message != NULL) { + size_t new_size = snprintf(0, 0, "%s[NO_EXIST_PRIVILEGE]|%s", message_list, noexist_message) + 1; + message_list = realloc(message_list, new_size); + TryReturn(message_list != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] message_list's realloc is failed."); + strncat(message_list, "[NO_EXIST_PRIVILEGE]|", strlen("[NO_EXIST_PRIVILEGE]|")); + strncat(message_list, noexist_message, strlen(noexist_message)); + } + if (deprecated_message != NULL) { + size_t new_size = snprintf(0, 0, "%s[PRVMGR_ERR_DEPRECATED_PRIVILEGE]|%s", message_list, deprecated_message) + 1; + message_list = realloc(message_list, new_size); + TryReturn(message_list != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] message_list's realloc is failed."); + strncat(message_list, "[PRVMGR_ERR_DEPRECATED_PRIVILEGE]|", strlen("[PRVMGR_ERR_DEPRECATED_PRIVILEGE]|")); + strncat(message_list, deprecated_message, strlen(deprecated_message)); + } + if (mismatched_message != NULL) { + size_t new_size = snprintf(0, 0, "%s[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL]|%s", message_list, mismatched_message) + 1; + message_list = realloc(message_list, new_size); + TryReturn(message_list != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] message_list's realloc is failed."); + strncat(message_list, "[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL]|", strlen("[PRVMGR_ERR_MISMATCHED_PRIVILEGE_LEVEL]|")); + strncat(message_list, mismatched_message, strlen(mismatched_message)); + } + size_t total_size = snprintf(0, 0, "%s%s", message_list, newline) + 1; + message_list = realloc(message_list, total_size); + TryReturn(message_list != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] message_list's realloc is failed."); + strncat(message_list, newline, strlen(newline)); *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."); + TryReturn(error_message != NULL, ret_val = PRVMGR_ERR_OUT_OF_MEMORY; goto FINISH, PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] error_message's strdup is failed."); } FINISH: + if (message_list != NULL) + free(message_list); + if(deprecated_message != NULL) + free(deprecated_message); + if(mismatched_message != NULL) + free(mismatched_message); + if(mismatched_message != NULL) + free(noexist_message); free(changed_to); free(valid_api_version); free(pkg_type); @@ -437,3 +489,4 @@ FINISH: return ret_val; } + diff --git a/packaging/privilege-checker.spec b/packaging/privilege-checker.spec index 883dec1..899af06 100644 --- a/packaging/privilege-checker.spec +++ b/packaging/privilege-checker.spec @@ -9,6 +9,8 @@ BuildRequires: cmake BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(sqlite3) BuildRequires: pkgconfig(glib-2.0) +Requires(post): /sbin/ldconfig +Requires(postun): /sbin/ldconfig %description Pakcage for Privilege Management @@ -28,13 +30,14 @@ BuildRequires: pkgconfig(dlog) BuildRequires: gettext-tools BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: pkgconfig(glib-2.0) +Requires(post): /sbin/ldconfig +Requires(postun): /sbin/ldconfig %description -n capi-security-privilege-manager The Privilege Manager API provides functions to verify privilege information of packages to be installed. %package -n capi-security-privilege-manager-devel Summary: Privilege Manager API (Development) -Group: TO_BE/FILLED_IN Requires: capi-security-privilege-manager %description -n capi-security-privilege-manager-devel @@ -42,7 +45,6 @@ The Privilege Manager API provides functions to verify privilege information of %package -n tc-privilege-checker Summary: tc-privilege-checker -Group: TO_BE/FILLED_IN %description -n tc-privilege-checker Testsuit for Privilege Manager APIs @@ -109,6 +111,12 @@ sqlite3 /%{buildroot}%{_datadir}/privilege-manager/.wrt_privilege_info.db "selec %endif %make_install +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%post -n capi-security-privilege-manager -p /sbin/ldconfig +%postun -n capi-security-privilege-manager -p /sbin/ldconfig + %files -n privilege-checker %{_datadir}/license/privilege-checker %manifest packaging/privilege-checker.manifest diff --git a/test/tc-privilege-db-manager.c b/test/tc-privilege-db-manager.c index 8fb5b9c..e237cb3 100755 --- a/test/tc-privilege-db-manager.c +++ b/test/tc-privilege-db-manager.c @@ -153,10 +153,30 @@ void __test_privilege_db_manager_get_privilege_display(){ privilege_display = NULL; ret = privilege_db_manager_get_privilege_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, "http://tizen.org/privilege/messasdfsfsdfsdfad", "2.3", &privilege_display); __check_get_privilege_display_result(PRIVILEGE_DB_NO_EXIST_RESULT, ret, privilege_display); - printf("-----------------------------------------------------------\n"); free(privilege_display); -} + printf("-----------------------------------------------------------\n"); + printf("api_version is NULL\n"); + printf("privilege : http://tizen.org/privilege/power\n"); + printf("privilege_type : wrt\n"); + printf("expected result : PRIVILEGE_DB_MANAGER_ERR_NONE\n"); + privilege_display = NULL; + ret = privilege_db_manager_get_privilege_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, "http://tizen.org/privilege/power", NULL, &privilege_display); + __check_get_privilege_display_result(PRIVILEGE_DB_MANAGER_ERR_NONE, ret, privilege_display); + free(privilege_display); + + printf("-----------------------------------------------------------\n"); + printf("api_version is NULL\n"); + printf("privilege : http://tizen.org/privilege/messasdfsfsdfsdfad\n"); + printf("expected result : PRIVILEGE_DB_NO_EXIST_RESULT\n"); + privilege_display = NULL; + ret = privilege_db_manager_get_privilege_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, "http://tizen.org/privilege/messasdfsfsdfsdfad", NULL, &privilege_display); + __check_get_privilege_display_result(PRIVILEGE_DB_NO_EXIST_RESULT, ret, privilege_display); + free(privilege_display); + + printf("-----------------------------------------------------------\n"); + +} void __check_get_privilege_description_result(privilege_db_manager_error_e expected_result, privilege_db_manager_error_e result, char* privilege_description) { @@ -187,39 +207,64 @@ void __test_privilege_db_manager_get_privilege_description(){ int ret; - char* privilege_display = NULL; + char* privilege_description = NULL; printf("-----------------------------------------------------------\n"); printf("privilege : http://tizen.org/privilege/location\n"); printf("privilege_type : core\n"); printf("expected result : PRIVILEGE_DB_MANAGER_ERR_NONE\n"); - ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, "http://tizen.org/privilege/location", "2.3", &privilege_display); - __check_get_privilege_description_result(PRIVILEGE_DB_MANAGER_ERR_NONE, ret, privilege_display); + ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, "http://tizen.org/privilege/location", "2.3", &privilege_description); + __check_get_privilege_description_result(PRIVILEGE_DB_MANAGER_ERR_NONE, ret, privilege_description); - if(privilege_display != NULL){ - free(privilege_display); - privilege_display = NULL; + if(privilege_description != NULL){ + free(privilege_description); + privilege_description = NULL; } printf("-----------------------------------------------------------\n"); printf("privilege : http://tizen.org/privilege/power\n"); printf("privilege_type : wrt\n"); printf("expected result : PRIVILEGE_DB_MANAGER_ERR_NONE\n"); - ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, "http://tizen.org/privilege/power", "2.3", &privilege_display); - __check_get_privilege_description_result(PRIVILEGE_DB_MANAGER_ERR_NONE, ret, privilege_display); + ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, "http://tizen.org/privilege/power", "2.3", &privilege_description); + __check_get_privilege_description_result(PRIVILEGE_DB_MANAGER_ERR_NONE, ret, privilege_description); - if(privilege_display != NULL){ - free(privilege_display); - privilege_display = NULL; + if(privilege_description != NULL){ + free(privilege_description); + privilege_description = NULL; } printf("-----------------------------------------------------------\n"); printf("privilege : http://tizen.org/privilege/messasdfsfsdfsdfad\n"); printf("expected result : PRIVILEGE_DB_NO_EXIST_RESULT\n"); - ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, "http://tizen.org/privilege/messasdfsfsdfsdfad", "2.3", &privilege_display); - __check_get_privilege_description_result(PRIVILEGE_DB_NO_EXIST_RESULT, ret, privilege_display); + ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, "http://tizen.org/privilege/messasdfsfsdfsdfad", "2.3", &privilege_description); + __check_get_privilege_description_result(PRIVILEGE_DB_NO_EXIST_RESULT, ret, privilege_description); + + if(privilege_description != NULL){ + free(privilege_description); + privilege_description = NULL; + } + printf("-----------------------------------------------------------\n"); + printf("api_version is NULL\n"); + printf("privilege : http://tizen.org/privilege/power\n"); + printf("privilege_type : wrt\n"); + printf("expected result : PRIVILEGE_DB_MANAGER_ERR_NONE\n"); + ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT, "http://tizen.org/privilege/power", NULL, &privilege_description); + __check_get_privilege_description_result(PRIVILEGE_DB_MANAGER_ERR_NONE, ret, privilege_description); - free(privilege_display); + if(privilege_description != NULL){ + free(privilege_description); + privilege_description = NULL; + } + + printf("-----------------------------------------------------------\n"); + printf("api_version is NULL\n"); + printf("privilege : http://tizen.org/privilege/messasdfsfsdfsdfad\n"); + printf("expected result : PRIVILEGE_DB_NO_EXIST_RESULT\n"); + ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, "http://tizen.org/privilege/messasdfsfsdfsdfad", NULL, &privilege_description); + __check_get_privilege_description_result(PRIVILEGE_DB_NO_EXIST_RESULT, ret, privilege_description); + printf("-----------------------------------------------------------\n"); + + free(privilege_description); } -- 2.7.4