Add API to check metadata with certificate level 84/98084/7
authorYunjin Lee <yunjin-.lee@samsung.com>
Wed, 16 Nov 2016 06:05:10 +0000 (15:05 +0900)
committerYunjin Lee <yunjin-.lee@samsung.com>
Thu, 17 Nov 2016 04:59:06 +0000 (13:59 +0900)
Change-Id: I9e2157e9b09fb98e7773089de565b51634ccd26f
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
capi/include/privilege_manager.h
capi/res/dbspace/core_db_generator.sh
capi/res/dbspace/core_privilege_info.csv
capi/src/privilege_db_manager.c
capi/src/privilege_manager.c
test/tc-privilege-manager.c

index b18f201..5e2607c 100755 (executable)
@@ -38,6 +38,7 @@ typedef enum {
        PRVMGR_ERR_NO_EXIST_PRIVILEGE          = 5,
        PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL   = 6,
        PRVMGR_ERR_INVALID_PRIVILEGE           = 7,
+       PRVMGR_ERR_INVALID_METADATA            = PRVMGR_ERR_INVALID_PRIVILEGE,
        PRVMGR_ERR_DEPRECATED_PRIVILEGE        = 8,
        PRVMGR_ERR_USING_BANNED_PRIVILEGE      = 9,
 } privilege_manager_error_e;
@@ -49,8 +50,9 @@ typedef enum {
 } privilege_manager_visibility_e;
 
 typedef enum {
-       PRVMGR_PACKAGE_TYPE_WRT     =  0,
-       PRVMGR_PACKAGE_TYPE_CORE        =  1,
+       PRVMGR_PACKAGE_TYPE_WRT      = 0,
+       PRVMGR_PACKAGE_TYPE_CORE     = 1,
+       PRVMGR_PACKAGE_TYPE_METADATA = 2,
        PRVMGR_PACKAGE_TYPE_MAX
 } privilege_manager_package_type_e;
 
