Get privilege display name or description with package type 31/242131/3
authorYunjin Lee <yunjin-.lee@samsung.com>
Mon, 24 Aug 2020 10:03:49 +0000 (19:03 +0900)
committerYunjin Lee <yunjin-.lee@samsung.com>
Fri, 28 Aug 2020 06:45:32 +0000 (06:45 +0000)
- To make privilege-info to wrapper of this package, add proper
functions for that
- Revise privilege db APIs to get privilege display name or description
regardless of the package type if the given package type is
PRVMGR_PACKAGE_TYPE_NONE

Change-Id: I98d869f1a238faeaa486f17c831471c46c81b3c6
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
capi/include/privilege_db_manager.h
capi/include/privilege_info.h
capi/src/privilege_db_manager.c
capi/src/privilege_info.c

index 688ddb4..75b99b2 100755 (executable)
@@ -81,7 +81,8 @@ int privilege_db_manager_get_privilege_level_info_list(privilege_manager_package
 int privilege_db_manager_get_mapped_privilege_list(const char* api_version, privilege_manager_package_type_e package_type, GList* privilege_list, GList** mapped_privilege_list);
 
 /**
- * @brief Get privilege display name
+ * @brief Get privilege display name by the given privilege name and package type
+ * @remarks If @a package_type is PRVMGR_PACKAGE_TYPE_NONE then get privilege display regardless of the @a package_type
  * @remarks @a privilege_display must be released by you.
  * @param [in]  package_type The package type
  * @param [in]  privilege_name The privilege name
@@ -98,7 +99,8 @@ int privilege_db_manager_get_mapped_privilege_list(const char* api_version, priv
 int privilege_db_manager_get_privilege_display(privilege_manager_package_type_e package_type, const char* privilege_name, const char* api_version, char** privilege_display);
 
 /**
- * @brief Get privilege description
+ * @brief Get privilege description by then given privilege name and package type
+ * @remarks If @a package_type is PRVMGR_PACKAGE_TYPE_NONE then get privilege description regardless of the @a package_type
  * @remarks @a privilege_description must be released by you.
  * @param [in]  package_type The package type
  * @param [in]  privilege_name The privilege name
index 8baedf2..ba61bbc 100644 (file)
@@ -124,6 +124,7 @@ EXPORT_API int privilege_info_get_privilege_group_display_name(const char *privi
 
 /**
  * @brief Gets the display name of privilege with the given privilege.
+ * @remarks If the given @a privilege not exist then it returns PRVMGR_ERR_NONE with NULL @a name.
  * @remarks @a name must be released with free() by you.
  * @param [in] privilege The privilege
  * @param [out] name The display name of the privilege
@@ -131,11 +132,29 @@ EXPORT_API int privilege_info_get_privilege_group_display_name(const char *privi
  * @retval #PRVMGR_ERR_NONE Successful
  * @retval #PRVMGR_ERR_OUT_OF_MEMORY Out of memory
  * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter
+ * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error
  */
 EXPORT_API int privilege_info_get_privilege_display_name(const char *privilege, char **name);
 
 /**
+ * @brief Gets the display name of privilege with the given privilege and package_type
+ * @remarks @a display_name must be released with free() by you.
+ * @param [in] privilege The privilege
+ * @param [in] api_version The api version
+ * @param [in] package_type The package type
+ * @param [out] display_name The display name of the privilege
+ * @return 0 on success, otherwise a negative error value
+ * @retval #PRVMGR_ERR_NONE Successful
+ * @retval #PRVMGR_ERR_OUT_OF_MEMORY Out of memory
+ * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter
+ * @retval #PRVMGR_ERR_NO_EXIST_PRIVILEGE The given privilege doesn't exist
+ * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error
+ */
+EXPORT_API int privilege_info_get_privilege_display_name_by_package_type(const char* privilege, const char* api_version, privilege_manager_package_type_e package_type, char** display_name);
+
+/**
  * @brief Gets the description of privilege with the given privilege.
+ * @remarks If the given @a privilege not exist then it returns PRVMGR_ERR_NONE with NULL @a name.
  * @remarks @a description must be released with free() by you.
  * @param [in]  privilege The privilege
  * @param [out] description The description of the privilege
@@ -143,9 +162,26 @@ EXPORT_API int privilege_info_get_privilege_display_name(const char *privilege,
  * @retval #PRVMGR_ERR_NONE Successful
  * @retval #PRVMGR_ERR_OUT_OF_MEMORY Out of memory
  * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter
+ * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error
  */
 EXPORT_API int privilege_info_get_privilege_description(const char *privilege, char **description);
 
+/*
+ * @brief Gets the description of privilege with the given privilege and package_type
+ * @remarks @a description must be released with free() by you.
+ * @param [in] privilege The privilege
+ * @param [in] api_version The api version
+ * @param [in] package_type The package type
+ * @param [out] description The description of the privilege
+ * @return 0 on success, otherwise a negative error value
+ * @retval #PRVMGR_ERR_NONE Successful
+ * @retval #PRVMGR_ERR_OUT_OF_MEMORY Out of memory
+ * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter
+ * @retval #PRVMGR_ERR_NO_EXIST_PRIVILEGE The given privilege doesn't exist
+ * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error
+ */
+EXPORT_API int privilege_info_get_privilege_description_by_package_type(const char* privilege, const char* api_version, privilege_manager_package_type_e package_type, char** description);
+
 /**
  * @brief Determines whether the given privilege is valid.
  * @param [in]  privilege The privilege
@@ -227,7 +263,7 @@ EXPORT_API int privilege_info_get_privilege_list_by_privacy(const char *privacy,
  * @brief Gets privacy id of the given privilege.
  * @remarks @a privacy must be released with free() by you.
  * @param [in]  privilege The privilege
- * @param [out] privacy The privacy id of the given privilege
+ * @param [out] privacy The privacy name of the given privilege
  * @return 0 on success, otherwise a nonzero error value.
  * @retval #PRVMGR_ERR_NONE Successful
  * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error
index 89ed131..71eba39 100755 (executable)
@@ -248,7 +248,7 @@ static int __begin_transaction(sqlite3 *db)
                        }
                }
        }
-    return PRIVILEGE_DB_MANAGER_ERR_NONE;
+       return PRIVILEGE_DB_MANAGER_ERR_NONE;
 }
 
 static int __make_privilege_list_str(GList *privilege_list, char** privilege_list_str)
@@ -429,7 +429,11 @@ int privilege_db_manager_get_privilege_display(privilege_manager_package_type_e
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
-       char *sql = sqlite3_mprintf("select privilege_display from privilege_info where package_type_id=%d and privilege_name=%Q", package_type, privilege_name);
+       char *sql = NULL;
+       if (package_type == PRVMGR_PACKAGE_TYPE_NONE)
+               sql = sqlite3_mprintf("select privilege_display from privilege_info where privilege_name=%Q", privilege_name);
+       else
+               sql = sqlite3_mprintf("select privilege_display from privilege_info where package_type_id=%d and privilege_name=%Q", package_type, privilege_name);
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
@@ -452,7 +456,11 @@ int privilege_db_manager_get_privilege_description(privilege_manager_package_typ
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
-       char *sql = sqlite3_mprintf("select privilege_description from privilege_info where package_type_id=%d and privilege_name=%Q", package_type, privilege_name);
+       char *sql = NULL;
+       if (package_type == PRVMGR_PACKAGE_TYPE_NONE)
+               sql = sqlite3_mprintf("select privilege_description from privilege_info where privilege_name=%Q", privilege_name);
+       else
+               sql = sqlite3_mprintf("select privilege_description from privilege_info where package_type_id=%d and privilege_name=%Q", package_type, privilege_name);
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
index 0623bf0..9329cf3 100755 (executable)
@@ -318,7 +318,7 @@ int privilege_info_get_privilege_group_display_name(const char *privilege_group,
        return PRVMGR_ERR_NONE;
 }
 
-static int __get_privilege_display_name_string_id_by_package_type(privilege_manager_package_type_e package_type, const char* privilege, char** string_id)
+static int __get_privilege_display_name_string_id(privilege_manager_package_type_e package_type, const char* privilege, char** string_id)
 {
        char* temp = NULL;
        int ret = privilege_db_manager_get_privilege_display(package_type, privilege, NULL, &temp);
@@ -327,11 +327,12 @@ static int __get_privilege_display_name_string_id_by_package_type(privilege_mana
                        *string_id = strdup(temp);
                        TryReturn(string_id != NULL, SafeFree(temp), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] strdup() failed.");
                } else {
-                       LOGE("%s privilege %s exist but have no display name", package_type == PRVMGR_PACKAGE_TYPE_WRT ? "wrt" : "core", privilege);
+                       //NOTE: This is a case that shouldn't happen, but if it does, return PRVMGR_ERR_NONE with NULL string_id
+                       LOGE("%s privilege %s exist but have no display name", package_type == PRVMGR_PACKAGE_TYPE_WRT ? "wrt" : package_type == PRVMGR_PACKAGE_TYPE_CORE ? "core" : "", privilege);
                }
                ret = PRVMGR_ERR_NONE;
        } else if (ret == PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT) {
-               LOGD("%s privilege %s not exist", package_type == PRVMGR_PACKAGE_TYPE_WRT ? "wrt" : "core", privilege);
+               LOGD("%s privilege %s not exist", package_type == PRVMGR_PACKAGE_TYPE_WRT ? "wrt" : package_type == PRVMGR_PACKAGE_TYPE_CORE ? "core" : "", privilege);
                ret = PRVMGR_ERR_NO_EXIST_PRIVILEGE;
        } else {
                LOGE("privilege_db_manager_get_privilege_display() failed. ret = %d", ret);
@@ -341,21 +342,6 @@ static int __get_privilege_display_name_string_id_by_package_type(privilege_mana
        return ret;
 }
 
-static int __get_privilege_display_name_string_id(const char *privilege, char **string_id)
-{
-       TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL");
-
-       int ret = __get_privilege_display_name_string_id_by_package_type(PRVMGR_PACKAGE_TYPE_CORE, privilege, string_id);
-
-       if (ret == PRVMGR_ERR_NO_EXIST_PRIVILEGE)
-               ret = __get_privilege_display_name_string_id_by_package_type(PRVMGR_PACKAGE_TYPE_WRT, privilege, string_id);
-
-       if (ret == PRVMGR_ERR_NO_EXIST_PRIVILEGE)
-               LOGE("Privilege [%s] doesn't exist for any type of package", privilege);
-
-       return ret;
-}
-
 int privilege_info_get_privilege_display_name(const char *privilege, char **name)
 {
        TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL");
@@ -363,7 +349,7 @@ int privilege_info_get_privilege_display_name(const char *privilege, char **name
        char *string_id = NULL;
        int ret = 0;
 
-       ret = __get_privilege_display_name_string_id(privilege, &string_id);
+       ret = __get_privilege_display_name_string_id(PRVMGR_PACKAGE_TYPE_NONE, privilege, &string_id);
        if (ret == PRVMGR_ERR_NONE) {
                if (string_id != NULL)
                        ret = privilege_info_get_privilege_string_by_string_id(string_id, name);
@@ -378,7 +364,7 @@ int privilege_info_get_privilege_display_name(const char *privilege, char **name
        return ret;
 }
 
-static int __get_privilege_description_string_id_by_package_type(privilege_manager_package_type_e package_type, const char* privilege, char** string_id)
+static int __get_privilege_description_string_id(privilege_manager_package_type_e package_type, const char* privilege, char** string_id)
 {
        char* temp = NULL;
        int ret = privilege_db_manager_get_privilege_description(package_type, privilege, NULL, &temp);
@@ -387,11 +373,12 @@ static int __get_privilege_description_string_id_by_package_type(privilege_manag
                        *string_id = strdup(temp);
                        TryReturn(string_id != NULL, SafeFree(temp), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] strdup() failed.");
                } else {
-                       LOGE("%s privilege %s exist but have no description", package_type == PRVMGR_PACKAGE_TYPE_WRT ? "wrt" : "core", privilege);
+                       //NOTE: This is a case that shouldn't happen, but if it does, return PRVMGR_ERR_NONE with NULL string_id
+                       LOGE("%s privilege %s exist but have no description", package_type == PRVMGR_PACKAGE_TYPE_WRT ? "wrt" : package_type == PRVMGR_PACKAGE_TYPE_CORE ? "core" : "", privilege);
                }
                ret = PRVMGR_ERR_NONE;
        } else if (ret == PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT) {
-               LOGD("%s privilege %s not exist", package_type == PRVMGR_PACKAGE_TYPE_WRT ? "wrt" : "core", privilege);
+               LOGD("%s privilege %s not exist", package_type == PRVMGR_PACKAGE_TYPE_WRT ? "wrt" : package_type == PRVMGR_PACKAGE_TYPE_CORE ? "core" : "", privilege);
                ret = PRVMGR_ERR_NO_EXIST_PRIVILEGE;
        } else {
                LOGE("privilege_db_manager_get_privilege_description() failed. ret = %d", ret);
@@ -401,31 +388,57 @@ static int __get_privilege_description_string_id_by_package_type(privilege_manag
        return ret;
 }
 
-static int __get_privilege_description_string_id(const char *privilege, char **string_id)
+int privilege_info_get_privilege_description(const char *privilege, char **description)
 {
        TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL");
 
-       int ret = __get_privilege_description_string_id_by_package_type(PRVMGR_PACKAGE_TYPE_CORE, privilege, string_id);
+       char *string_id = NULL;
+       int ret = 0;
+
+       ret = __get_privilege_description_string_id(PRVMGR_PACKAGE_TYPE_NONE, privilege, &string_id);
+       if (ret == PRVMGR_ERR_NONE) {
+               if (string_id != NULL)
+                       ret = privilege_info_get_privilege_string_by_string_id(string_id, description);
+       } else if (ret == PRVMGR_ERR_NO_EXIST_PRIVILEGE) {
+               ret = PRVMGR_ERR_NONE;
+       } else {
+               LOGE("__get_privilege_description_string_id() failed. ret = %d", ret);
+       }
 
-       if (ret == PRVMGR_ERR_NO_EXIST_PRIVILEGE)
-               ret = __get_privilege_description_string_id_by_package_type(PRVMGR_PACKAGE_TYPE_WRT, privilege, string_id);
+       SafeFree(string_id);
 
        return ret;
 }
 
-int privilege_info_get_privilege_description(const char *privilege, char **description)
+int privilege_info_get_privilege_display_name_by_package_type(const char* privilege, __attribute__((unused)) const char* api_version, privilege_manager_package_type_e package_type, char** display_name)
 {
-       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 must not be NULL");
+       TryReturn(package_type == PRVMGR_PACKAGE_TYPE_WRT || package_type == PRVMGR_PACKAGE_TYPE_CORE, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] Unknown package_type %d", package_type);
 
-       char *string_id = NULL;
-       int ret = 0;
+       char* string_id = NULL;
+       int ret = __get_privilege_display_name_string_id(package_type, privilege, &string_id);
+       if (ret == PRVMGR_ERR_NONE) {
+               if (string_id != NULL)
+                       ret = privilege_info_get_privilege_string_by_string_id(string_id, display_name);
+       } else {
+               LOGE("__get_privilege_display_name_string_id() failed. ret = %d", ret);
+       }
+
+       SafeFree(string_id);
+
+       return ret;
+}
+
+int privilege_info_get_privilege_description_by_package_type(const char* privilege, __attribute__((unused)) const char* api_version, privilege_manager_package_type_e package_type, char** description)
+{
+       TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege must not be NULL");
+       TryReturn(package_type == PRVMGR_PACKAGE_TYPE_WRT || package_type == PRVMGR_PACKAGE_TYPE_CORE, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] Unknown package_type %d", package_type);
 
-       ret = __get_privilege_description_string_id(privilege, &string_id);
+       char* string_id = NULL;
+       int ret = __get_privilege_description_string_id(package_type, privilege, &string_id);
        if (ret == PRVMGR_ERR_NONE) {
                if (string_id != NULL)
                        ret = privilege_info_get_privilege_string_by_string_id(string_id, description);
-       } else if (ret == PRVMGR_ERR_NO_EXIST_PRIVILEGE) {
-               ret = PRVMGR_ERR_NONE;
        } else {
                LOGE("__get_privilege_description_string_id() failed. ret = %d", ret);
        }