void free_privilege_level_info_list(GList* list);
/**
+ * @brief Free GList of privilege_privacy_info_s* allocated by privilege_db_manager_get_privacy_filtered_privilege_info_list()
+ * @param [in] list The GList allocated by privilege_db_manager_get_privacy_filtered_privilege_info_list()
+ */
+void free_privilege_privacy_info_list(GList *list);
+
+/**
+ * @brief Free privilege_privacy_info_s
+ * @param [in] info The privilege_privacy_info_s
+ */
+void free_privilege_privacy_info(privilege_privacy_info_s* info);
+
+/**
* @brief Free GList allocated by privilege_db_manager APIs
* @param [in] list The GList allocated by privilege_db_manager APIs
*/
* @brief See if the given package id is privacy whitelisted for the given privilege.
* @remarks @a privilege must be privacy related
* @param [in] pkgid The package ID
- * @param [in] privilege The privilege
+ * @param [in] privacy_id The privacy id
* @return 1 on true(is whitelisted), 0 on false and negative value on error.
* @retval #PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY Out of memory.
* @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
* @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
* @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
*/
-int privilege_db_manager_is_privacy_white_list(const char* pkgid, const char* privilege);
+int privilege_db_manager_is_privacy_white_list(const char* pkgid, int privacy_id);
/**
* @brief See if the given package id is user-settable for the given privacy.
* @param [in] pkgid_name The privacy name
- * @param [in] privacy_name The privacy name
+ * @param [in] privacy_id The privacy ID
* @return 1 on true(is user-settable), 0 on false and negative value on error.
* @retval #PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY Out of memory.
* @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
* @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
* @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
*/
-int privilege_db_manager_is_user_settable(const char* pkgid, const char* privacy_name);
+int privilege_db_manager_is_user_settable(const char* pkgid, int privacy_id);
/**
* @brief Get all privacy list
* @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
* @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
*/
-int privilege_db_manager_get_privacy_id(const char* privacy, int *privacy_id);
+int privilege_db_manager_get_privacy_id(const char* privacy_name, int *privacy_id);
/**
* @brief See if the given privilege is in the mdm blacklist for the given uid.
* @remarks @a privilege_list must be released by you.
* @param [in] uid The uid
* @param [in] pkgid The package ID
- * @param [in] package_type The package type of the given privilege list
* @param [in] api_version The api-version of the package
- * @param [in] privilege_list The privacy privilege list
+ * @param [in] privilege_list The user-settable privacy privilege list of the package
* @return 0 on success, otherwise a negative error value.
* @retval #PRIVILEGE_DB_MANAGER_ERR_NONE Successful.
* @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
* @retval #PRIVILEGE_DB_MANAGER_ERR_DB_FULL_FAIL Write could not complete due to the disk is full.
* @retval #PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL DB update failed.
*/
-int privilege_db_manager_set_package_privacy_privilege_info(const uid_t uid, const char* pkgid, privilege_manager_package_type_e package_type, const char* api_version, GList* privilege_list);
+int privilege_db_manager_set_package_privacy_privilege_info(const uid_t uid, const char* pkgid, const char* api_version, GList* privilege_list);
/**
* @brief Delete all privacy privilege info of the given application package.
*/
int privilege_db_manager_get_privilege_list_by_pkgid_and_privacy(const uid_t uid, const char* pkgid, const char* privacy, GList** privilege_list);
+/**
+ * @brief Get privilege privacy info list filtered by privacy
+ * @remarks @a privilage_privacy_info_list must released by using free_privilege_privacy_info_list().
+ * @remarks If you want to free an element of @a privilege_privacy_info_list then use free_privilege_privacy_info().
+ * @param [in] privilege_list The privilege list to filter privacy
+ * @param [in] privacy_name The privacy name to filter privilege list. If the privacy name is NULL then just filter privacy privileges.
+ * @param [out] privilege_privacy_info_list The filtered privileges and their privacy info
+ */
+int privilege_db_manager_get_privacy_filtered_privilege_info_list(GList *privilege_list, const char* privacy_name, GList **privilege_privacy_info_list);
+
#ifdef __cplusplus
}
#endif
int privilege_level_id;
} privilege_level_info_s;
+typedef struct {
+ char* privilege_name;
+ char* privacy_name;
+} privilege_privacy_info_s;
+
/**
* @brief Enumerations of privilege DB type
*/
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_INVALID_PARAMETER = -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,
break;
default:
_LOGE("Undefined db initialize mode!");
- return PRIVILEGE_DB_MANAGER_ERR_INVALID_TYPE;
+ return PRIVILEGE_DB_MANAGER_ERR_INVALID_PARAMETER;
}
if (access(db_path, F_OK) == -1 && errno == ENOENT)
default:
_LOGE("Undefined type for privilege_db_manager_is()");
__finalize_db(db, stmt, sql);
- return PRIVILEGE_DB_MANAGER_ERR_INVALID_TYPE;
+ return PRIVILEGE_DB_MANAGER_ERR_INVALID_PARAMETER;
}
TRY_PREPARE_STMT(db, sql, &stmt);
return ret;
}
-// TODO: change it to get package's privacy option only.
-int privilege_db_manager_is_privacy_white_list(const char* pkgid, const char* privilege)
+// TODO: Change it to use cert_level to check privacy whitelist
+int privilege_db_manager_is_privacy_white_list(const char* pkgid, int privacy_id)
{
sqlite3 *db = NULL;
sqlite3_stmt *stmt = NULL;
- int privacy_id = 0;
- int 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");
-
TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
char *sql = sqlite3_mprintf("select privacy_option from privacy_whitelist where pkg_id=%Q", pkgid);
TRY_PREPARE_STMT(db, sql, &stmt);
- ret = 0;
+ int ret = 0;
while (sqlite3_step(stmt) == SQLITE_ROW) {
char* privacy_option = (char *)sqlite3_column_text(stmt, 0);
if (privacy_option[privacy_id] == '1') {
return ret;
}
-// TODO: make it to get package's privacy option and settable info only.
-int privilege_db_manager_is_user_settable(const char* pkgid, const char* privacy_name)
+int privilege_db_manager_is_user_settable(const char* pkgid, int privacy_id)
{
+ TryReturn(privacy_id >= 0, , PRIVILEGE_DB_MANAGER_ERR_INVALID_PARAMETER, "invalid privacy_id = %d", privacy_id);
sqlite3 *db = NULL;
sqlite3_stmt *stmt = NULL;
- int privacy_id = 0;
- int ret = privilege_db_manager_get_privacy_id(privacy_name, &privacy_id);
- TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE, , ret, "[PRIVILEGE_DB_MANAGER] privilege_db_manager_get_privacy_id failed");
-
TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
char *sql = sqlite3_mprintf("select privacy_option, settable from privacy_whitelist where pkg_id=%Q", pkgid);
TRY_PREPARE_STMT(db, sql, &stmt);
- ret = 1;
+ int ret = 1;
while (sqlite3_step(stmt) == SQLITE_ROW) {
char* privacy_option = (char *)sqlite3_column_text(stmt, 0);
+ if (privacy_id >= (int)strlen(privacy_option)) {
+ ret = PRIVILEGE_DB_MANAGER_ERR_INVALID_PARAMETER;
+ _LOGE("invalid privacy_id = %d", privacy_id);
+ break;
+ }
int settable_flag = (int)sqlite3_column_int(stmt, 1);
if (privacy_option[privacy_id] == '1' && settable_flag == 1) {
break;
return ret;
}
-int privilege_db_manager_get_privacy_id(const char* privacy, int *privacy_id)
+int privilege_db_manager_get_privacy_id(const char* privacy_name, int *privacy_id)
{
sqlite3 *db = NULL;
sqlite3_stmt *stmt = NULL;
TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
- char *sql = sqlite3_mprintf("select privacy_id from privacy_info where privacy_name=%Q", privacy);
+ char *sql = sqlite3_mprintf("select privacy_id from privacy_info where privacy_name=%Q", privacy_name);
TRY_PREPARE_STMT(db, sql, &stmt);
*privacy_id = (int)sqlite3_column_int(stmt, 0);
ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
} else {
- _LOGD("privacy %s not exist", privacy);
+ _LOGD("privacy %s not exist", privacy_name);
ret = PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
}
TRY_FINISH_TRANSACTION(ret, db, stmt, sql);
}
-//TODO: Do insert only. DO NOT determine whether to insert or not in here.
-int privilege_db_manager_set_package_privacy_privilege_info(const uid_t uid, const char* pkgid, privilege_manager_package_type_e package_type, const char* api_version, GList* privilege_list)
+int privilege_db_manager_set_package_privacy_privilege_info(const uid_t uid, const char* pkgid, const char* api_version, GList* privilege_list)
{
sqlite3 *db = NULL;
sqlite3_stmt *stmt = NULL;
TRY_INIT_DB(PRIVILEGE_DB_TYPE_PRIVACY_RW, &db);
- GList* mapped_privilege_list = NULL;
- ret = privilege_db_manager_get_mapped_privilege_list(api_version, package_type, privilege_list, &mapped_privilege_list);
- TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE && mapped_privilege_list != NULL, __finalize_db(db, stmt, NULL), PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL, "[DB_FAIL] privilege_db_manager_get_mapped_privilege_list failed");
-
TRY_BEGIN_TRANSACTION(db);
- GList *l = NULL;
- for (l = mapped_privilege_list; l != NULL; l = l->next) {
- char *privilege_name = (char *)l->data;
- if (strstr(privilege_name, "/internal/") == NULL) {
- char * privacy_name = NULL;
- ret = privilege_db_manager_get_privacy_by_privilege(privilege_name, &privacy_name);
- if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && strstr(privacy_name, "N/A") == NULL && privilege_db_manager_is_user_settable(pkgid, privacy_name) == 1) {
- sql = sqlite3_mprintf("insert or ignore into privacy_package (uid, pkg_id, privacy_name, privilege_name, api_version, is_critical) values (%d, %Q, %Q, %Q, %Q, 0)", uid, pkgid, privacy_name, privilege_name, api_version);
-
- if (__prepare_stmt(db, sql, &stmt) != PRIVILEGE_DB_MANAGER_ERR_NONE) {
- ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
- break;
- }
+ for (GList *l = privilege_list; l != NULL; l = l->next) {
+ privilege_privacy_info_s* p = (privilege_privacy_info_s*)l->data;
+ sql = sqlite3_mprintf("insert or ignore into privacy_package (uid, pkg_id, privacy_name, privilege_name, api_version, is_critical) values (%d, %Q, %Q, %Q, %Q, 0)", uid, pkgid, p->privacy_name, p->privilege_name, api_version);
- if (sqlite3_step(stmt) != SQLITE_DONE) {
- _LOGE("sqlite3_step() failed. [%s]", sqlite3_errmsg(db));
- ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
- break;
- }
+ if (__prepare_stmt(db, sql, &stmt) != PRIVILEGE_DB_MANAGER_ERR_NONE) {
+ ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+ break;
+ }
- SAFE_SQLITE_FREE(sql);
- SAFE_SQLITE_FINALIZE(stmt);
- }
- SAFE_FREE(privacy_name);
+ if (sqlite3_step(stmt) != SQLITE_DONE) {
+ _LOGE("sqlite3_step() failed. [%s]", sqlite3_errmsg(db));
+ ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+ break;
}
+
+ SAFE_SQLITE_FREE(sql);
+ SAFE_SQLITE_FINALIZE(stmt);
}
- SAFE_G_LIST_FREE_FULL(mapped_privilege_list, free);
TRY_FINISH_TRANSACTION(ret, db, stmt, sql);
}
return PRIVILEGE_DB_MANAGER_ERR_NONE;
}
+
+void free_privilege_privacy_info(privilege_privacy_info_s* p)
+{
+ SAFE_FREE(p->privilege_name);
+ SAFE_FREE(p->privacy_name);
+ SAFE_FREE(p);
+}
+
+static void __free_privilege_privacy_info_list(gpointer privilege_privacy_info_list)
+{
+ free_privilege_privacy_info((privilege_privacy_info_s*)privilege_privacy_info_list);
+}
+
+void free_privilege_privacy_info_list(GList *info_list)
+{
+ SAFE_G_LIST_FREE_FULL(info_list, __free_privilege_privacy_info_list);
+}
+
+static privilege_privacy_info_s* __new_privilege_privacy_info(const char* privilege_name, const char* privacy_name)
+{
+ privilege_privacy_info_s *p = (privilege_privacy_info_s*)malloc(sizeof(privilege_privacy_info_s));
+ TryReturn(p != NULL, , NULL, "malloc() of privilege_privacy_info_s failed.");
+
+ p->privilege_name = g_strdup(privilege_name);
+ p->privacy_name = g_strdup(privacy_name);
+
+ return p;
+}
+
+int privilege_db_manager_get_privacy_filtered_privilege_info_list(GList *privilege_list, const char* privacy_name, GList **privilege_privacy_info_list)
+{
+ TryReturn(privilege_list != NULL, , PRIVILEGE_DB_MANAGER_ERR_NONE, "The given privilege_list is empty");
+
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
+
+ char* privilege_list_str = NULL;
+ TryReturn(__make_privilege_list_str(privilege_list, &privilege_list_str) == 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 (privacy_name != NULL)
+ sql = sqlite3_mprintf("select distinct privilege_name, privacy_name from privilege_info where privilege_name in (%s) and is_privacy='1' and privacy_name=%Q", privilege_list_str, privacy_name);
+ else
+ sql = sqlite3_mprintf("select distinct privilege_name, privacy_name from privilege_info where privilege_name in (%s) and is_privacy='1'", privilege_list_str);
+
+ SAFE_SQLITE_FREE(privilege_list_str);
+
+ TRY_PREPARE_STMT(db, sql, &stmt);
+
+ GList *temp_privilege_list = NULL;
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
+ privilege_privacy_info_s *p = __new_privilege_privacy_info((const char*)sqlite3_column_text(stmt, 0), (const char*)sqlite3_column_text(stmt, 1));
+ TryReturn(p != NULL, free_privilege_privacy_info_list(temp_privilege_list); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] __new_privacy_privilege_info() failed.");
+ temp_privilege_list = g_list_append(temp_privilege_list, p);
+ }
+
+ __finalize_db(db, stmt, sql);
+
+ *privilege_privacy_info_list = temp_privilege_list;
+ return PRIVILEGE_DB_MANAGER_ERR_NONE;
+}
return 0;
}
+/*
+ * @brief Check whether the given package is whitelisted for the given privacy privilege.
+ * @remarks @a privilege must be a privacy privilege
+ * @return 1 on privacy whitelisted case else 0 and negative value for error.
+ */
+//TODO: Add cert_level as a parameter
+static int __is_privacy_whitelisted(const char* pkgid, const char* privilege)
+{
+ TryReturn(pkgid != NULL && privilege != NULL, , -1, "[PRVMGR_ERR_INVALID_PARAMETER] pkgid and privilege shouldn't be NULL.");
+
+ int privacy_id = -1;
+ int ret = privilege_db_manager_get_privacy_id_by_privilege(privilege, &privacy_id);
+ TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE && privacy_id != -1, , -1, "privilege_db_manager_get_privacy_id_by_privilege() failed. pkgid = %s, privilege = %s", pkgid, privilege);
+
+ return privilege_db_manager_is_privacy_white_list(pkgid, privacy_id);
+}
+
int privilege_info_get_privilege_type(uid_t uid, const char* pkgid, privilege_manager_package_type_e package_type, privilege_manager_visibility_e cert_level, 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;
ret = privilege_info_is_privacy(privilege);
if (ret == 1) {
- ret = privilege_db_manager_is_privacy_white_list(pkgid, privilege);
+ ret = __is_privacy_whitelisted(pkgid, privilege);
if (ret == 1) {
*type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL;
ret = PRVMGR_ERR_NONE;
return ret;
}
-int privilege_info_is_user_settable(const char* pkgid, const char* privacy)
+int privilege_info_is_user_settable(const char* pkgid, const char* privacy_name)
{
- 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);
+ TryReturn(pkgid != NULL && privacy_name != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] pkgid and privacy_name shoudln't be NULL");
+
+ int privacy_id = -1;
+ int ret = privilege_db_manager_get_privacy_id(privacy_name, &privacy_id);
+ TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE && privacy_id != -1, , -1, "[PRVMGR_ERR_INTERNAL_ERROR] privilege_db_manager_get_privacy_id() failed. privacy_name = %s, privacy_id = %d", privacy_name, privacy_id);
+
+ ret = privilege_db_manager_is_user_settable(pkgid, privacy_id);
if (ret == 1)
return 1;
else if (ret == 0)
return 0;
if (ret == PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT)
- LOGE("%s is invalid privacy name", privacy);
+ LOGE("%s is invalid privacy name", privacy_name);
else
LOGE("ret = %d", ret);
return returnValue; \
}
+static int __get_user_settable_privilege_privacy_info_list(const char* pkgid, privilege_manager_package_type_e pkg_type, const char* api_version, GList *privilege_list, GList **privilege_privacy_info_list)
+{
+ GList *mapped_privilege_list = NULL;
+ int ret = privilege_db_manager_get_mapped_privilege_list(api_version, pkg_type, privilege_list, &mapped_privilege_list);
+ TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE && mapped_privilege_list != NULL, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] privilege_db_manager_get_mapped_privilege_list() failed. ret = %d", ret);
+
+ ret = privilege_db_manager_get_privacy_filtered_privilege_info_list(mapped_privilege_list, NULL, privilege_privacy_info_list);
+ privilege_db_manager_list_free(mapped_privilege_list);
+ TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE, ,PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] privilege_db_manager_get_privacy_filtered_privilege_info_list() failed. ret = %d", ret);
+
+ GList *ll = NULL;
+ for (GList *l = *privilege_privacy_info_list; l != NULL; l = ll, ret = PRVMGR_ERR_NONE) {
+ ll = l->next;
+ int privacy_id = -1;
+ const char* privilege = (const char*)((privilege_privacy_info_s*)l->data)->privilege_name;
+ ret = privilege_db_manager_get_privacy_id_by_privilege(privilege, &privacy_id);
+ if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && privacy_id != -1) {
+ ret = privilege_db_manager_is_user_settable(pkgid, privacy_id);
+ if (ret == 1) {
+ continue;
+ } else if (ret == 0) {
+ privilege_privacy_info_s* tmp = l->data;
+ *privilege_privacy_info_list = g_list_remove(*privilege_privacy_info_list, tmp);
+ free_privilege_privacy_info(tmp);
+ } else {
+ LOGE("privilege_db_manager_is_user_settable(%s, %d) failed. ret = %d", pkgid, privacy_id, ret);
+ ret = PRVMGR_ERR_INTERNAL_ERROR;
+ break;
+ }
+ } else {
+ LOGE("privilege_db_manager_get_privacy_id_by_privilege() failed. privilege = %s. ret = %d", privilege, ret);
+ ret = PRVMGR_ERR_INTERNAL_ERROR;
+ break;
+ }
+ }
+ return ret;
+}
+
int privilege_package_info_set_privacy_privilege(const uid_t uid, const char* pkgid, privilege_manager_package_type_e pkg_type, const char* api_version, GList* privilege_list)
{
if (DISABLE_ASKUSER)
return PRVMGR_ERR_NONE;
-
TryReturn(pkgid != NULL && api_version != NULL && privilege_list != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] pkgid, api_version, and privilege_list must not be NULL.");
- int ret = privilege_db_manager_set_package_privacy_privilege_info(uid, pkgid, pkg_type, api_version, privilege_list);
+
+ GList *privilege_privacy_info_list = NULL;
+ int ret = __get_user_settable_privilege_privacy_info_list(pkgid, pkg_type, api_version, privilege_list, &privilege_privacy_info_list);
+ TryReturn(ret == PRVMGR_ERR_NONE, , PRVMGR_ERR_INTERNAL_ERROR, "__get_user_settable_privilege_privacy_info_list() failed. ret = %d", ret);
+
+ if (privilege_privacy_info_list == NULL) {
+ LOGD("%s have no user-settable privacy privilege", pkgid);
+ return PRVMGR_ERR_NONE;
+ }
+
+ ret = privilege_db_manager_set_package_privacy_privilege_info(uid, pkgid, api_version, privilege_privacy_info_list);
+ free_privilege_privacy_info_list(privilege_privacy_info_list);
+
if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE) {
LOGE("privilege_db_manager_set_package_privacy_privilege_info failed. ret = %d", ret);
return PRVMGR_ERR_INTERNAL_ERROR;
return "PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY";
else if (ret == PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY)
return "PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY";
- else if (ret == PRIVILEGE_DB_MANAGER_ERR_INVALID_TYPE)
- return "PRIVILEGE_DB_MANAGER_ERR_INVALID_TYPE";
+ else if (ret == PRIVILEGE_DB_MANAGER_ERR_INVALID_PARAMETER)
+ return "PRIVILEGE_DB_MANAGER_ERR_INVALID_PARAMETER";
else if (ret == PRIVILEGE_DB_MANAGER_ERR_DB_BUSY_FAIL)
return "PRIVILEGE_DB_MANAGER_ERR_DB_BUSY_FAIL";
else if (ret == PRIVILEGE_DB_MANAGER_ERR_DB_CONSTRAINT_FAIL)
__print_line();
printf("pkgid: ise-default\n");
- printf("privilege: http://tizen.org/privilege/call\n");
+ printf("privilege: http://tizen.org/privilege/call => privacy ID: 3\n");
printf("is privacy whitelist\n");
- ret = privilege_db_manager_is_privacy_white_list("ise-default", "http://tizen.org/privilege/call");
+ ret = privilege_db_manager_is_privacy_white_list("ise-default", 3);
printf("ret = %d\n", ret);
if ((ENABLE_ASKUSER && ret == 1) || (DISABLE_ASKUSER && ret == PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT)) {
success_cnt++;
__print_line();
printf("pkgid: ise-default\n");
- printf("privilege: http://tizen.org/privilege/location\n");
+ printf("privilege: http://tizen.org/privilege/location => privacy ID: 7\n");
printf("is not privacy whitelist\n");
- ret = privilege_db_manager_is_privacy_white_list("ise-default", "http://tizen.org/privilege/location");
+ ret = privilege_db_manager_is_privacy_white_list("ise-default", 7);
printf("ret = %d\n", ret);
if ((ENABLE_ASKUSER && ret == 0) || (DISABLE_ASKUSER && ret == PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT)) {
success_cnt++;
__print_line();
printf("pkgid: ise-default\n");
- printf("privilege: http://tizen.org/privilege/calendar.read\n");
+ printf("privilege: http://tizen.org/privilege/calendar.read => privacy ID: 2\n");
printf("is privacy whitelist\n");
- ret = privilege_db_manager_is_privacy_white_list("ise-default", "http://tizen.org/privilege/calendar.read");
+ ret = privilege_db_manager_is_privacy_white_list("ise-default", 2);
printf("ret = %d\n", ret);
if ((ENABLE_ASKUSER && ret == 1) || (DISABLE_ASKUSER && ret == PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT)) {
success_cnt++;
__print_line();
printf("pkgid: orxxxxx\n");
- printf("privilege: http://tizen.org/privilege/call\n");
+ printf("privilege: http://tizen.org/privilege/call => privacy ID: 3\n");
printf("is not privacy whitelist\n");
- ret = privilege_db_manager_is_privacy_white_list("orxxxxx", "http://tizen.org/privilege/call");
+ ret = privilege_db_manager_is_privacy_white_list("orxxxxx", 3);
printf("ret = %d\n", ret);
if ((ENABLE_ASKUSER && ret == 0) || (DISABLE_ASKUSER && ret == PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT)) {
success_cnt++;
__print_line();
printf("pkgid: ise-default\n");
- printf("privilege: http://tizen.org/privacy/calendar\n");
+ printf("privilege: http://tizen.org/privacy/calendar => privacy ID: 2\n");
printf("is not user-settable\n");
- ret = privilege_db_manager_is_user_settable("ise-default", "http://tizen.org/privacy/calendar");
+ ret = privilege_db_manager_is_user_settable("ise-default", 2);
printf("ret = %d\n", ret);
if ((ENABLE_ASKUSER && ret == 0) || (DISABLE_ASKUSER && ret == 1)) {
success_cnt++;
__print_line();
printf("pkgid: ise-default\n");
- printf("privilege: http://tizen.org/privacy/location\n");
+ printf("privilege: http://tizen.org/privacy/location => privacy ID: 7\n");
printf("is user-settable\n");
- ret = privilege_db_manager_is_user_settable("ise-default", "http://tizen.org/privacy/location");
+ ret = privilege_db_manager_is_user_settable("ise-default", 7);
printf("ret = %d\n", ret);
if (ret == 1) {
success_cnt++;
__print_line();
printf("pkgid: org.tizen.xxxxxxx\n");
- printf("privilege: http://tizen.org/privacy/location\n");
+ printf("privilege: http://tizen.org/privacy/location => privacy ID: 7\n");
printf("is user-settable\n");
- ret = privilege_db_manager_is_user_settable("org.tizen.xxxxxxx", "http://tizen.org/privacy/location");
+ ret = privilege_db_manager_is_user_settable("org.tizen.xxxxxxx", 7);
printf("ret = %d\n", ret);
if (ret == 1) {
success_cnt++;
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_MANAGER_ERR_NO_EXIST_RESULT) {
+ ret = privilege_db_manager_is_user_settable("org.tizen.xxxxxxx", -1);
+ if (ret < 0)
+ printf("ret = %s\n", __get_result_string('d', ret));
+ else
+ printf("ret = %d\n", ret);
+ if (ret == PRIVILEGE_DB_MANAGER_ERR_INVALID_PARAMETER) {
success_cnt++;
printf_green("success\n");
} else {