@@ -67,7 +69,7 @@ typedef enum {
  * @return 0 on success, otherwise a nonzero error value.
  * @retval #PRVMGR_ERR_NONE Successful
  * @retval #PRVMGR_ERR_OUT_OF_MEMORY Out of memory
- * @retvak #PRVMGR_ERR_INVALID_PRIVILEGE The privilege_list contains invalid privilege(s).
+ * @retval #PRVMGR_ERR_INVALID_PRIVILEGE The privilege_list contains invalid privilege(s).
  * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter
  * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error
  */
@@ -115,6 +117,23 @@ EXPORT_API int privilege_manager_set_black_list(int uid, privilege_manager_packa
  */
 EXPORT_API int privilege_manager_unset_black_list(int uid, privilege_manager_package_type_e package_type, GList* privilege_list);
 
+/**
+ * @brief verify metadata level in the metadata list.
+ * @remarks @a metadata_list must be released with free() by you.
+ * @remarks @a error_messsage must be released with free() by you.
+ * @param [in] api_version The API Version
+ * @param [in] metadata_list The metadata_list
+ * @param [in] privilege_manager_visibility_e The privilege_manager_visibility_e
+ * @param [out] error_message The error_message's value is assigned when the return value isn't PRVMGR_ERR_NONE, otherwise null is assigned.
+ * @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_METADATA The metadata_list contains invalid metadata.
+ * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter
+ * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error
+ */
+EXPORT_API int privilege_manager_verify_metadata(const char *api_version, GList * metadata_list, privilege_manager_visibility_e visibility, char **error_message);
+
 #ifdef __cplusplus
 }
 #endif
index c4fe62c..b553da4 100755 (executable)
@@ -52,6 +52,7 @@ do
        fi
 
        PACKAGE_TYPE=`echo $i | cut -d "," -f 2`
+       PRIVILEGE_GROUP=`echo $i | cut -d "," -f 13`
 
        if [ "$PACKAGE_TYPE" = "wrt" ]
        then
@@ -60,9 +61,13 @@ do
        elif [ "$PACKAGE_TYPE" = "core" ]
        then
                PACKAGE_TYPE_ID=1
+       elif [ "$PACKAGE_TYPE" = "metadata" ]
+       then
+               PACKAGE_TYPE_ID=2
+               PRIVILEGE_GROUP="IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB"
 
        else
-               echo "Fail to create table : PACKAGE_TYPE must be wrt or core"
+               echo "Fail to create table : PACKAGE_TYPE must be metadata, wrt or core"
                exit
        fi
 
@@ -109,7 +114,7 @@ do
 
        PRIVILEGE_DESCRIPTION=`echo $i | cut -d "," -f 12`
 
-       PRIVILEGE_GROUP=`echo $i | cut -d "," -f 13`
+       #PRIVILEGE_GROUP=`echo $i | cut -d "," -f 13`
 
        if [ "$PRIVILEGE_GROUP" = "IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB" ]
        then
@@ -140,6 +145,7 @@ do
                PRIVILEGE_GROUP_ID=6
 
        else
+               echo "PRIVILEGE_GROUP = $PRIVILEGE_GROUP"
                echo "Fail to create table : PRIVILEGE_GROUP must be one of them below"
                echo "IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB"
                echo "IDS_TPLATFORM_OPT_LOCATION_T_LBS"
index f8d404e..47eb5c4 100755 (executable)
@@ -163,3 +163,6 @@ common,core,public,2.3.1,9.9,yes,http://tizen.org/privilege/widget.viewer,no,N/A
 mobile,core,public,2.3,9.9,yes,http://tizen.org/privilege/wifidirect,no,N/A,,IDS_TPLATFORM_HEADER_MANAGING_WI_FI_DIRECT_INFORMATION,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_ENABLE_AND_DISABLE_WI_FI_DIRECT_MANAGE_WI_FI_DIRECT_CONNECTIONS_AND_CHANGE_WI_FI_DIRECT_SETTINGS,IDS_TPLATFORM_BODY_HARDWARE_CONTROLS_ABB,,
 mobile,core,public,2.3,9.9,yes,http://tizen.org/privilege/window.priority.set,no,N/A,,IDS_TPLATFORM_HEADER_DISPLAYING_WINDOWS_ON_TOP_OF_OTHER_APPLICATIONS_AND_SCREENS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_APPEAR_ON_TOP_OF_OTHER_WINDOWS_AND_SCREENS_MSG,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB,,
 wearable,core,public,2.3.1,9.9,yes,http://tizen.org/privilege/window.priority.set,no,N/A,,IDS_TPLATFORM_HEADER_DISPLAYING_WINDOWS_ON_TOP_OF_OTHER_APPLICATIONS_AND_SCREENS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_APPEAR_ON_TOP_OF_OTHER_WINDOWS_AND_SCREENS_MSG,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB,,
+#common,metadata,public,1,9.9,no,http://tizen.org/metadata/public,no,N/A,test,,,,,
+#common,metadata,partner,1,9.9,no,http://tizen.org/metadata/partner,no,N/A,test,,,,,
+#common,metadata,platform,1,9.9,no,http://tizen.org/metadata/platform,no,N/A,test,,,,,
index 9a880c3..a4a764b 100755 (executable)
@@ -55,10 +55,10 @@ int __initialize_db(char type, sqlite3 ** db, privilege_db_manager_package_type_
 
        switch (type) {
        case 'i':
-               if (package_type == PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE)
-                       db_path = PRIVILEGE_INFO_CORE_DB_PATH;
-               else
+               if (package_type == PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT)
                        db_path = PRIVILEGE_INFO_WRT_DB_PATH;
+               else
+                       db_path = PRIVILEGE_INFO_CORE_DB_PATH;
                break;
        case 'm':
                if (package_type == PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE)
index abf9e54..88369f9 100755 (executable)
@@ -218,7 +218,7 @@ int privilege_manager_verify_privilege(const char *api_version, privilege_manage
                }
        }
 
-       if (package_type != PRVMGR_PACKAGE_TYPE_WRT && package_type != PRVMGR_PACKAGE_TYPE_CORE) {
+       if (package_type != PRVMGR_PACKAGE_TYPE_WRT && package_type != PRVMGR_PACKAGE_TYPE_CORE && package_type != PRVMGR_PACKAGE_TYPE_METADATA) {
                _LOGD("checking package type = %d", package_type);
                _LOGE("[PRVMGR_ERR_INVALID_PARAMETER] package_type is not a PRVMGR_PACKAGE_TYPE_WRT or PRVMGR_PACKAGE_TYPE_CORE");
                *error_message = strdup("[PRVMGR_ERR_INVALID_PARAMETER] package_type is a unknown type. package_type must be a PRVMGR_PACKAGE_TYPE_WRT or PRVMGR_PACKAGE_TYPE_CORE");
@@ -239,6 +239,11 @@ int privilege_manager_verify_privilege(const char *api_version, privilege_manage
                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);
+       } else if (package_type == PRVMGR_PACKAGE_TYPE_METADATA) {
+               pkg_type = strdup("Metadata");
+               TryReturn(pkg_type != NULL, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] pkg_type's strdup is failed.");
+               is_valid_wrt_version = 0;
+               snprintf(guide_message, MESSAGE_SIZE, "Check tizen-manifest.xml or config.xml| - Current api-version = %s, |   ", api_version);
        }
 
        if ((visibility & PRVMGR_PACKAGE_VISIBILITY_PUBLIC) != PRVMGR_PACKAGE_VISIBILITY_PUBLIC && (visibility & PRVMGR_PACKAGE_VISIBILITY_PARTNER) != PRVMGR_PACKAGE_VISIBILITY_PARTNER && (visibility & PRVMGR_PACKAGE_VISIBILITY_PLATFORM) != PRVMGR_PACKAGE_VISIBILITY_PLATFORM) {
@@ -496,3 +501,8 @@ int privilege_manager_unset_black_list(int uid, privilege_manager_package_type_e
                ret = PRVMGR_ERR_INTERNAL_ERROR;
        return ret;
 }
+
+int privilege_manager_verify_metadata(const char* api_version, GList *metadata_list, privilege_manager_visibility_e visibility, char **error_message)
+{
+       return privilege_manager_verify_privilege(api_version, PRVMGR_PACKAGE_TYPE_METADATA, metadata_list, visibility, error_message);
+}
index ed7e973..f2f382e 100755 (executable)
@@ -6,7 +6,7 @@
 #include <privilege_manager.h>
 #include "tc-common.h"
 
-void __privilege_manager_get_mapped_privilege_list()
+static void __privilege_manager_get_mapped_privilege_list()
 {
        int ret = 0;
        GList* mapped_privilege_list = NULL;
@@ -235,7 +235,55 @@ static void __test_privilege_manager_get_mapped_privilege_list()
 #endif
 }
 
-void __privilege_manager_verify_privilege()
+static void __test_privilege_manager_verify_metadata()
+{
+       char* error_message = NULL;
+       int ret = 0;
+       GList *metadata_list = NULL;
+
+       printf("metadata : http://tizen.org/metadata/public\n");
+       metadata_list = g_list_append(metadata_list, "http://tizen.org/metadata/public");
+       __tcinfo(cert_level, "public");
+       __tcinfo(expect, PRVMGR_ERR_NONE);
+       ret = privilege_manager_verify_metadata("3.0", metadata_list, visibility, &error_message);
+       __print_result('m', ret);
+       ShowErrorMsg(error_message != NULL, error_message, ret);
+       __print_line();
+
+       free(error_message);
+       error_message = NULL;
+       gfree(metadata_list);
+
+       printf("metadata : http://tizen.org/metadata/notexist\n");
+       metadata_list = g_list_append(metadata_list, "http://tizen.org/metadata/notexist");
+       __tcinfo(cert_level, "public");
+       __tcinfo(expect, PRVMGR_ERR_NONE);
+       ret = privilege_manager_verify_metadata("3.0", metadata_list, visibility, &error_message);
+       __print_result('m', ret);
+       ShowErrorMsg(error_message != NULL, error_message, ret);
+       __print_line();
+
+       free(error_message);
+       error_message = NULL;
+       gfree(metadata_list);
+
+       printf("metadata : http://tizen.org/metadata/partner\n");
+       printf("metadata : http://tizen.org/metadata/platform\n");
+       metadata_list = g_list_append(metadata_list, "http://tizen.org/metadata/partner");
+       metadata_list = g_list_append(metadata_list, "http://tizen.org/metadata/platform");
+       __tcinfo(cert_level, "partner");
+       __tcinfo(expect, PRVMGR_ERR_INVALID_METADATA);
+       ret = privilege_manager_verify_metadata("3.0", metadata_list, visibility, &error_message);
+       __print_result('m', ret);
+       ShowErrorMsg(error_message != NULL, error_message, ret);
+       __print_line();
+
+       free(error_message);
+       error_message = NULL;
+       gfree(metadata_list);
+}
+
+static void __privilege_manager_verify_privilege()
 {
        char* error_message = NULL;
        int ret = 0;
@@ -244,6 +292,7 @@ void __privilege_manager_verify_privilege()
        ShowErrorMsg(error_message != NULL, error_message, ret);
        __print_line();
 
+       free(error_message);
        gfree(privilege_list);
 }
 
@@ -1451,6 +1500,9 @@ int main()
        __tcinfo(function, "privilege_manager_get_mapped_privilege_list");
        __test_privilege_manager_get_mapped_privilege_list();
 
+       __tcinfo(function, "privilege_manager_verify_metadata");
+       __test_privilege_manager_verify_metadata();
+
        __color_to_green();
        printf("Test Complete\n");
        printf("success : %d, ", success_cnt);