1. Add privilege_db_manager api to handle NULL api version 2. Modify api version... 75/49975/3
authorYunjin Lee <yunjin-.lee@samsung.com>
Thu, 22 Oct 2015 07:03:16 +0000 (16:03 +0900)
committerYunjin Lee <yunjin-.lee@samsung.com>
Wed, 25 Nov 2015 06:41:35 +0000 (15:41 +0900)
Change-Id: I53931b82456a5d89fddfc587a973145e7f9ca713
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
12 files changed:
capi/include/privilege_db_manager.h
capi/include/privilege_info.h
capi/res/dbspace/core_db_generator.sh
capi/res/dbspace/tv_core_db_generator.sh
capi/res/dbspace/tv_wrt_db_generator.sh
capi/res/dbspace/wrt_db_generator.sh
capi/res/dbspace/wrt_privilege_info.db
capi/src/privilege_db_manager.c
capi/src/privilege_info.c [changed mode: 0644->0755]
capi/src/privilege_manager.c
packaging/privilege-checker.spec
test/tc-privilege-db-manager.c

index d60ad1d..55099f7 100755 (executable)
@@ -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);
index 55b245e..c258f90 100644 (file)
@@ -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
index db35708..44855ed 100755 (executable)
@@ -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
 
index d475721..309a7c9 100755 (executable)
@@ -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
 
index ce44b82..e60e9d8 100755 (executable)
@@ -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
 
index 4087a52..97c574a 100755 (executable)
@@ -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
 
index ec5d520..bcd5d41 100644 (file)
Binary files a/capi/res/dbspace/wrt_privilege_info.db and b/capi/res/dbspace/wrt_privilege_info.db differ
index 3cc1bd5..16e13bc 100755 (executable)
@@ -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;
old mode 100644 (file)
new mode 100755 (executable)
index 020d4c5..ece86ed
 #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;
 }
 
 
-
index 0094eab..7ee796c 100755 (executable)
@@ -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;
 }
 
+
index 883dec1..899af06 100644 (file)
@@ -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
index 8fb5b9c..e237cb3 100755 (executable)
@@ -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);
 
 }