Add API to get privilege type 21/106321/12
authorYunjin Lee <yunjin-.lee@samsung.com>
Wed, 21 Dec 2016 09:17:23 +0000 (18:17 +0900)
committerYunjin Lee <yunjin-.lee@samsung.com>
Wed, 11 Jan 2017 07:19:19 +0000 (16:19 +0900)
- Add API to get privilege type.
It determines privilege type according to the given uid and package id
on the basis of ask policy white list per privacy and mdm black list.
- Add table for privacy white list.
It stores whitelist for ask policy and whether the privacy is user-settable or not.
Possible privacy option format is "*-{privacyA}-{privacyB}.." or "{privacyA}+{privacyB}+...".
If pkg should not be seen in privacy setting menu then set 'settable' flag to 0.
If 'settable' flag is set to 1 for the privacy or not exist for the privacy then then pkg privacy option is user-settable for that privacy.

Change-Id: I720e9f5abcf02c89b3a09238d5fbafe26bf8e044
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
17 files changed:
CMakeLists.txt
capi/CMakeLists.txt
capi/include/privilege_db_manager.h
capi/include/privilege_info.h
capi/include/privilege_info_types.h
capi/include/privilege_manager.h
capi/res/dbspace/core_db_generator.sh
capi/res/dbspace/mobile_privacy_whitelist.csv [new file with mode: 0644]
capi/res/dbspace/policy_db_generator.sh
capi/res/dbspace/privacylist.csv [new file with mode: 0644]
capi/res/dbspace/tv_core_db_generator.sh
capi/res/dbspace/wearable_privacy_whitelist.csv [new file with mode: 0644]
capi/src/privilege_db_manager.c
capi/src/privilege_info.c
capi/src/privilege_manager.c
test/tc-privilege-db-manager.c
test/tc-privilege-info.c

index 85f79fb..7510fe5 100644 (file)
@@ -14,6 +14,15 @@ ADD_DEFINITIONS("-Werror -Wall -Wextra")
 ADD_DEFINITIONS("-DCLIENT_IPC_THREAD")
 ADD_DEFINITIONS("-DUSE_IPC_EPOLL")
 
+MESSAGE("PROFILE = ${PROFILE}")
+IF("${PROFILE}" STREQUAL "wearable")
+    ADD_DEFINITIONS("-DENABLE_ASKUSER")
+ELSEIF("${PROFILE}" STREQUAL "mobile")
+    ADD_DEFINITIONS("-DENABLE_ASKUSER")
+ELSE()
+    ADD_DEFINITIONS("-DDISABLE_ASKUSER")
+ENDIF()
+
 STRING(REGEX MATCH "([^.]*)" API_VERSION "${VERSION}")
 ADD_DEFINITIONS("-DAPI_VERSION=\"$(API_VERSION)\"")
 
