Add API to determine given privilege is privacy related or not on the basis of whitelist 60/100460/7 accepted/tizen/common/20161205.135853 accepted/tizen/ivi/20161205.232845 accepted/tizen/mobile/20161205.232750 accepted/tizen/tv/20161205.232805 accepted/tizen/wearable/20161205.232825 submit/tizen/20161205.023558 submit/tizen_3.0/20161205.022817
authorYunjin Lee <yunjin-.lee@samsung.com>
Mon, 28 Nov 2016 06:38:46 +0000 (15:38 +0900)
committerYunjin Lee <yunjin-.lee@samsung.com>
Fri, 2 Dec 2016 08:57:01 +0000 (17:57 +0900)
Change-Id: I1df0f8dc4654124d3b052cc51dfd12c245f9bd69
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
16 files changed:
capi/include/privilege_db_manager.h
capi/include/privilege_info.h
capi/include/privilege_info_types.h
capi/res/dbspace/core_db_generator.sh
capi/res/dbspace/core_mapping_db_generator.sh
capi/res/dbspace/mobile_preloaded.list [new file with mode: 0644]
capi/res/dbspace/tv_core_db_generator.sh
capi/res/dbspace/tv_core_mapping_db_generator.sh
capi/res/dbspace/tv_core_privilege_info.csv
capi/res/dbspace/tv_wrt_mapping_db_generator.sh
capi/res/dbspace/wearable_preloaded.list [new file with mode: 0644]
capi/res/dbspace/wrt_mapping_db_generator.sh
capi/src/privilege_db_manager.c
capi/src/privilege_info.c
capi/src/privilege_manager.c
test/tc-privilege-info.c

index 4d5695f..7a6b2ee 100755 (executable)
@@ -76,6 +76,7 @@ int privilege_db_manager_get_privilege_group_display(privilege_db_manager_packag
 int privilege_db_manager_get_privacy_display(const char *privacy, char **privacy_display);
 
 int privilege_db_manager_is(char type, const char* privilege);
+int privilege_db_manager_is_preloaded(const char* pkgid);
 int __privilege_db_manager_get_privacy_list(GList** privacy_list);
 int __privilege_db_manager_get_privilege_list_by_privacy(const char* privacy, GList **privilege_list);
 int privilege_db_manager_get_privacy_by_privilege(const char* privilege, char** privacy);
index 33005dc..6ec83aa 100644 (file)
@@ -132,6 +132,14 @@ EXPORT_API int privilege_info_is_internal(const char *privilege);
 EXPORT_API int privilege_info_is_privacy(const char *privilege);
 
 /**
+ * @brief Determines whether the given privilege is privacy related or not.on the basis of whitelist
+ * @param [in]  label The label
+ * @param [in]  privilege The privilege
+ * @return 1 if true(=is privacy related privilege), 0 if false, and -1 on error
+ */
+EXPORT_API int privilege_info_is_privacy2(const char *label, const char *privilege);
+
+/**
  * @brief Gets all privacy list.
  * @remarks @a privacy_list must be released with g_list_free() by you.
  * @param [out]  privacy_list The privacy list
index d334db0..04e31ed 100644 (file)
@@ -32,6 +32,7 @@ typedef enum _privilegeGroup {
        MAX_PRV_GROUP,
 } privilegeGroup;
 
+#define LOCATION_PRIVACY "http://tizen.org/privacy/location"
 #define EXTRA_GROUP MAX_PRV_GROUP - 1
 
 typedef struct {
index b553da4..7d5938b 100755 (executable)
@@ -7,18 +7,35 @@ echo "Creating $DB_NAME ..."
 touch $DB_NAME
 
 target_profile=$1
+preloaded="$target_profile""_preloaded.list"
 
 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, IS_PRIVACY NUMERIC, PRIVACY_GROUP 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 "Create VALID_PRIVILEGE_INFO Table..."
-sqlite3 $DB_NAME "CREATE TABLE VALID_PRIVILEGE_INFO (PRIVILEGE_NAME TEXT UNIQUE, IS_PRIVACY NUMERIC, IS_INTERNAL NUMERIC);"
+sqlite3 $DB_NAME "CREATE TABLE VALID_PRIVILEGE_INFO (PRIVILEGE_NAME TEXT UNIQUE, IS_PRIVACY NUMERIC, PRIVACY_GROUP TEXT, IS_INTERNAL NUMERIC);"
 
 echo "Create PRIVACY_INFO table..."
 sqlite3 $DB_NAME "CREATE TABLE PRIVACY_INFO (PRIVACY_GROUP TEXT UNIQUE, PRIVACY_DISPLAY TEXT);"
 
+echo "Create PRELOADED table..."
+sqlite3 $DB_NAME "CREATE TABLE PRELOADED (NAME TEXT)"
+
 echo "Inserting data ..."
 IFS=$'\n'
+for p in `cat $preloaded`
+do
+       temp=`echo $p | awk '/^#/'`
+       if [ ! "$temp" = "" ]
+       then
+               continue
+       fi
+       NAME=`echo $p | cut -d "," -f 1`
+       sqlite3 $DB_NAME "insert into preloaded values ('$NAME')"
+done
+
+
+
 for i in `cat core_privilege_info.csv`
 do
        temp=`echo $i | awk '/^#/'`
@@ -163,13 +180,13 @@ do
        echo "Inserting $PRIVILEGE_NAME ..."
 
        sqlite3 $DB_NAME "insert into privilege_info values ( $PROFILE_ID, '$PROFILE', $PACKAGE_TYPE_ID, '$PACKAGE_TYPE', $PRIVILEGE_LEVEL_ID, '$PRIVILEGE_LEVEL', '$API_VERSION_ISSUED', '$API_VERSION_EXPIRED', '$DOCUMENTED', '$PRIVILEGE_NAME', '$IS_PRIVACY', '$PRIVACY_GROUP', '$PRIVILEGE_DISPLAY', '$PRIVILEGE_DESCRIPTION', $PRIVILEGE_GROUP_ID, '$PRIVILEGE_GROUP', '$CHANGED_TO_2_3_1', '$CHANGED_TO_2_4_0')"
-       sqlite3 $DB_NAME "insert into valid_privilege_info (privilege_name, is_privacy, is_internal) values ('$PRIVILEGE_NAME', '$IS_PRIVACY', 0)"
+       sqlite3 $DB_NAME "insert into valid_privilege_info (privilege_name, is_privacy, privacy_group, is_internal) values ('$PRIVILEGE_NAME', '$IS_PRIVACY', '$PRIVACY_GROUP', 0)"
 done
 
 for internal_privilege in `cat internal_only.list`
 do
        echo "Inserting $internal_privilege ..."
-       sqlite3 $DB_NAME "insert into valid_privilege_info (privilege_name, is_privacy, is_internal) values ('$internal_privilege', 0, 1)"
+       sqlite3 $DB_NAME "insert into valid_privilege_info (privilege_name, is_privacy, privacy_group, is_internal) values ('$internal_privilege', 0, 'N/A', 1)"
 done
 
 echo "Insert into PRIVACY_INFO"
index fc1333d..6d505eb 100755 (executable)
@@ -54,13 +54,14 @@ do
        sqlite3 $DB_NAME "insert into privilege_mapping values ( $PROFILE_ID, '$PROFILE', '$PRIVILEGE_NAME','$FROM_API_VERSION', '$TO_API_VERSION', '$MAPPED_PRIVILEGE_NAME')"
        if [[ $MAPPED_PRIVILEGE_NAME == *"/internal/"* ]]; then
                MAPPED_IS_PRIVACY=`sqlite3 .core_privilege_info.db "select is_privacy from privilege_info where privilege_name='$PRIVILEGE_NAME'"`
+               MAPPED_PRIVACY_GROUP=`sqlite3 .core_privilege_info.db "select privacy_group from privilege_info where privilege_name='$PRIVILEGE_NAME'"`
                if [ "$MAPPED_IS_PRIVACY" = "" ]; then
-                       sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 1)"
+                       sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 'N/A', 1)"
                else
-                       sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', $MAPPED_IS_PRIVACY, 1)"
+                       sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', $MAPPED_IS_PRIVACY, '$MAPPED_PRIVACY_GROUP', 1)"
                fi
        else
-               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 0)"
+               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 'N/A', 0)"
        fi
 done
 
diff --git a/capi/res/dbspace/mobile_preloaded.list b/capi/res/dbspace/mobile_preloaded.list
new file mode 100644 (file)
index 0000000..bcffca8
--- /dev/null
@@ -0,0 +1,84 @@
+User::Pkg::attach-panel-camera
+User::Pkg::attach-panel-document
+User::Pkg::attach-panel-gallery
+User::Pkg::attach-panel-voicerecorder
+User::Pkg::cert-svc-ui
+User::Pkg::hangul
+User::Pkg::ise-default
+User::Pkg::ise-engine-anthy
+User::Pkg::ise-engine-default
+User::Pkg::ise-engine-sunpinyin
+User::Pkg::net.netpopup
+User::Pkg::net.wifi-qs
+User::Pkg::org.tizen.app-selector
+User::Pkg::org.tizen.bluetooth-share-ui
+User::Pkg::org.tizen.browser
+User::Pkg::org.tizen.bt-syspopup
+User::Pkg::org.tizen.calendar
+User::Pkg::org.tizen.call-setting
+User::Pkg::org.tizen.call-ui
+User::Pkg::org.tizen.callmgr-popup
+User::Pkg::org.tizen.camera-app
+User::Pkg::org.tizen.chromium-efl
+User::Pkg::org.tizen.contacts
+User::Pkg::org.tizen.crash-syspopup
+User::Pkg::org.tizen.d2d-conv-setting
+User::Pkg::org.tizen.d2d-conv-syspopup
+User::Pkg::org.tizen.download-manager
+User::Pkg::org.tizen.dpm-syspopup
+User::Pkg::org.tizen.dpm-toolkit
+User::Pkg::org.tizen.email
+User::Pkg::org.tizen.gallery
+User::Pkg::org.tizen.gps-syspopup
+User::Pkg::org.tizen.heremaps-uc
+User::Pkg::org.tizen.homescreen-efl
+User::Pkg::org.tizen.image-viewer
+User::Pkg::org.tizen.indicator
+User::Pkg::org.tizen.inputmethod-setting
+User::Pkg::org.tizen.isf-kbd-mode-changer
+User::Pkg::org.tizen.kaskit
+User::Pkg::org.tizen.keyguard
+User::Pkg::org.tizen.krate-setup-wizard
+User::Pkg::org.tizen.lockscreen
+User::Pkg::org.tizen.menu-screen
+User::Pkg::org.tizen.message
+User::Pkg::org.tizen.msg-manager
+User::Pkg::org.tizen.music-player
+User::Pkg::org.tizen.myfile
+User::Pkg::org.tizen.myplace
+User::Pkg::org.tizen.ode
+User::Pkg::org.tizen.overheat-syspopup
+User::Pkg::org.tizen.powerkey-syspopup
+User::Pkg::org.tizen.privacy-setting
+User::Pkg::org.tizen.quickpanel
+User::Pkg::org.tizen.screen-reader
+User::Pkg::org.tizen.service-plugin-sample
+User::Pkg::org.tizen.setting
+User::Pkg::org.tizen.setting-homescreen
+User::Pkg::org.tizen.setting-location
+User::Pkg::org.tizen.setting-notification
+User::Pkg::org.tizen.settings-adid
+User::Pkg::org.tizen.share-panel
+User::Pkg::org.tizen.stt-engine-default
+User::Pkg::org.tizen.sys-lock
+User::Pkg::org.tizen.system-signal-sender
+User::Pkg::org.tizen.system-syspopup
+User::Pkg::org.tizen.task-mgr
+User::Pkg::org.tizen.tts-engine-default
+User::Pkg::org.tizen.ug-gallery-efl
+User::Pkg::org.tizen.ug-lockscreen-options
+User::Pkg::org.tizen.ug-myfile-efl
+User::Pkg::org.tizen.videos
+User::Pkg::org.tizen.voice-control-panel
+User::Pkg::org.tizen.voice-setting
+User::Pkg::org.tizen.volume
+User::Pkg::org.tizen.wallpaper-ui-service
+User::Pkg::org.tizen.widget_viewer_sdk
+User::Pkg::org.tizen.wifi-direct-popup
+User::Pkg::org.tizen.worldclock-efl
+User::Pkg::setting-myaccount-efl
+User::Pkg::table
+User::Pkg::ug-bluetooth-efl
+User::Pkg::ug-setting-mobileap-efl
+User::Pkg::ug-setting-wifidirect-efl
+User::Pkg::wifi-efl-ug
index f0c54bb..d4e711f 100755 (executable)
@@ -10,7 +10,7 @@ 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, IS_PRIVACY NUMERIC, PRIVACY_GROUP TEXT, PRIVILEGE_DISPLAY TEXT, PRIVILEGE_DESCRIPTION TEXT, PRIVILEGE_GROUP_ID NUMERIC, PRIVLEGE_GROUP TEXT, CHANGED_TO_2_4_0 TEXT);"
 
 echo "Create VALID_PRIVILEGE_INFO Table..."
-sqlite3 $DB_NAME "CREATE TABLE VALID_PRIVILEGE_INFO (PRIVILEGE_NAME TEXT UNIQUE, IS_PRIVACY NUMERIC, IS_INTERNAL NUMERIC);"
+sqlite3 $DB_NAME "CREATE TABLE VALID_PRIVILEGE_INFO (PRIVILEGE_NAME TEXT UNIQUE, IS_PRIVACY NUMERIC, PRIVACY_GROUP TEXT, IS_INTERNAL NUMERIC);"
 
 echo "Create PRIVACY_INFO table..."
 sqlite3 $DB_NAME "CREATE TABLE PRIVACY_INFO (PRIVACY_GROUP TEXT UNIQUE, PRIVACY_DISPLAY TEXT);"
@@ -48,6 +48,7 @@ do
        fi
 
        PACKAGE_TYPE=`echo $i | cut -d "," -f 2`
+       PRIVILEGE_GROUP=`echo $i | cut -d "," -f 13`
 
        if [ "$PACKAGE_TYPE" = "wrt" ]
        then
@@ -56,9 +57,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
 
@@ -105,7 +110,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
@@ -136,6 +141,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"
@@ -152,13 +158,13 @@ do
        echo "Inserting $PRIVILEGE_NAME ..."
 
        sqlite3 $DB_NAME "insert into privilege_info values ( $PROFILE_ID, '$PROFILE', $PACKAGE_TYPE_ID, '$PACKAGE_TYPE', $PRIVILEGE_LEVEL_ID, '$PRIVILEGE_LEVEL', '$API_VERSION_ISSUED', '$API_VERSION_EXPIRED', '$DOCUMENTED', '$PRIVILEGE_NAME', '$IS_PRIVACY', '$PRIVACY_GROUP', '$PRIVILEGE_DISPLAY', '$PRIVILEGE_DESCRIPTION', $PRIVILEGE_GROUP_ID, '$PRIVILEGE_GROUP', '$CHANGED_TO_2_4_0')"
-       sqlite3 $DB_NAME "insert into valid_privilege_info (privilege_name, is_privacy, is_internal) values ('$PRIVILEGE_NAME', '$IS_PRIVACY', 0)"
+       sqlite3 $DB_NAME "insert into valid_privilege_info (privilege_name, is_privacy, privacy_group, is_internal) values ('$PRIVILEGE_NAME', '$IS_PRIVACY', '$PRIVACY_GROUP', 0)"
 done
 
 for internal_privilege in `cat internal_only.list`
 do
        echo "Inserting $internal_privilege ..."
-       sqlite3 $DB_NAME "insert into valid_privilege_info (privilege_name, is_privacy, is_internal) values ('$internal_privilege', 0, 1)"
+       sqlite3 $DB_NAME "insert into valid_privilege_info (privilege_name, is_privacy, privacy_group, is_internal) values ('$internal_privilege', 0, 'N/A', 1)"
 done
 
 echo "Insert into PRIVACY_INFO"
index a926a89..6f46eeb 100755 (executable)
@@ -49,9 +49,15 @@ do
 
        sqlite3 $DB_NAME "insert into privilege_mapping values ( $PROFILE_ID, '$PROFILE', '$PRIVILEGE_NAME','$FROM_API_VERSION', '$TO_API_VERSION', '$MAPPED_PRIVILEGE_NAME')"
        if [[ $MAPPED_PRIVILEGE_NAME == *"/internal/"* ]]; then
-               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 1)"
+               MAPPED_IS_PRIVACY=`sqlite3 .core_privilege_info.db "select is_privacy from privilege_info where privilege_name='$PRIVILEGE_NAME'"`
+               MAPPED_PRIVACY_GROUP=`sqlite3 .core_privilege_info.db "select privacy_group from privilege_info where privilege_name='$PRIVILEGE_NAME'"`
+               if [ "$MAPPED_IS_PRIVACY" = "" ]; then
+                       sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 'N/A', 1)"
+               else
+                       sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', $MAPPED_IS_PRIVACY, '$MAPPED_PRIVACY_GROUP', 1)"
+               fi
        else
-               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 0)"
+               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 'N/A', 0)"
        fi
 done
 
index 72e9ddb..1b62b84 100644 (file)
@@ -98,3 +98,6 @@ tv,core,platform,2.4,9.9,no,http://tizen.org/privilege/web-history.admin,yes,htt
 tv,core,public,2.4,9.9,no,http://tizen.org/privilege/widget.viewer,no,N/A,,IDS_TPLATFORM_HEADER_SHOWING_WIDGETS,IDS_TPLATFORM_BODY_THIS_APPLICATION_CAN_SHOW_WIDGETS_AND_INFORMATION_FROM_THEIR_ASSOCIATED_APPLICATIONS_ON_THE_HOME_SCREEN,IDS_TPLATFORM_BODY_SYSTEM_SETTINGS_ABB,,
 tv,core,public,2.4,9.9,no,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,,
 tv,core,public,2.4,9.9,no,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,,
+#tv,metadata,public,1,9.9,no,http://tizen.org/metadata/public,no,N/A,test,,,,,
+#tv,metadata,partner,1,9.9,no,http://tizen.org/metadata/partner,no,N/A,test,,,,,
+#tv,metadata,platform,1,9.9,no,http://tizen.org/metadata/platform,no,N/A,test,,,,,
index da80233..a814f81 100755 (executable)
@@ -51,9 +51,9 @@ do
 
        sqlite3 $DB_NAME "insert into privilege_mapping values ( $PROFILE_ID, '$PROFILE', '$PRIVILEGE_NAME','$FROM_API_VERSION', '$TO_API_VERSION', '$MAPPED_PRIVILEGE_NAME')"
        if [[ $MAPPED_PRIVILEGE_NAME == *"/internal/"* ]]; then
-               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 1)"
+               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 'N/A', 1)"
        else
-               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 0)"
+               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 'N/A', 0)"
        fi
 done
 
diff --git a/capi/res/dbspace/wearable_preloaded.list b/capi/res/dbspace/wearable_preloaded.list
new file mode 100644 (file)
index 0000000..19d6f30
--- /dev/null
@@ -0,0 +1,33 @@
+User::Pkg::ise-default
+User::Pkg::ise-engine-default
+User::Pkg::org.tizen.alarm
+User::Pkg::org.tizen.app-selector
+User::Pkg::org.tizen.bluetooth
+User::Pkg::org.tizen.bt-syspopup
+User::Pkg::org.tizen.chromium-efl
+User::Pkg::org.tizen.classic-watch
+User::Pkg::org.tizen.crash-syspopup
+User::Pkg::org.tizen.dpm-syspopup
+User::Pkg::org.tizen.dpm-toolkit
+User::Pkg::org.tizen.elm-demo-tizen-wearable
+User::Pkg::org.tizen.heremaps-uc
+User::Pkg::org.tizen.idle-clock-digital
+User::Pkg::org.tizen.inputdelegator
+User::Pkg::org.tizen.inputmethod-setting
+User::Pkg::org.tizen.my-account
+User::Pkg::org.tizen.nfc-setting-app
+User::Pkg::org.tizen.ode
+User::Pkg::org.tizen.powerkey-syspopup
+User::Pkg::org.tizen.privacy-setting
+User::Pkg::org.tizen.screen-reader
+User::Pkg::org.tizen.stopwatch
+User::Pkg::org.tizen.stt-engine-default
+User::Pkg::org.tizen.system-syspopup
+User::Pkg::org.tizen.task-mgr
+User::Pkg::org.tizen.timer
+User::Pkg::org.tizen.tts-engine-default
+User::Pkg::org.tizen.w-home
+User::Pkg::org.tizen.w-wifi
+User::Pkg::org.tizen.watch-setting
+User::Pkg::org.tizen.widget_viewer_sdk
+User::Pkg::org.tizen.windicator
index 68188ec..255022a 100755 (executable)
@@ -51,9 +51,9 @@ do
 
        sqlite3 $DB_NAME "insert into privilege_mapping values ( $PROFILE_ID, '$PROFILE', '$PRIVILEGE_NAME','$FROM_API_VERSION', '$TO_API_VERSION', '$MAPPED_PRIVILEGE_NAME')"
        if [[ $MAPPED_PRIVILEGE_NAME == *"/internal/"* ]]; then
-               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 1)"
+               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 'N/A', 1)"
        else
-               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 0)"
+               sqlite3 .core_privilege_info.db "insert or ignore into valid_privilege_info values ('$MAPPED_PRIVILEGE_NAME', 0, 'N/A', 0)"
        fi
 done
 
index cf0cfbd..7442d31 100755 (executable)
@@ -285,11 +285,7 @@ int privilege_db_manager_get_mapped_privilege_list(const char *api_version, priv
        ret = __make_privilege_list_str(privilege_list, &privilege_list_str);
        TryReturn(ret == 0 && privilege_list_str != NULL, sqlite3_close(db), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] making privilege_list_str for where in query is failed.");
 
-       char *sql = NULL;
-       if (api_version == NULL)
-               sql = sqlite3_mprintf("select distinct mapped_privilege_name from privilege_mapping where privilege_name in(%s)and(profile_id=%d or profile_id=%d)", privilege_list_str, PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type);
-       else
-               sql = sqlite3_mprintf("select distinct mapped_privilege_name from privilege_mapping where privilege_name in(%s)and(profile_id=%d or profile_id=%d)and from_api_version<=%Q and to_api_version>%Q", privilege_list_str, PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, api_version, api_version);
+       char *sql = sqlite3_mprintf("select distinct mapped_privilege_name from privilege_mapping where privilege_name in(%s)and(profile_id=%d or profile_id=%d)and from_api_version<=%Q and to_api_version>%Q", privilege_list_str, PRIVILEGE_DB_MANAGER_PROFILE_TYPE_COMMON, g_privilege_db_manager_profile_type, api_version, api_version);
        sqlite3_free(privilege_list_str);
        TryReturn(sql != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
 
@@ -468,8 +464,8 @@ int privilege_db_manager_is(char type, const char* privilege)
        int ret = __initialize_db('i', &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
        TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE, , ret, "[PRIVILEGE_DB_MANAGER] DB INITIALIZE FAIL");
 
-       char *sql = sqlite3_mprintf("select * from valid_privilege_info where privilege_name=%Q", privilege);
-       TryReturn(sql != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
+       char *sql = sqlite3_mprintf("select privilege_name,is_privacy, is_internal from valid_privilege_info where privilege_name=%Q", privilege);
+       TryReturn(sql != NULL, __finalize_db(db, stmt, sql), -PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
        ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
        TryReturn(ret == SQLITE_OK, __finalize_db(db, stmt, sql), -PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] fail to prepare database : %s", sqlite3_errmsg(db));
 
@@ -504,6 +500,29 @@ int privilege_db_manager_is(char type, const char* privilege)
                return res;
 }
 
+int privilege_db_manager_is_preloaded(const char* pkgid)
+{
+       sqlite3 *db = NULL;
+       sqlite3_stmt *stmt = NULL;
+       int ret = __initialize_db('i', &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE, , ret, "[PRIVILEGE_DB_MANAGER] DB INITIALIZE FAIL");
+
+       char *sql = sqlite3_mprintf("select * from preloaded where name=%Q", pkgid);
+       TryReturn(sql != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
+       ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
+       TryReturn(ret == SQLITE_OK, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] fail to prepare database : %s", sqlite3_errmsg(db));
+
+       ret = sqlite3_step(stmt);
+       __finalize_db(db, stmt, sql);
+       if (ret == SQLITE_ROW) {
+               _LOGD("%s is preloaded", pkgid);
+               return 1;
+       } else {
+               _LOGD("ret = %s", sqlite3_errmsg(db));
+               return 0;
+       }
+}
+
 int __privilege_db_manager_get_privacy_list(GList **privacy_list)
 {
        sqlite3 *db = NULL;
@@ -546,7 +565,7 @@ int __privilege_db_manager_get_privilege_list_by_privacy(const char* privacy, GL
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
-       char *sql = sqlite3_mprintf("select distinct privilege_name from privilege_info where is_privacy=1 and privacy_group=%Q", privacy);
+       char *sql = sqlite3_mprintf("select distinct privilege_name from valid_privilege_info where is_privacy=1 and privacy_group=%Q", privacy);
        TryReturn(sql != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
        ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
        if (ret != SQLITE_OK) {
@@ -566,12 +585,7 @@ int __privilege_db_manager_get_privilege_list_by_privacy(const char* privacy, GL
 
        __finalize_db(db, stmt, sql);
 
-       GList* temp_mapped_privilege_list = NULL;
-       ret = privilege_db_manager_get_mapped_privilege_list(NULL, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, temp_privilege_list, &temp_mapped_privilege_list);
-       TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE && temp_mapped_privilege_list != NULL, g_list_free(temp_privilege_list), ret, "[DB_FAIL] privilege_db_manager_get_mapped_privilege_list failed");
-
-       *privilege_list = temp_mapped_privilege_list;
-       g_list_free(temp_privilege_list);
+       *privilege_list = temp_privilege_list;
 
        return PRIVILEGE_DB_MANAGER_ERR_NONE;
 
@@ -585,7 +599,7 @@ int privilege_db_manager_get_privacy_by_privilege(const char* privilege, char**
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
-       char *sql = sqlite3_mprintf("select privacy_group from privilege_info where privilege_name=%Q", privilege);
+       char *sql = sqlite3_mprintf("select privacy_group from valid_privilege_info where privilege_name=%Q", privilege);
        TryReturn(sql != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
        ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
        if (ret != SQLITE_OK) {
index accd26e..7dc7619 100755 (executable)
@@ -238,20 +238,22 @@ int privilege_info_get_privilege_group_display_name(const char *privilege_group,
        ret = privilege_info_get_group_name_string_id(privilege_group, &name_string_id);
 
        if (name_string_id == NULL) {
-               char tempPrivilegeGroup[256] = { 0, };
+               char *tempPrivilegeGroup = NULL;;
                char *temp = NULL;
                char *buffer = NULL;
                char *save = NULL;
-               memcpy(tempPrivilegeGroup, privilege_group, strlen(privilege_group));
+
+               tempPrivilegeGroup = strdup(privilege_group);
+               TryReturn(tempPrivilegeGroup != NULL, , PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] tempPrivilegeGroup's strdup failed");
+
                temp = strtok_r(tempPrivilegeGroup, "/", &save);
                while (temp) {
                        buffer = temp;
                        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.");
-
-               memcpy(*name, buffer, strlen(buffer));
+               *name = strdup(buffer);
+               TryReturn(*name != NULL, free(tempPrivilegeGroup), PRVMGR_ERR_OUT_OF_MEMORY, "[PRVMGR_ERR_OUT_OF_MEMORY] Memory allocation failed.");
+               free(tempPrivilegeGroup);
        } else {
                ret = privilege_info_get_privilege_string_by_string_id(name_string_id, name);
                free(name_string_id);
@@ -505,12 +507,53 @@ int privilege_info_get_privilege_description(const char *privilege, char **descr
 int privilege_info_is_privacy(const char* privilege)
 {
        TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL");
-
+#ifdef PROFILE_TYPE_TV
+       return 0;
+#else
        int ret = privilege_db_manager_is('p', privilege);
        LOGD("%s is privacy? %d", privilege, ret);
        if (ret != 0 && ret != 1)
                ret = -1;
        return ret;
+#endif
+}
+
+int privilege_info_is_privacy2(const char* label, const char* privilege)
+{
+       TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL");
+       if (label == NULL)
+               return privilege_info_is_privacy(privilege);
+#ifdef PROFILE_TYPE_TV
+       return 0;
+#else
+       int ret = privilege_db_manager_is('p', privilege);
+       TryReturn(ret >= 0, , -1, "privilege_db_manager_get_privacy_by_privilege failed. ret = %d", ret);
+       if (ret == 0) {
+               LOGD("not privacy");
+               return 0;
+       } else {
+               char *privacy = NULL;
+               ret = privilege_db_manager_get_privacy_by_privilege(privilege, &privacy);
+               TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE && privacy != NULL, , ret, "[DB_FAIL] privilege_db_manager_get_privacy_by_privilege failed. ret = %d", ret);
+               LOGD("privacy : %s", privacy);
+               if (!strcmp(privacy, LOCATION_PRIVACY)) {
+                       ret = 1;
+               } else {
+                       ret = privilege_db_manager_is_preloaded(label);
+                       if (ret == 1) { /* Is preloaded */
+                               ret = 0;
+                       } else if (ret == 0) {
+                               ret = 1;
+                       } else {
+                               LOGD("privilege_db_manager_is_preloaded failed. ret = %d", ret);
+                               ret = -1;
+                       }
+               }
+               free(privacy);
+               LOGD("final ret = %d", ret);
+               return ret;
+       }
+#endif
 }
 
 int privilege_info_is_valid(const char* privilege)