index f6b8798..969e40e 100644 (file)
@@ -15,7 +15,7 @@ INCLUDE_DIRECTORIES(
 SET(pc_requires "glib-2.0")
 
 INCLUDE(FindPkgConfig)
-pkg_check_modules(${fw_name} REQUIRED dlog pkgmgr-info glib-2.0 sqlite3)
+pkg_check_modules(${fw_name} REQUIRED dlog pkgmgr-info glib-2.0 sqlite3 libtzplatform-config)
 FOREACH(flag ${${fw_name}_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
 ENDFOREACH(flag)
@@ -40,15 +40,6 @@ ELSEIF("${PROFILE_TYPE}" STREQUAL "TV")
        ADD_DEFINITIONS("-DPROFILE_TYPE_TV")
 ENDIF()
 
-MESSAGE("PROFILE = ${PROFILE}")
-IF("${PROFILE}" STREQUAL "wearable")
-    ADD_DEFINITIONS("-DENABLE_ASKUSER")
-ELSEIF("${PROFILE}" STREQUAL "mobile")
-    ADD_DEFINITIONS("-DENABLE_ASKUSER")
-ELSE()
-    ADD_DEFINITIONS("-DDISABLE_ASKUSER")
-ENDIF()
-
 SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIBDIR}")
 
 aux_source_directory(src SOURCES)
index 7a6b2ee..5b92b12 100755 (executable)
@@ -18,6 +18,7 @@
 #define __PRIVILEGE_DB_MANAGER_H
 
 #include <glib.h>
+#include "privilege_manager.h"
 
 typedef struct {
        int profile_id;
@@ -35,17 +36,24 @@ typedef struct {
 } privilege_info_db_row_s;
 
 typedef enum {
+       PRIVILEGE_DB_TYPE_INFO =       0,
+       PRIVILEGE_DB_TYPE_MAPPING =    1,
+       PRIVILEGE_DB_TYPE_POLICY_RW =  2,
+       PRIVILEGE_DB_TYPE_POLICY_RO =  3,
+} privilege_db_type_e;
+
+typedef enum {
        PRIVILEGE_DB_MANAGER_ERR_NONE                = 0,
-       PRIVILEGE_DB_NO_EXIST_RESULT                 = 1,
-       PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL     = 2,
-       PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY       = 3,
-       PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY       = 4,
-       PRIVILEGE_DB_MANAGER_ERR_INVALID_TYPE        = 5,
-       PRIVILEGE_DB_MANAGER_ERR_DB_BUSY_FAIL        = 6,
-       PRIVILEGE_DB_MANAGER_ERR_DB_CONSTRAINT_FAIL  = 7,
-       PRIVILEGE_DB_MANAGER_ERR_DB_FULL_FAIL        = 8,
-       PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL      = 9,
-       PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY          = 1001 /* define error code to avoid conflict error code of sqlite_open */
+       PRIVILEGE_DB_NO_EXIST_RESULT                 = -1,
+       PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL     = -2,
+       PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY       = -3,
+       PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY       = -4,
+       PRIVILEGE_DB_MANAGER_ERR_INVALID_TYPE        = -5,
+       PRIVILEGE_DB_MANAGER_ERR_DB_BUSY_FAIL        = -6,
+       PRIVILEGE_DB_MANAGER_ERR_DB_CONSTRAINT_FAIL  = -7,
+       PRIVILEGE_DB_MANAGER_ERR_DB_FULL_FAIL        = -8,
+       PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL      = -9,
+       PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY          = -1001 /* define error code to avoid conflict error code of sqlite_open */
 } privilege_db_manager_error_e;
 
 typedef enum {
@@ -55,8 +63,8 @@ typedef enum {
 } privilege_db_manager_privilege_level_e;
 
 typedef enum {
-       PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT         =   0,
-       PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE        =   1
+       PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT  = 0,
+       PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE = 1
 } privilege_db_manager_package_type_e;
 
 #ifdef __cplusplus
@@ -77,13 +85,23 @@ int privilege_db_manager_get_privacy_display(const char *privacy, char **privacy
 
 int privilege_db_manager_is(char type, const char* privilege);
 int privilege_db_manager_is_preloaded(const char* pkgid);
+
+/* privilege should be privacy privilege */
+int privilege_db_manager_is_privacy_white_list(const char* pkgid, const char* privilege);
+
+int privilege_db_manager_is_user_settable(const char* pkgid, const char* privacy);
+
 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);
 
-int privilege_db_manager_get_black_list(int uid, privilege_db_manager_package_type_e package_type, GList** privilege_list);
-int privilege_db_manager_set_black_list(int uid, privilege_db_manager_package_type_e pacakge_type, GList *privilege_list);
-int privilege_db_manager_unset_black_list(int uid, privilege_db_manager_package_type_e package_type, GList *privilege_list);
+int privilege_db_manager_get_privacy_by_privilege(const char* privilege, char** privacy_name);
+int privilege_db_manager_get_privacy_id_by_privilege(const char* privilege, int* privacy_id);
+int privilege_db_manager_get_privacy_id(const char* privacy, int *privacy_id);
+
+int privilege_db_manager_is_disabled_privilege(uid_t uid, const char* privilege);
+int privilege_db_manager_get_black_list(privilege_manager_policy_type_e policy_type, int uid, privilege_db_manager_package_type_e package_type, GList** privilege_list);
+int privilege_db_manager_set_black_list(privilege_manager_policy_type_e policy_type, int uid, privilege_db_manager_package_type_e pacakge_type, GList *privilege_list);
+int privilege_db_manager_unset_black_list(privilege_manager_policy_type_e policy_type, int uid, privilege_db_manager_package_type_e package_type, GList *privilege_list);
 
 /* Return the number of black-listed privileges in given privilege list */
 int privilege_db_manager_check_black_list(int uid, privilege_db_manager_package_type_e pacakge_type, GList *privilege_list);
index 6ec83aa..9b5e765 100644 (file)
@@ -140,6 +140,27 @@ EXPORT_API int privilege_info_is_privacy(const char *privilege);
 EXPORT_API int privilege_info_is_privacy2(const char *label, const char *privilege);
 
 /**
+ * @brief Determines whether the privacy of given pkgid is user-settable
+ * @param [in]  pkgid The package id
+ * @param [in]  privacy The privacy name
+ * @return 1 if true, 0 if false, and -1 on error
+ */
+EXPORT_API int privilege_info_is_user_settable(const char *pkgid, const char *privacy);
+
+/**
+ * @brief Gets the type of given privilege on the basis of privacy whitelist and blacklist disabled list
+ * @param [in]  uid The uid
+ * @param [in]  pkgid The package id
+ * @param [in]  privilege The privilege
+ * @param [out] type The type of privilege
+ * @return 0 on success, otherwise a nonzero error value.
+ * @retval #PRVMGR_ERR_NONE Successful
+ * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter
+ * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error
+ */
+EXPORT_API int privilege_info_get_privilege_type(uid_t uid, const char* pkgid, const char* privilege, privilege_manager_privilege_type_e *type);
+
+/**
  * @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 04e31ed..10417b7 100644 (file)
@@ -15,7 +15,7 @@
  */
 
 #ifndef __TIZEN_SECURITY_PRIVILEGE_INFO_TYPES_H
-#define __TIZEN_SECURITY_PRIVIELGE_INFO_TYPES_H
+#define __TIZEN_SECURITY_PRIVILEGE_INFO_TYPES_H
 
 #ifdef __cplusplus
 extern "C" {
index 99fa0dc..f616a70 100755 (executable)
@@ -31,19 +31,31 @@ extern "C" {
  */
 typedef enum {
        PRVMGR_ERR_NONE                        = 0,
-       PRVMGR_ERR_INVALID_PARAMETER           = 1,
-       PRVMGR_ERR_OUT_OF_MEMORY               = 2,
-       PRVMGR_ERR_INTERNAL_ERROR              = 3,
-       PRVMGR_ERR_NO_DATA                     = 4,
-       PRVMGR_ERR_NO_EXIST_PRIVILEGE          = 5,
-       PRVMGR_ERR_MISMACHED_PRIVILEGE_LEVEL   = 6,
-       PRVMGR_ERR_INVALID_PRIVILEGE           = 7,
+       PRVMGR_ERR_INVALID_PARAMETER           = -1,
+       PRVMGR_ERR_OUT_OF_MEMORY               = -2,
+       PRVMGR_ERR_INTERNAL_ERROR              = -3,
+       PRVMGR_ERR_NO_DATA                     = -4,
+       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,
+       PRVMGR_ERR_DEPRECATED_PRIVILEGE        = -8,
+       PRVMGR_ERR_USING_BANNED_PRIVILEGE      = -9,
 } privilege_manager_error_e;
 
 typedef enum {
+       PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL, /* not privacy, not blacklisted by mdm */
+       PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY, /* privacy (privacy privilege must not blacklisted by mdm) */
+       PRIVILEGE_MANAGER_PRIVILEGE_TYPE_BLACKLIST, /* blacklisted by mdm(disabled by security-manager when policy is set) */
+       PRIVILEGE_MANAGER_PRIVILEGE_TYPE_MAX
+} privilege_manager_privilege_type_e;
+
+typedef enum {
+       PRIVILEGE_MANAGER_POLICY_TYPE_PREVENT,
+       PRIVILEGE_MANAGER_POLICY_TYPE_DISABLE,
+} privilege_manager_policy_type_e;
+
+typedef enum {
        PRVMGR_PACKAGE_VISIBILITY_PUBLIC     =  1 << 1,
        PRVMGR_PACKAGE_VISIBILITY_PARTNER    =  1 << 2,
        PRVMGR_PACKAGE_VISIBILITY_PLATFORM   =  1 << 3,
index 7d5938b..7b383e0 100755 (executable)
@@ -8,15 +8,14 @@ touch $DB_NAME
 
 target_profile=$1
 preloaded="$target_profile""_preloaded.list"
+PRIVACYLIST_CSV="privacylist.csv"
+PRIVACY_WHITELIST_CSV="$target_profile""_privacy_whitelist.csv"
 
 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);"
+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_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 "Create VALID_PRIVILEGE_INFO Table..."
-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);"
+sqlite3 $DB_NAME "CREATE TABLE VALID_PRIVILEGE_INFO (PRIVILEGE_NAME TEXT UNIQUE, IS_PRIVACY NUMERIC, PRIVACY_NAME TEXT, IS_INTERNAL NUMERIC);"
 
 echo "Create PRELOADED table..."
 sqlite3 $DB_NAME "CREATE TABLE PRELOADED (NAME TEXT)"
@@ -34,8 +33,6 @@ do
        sqlite3 $DB_NAME "insert into preloaded values ('$NAME')"
 done
 
-
-
 for i in `cat core_privilege_info.csv`
 do
        temp=`echo $i | awk '/^#/'`
@@ -125,7 +122,7 @@ do
                exit
        fi
 
-       PRIVACY_GROUP=`echo $i | cut -d "," -f 9`
+       PRIVACY_NAME=`echo $i | cut -d "," -f 9`
 
        PRIVILEGE_DISPLAY=`echo $i | cut -d "," -f 11`
 
@@ -179,36 +176,82 @@ 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, privacy_group, is_internal) values ('$PRIVILEGE_NAME', '$IS_PRIVACY', '$PRIVACY_GROUP', 0)"
+       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_NAME', '$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, privacy_name, is_internal) values ('$PRIVILEGE_NAME', '$IS_PRIVACY', '$PRIVACY_NAME', 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, privacy_group, is_internal) values ('$internal_privilege', 0, 'N/A', 1)"
+       sqlite3 $DB_NAME "insert into valid_privilege_info (privilege_name, is_privacy, privacy_name, is_internal) values ('$internal_privilege', 0, 'N/A', 1)"
+done
+
+echo "Create PRIVACY_INFO table..."
+sqlite3 $DB_NAME "CREATE TABLE PRIVACY_INFO (PRIVACY_NAME TEXT UNIQUE, PRIVACY_ID NUMERIC, PRIVACY_DISPLAY TEXT);"
+echo "Insert into privacy_info ...."
+PRIVACY_ID=0
+for i in `cat $PRIVACYLIST_CSV`
+do
+    temp=`echo $i | awk '/^#/'`
+    if [ ! "$temp" = "" ]
+    then
+        continue
+    fi
+       PRIVACY_NAME=`echo $i | cut -d "," -f1`
+       PRIVACY_NAME_ONLY=`echo $PRIVACY_NAME | cut -d "/" -f5`
+       declare ${PRIVACY_NAME_ONLY}=$((PRIVACY_ID))
+       PRIVACY_DISPLAY=`echo $i | cut -d "," -f2`
+       echo "Insert $PRIVACY_NAME, PRIVACY_ID = $PRIVACY_ID "
+       sqlite3 $DB_NAME "insert into privacy_info (privacy_name, privacy_id, privacy_display) values ('$PRIVACY_NAME', $((PRIVACY_ID++)), '$PRIVACY_DISPLAY')"
+done
+
+echo "Create PRIVACY_WHITELIST table..."
+CREATE_WHITELIST_TABLE_QUERY="CREATE TABLE PRIVACY_WHITELIST (PKG_ID TEXT, PRIVACY_OPTION TEXT, SETTABLE TEXT);"
+sqlite3 $DB_NAME "$CREATE_WHITELIST_TABLE_QUERY"
+echo "insert into privacy_whiteliste ...."
+for i in `cat $PRIVACY_WHITELIST_CSV`
+do
+    temp=`echo $i | awk '/^#/'`
+    if [ ! "$temp" = "" ]
+    then
+        continue
+    fi
+       PKG_ID=`echo $i | cut -d "," -f1`
+       PRIVACY_OPTION=`echo $i | cut -d "," -f2`
+       #echo "first char ${PRIVACY_OPTION:0:1}"
+       IFS='-+ ' read -r -a array <<< $PRIVACY_OPTION
+       # init
+       TEMP=0
+       while [ $((TEMP)) -lt $((PRIVACY_ID)) ]
+       do
+               option_array[$((TEMP++))]=0
+       done
+       # privacy list set
+       for element in "${array[@]}"
+       do
+               if [ "$element" = "*" ]; then
+                       TEMP=0
+                       while [ $((TEMP)) -lt $PRIVACY_ID ]
+                       do
+                               option_array[$((TEMP++))]=1
+                       done
+               else
+                       if [ "${option_array[${element}]}" = "1" ]; then
+                               option_array[${element}]=0
+                       else
+                               option_array[${element}]=1
+                       fi
+               fi
+       done
+       SETTABLE=`echo $i | cut -d "," -f3`
+       # privacy option string
+       TEMP=0
+       PRIVACY_OPTION_STRING=""
+       while [ $((TEMP)) -lt $((PRIVACY_ID)) ]
+       do
+               PRIVACY_OPTION_STRING="$PRIVACY_OPTION_STRING""${option_array[$((TEMP++))]}"
+       done
+       echo "PKG_ID=$PKG_ID, PRIVACY_OPTION=$PRIVACY_OPTION_STRING, SETTABLE=$SETTABLE"
+       sqlite3 $DB_NAME "insert into privacy_whitelist values ('$PKG_ID', '$PRIVACY_OPTION_STRING', '$SETTABLE')"
 done
 
-echo "Insert into PRIVACY_INFO"
-echo "http://tizen.org/privacy/account"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/account','IDS_ST_BODY_ACCOUNTS')"
-echo "http://tizen.org/privacy/bookmark"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/bookmark','IDS_BR_OPT_BOOKMARK')"
-echo "http://tizen.org/privacy/calendar"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/calendar','IDS_TPLATFORM_OPT_CALENDAR_ABB')"
-echo "http://tizen.org/privacy/call"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/call','IDS_ST_BODY_CALL')"
-echo "http://tizen.org/privacy/camera"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/camera','IDS_TPLATFORM_BODY_CAMERA')"
-echo "http://tizen.org/privacy/contacts"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/contacts','IDS_TPLATFORM_OPT_CONTACTS_ABB')"
-echo "http://tizen.org/privacy/location"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/location','IDS_TPLATFORM_OPT_LOCATION_T_LBS')"
-echo "http://tizen.org/privacy/message"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/message','IDS_ST_BODY_MESSAGE')"
-echo "http://tizen.org/privacy/microphone"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/microphone','IDS_TPLATFORM_MBODY_MICROPHONE')"
-echo "http://tizen.org/privacy/sensor"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/sensor','IDS_TPLATFORM_MBODY_SENSORS')"
-echo "http://tizen.org/privacy/userhistory"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/userhistory','IDS_TPLATFORM_MBODY_USER_HISTORY')"
diff --git a/capi/res/dbspace/mobile_privacy_whitelist.csv b/capi/res/dbspace/mobile_privacy_whitelist.csv
new file mode 100644 (file)
index 0000000..886d372
--- /dev/null
@@ -0,0 +1,86 @@
+#PACKAGE_ID,#PRIVACY_OPTION,#SETTABLE
+attach-panel-camera,*-location,0
+attach-panel-document,*-location,0
+attach-panel-gallery,*-location,0
+attach-panel-voicerecorder,*-location,0
+cert-svc-ui,*-location,0
+hangul,*-location,0
+ise-default,*-location,0
+ise-engine-anthy,*-location,0
+ise-engine-default,*-location,0
+ise-engine-sunpinyin,*-location,0
+net.netpopup,*-location,0
+net.wifi-qs,*-location,0
+org.tizen.app-selector,*-location,0
+org.tizen.bluetooth-share-ui,*-location,0
+org.tizen.browser,*-location,0
+org.tizen.bt-syspopup,*-location,0
+org.tizen.calendar,*-location,0
+org.tizen.call-setting,*-location,0
+org.tizen.call-ui,*-location,0
+org.tizen.callmgr-popup,*-location,0
+org.tizen.camera-app,*-location,0
+org.tizen.chromium-efl,*-location,0
+org.tizen.contacts,*-location,0
+org.tizen.crash-syspopup,*-location,0
+org.tizen.d2d-conv-setting,*-location,0
+org.tizen.d2d-conv-syspopup,*-location,0
+org.tizen.download-manager,*-location,0
+org.tizen.dpm-syspopup,*-location,0
+org.tizen.dpm-toolkit,*-location,0
+org.tizen.email,*-location,0
+org.tizen.gallery,*-location,0
+org.tizen.gps-syspopup,*-location,0
+org.tizen.heremaps-uc,*-location,0
+org.tizen.homescreen-efl,*-location,0
+org.tizen.image-viewer,*-location,0
+org.tizen.indicator,*-location,0
+org.tizen.inputmethod-setting,*-location,0
+org.tizen.isf-kbd-mode-changer,*-location,0
+org.tizen.kaskit,*-location,0
+org.tizen.keyguard,*-location,0
+org.tizen.krate-setup-wizard,*-location,0
+org.tizen.lockscreen,*-location,0
+org.tizen.menu-screen,*-location,0
+org.tizen.message,*-location,0
+org.tizen.msg-manager,*-location,0
+org.tizen.music-player,*-location,0
+org.tizen.myfile,*-location,0
+org.tizen.myplace,*-location,0
+org.tizen.ode,*-location,0
+org.tizen.overheat-syspopup,*-location,0
+org.tizen.powerkey-syspopup,*-location,0
+org.tizen.privacy-setting,*-location,0
+org.tizen.quickpanel,*-location,0
+org.tizen.screen-reader,*-location,0
+org.tizen.service-plugin-sample,*-location,0
+org.tizen.setting,*-location,0
+org.tizen.setting-homescreen,*-location,0
+org.tizen.setting-location,*-location,0
+org.tizen.setting-notification,*-location,0
+org.tizen.settings-adid,*-location,0
+org.tizen.share-panel,*-location,0
+org.tizen.stt-engine-default,*-location,0
+org.tizen.sys-lock,*-location,0
+org.tizen.system-signal-sender,*-location,0
+org.tizen.system-syspopup,*-location,0
+org.tizen.task-mgr,*-location,0
+org.tizen.tts-engine-default,*-location,0
+org.tizen.ug-gallery-efl,*-location,0
+org.tizen.ug-lockscreen-options,*-location,0
+org.tizen.ug-myfile-efl,*-location,0
+org.tizen.videos,*-location,0
+org.tizen.voice-control-panel,*-location,0
+org.tizen.voice-setting,*-location,0
+org.tizen.volume,*-location,0
+org.tizen.wallpaper-ui-service,*-location,0
+org.tizen.widget_viewer_sdk,*-location,0
+org.tizen.wifi-direct-popup,*-location,0
+org.tizen.worldclock-efl,*-location,0
+setting-myaccount-efl,*-location,0
+table,*-location,0
+ug-bluetooth-efl,*-location,0
+ug-setting-mobileap-efl,*-location,0
+ug-setting-wifidirect-efl,*-location,0
+wifi-efl-ug,*-location,0
+org.tizen.memo,*-location,0
index d29dcb1..9bad2da 100755 (executable)
@@ -6,8 +6,14 @@ rm $DB_NAME 2> /dev/null
 echo "Creating $DB_NAME ..."
 touch $DB_NAME
 
-echo "Creating BLACK_LIST table ..."
-sqlite3 $DB_NAME "CREATE TABLE BLACK_LIST (UID NUMERIC, PACKAGE_TYPE NUMERIC , PRIVILEGE_NAME TEXT not null, UNIQUE(UID, PACKAGE_TYPE, PRIVILEGE_NAME));"
+echo "Creating PREVENT_LIST table ..."
+sqlite3 $DB_NAME "CREATE TABLE PREVENT_LIST (UID NUMERIC not null, PACKAGE_TYPE NUMERIC , PRIVILEGE_NAME TEXT not null, UNIQUE(UID, PACKAGE_TYPE, PRIVILEGE_NAME));"
+echo "Creating DISABLE_LIST table...."
+sqlite3 $DB_NAME "CREATE TABLE DISABLE_LIST (UID NUMERIC not null, PRIVILEGE_NAME TEXT not null, UNIQUE(UID, PRIVILEGE_NAME));"
+
+# for internal test
+#sqlite3 $DB_NAME "insert into disable_list values(0, 'http://tizen.org/privilege/yyyyy')"
 
 echo "Check inserted data"
-sqlite3 $DB_NAME "select * from black_list"
+sqlite3 $DB_NAME "select * from prevent_list"
+sqlite3 $DB_NAME "select * from disable_list"
diff --git a/capi/res/dbspace/privacylist.csv b/capi/res/dbspace/privacylist.csv
new file mode 100644 (file)
index 0000000..c2989c1
--- /dev/null
@@ -0,0 +1,12 @@
+#PRIVACY_ID,#PRIVACY_DISPLAY
+http://tizen.org/privacy/account,IDS_ST_BODY_ACCOUNTS
+http://tizen.org/privacy/bookmark,IDS_BR_OPT_BOOKMARK
+http://tizen.org/privacy/calendar,IDS_TPLATFORM_OPT_CALENDAR_ABB
+http://tizen.org/privacy/call,IDS_ST_BODY_CALL
+http://tizen.org/privacy/camera,IDS_TPLATFORM_BODY_CAMERA
+http://tizen.org/privacy/contacts,IDS_TPLATFORM_OPT_CONTACTS_ABB
+http://tizen.org/privacy/location,IDS_TPLATFORM_OPT_LOCATION_T_LBS
+http://tizen.org/privacy/message,IDS_ST_BODY_MESSAGE
+http://tizen.org/privacy/microphone,IDS_TPLATFORM_MBODY_MICROPHONE
+http://tizen.org/privacy/sensor,IDS_TPLATFORM_MBODY_SENSORS
+http://tizen.org/privacy/userhistory,IDS_TPLATFORM_MBODY_USER_HISTORY
index d4e711f..5bbf956 100755 (executable)
@@ -6,14 +6,13 @@ rm $DB_NAME 2> /dev/null
 echo "Creating $DB_NAME ..."
 touch $DB_NAME
 
+PRIVACYLIST_CSV="privacylist.csv"
+
 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);"
+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_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 "Create VALID_PRIVILEGE_INFO Table..."
-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);"
+sqlite3 $DB_NAME "CREATE TABLE VALID_PRIVILEGE_INFO (PRIVILEGE_NAME TEXT UNIQUE, IS_PRIVACY NUMERIC, PRIVACY_NAME TEXT, IS_INTERNAL NUMERIC);"
 
 echo "Inserting data ..."
 IFS=$'\n'
@@ -104,7 +103,7 @@ do
                exit
        fi
 
-       PRIVACY_GROUP=`echo $i | cut -d "," -f 9`
+       PRIVACY_NAME=`echo $i | cut -d "," -f 9`
 
        PRIVILEGE_DISPLAY=`echo $i | cut -d "," -f 11`
 
@@ -157,36 +156,31 @@ 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, privacy_group, is_internal) values ('$PRIVILEGE_NAME', '$IS_PRIVACY', '$PRIVACY_GROUP', 0)"
+       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_NAME', '$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, privacy_name, is_internal) values ('$PRIVILEGE_NAME', '$IS_PRIVACY', '$PRIVACY_NAME', 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, privacy_group, is_internal) values ('$internal_privilege', 0, 'N/A', 1)"
+       sqlite3 $DB_NAME "insert into valid_privilege_info (privilege_name, is_privacy, privacy_name, is_internal) values ('$internal_privilege', 0, 'N/A', 1)"
 done
 
-echo "Insert into PRIVACY_INFO"
-echo "http://tizen.org/privacy/account"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/account','IDS_ST_BODY_ACCOUNTS')"
-echo "http://tizen.org/privacy/bookmark"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/bookmark','IDS_BR_OPT_BOOKMARK')"
-echo "http://tizen.org/privacy/calendar"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/calendar','IDS_TPLATFORM_OPT_CALENDAR_ABB')"
-echo "http://tizen.org/privacy/call"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/call','IDS_ST_BODY_CALL')"
-echo "http://tizen.org/privacy/camera"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/camera','IDS_TPLATFORM_BODY_CAMERA')"
-echo "http://tizen.org/privacy/contacts"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/contacts','IDS_TPLATFORM_OPT_CONTACTS_ABB')"
-echo "http://tizen.org/privacy/location"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/location','IDS_TPLATFORM_OPT_LOCATION_T_LBS')"
-echo "http://tizen.org/privacy/message"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/message','IDS_ST_BODY_MESSAGE')"
-echo "http://tizen.org/privacy/microphone"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/microphone','IDS_TPLATFORM_MBODY_MICROPHONE')"
-echo "http://tizen.org/privacy/sensor"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/sensor','IDS_TPLATFORM_MBODY_SENSORS')"
-echo "http://tizen.org/privacy/userhistory"
-sqlite3 $DB_NAME "insert into privacy_info (privacy_group, privacy_display) values ('http://tizen.org/privacy/userhistory','IDS_TPLATFORM_MBODY_USER_HISTORY')"
+echo "Create PRIVACY_INFO table..."
+sqlite3 $DB_NAME "CREATE TABLE PRIVACY_INFO (PRIVACY_NAME TEXT UNIQUE, PRIVACY_ID NUMERIC, PRIVACY_DISPLAY TEXT);"
+echo "Insert into privacy_info ...."
+PRIVACY_ID=0
+for i in `cat $PRIVACYLIST_CSV`
+do
+    temp=`echo $i | awk '/^#/'`
+    if [ ! "$temp" = "" ]
+    then
+        continue
+    fi
+       PRIVACY_NAME=`echo $i | cut -d "," -f1`
+       PRIVACY_NAME_ONLY=`echo $PRIVACY_NAME | cut -d "/" -f5`
+       declare ${PRIVACY_NAME_ONLY}=$((PRIVACY_ID))
+       PRIVACY_DISPLAY=`echo $i | cut -d "," -f2`
+       echo "Insert $PRIVACY_NAME, PRIVACY_ID = $PRIVACY_ID "
+       sqlite3 $DB_NAME "insert into privacy_info (privacy_name, privacy_id, privacy_display) values ('$PRIVACY_NAME', $((PRIVACY_ID++)), '$PRIVACY_DISPLAY')"
+done
diff --git a/capi/res/dbspace/wearable_privacy_whitelist.csv b/capi/res/dbspace/wearable_privacy_whitelist.csv
new file mode 100644 (file)
index 0000000..761448e
--- /dev/null
@@ -0,0 +1,34 @@
+#PKG_ID,#PRIVACY_OPTION,#SETTABLE
+ise-default,*-location,0
+ise-engine-default,*-location,0
+org.tizen.alarm,*-location,0
+org.tizen.app-selector,*-location,0
+org.tizen.bluetooth,*-location,0
+org.tizen.bt-syspopup,*-location,0
+org.tizen.chromium-efl,*-location,0
+org.tizen.classic-watch,*-location,0
+org.tizen.crash-syspopup,*-location,0
+org.tizen.dpm-syspopup,*-location,0
+org.tizen.dpm-toolkit,*-location,0
+org.tizen.elm-demo-tizen-wearable,*-location,0
+org.tizen.heremaps-uc,*-location,0
+org.tizen.idle-clock-digital,*-location,0
+org.tizen.inputdelegator,*-location,0
+org.tizen.inputmethod-setting,*-location,0
+org.tizen.my-account,*-location,0
+org.tizen.nfc-setting-app,*-location,0
+org.tizen.ode,*-location,0
+org.tizen.powerkey-syspopup,*-location,0
+org.tizen.privacy-setting,*-location,0
+org.tizen.screen-reader,*-location,0
+org.tizen.stopwatch,*-location,0
+org.tizen.stt-engine-default,*-location,0
+org.tizen.system-syspopup,*-location,0
+org.tizen.task-mgr,*-location,0
+org.tizen.timer,*-location,0
+org.tizen.tts-engine-default,*-location,0
+org.tizen.w-home,*-location,0
+org.tizen.w-wifi,*-location,0
+org.tizen.watch-setting,*-location,0
+org.tizen.widget_viewer_sdk,*-location,0
+org.tizen.windicator,*-location,0
index 7442d31..87704ee 100755 (executable)
@@ -8,6 +8,8 @@
 
 #ifdef __TIZEN__
 #include <dlog.h>