index a6670e6..7d4ae49 100755 (executable)
@@ -39,7 +39,7 @@
 
 typedef u_int32_t api_version_code_t;
 
-static int __get_api_version_code(const char *api_version, api_version_code_t *api_version_code )
+static int __get_api_version_code(const char *api_version, api_version_code_t *api_version_code)
 {
        TryReturn(api_version != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] api_version is NULL");
 
@@ -49,8 +49,7 @@ static int __get_api_version_code(const char *api_version, api_version_code_t *a
        char ch = *api_version;
        int is_number = 0;
 
-       while (ch != 0)
-       {
+       while (ch != 0) {
                if (isdigit(ch)) {
                        is_number = 1;
                        value = 0;
@@ -327,11 +326,11 @@ int privilege_manager_verify_privilege(uid_t uid, const char *api_version, privi
                                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.");
+                       char *tmp_message = realloc(noexist_message, new_size * sizeof(char));
+                       TryReturn(tmp_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.");
+                       noexist_message = tmp_message;
 
                        strncat(noexist_message, message, strlen(message));
-
                        ret_val = PRVMGR_ERR_INVALID_PRIVILEGE;
 
                } else if (ret == PRVMGR_ERR_DEPRECATED_PRIVILEGE) {
@@ -350,11 +349,11 @@ int privilege_manager_verify_privilege(uid_t uid, const char *api_version, privi
                                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.");
+                       char *tmp_message = realloc(deprecated_message, new_size * sizeof(char));
+                       TryReturn(tmp_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.");
+                       deprecated_message = tmp_message;
 
                        strncat(deprecated_message, message, strlen(message));
-
                        ret_val = PRVMGR_ERR_INVALID_PRIVILEGE;
 
                } else if (ret == PRVMGR_ERR_NONE) {
@@ -374,10 +373,11 @@ int privilege_manager_verify_privilege(uid_t uid, const char *api_version, privi
                                                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));
+                                       char *tmp_message = realloc(mismatched_message, new_size * sizeof(char));
+                                       TryReturn(tmp_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.");
+                                       mismatched_message = tmp_message;
 
+                                       strncat(mismatched_message, message, strlen(message));
                                        ret_val = PRVMGR_ERR_INVALID_PRIVILEGE;
                                }
                        } else if ((visibility & PRVMGR_PACKAGE_VISIBILITY_PARTNER) == PRVMGR_PACKAGE_VISIBILITY_PARTNER) {
@@ -393,8 +393,10 @@ int privilege_manager_verify_privilege(uid_t uid, const char *api_version, privi
                                                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.");
+                                       char *tmp_message = realloc(mismatched_message, new_size * sizeof(char));
+                                       TryReturn(tmp_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.");
+                                       mismatched_message = tmp_message;
+
                                        strncat(mismatched_message, message, strlen(message));
                                        ret_val = PRVMGR_ERR_INVALID_PRIVILEGE;
                                }
@@ -422,28 +424,32 @@ int privilege_manager_verify_privilege(uid_t uid, const char *api_version, privi
                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.");
+                       char *tmp_message_list = realloc(message_list, new_size);
+                       TryReturn(tmp_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.");
+                       message_list = tmp_message_list;
                        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[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.");
+                       char *tmp_message_list = realloc(message_list, new_size);
+                       TryReturn(tmp_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.");
+                       message_list = tmp_message_list;
                        strncat(message_list, "[DEPRECATED_PRIVILEGE]|", strlen("[DEPRECATED_PRIVILEGE]|"));
                        strncat(message_list, deprecated_message, strlen(deprecated_message));
                }
                if (mismatched_message != NULL) {
                        size_t new_size = snprintf(0, 0, "%s[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.");
+                       char *tmp_message_list = realloc(message_list, new_size);
+                       TryReturn(tmp_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.");
+                       message_list = tmp_message_list;
                        strncat(message_list, "[MISMATCHED_PRIVILEGE_LEVEL]|", strlen("[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.");
+               char* tmp_message_list = realloc(message_list, total_size);
+               TryReturn(tmp_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.");
+               message_list = tmp_message_list;
                strncat(message_list, newline, strlen(newline));
                *error_message = strdup(message_list);
                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.");
index fd14386..f934058 100755 (executable)
@@ -259,7 +259,7 @@ static void __test_privilege_info_get_privacy_display()
 
        printf("WRONG privacy: http://tizen.org/privilege/account.read\n");
        ret = privilege_info_get_privacy_display("http://tizen.org/privilege/account.read", &privacy_display);
-       if(ret == PRVMGR_ERR_INVALID_PARAMETER && privacy_display == NULL) {
+       if (ret == PRVMGR_ERR_INVALID_PARAMETER && privacy_display == NULL) {
                success_cnt++;
                printf("SUCCESS\n");
        } else {
@@ -272,7 +272,7 @@ static void __test_privilege_info_get_privacy_display()
 
        printf("NULL param\n");
        ret = privilege_info_get_privacy_display(NULL, &privacy_display);
-       if(ret == PRVMGR_ERR_INVALID_PARAMETER && privacy_display == NULL) {
+       if (ret == PRVMGR_ERR_INVALID_PARAMETER && privacy_display == NULL) {
                success_cnt++;
                printf("SUCCESS\n");
        } else {
@@ -464,7 +464,7 @@ static void __test_privilege_info_get_privilege_description()
        __print_line();
 }
 
-static void __test__privilege_info_get_privilege_group_display_name()
+static void __test_privilege_info_get_privilege_group_display_name()
 {
        int ret;
        char *group_name = NULL;
@@ -480,6 +480,12 @@ static void __test__privilege_info_get_privilege_group_display_name()
        __check_get_privilege_group_display_name_result(PRVMGR_ERR_NONE, ret, group_name);
        free(group_name);
 
+       printf("privilege : unknowngroup\n");
+       group_name = NULL;
+       ret = privilege_info_get_privilege_group_display_name("unknowngroup", &group_name);
+       __check_get_privilege_group_display_name_result(PRVMGR_ERR_NONE, ret, group_name);
+       free(group_name);
+
        printf("privilege : NULL\n");
        group_name = NULL;
        ret = privilege_info_get_privilege_group_display_name(NULL, &group_name);
@@ -488,6 +494,120 @@ static void __test__privilege_info_get_privilege_group_display_name()
 
 }
 
+static void __test_privilege_info_is_privacy2()
+{
+#ifndef PROFILE_TYPE_TV
+       int ret = 0;
+
+       printf("PRELOADED + NOT LOCATION PRIVACY -> ALLOW (not privacy)\n");
+       printf("pkgid: User::Pkg::org.tizen.privacy-setting\n");
+       printf("privilege : http://tizen.org/privilege/account.read\n");
+       ret = privilege_info_is_privacy2("User::Pkg::org.tizen.privacy-setting", "http://tizen.org/privilege/account.read");
+       if (ret == 0) {
+               success_cnt++;
+               printf("SUCCESS: http://tizen.org/privilege/account.read is PRIVACY but NOT LOCATION and pkg is PRELOADED\n");
+       } else {
+               fail_cnt++;
+               printf("Test FAILED. ret =  %d\n", ret);
+       }
+       __print_line();
+
+       printf("PRELOADED + LOCATION PRIVACY -> ASK (privacy)\n");
+       printf("pkgid: User::Pkg::org.tizen.privacy-setting\n");
+       printf("privilege : http://tizen.org/privilege/internal/buxton/location\n");
+       ret = privilege_info_is_privacy2("User::Pkg::org.tizen.privacy-setting", "http://tizen.org/privilege/internal/buxton/location");
+       if (ret == 1) {
+               success_cnt++;
+               printf("SUCCESS: http://tizen.org/privilege/internal/buxton/location is LOCATION PRIVACY and pkg is PRELOADED\n");
+       } else {
+               fail_cnt++;
+               printf("Test FAILED. ret = %d\n", ret);
+       }
+       __print_line();
+
+       printf("PRELOADED + NOT PRIVACY -> ALLOW (not privacy)\n");
+       printf("pkgid: User::Pkg::org.tizen.privacy-setting\n");
+       printf("privilege : http://tizen.org/privilege/internet\n");
+       ret = privilege_info_is_privacy2("User::Pkg::org.tizen.privacy-setting", "http://tizen.org/privilege/internet");
+       if (ret == 0) {
+               success_cnt++;
+               printf("SUCCESS: http://tizen.org/privilege/internet is NOT PRIVACY\n");
+       } else {
+               fail_cnt++;
+               printf("Test FAILED. ret = %d\n", ret);
+       }
+       __print_line();
+
+       printf("NOT PRELOADED + NOT LOCATION PRIVACY -> ASK (privacy)\n");
+       printf("pkgid: User::Pkg::org.test.privacy\n");
+       printf("privilege : http://tizen.org/privilege/account.read\n");
+       ret = privilege_info_is_privacy2("User::Pkg::org.test.privacy", "http://tizen.org/privilege/account.read");
+       if (ret == 1) {
+               success_cnt++;
+               printf("SUCCESS: http://tizen.org/privilege/account.read is PRIVACY but NOT LOCATION and pkg is NOT PRELOADED\n");
+       } else {
+               fail_cnt++;
+               printf("Test FAILED. ret =  %d\n", ret);
+       }
+       __print_line();
+
+       printf("NOT PRELOADED + LOCATION PRIVACY -> ASK (privacy)\n");
+       printf("pkgid: User::Pkg::org.test.privacy\n");
+       printf("privilege : http://tizen.org/privilege/location.coarse\n");
+       ret = privilege_info_is_privacy2("User::Pkg::org.test.privacy", "http://tizen.org/privilege/location.coarse");
+       if (ret == 1) {
+               success_cnt++;
+               printf("SUCCESS: http://tizen.org/privilege/location.coarse is LOCATION PRIVACY and pkg is NOT PRELOADED\n");
+       } else {
+               fail_cnt++;
+               printf("Test FAILED. ret = %d\n", ret);
+       }
+       __print_line();
+
+       printf("NOT PRELOADED + NOT PRIVACY -> ALLOW (not privacy)\n");
+       printf("pkgid: User::Pkg::org.test.privacy\n");
+       printf("privilege : http://tizen.org/privilege/internet\n");
+       ret = privilege_info_is_privacy2("User::Pkg::org.test.privacy", "http://tizen.org/privilege/internet");
+       if (ret == 0) {
+               success_cnt++;
+               printf("SUCCESS: http://tizen.org/privilege/internet is NOT PRIVACY and pkg is NOT PRELOADED\n");
+       } else {
+               fail_cnt++;
+               printf("Test FAILED. ret = %d\n", ret);
+       }
+       __print_line();
+
+
+       printf("NULL + NOT LOCATION PRIVACY -> ASK (privacy)\n");
+       printf("pkgid: NULL\n");
+       printf("privilege : http://tizen.org/privilege/account.read\n");
+       ret = privilege_info_is_privacy2(NULL, "http://tizen.org/privilege/account.read");
+       if (ret == 1) {
+               success_cnt++;
+               printf("SUCCESS: http://tizen.org/privilege/account.read is PRIVACY but NOT LOCATION and pkg is NOT PRELOADED\n");
+       } else {
+               fail_cnt++;
+               printf("Test FAILED. ret =  %d\n", ret);
+       }
+       __print_line();
+
+
+       printf("NULL + NOT PRIVACY -> ALLOW (not privacy)\n");
+       printf("pkgid: NULL\n");
+       printf("privilege : http://tizen.org/privilege/internet\n");
+       ret = privilege_info_is_privacy2(NULL, "http://tizen.org/privilege/internet");
+       if (ret == 0) {
+               success_cnt++;
+               printf("SUCCESS: http://tizen.org/privilege/internet is NOT PRIVACY and pkg is NOT PRELOADED\n");
+       } else {
+               fail_cnt++;
+               printf("Test FAILED. ret = %d\n", ret);
+       }
+       __print_line();
+
+#endif
+}
+
 int main()
 {
        __tcinfo(function, "privilege_info_is_privacy");
@@ -506,7 +626,7 @@ int main()
        __test_privilege_info_get_privilege_description();
 
        __tcinfo(function, "privilege_info_get_privilege_group_display_name");
-       __test__privilege_info_get_privilege_group_display_name();
+       __test_privilege_info_get_privilege_group_display_name();
 
        __tcinfo(function, "privilege_info_get_privacy_list");
        __test_privilege_info_get_privacy_list();
@@ -520,6 +640,9 @@ int main()
        __tcinfo(function, "privilege_info_get_privacy_display");
        __test_privilege_info_get_privacy_display();
 
+       __tcinfo(function, "privilege_info_is_privacy2");
+       __test_privilege_info_is_privacy2();
+
        __color_to_green();
        printf("Test Complete\n");
        printf("success : %d, ", success_cnt);