+#include <tzplatform_config.h>
+#define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
 #ifdef LOG_TAG
 #undef LOG_TAG
 #define LOG_TAG "PRIVILEGE_DB_MANAGER"
@@ -21,6 +23,7 @@
 #define _LOGD(fmt, arg...)
 #define _LOGW(fmt, arg...)
 #define _LOGI(fmt, arg...)
+#define GLOBAL_USER 0
 #endif
 
 
@@ -48,27 +51,38 @@ static privilege_db_manager_profile_type_e g_privilege_db_manager_profile_type =
                return returnValue; \
        }
 
-int __initialize_db(char type, sqlite3 ** db, privilege_db_manager_package_type_e package_type)
+char* __get_policy_table(privilege_manager_policy_type_e policy_type)
+{
+       switch (policy_type) {
+       case (PRIVILEGE_MANAGER_POLICY_TYPE_PREVENT):
+               return "prevent_list";
+       case (PRIVILEGE_MANAGER_POLICY_TYPE_DISABLE):
+       default:
+               return "disable_list";
+       }
+}
+
+int __initialize_db(privilege_db_type_e type, sqlite3 ** db, privilege_db_manager_package_type_e package_type)
 {
        char *db_path = NULL;
        int db_mode = SQLITE_OPEN_READONLY;
 
        switch (type) {
-       case 'i':
+       case PRIVILEGE_DB_TYPE_INFO:
                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':
+       case PRIVILEGE_DB_TYPE_MAPPING:
                if (package_type == PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT)
                        db_path = PRIVILEGE_MAPPING_WRT_DB_PATH;
                else
                        db_path = PRIVILEGE_MAPPING_CORE_DB_PATH;
                break;
-       case 'u':
+       case PRIVILEGE_DB_TYPE_POLICY_RW:
                db_mode = SQLITE_OPEN_READWRITE;
-       case 'p':
+       case PRIVILEGE_DB_TYPE_POLICY_RO:
                db_path = PRIVILEGE_POLICY_DB_PATH;
                break;
        default:
@@ -144,14 +158,14 @@ int privilege_db_manager_check_black_list(int uid, privilege_db_manager_package_
        int ret = 0;
        int count = 0;
 
-       ret = __initialize_db('p', &db, package_type);
+       ret = __initialize_db(PRIVILEGE_DB_TYPE_POLICY_RO, &db, package_type);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
        char *privilege_list_str = NULL;
        ret = __make_privilege_list_str(privilege_list, &privilege_list_str);
        _LOGD("check black list with uid = %d, package_type = %d, privilege_list = %s", uid, package_type, privilege_list_str);
-       char *sql = sqlite3_mprintf("select distinct privilege_name from black_list where privilege_name in(%s)and uid=%d and package_type=%d", privilege_list_str, uid, package_type);
+       char *sql = sqlite3_mprintf("select distinct privilege_name from prevent_list where privilege_name in(%s)and uid=%d and package_type=%d", privilege_list_str, uid, package_type);
        sqlite3_free(privilege_list_str);
        TryReturn(sql != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
 
@@ -195,7 +209,7 @@ int privilege_db_manager_get_privilege_list(const char *api_version, privilege_d
        }
        TryReturn(changed_to_version != NULL, , PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed.");
 
-       ret = __initialize_db('i', &db, package_type);
+       ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, package_type);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
@@ -275,7 +289,7 @@ int privilege_db_manager_get_mapped_privilege_list(const char *api_version, priv
        sqlite3_stmt *stmt = NULL;
        int ret;
 
-       ret = __initialize_db('m', &db, package_type);
+       ret = __initialize_db(PRIVILEGE_DB_TYPE_MAPPING, &db, package_type);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
@@ -315,10 +329,10 @@ int privilege_db_manager_get_privacy_display(const char *privacy, char **privacy
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret = __initialize_db('i', &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
-       char *sql = sqlite3_mprintf("select privacy_display from privacy_info where privacy_group=%Q", privacy);
+       char *sql = sqlite3_mprintf("select privacy_display from privacy_info where privacy_name=%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) {
@@ -346,7 +360,7 @@ int privilege_db_manager_get_privilege_display(privilege_db_manager_package_type
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
        int ret;
-       ret = __initialize_db('i', &db, package_type);
+       ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, package_type);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
@@ -387,7 +401,7 @@ int privilege_db_manager_get_privilege_description(privilege_db_manager_package_
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
        int ret;
-       ret = __initialize_db('i', &db, package_type);
+       ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, package_type);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
@@ -427,7 +441,7 @@ int privilege_db_manager_get_privilege_group_display(privilege_db_manager_packag
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
        int ret;
-       ret = __initialize_db('i', &db, package_type);
+       ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, package_type);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
@@ -461,7 +475,7 @@ int privilege_db_manager_is(char type, const char* privilege)
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
        int res = 0;
-       int ret = __initialize_db('i', &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &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 privilege_name,is_privacy, is_internal from valid_privilege_info where privilege_name=%Q", privilege);
@@ -500,11 +514,12 @@ int privilege_db_manager_is(char type, const char* privilege)
                return res;
 }
 
+/* TBD : Remove it */
 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);
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &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);
@@ -523,15 +538,126 @@ int privilege_db_manager_is_preloaded(const char* pkgid)
        }
 }
 
+int privilege_db_manager_is_privacy_white_list(const char* pkgid, const char* privilege)
+{
+#ifdef DISABLE_ASKUSER
+       return 1;
+#endif
+       sqlite3 *db = NULL;
+       sqlite3_stmt *stmt = NULL;
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE, , ret, "[PRIVILEGE_DB_MANAGER] DB INITIALIZE FAIL");
+
+       int privacy_id = 0;
+       ret = privilege_db_manager_get_privacy_id_by_privilege(privilege, &privacy_id);
+       TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE, , ret, "[PRIVILEGE_DB_MANAGER] privilege_db_manager_get_privacy_id_by_privilege failed");
+
+       char *sql = sqlite3_mprintf("select privacy_option from privacy_whitelist where pkg_id=%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));
+
+       int res = 0;
+       do {
+               ret = sqlite3_step(stmt);
+               if (ret == SQLITE_ROW) {
+                       char* privacy_option = strdup((char *)sqlite3_column_text(stmt, 0));
+                       TryReturn(privacy_option != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER] privacy_option strdup failed");
+                       if (privacy_option[privacy_id] == '1') {
+                               res = 1;
+                               free(privacy_option);
+                               break;
+                       }
+                       free(privacy_option);
+               }
+       } while (ret == SQLITE_ROW);
+
+       __finalize_db(db, stmt, sql);
+       return res;
+}
+
+int privilege_db_manager_is_user_settable(const char* pkgid, const char* privacy)
+{
+#ifdef DISABLE_ASKUSER
+       return 1;
+#endif
+       sqlite3 *db = NULL;
+       sqlite3_stmt *stmt = NULL;
+       int res = 1;
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE, , ret, "[PRIVILEGE_DB_MANAGER] DB INITIALIZE FAIL");
+
+       int privacy_id = 0;
+       ret = privilege_db_manager_get_privacy_id(privacy, &privacy_id);
+       TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE, , ret, "[PRIVILEGE_DB_MANAGER] privilege_db_manager_get_privacy_id failed");
+
+       char *sql = sqlite3_mprintf("select privacy_option, settable from privacy_whitelist where pkg_id=%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));
+
+       res = 1;
+       do {
+               ret = sqlite3_step(stmt);
+               if (ret == SQLITE_ROW) {
+                       char* privacy_option = strdup((char *)sqlite3_column_text(stmt, 0));
+                       TryReturn(privacy_option != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER] privacy_option strdup failed");
+                       int settable_flag = (int)sqlite3_column_int(stmt, 1);
+                       if (privacy_option[privacy_id] == '1' && settable_flag == 1) {
+                               res = 1;
+                               free(privacy_option);
+                               break;
+                       } else if (privacy_option[privacy_id] == '1' && settable_flag == 0) {
+                               res = 0;
+                               free(privacy_option);
+                               break;
+                       } else {
+                               res = 1;
+                       }
+                       free(privacy_option);
+               }
+       } while (ret == SQLITE_ROW);
+
+       __finalize_db(db, stmt, sql);
+       return res;
+}
+
+int privilege_db_manager_is_disabled_privilege(uid_t uid, const char* privilege)
+{
+       sqlite3 *db = NULL;
+       sqlite3_stmt *stmt = NULL;
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_POLICY_RO, &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE, , ret, "[PRIVILEGE_DB_MANAGER] DB INITIALIZE FAIL. ret = %d", ret);
+
+       char *sql = sqlite3_mprintf("select * from disable_list where privilege_name=%Q and (uid=%d or uid=%d)", privilege, uid, GLOBAL_USER);
+       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);
+       if (ret == SQLITE_ROW) {
+               _LOGD("%s is disabled for uid: %d", privilege, uid);
+               ret = 1;
+       } else {
+               _LOGD("%s is not disabled for uid: %d. ret = %s", privilege, uid, sqlite3_errmsg(db));
+               ret = 0;
+       }
+       __finalize_db(db, stmt, sql);
+       return ret;
+}
+
 int __privilege_db_manager_get_privacy_list(GList **privacy_list)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret = __initialize_db('i', &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
-       char *sql = sqlite3_mprintf("select DISTINCT privacy_group from privilege_info where is_privacy=1 order by privacy_group");
+       char *sql = sqlite3_mprintf("select DISTINCT privacy_name from privilege_info where is_privacy=1 order by privacy_name");
        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) {
@@ -561,11 +687,11 @@ int __privilege_db_manager_get_privilege_list_by_privacy(const char* privacy, GL
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret = __initialize_db('i', &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
-       char *sql = sqlite3_mprintf("select distinct privilege_name from valid_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_name=%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) {
@@ -591,15 +717,15 @@ int __privilege_db_manager_get_privilege_list_by_privacy(const char* privacy, GL
 
 }
 
-int privilege_db_manager_get_privacy_by_privilege(const char* privilege, char** privacy)
+int privilege_db_manager_get_privacy_by_privilege(const char* privilege, char** privacy_name)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret = __initialize_db('i', &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
-       char *sql = sqlite3_mprintf("select privacy_group from valid_privilege_info where privilege_name=%Q", privilege);
+       char *sql = sqlite3_mprintf("select privacy_name 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) {
@@ -608,23 +734,90 @@ int privilege_db_manager_get_privacy_by_privilege(const char* privilege, char**
                return PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY;
        }
        ret = sqlite3_step(stmt);
-       if (ret == SQLITE_ROW)
-               *privacy = strdup((char*)sqlite3_column_text(stmt, 0));
+       if (ret == SQLITE_ROW) {
+               *privacy_name = strdup((char*)sqlite3_column_text(stmt, 0));
+               ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
+       } else {
+               ret = PRIVILEGE_DB_NO_EXIST_RESULT;
+       }
 
        __finalize_db(db, stmt, sql);
 
-       return PRIVILEGE_DB_MANAGER_ERR_NONE;
+       return ret;
+}
+
+int privilege_db_manager_get_privacy_id_by_privilege(const char* privilege, int *privacy_id)
+{
+       sqlite3 *db = NULL;
+       sqlite3_stmt *stmt = NULL;
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
+               return ret;
+
+       char *sql = sqlite3_mprintf("select privacy_id from privacy_info where privacy_name=(select privacy_name 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) {
+               _LOGE("[DB_FAIL] fail to prepare database : %s", sqlite3_errmsg(db));
+               __finalize_db(db, stmt, sql);
+               return PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY;
+       }
+       ret = sqlite3_step(stmt);
+       if (ret == SQLITE_ROW) {
+               int tmp = (int)sqlite3_column_int(stmt, 0);
+               _LOGD("privacy_id = %d", tmp);
+               *privacy_id = tmp;
+               ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
+       } else {
+               ret = PRIVILEGE_DB_NO_EXIST_RESULT;
+       }
+
+       __finalize_db(db, stmt, sql);
+
+       return ret;
 }
 
-int privilege_db_manager_get_black_list(int uid, privilege_db_manager_package_type_e package_type, GList **privilege_list)
+int privilege_db_manager_get_privacy_id(const char* privacy, int *privacy_id)
+{
+       sqlite3 *db = NULL;
+       sqlite3_stmt *stmt = NULL;
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_INFO, &db, PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE);
+       if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
+               return ret;
+
+       char *sql = sqlite3_mprintf("select privacy_id from privacy_info where privacy_name=%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) {
+               _LOGE("[DB_FAIL] fail to prepare database : %s", sqlite3_errmsg(db));
+               __finalize_db(db, stmt, sql);
+               return PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY;
+       }
+       ret = sqlite3_step(stmt);
+       if (ret == SQLITE_ROW) {
+               int tmp = (int)sqlite3_column_int(stmt, 0);
+               _LOGD("privacy_id = %d", tmp);
+               *privacy_id = tmp;
+               ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
+       } else {
+               ret = PRIVILEGE_DB_NO_EXIST_RESULT;
+       }
+
+       __finalize_db(db, stmt, sql);
+
+       return ret;
+}
+
+
+int privilege_db_manager_get_black_list(privilege_manager_policy_type_e policy_type, int uid, privilege_db_manager_package_type_e package_type, GList **privilege_list)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret = __initialize_db('p', &db, package_type);
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_POLICY_RO, &db, package_type);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
-       _LOGD("Get privilege_name from black_list where uid = %d, package_type = %d", uid, package_type);
-       char* sql = sqlite3_mprintf("select privilege_name from black_list where uid=%d and package_type=%d", uid, package_type);
+       _LOGD("Get privilege_name from %s where uid = %d, package_type = %d", __get_policy_table(policy_type), uid, package_type);
+       char* sql = sqlite3_mprintf("select privilege_name from %Q where uid=%d and package_type=%d", __get_policy_table(policy_type),  uid, package_type);
        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) {
@@ -652,11 +845,11 @@ int privilege_db_manager_get_black_list(int uid, privilege_db_manager_package_ty
        return PRIVILEGE_DB_MANAGER_ERR_NONE;
 }
 
-int privilege_db_manager_set_black_list(int uid, privilege_db_manager_package_type_e package_type, GList *privilege_list)
+int privilege_db_manager_set_black_list(privilege_manager_policy_type_e policy_type, int uid, privilege_db_manager_package_type_e package_type, GList *privilege_list)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret = __initialize_db('u', &db, package_type);
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_POLICY_RW, &db, package_type);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
@@ -664,8 +857,8 @@ int privilege_db_manager_set_black_list(int uid, privilege_db_manager_package_ty
        GList *l = NULL;
        for (l = privilege_list; l != NULL; l = l->next) {
                char *privilege_name = (char *)l->data;
-               _LOGD("insert uid = %d, package_type = %d, privilege_name = %s", uid, package_type, privilege_name);
-               char* sql = sqlite3_mprintf("insert or ignore into black_list (uid, package_type, privilege_name) values (%d, %d, %Q)", uid, package_type, privilege_name);
+               _LOGD("insert into %s uid = %d, package_type = %d, privilege_name = %s", __get_policy_table(policy_type), uid, package_type, privilege_name);
+               char* sql = sqlite3_mprintf("insert or ignore into %Q (uid, package_type, privilege_name) values (%d, %d, %Q)", __get_policy_table(policy_type), uid, package_type, privilege_name);
                TryReturn(sql != NULL, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, 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) {
@@ -689,11 +882,11 @@ int privilege_db_manager_set_black_list(int uid, privilege_db_manager_package_ty
        return PRIVILEGE_DB_MANAGER_ERR_NONE;
 }
 
-int privilege_db_manager_unset_black_list(int uid, privilege_db_manager_package_type_e package_type, GList *privilege_list)
+int privilege_db_manager_unset_black_list(privilege_manager_policy_type_e policy_type, int uid, privilege_db_manager_package_type_e package_type, GList *privilege_list)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret = __initialize_db('u', &db, package_type);
+       int ret = __initialize_db(PRIVILEGE_DB_TYPE_POLICY_RW, &db, package_type);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
@@ -701,8 +894,8 @@ int privilege_db_manager_unset_black_list(int uid, privilege_db_manager_package_
        GList *l = NULL;
        for (l = privilege_list; l != NULL; l = l->next) {
                char *privilege_name = (char *)l->data;
-               _LOGD("delete from black_list where uid = %d, package_type = %d, privilege_name = %s", uid, package_type, privilege_name);
-               char* sql = sqlite3_mprintf("delete from black_list where uid=%d and package_type=%d and privilege_name=%Q", uid, package_type, privilege_name);
+               _LOGD("delete from %s where uid = %d, package_type = %d, privilege_name = %s", __get_policy_table(policy_type), uid, package_type, privilege_name);
+               char* sql = sqlite3_mprintf("delete from %Q where uid=%d and package_type=%d and privilege_name=%Q", __get_policy_table(policy_type), uid, package_type, privilege_name);
                TryReturn(sql != NULL, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, 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 4f7ffc0..386ebc3 100755 (executable)
@@ -522,6 +522,7 @@ int privilege_info_is_privacy(const char* privilege)
 #endif
 }
 
+/* TBD: remove it */
 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");
@@ -564,6 +565,60 @@ int privilege_info_is_privacy2(const char* label, const char* privilege)
 #endif
 }
 
+int privilege_info_get_privilege_type(uid_t uid, const char* pkgid, const char* privilege, privilege_manager_privilege_type_e *type)
+{
+       TryReturn(pkgid != NULL && privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] pkgid or privilege is NULL");
+       int ret = PRVMGR_ERR_NONE;
+       LOGD("get privilege type for uid: <%d>, pkgid: <%s>, privilege: <%s>", uid, pkgid, privilege);
+       ret = privilege_db_manager_is('p', privilege);
+       if (ret == 1) {
+               ret = privilege_db_manager_is_privacy_white_list(pkgid, privilege);
+               if (ret == 1) {
+                       *type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL;
+                       ret = PRVMGR_ERR_NONE;
+               } else if (ret == 0) {
+                       *type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY;
+                       ret = PRVMGR_ERR_NONE;
+               } else {
+                       LOGE("privilege_db_manager_is_privacy_whitelist failed");
+                       ret = PRVMGR_ERR_INTERNAL_ERROR;
+               }
+       } else if (ret == 0) { // not privacy -> check mdm black list
+               ret = privilege_db_manager_is_disabled_privilege(uid, privilege);
+               if (ret == 1) {
+                       *type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_BLACKLIST;
+                       ret = PRVMGR_ERR_NONE;
+               } else if (ret == 0) {
+                       *type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL;
+                       ret = PRVMGR_ERR_NONE;
+               } else {
+                       LOGE("privilege_db_manager_is_disabled_privilege failed");
+                       ret = PRVMGR_ERR_INTERNAL_ERROR;
+               }
+       } else {
+               LOGE("privilege_db_manager_is failed");
+               ret = PRVMGR_ERR_INTERNAL_ERROR;
+       }
+       return ret;
+}
+
+int privilege_info_is_user_settable(const char* pkgid, const char* privacy)
+{
+       TryReturn(pkgid != NULL && privacy != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] pkgid or privacy is NULL");
+       int ret = privilege_db_manager_is_user_settable(pkgid, privacy);
+       if (ret == 1)
+               return 1;
+       else if (ret == 0)
+               return 0;
+
+       if (ret == PRIVILEGE_DB_NO_EXIST_RESULT)
+               LOGE("%s is invalid privacy name", privacy);
+       else
+               LOGE("ret = %d", ret);
+
+       return -1;
+}
+
 int privilege_info_is_valid(const char* privilege)
 {
        TryReturn(privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege is NULL");
@@ -643,7 +698,7 @@ int privilege_info_get_black_list(int uid, privilege_manager_package_type_e pack
 {
        TryReturn(package_type == PRVMGR_PACKAGE_TYPE_WRT || package_type == PRVMGR_PACKAGE_TYPE_CORE, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] package_type invalid!");
 
-       int ret = privilege_db_manager_get_black_list(uid, package_type, privilege_list);
+       int ret = privilege_db_manager_get_black_list(PRIVILEGE_MANAGER_POLICY_TYPE_PREVENT, uid, package_type, privilege_list);
        if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE)
                ret = PRVMGR_ERR_NONE;
        else
index 7d4ae49..e1b93c1 100755 (executable)
@@ -491,7 +491,7 @@ int privilege_manager_set_black_list(int uid, privilege_manager_package_type_e p
 {
        TryReturn(privilege_list != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_list is NULL.");
        TryReturn(package_type == PRVMGR_PACKAGE_TYPE_WRT || package_type == PRVMGR_PACKAGE_TYPE_CORE, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] Invalid package_type = %d.", package_type);
-       int ret = privilege_db_manager_set_black_list(uid, package_type, privilege_list);
+       int ret = privilege_db_manager_set_black_list(PRIVILEGE_MANAGER_POLICY_TYPE_PREVENT, uid, package_type, privilege_list);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                ret = PRVMGR_ERR_INTERNAL_ERROR;
        return ret;
@@ -501,7 +501,7 @@ int privilege_manager_unset_black_list(int uid, privilege_manager_package_type_e
 {
        TryReturn(privilege_list != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] privilege_list is NULL.");
        TryReturn(package_type == PRVMGR_PACKAGE_TYPE_WRT || package_type == PRVMGR_PACKAGE_TYPE_CORE, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] Invalid package_type = %d.", package_type);
-       int ret = privilege_db_manager_unset_black_list(uid, package_type, privilege_list);
+       int ret = privilege_db_manager_unset_black_list(PRIVILEGE_MANAGER_POLICY_TYPE_PREVENT, uid, package_type, privilege_list);
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                ret = PRVMGR_ERR_INTERNAL_ERROR;
        return ret;
index 48072ce..2809391 100755 (executable)
@@ -350,6 +350,317 @@ void __test_privilege_db_manager_get_privilege_description()
 
 }
 
+void __test_privilege_db_manager_get_privacy_by_privilege()
+{
+       int ret = 0;
+       int privacy_id = 100;
+       char* privacy_name = NULL;
+
+       __print_line();
+       printf("privilege: http://tizen.org/privilege/account.read\n");
+       printf("privacy: http://tizen.org/privacy/account\n");
+       ret = privilege_db_manager_get_privacy_by_privilege("http://tizen.org/privilege/account.read", &privacy_name);
+       ret = privilege_db_manager_get_privacy_id_by_privilege("http://tizen.org/privilege/account.read", &privacy_id);
+       printf("privacy name = %s, privacy_id = %d\n", privacy_name, privacy_id);
+       if (ret == 0 && !strcmp(privacy_name, "http://tizen.org/privacy/account") && privacy_id == 0) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+       free(privacy_name);
+       privacy_name = NULL;
+
+       __print_line();
+       printf("privilege: http://tizen.org/privilege/location\n");
+       printf("privacy: http://tizen.org/privacy/location\n");
+       ret = privilege_db_manager_get_privacy_by_privilege("http://tizen.org/privilege/location", &privacy_name);
+       ret = privilege_db_manager_get_privacy_id_by_privilege("http://tizen.org/privilege/location", &privacy_id);
+       printf("privacy name = %s, privacy_id = %d\n", privacy_name, privacy_id);
+       if (ret == 0 && !strcmp(privacy_name, "http://tizen.org/privacy/location") && privacy_id == 6) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+       free(privacy_name);
+       privacy_name = NULL;
+
+       __print_line();
+       printf("privilege: http://tizen.org/privilege/call\n");
+       printf("privacy: http://tizen.org/privacy/call\n");
+       ret = privilege_db_manager_get_privacy_by_privilege("http://tizen.org/privilege/call", &privacy_name);
+       ret = privilege_db_manager_get_privacy_id_by_privilege("http://tizen.org/privilege/call", &privacy_id);
+       printf("privacy name = %s, privacy_id = %d\n", privacy_name, privacy_id);
+       if (ret == 0 && !strcmp(privacy_name, "http://tizen.org/privacy/call") && privacy_id == 3) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+       free(privacy_name);
+       privacy_name = NULL;
+}
+
+void __test_privilege_db_manager_is_privacy_white_list()
+{
+       int ret = 0;
+
+       __print_line();
+       printf("pkgid: ise-default\n");
+       printf("privilege: http://tizen.org/privilege/call\n");
+       printf("is privacy whitelist\n");
+       ret = privilege_db_manager_is_privacy_white_list("ise-default", "http://tizen.org/privilege/call");
+       printf("ret = %d\n", ret);
+       if (ret == 1) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("pkgid: ise-default\n");
+       printf("privilege: http://tizen.org/privilege/location\n");
+       printf("is not privacy whitelist\n");
+       ret = privilege_db_manager_is_privacy_white_list("ise-default", "http://tizen.org/privilege/location");
+       printf("ret = %d\n", ret);
+#ifdef ENABLE_ASKUSER
+       if (ret == 0) {
+#else
+       if (ret == 1) {
+#endif
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("pkgid: ise-default\n");
+       printf("privilege: http://tizen.org/privilege/calendar.read\n");
+       printf("is privacy whitelist\n");
+       ret = privilege_db_manager_is_privacy_white_list("ise-default", "http://tizen.org/privilege/calendar.read");
+       printf("ret = %d\n", ret);
+       if (ret == 1) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("pkgid: orxxxxx\n");
+       printf("privilege: http://tizen.org/privilege/call\n");
+       printf("is not privacy whitelist\n");
+       ret = privilege_db_manager_is_privacy_white_list("orxxxxx", "http://tizen.org/privilege/call");
+       printf("ret = %d\n", ret);
+#ifdef ENABLE_ASKUSER
+       if (ret == 0) {
+#else
+       if (ret == 1) {
+#endif
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+}
+
+void __test_privilege_db_manager_is_disabled_privilege()
+{
+       int ret = 0;
+       __print_line();
+       printf("uid = 5001, privilege: http://tizen.org/privilege/xxxxx\n");
+       printf("is not disabled\n");
+       ret = privilege_db_manager_is_disabled_privilege(5001, "http://tizen.org/privilege/xxxxx");
+       printf("ret = %d\n", ret);
+       if (ret == 0) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("uid = 0, privilege: http://tizen.org/privilege/yyyyy\n");
+       printf("is disabled\n");
+       ret = privilege_db_manager_is_disabled_privilege(0, "http://tizen.org/privilege/yyyyy");
+       printf("ret = %d\n", ret);
+       if (ret == 1) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+       __print_line();
+}
+
+void __test_privilege_db_manager_get_privacy_id()
+{
+       int ret = 0;
+       int privacy_id = 100;
+
+       __print_line();
+       ret = privilege_db_manager_get_privacy_id("http://tizen.org/privacy/account", &privacy_id);
+       printf("privacy : http://tizen.org/privacy/account, privacy_id = %d\n", privacy_id);
+       if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && privacy_id == 0) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+       __print_line();
+       ret = privilege_db_manager_get_privacy_id("http://tizen.org/privacy/location", &privacy_id);
+       printf("privacy : http://tizen.org/privacy/location, privacy_id = %d\n", privacy_id);
+       if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && privacy_id == 6) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+       __print_line();
+}
+
+void __test_privilege_db_manager_is_user_settable()
+{
+       int ret = 0;
+
+       __print_line();
+       printf("pkgid: org.tizen.gps-syspopup\n");
+       printf("privilege: http://tizen.org/privacy/calendar\n");
+       printf("is not user-settable\n");
+       ret = privilege_db_manager_is_user_settable("org.tizen.gps-syspopup", "http://tizen.org/privacy/calendar");
+       printf("ret = %d\n", ret);
+       if (ret == 0) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("pkgid: org.tizen.gps-syspopup\n");
+       printf("privilege: http://tizen.org/privacy/location\n");
+       printf("is user-settable\n");
+       ret = privilege_db_manager_is_user_settable("org.tizen.gps-syspopup", "http://tizen.org/privacy/location");
+       printf("ret = %d\n", ret);
+       if (ret == 1) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+
+       __print_line();
+       printf("pkgid: org.tizen.xxxxxxx\n");
+       printf("privilege: http://tizen.org/privacy/location\n");
+       printf("is user-settable\n");
+       ret = privilege_db_manager_is_user_settable("org.tizen.xxxxxxx", "http://tizen.org/privacy/location");
+       printf("ret = %d\n", ret);
+       if (ret == 1) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("pkgid: org.tizen.xxxxxxx\n");
+       printf("privilege: http://tizen.org/privacy/xxxxx\n");
+       printf("is user-settable\n");
+       ret = privilege_db_manager_is_user_settable("org.tizen.xxxxxxx", "http://tizen.org/privacy/xxxxx");
+       printf("ret = %d\n", ret);
+       if (ret == PRIVILEGE_DB_NO_EXIST_RESULT) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail\n");
+               __color_to_origin();
+       }
+
+       __print_line();
+}
+
 int main()
 {
        __tcinfo(function, "privilege_db_manager_get_privilege_list");
@@ -364,6 +675,21 @@ int main()
        __tcinfo(function, "privilege_db_manager_get_privilege_description");
        __test_privilege_db_manager_get_privilege_description();
 
+       __tcinfo(function, "privilege_db_manager_get_privacy_id_by_privilege, privilege_db_manager_get_privacy_by_privilege");
+       __test_privilege_db_manager_get_privacy_by_privilege();
+
+       __tcinfo(function, "privilege_db_manager_is_privacy_white_list");
+       __test_privilege_db_manager_is_privacy_white_list();
+
+       __tcinfo(function, "privilege_db_manager_is_disabled_privilege");
+       __test_privilege_db_manager_is_disabled_privilege();
+
+       __tcinfo(function, "privilege_db_manager_get_privacy_id");
+       __test_privilege_db_manager_get_privacy_id();
+
+       __tcinfo(function, "privilege_db_manager_is_user_settable");
+       __test_privilege_db_manager_is_user_settable();
+
        __color_to_green();
        printf("Test Complete\n");
        printf("success : %d, ", success_cnt);
index 6e46588..ee0b618 100755 (executable)
@@ -494,10 +494,9 @@ static void __test_privilege_info_get_privilege_group_display_name()
        free(group_name);
 
 }
-
+#ifdef ENABLE_ASKUSER
 static void __test_privilege_info_is_privacy2()
 {
-#ifndef PROFILE_TYPE_TV
        int ret = 0;
 
        printf("PRELOADED + NOT LOCATION PRIVACY -> ALLOW (not privacy)\n");
@@ -605,10 +604,199 @@ static void __test_privilege_info_is_privacy2()
                printf("Test FAILED. ret = %d\n", ret);
        }
        __print_line();
+}
+#endif
+
+static char* __get_privilege_type_string(privilege_manager_privilege_type_e type)
+{
+       switch (type) {
+       case PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL:
+               return "PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL";
+       case PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY:
+               return "PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY";
+       case PRIVILEGE_MANAGER_PRIVILEGE_TYPE_BLACKLIST:
+               return "PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY";
+       default:
+               return "None of privilege_manager_privilege_type_e";
+       }
+}
+static void __test_privilege_info_get_privilege_type()
+{
+       int ret = 0;
+       privilege_manager_privilege_type_e type;
+
+       __print_line();
+       printf("uid = 5001\n");
+       printf("pkgid = org.tizen.contacts\norg.tizen.contacts");
+       printf("privilege = http://tizen.org/privilege/internet\n");
+       printf("expected type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL\n");
+       ret = privilege_info_get_privilege_type(5001, "org.tizen.contacts", "http://tizen.org/privilege/internet", &type);
+       if (ret == PRVMGR_ERR_NONE && type == PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail. ret = %s, type = %s\n", __get_result_string('m', ret), __get_privilege_type_string(type));
+               __color_to_origin();
+       }
 
+       __print_line();
+       printf("uid = 5001\n");
+       printf("pkgid = org.tizen.contacts\n");
+       printf("privilege = http://tizen.org/privilege/location\n");
+       ret = privilege_info_get_privilege_type(5001, "org.tizen.contacts", "http://tizen.org/privilege/location", &type);
+#ifdef DISABLE_ASKUSER
+       printf("expected type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL\n");
+       if (ret == PRVMGR_ERR_NONE && type == PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL) {
+#else
+       printf("expected type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY\n");
+       if (ret == PRVMGR_ERR_NONE && type == PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY) {
 #endif
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail. ret = %s, type = %s\n", __get_result_string('m', ret), __get_privilege_type_string(type));
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("uid = 0\n");
+       printf("pkgid = org.tizen.testtest\n");
+       printf("privilege = http://tizen.org/privilege/yyyyy\n");
+       ret = privilege_info_get_privilege_type(0, "org.tizen.testtest", "http://tizen.org/privilege/yyyyy", &type);
+       printf("expected type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_BLACKLIST\n");
+       if (ret == PRVMGR_ERR_NONE && type == PRIVILEGE_MANAGER_PRIVILEGE_TYPE_BLACKLIST) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail. ret = %s, type = %s\n", __get_result_string('m', ret), __get_privilege_type_string(type));
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("uid = 5001\n");
+       printf("pkgid = NULL\n");
+       printf("privilege = \n");
+       ret = privilege_info_get_privilege_type(5001, NULL, NULL, &type);
+       printf("expected ret = PRVMGR_ERR_INVALID_PARAMETER\n");
+       if (ret == PRVMGR_ERR_INVALID_PARAMETER) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail. ret = %s, type = %s\n", __get_result_string('m', ret), __get_privilege_type_string(type));
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("uid = 5001\n");
+       printf("pkgid = org.tizen.testtest\n");
+       printf("privilege = http://tizen.org/privilege/yyyyy\n");
+       ret = privilege_info_get_privilege_type(5001, "org.tizen.testtest", "http://tizen.org/privilege/yyyyy", &type);
+       printf("expected type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL\n");
+       if (ret == PRVMGR_ERR_NONE && type == PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail. ret = %s, type = %s\n", __get_result_string('m', ret), __get_privilege_type_string(type));
+               __color_to_origin();
+       }
+       __print_line();
 }
 
+void __test_privilege_info_is_user_settable()
+{
+       int ret = 0;
+
+       __print_line();
+       printf("pkgid = ise-default\n");
+       printf("privacy = http://tizen.org/privacy/location\n");
+       ret = privilege_info_is_user_settable("ise-default", "http://tizen.org/privacy/location");
+       printf("is user settable\n");
+       if (ret == 1) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail. ret = %d", ret);
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("pkgid = ise-default\n");
+       printf("privacy = http://tizen.org/privacy/camera\n");
+       ret = privilege_info_is_user_settable("ise-default", "http://tizen.org/privacy/camera");
+       printf("is not user settable\n");
+       if (ret == 0) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail. ret = %d", ret);
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("pkgid = org.tizen.testtest\n");
+       printf("privacy = http://tizen.org/privacy/userhistory\n");
+       ret = privilege_info_is_user_settable("org.tizen.testtest", "http://tizen.org/privacy/userhistory");
+       printf("is user settable\n");
+       if (ret == 1) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail. ret = %d", ret);
+               __color_to_origin();
+       }
+
+       __print_line();
+       printf("pkgid = org.tizen.testtest\n");
+       printf("privacy = http://tizen.org/privacy/xxxxx\n");
+       ret = privilege_info_is_user_settable("org.tizen.testtest", "http://tizen.org/privacy/xxxxx");
+       printf("error must be occurred\n");
+       if (ret == -1) {
+               success_cnt++;
+               __color_to_green();
+               printf("success\n");
+               __color_to_origin();
+       } else {
+               fail_cnt++;
+               __color_to_red();
+               printf("fail. ret = %d", ret);
+               __color_to_origin();
+       }
+       __print_line();
+}
+
+
 int main()
 {
        __tcinfo(function, "privilege_info_is_privacy");
@@ -641,8 +829,16 @@ int main()
        __tcinfo(function, "privilege_info_get_privacy_display");
        __test_privilege_info_get_privacy_display();
 
+#ifdef ENABLE_ASKUSER
        __tcinfo(function, "privilege_info_is_privacy2");
        __test_privilege_info_is_privacy2();
+#endif
+
+       __tcinfo(function, "privilege_info_get_privilege_type");
+       __test_privilege_info_get_privilege_type();
+
+       __tcinfo(function, "privilege_info_is_user_settable");
+       __test_privilege_info_is_user_settable();
 
        __color_to_green();
        printf("Test Complete\n");