Do not return privilege type privacy for web app 99/156999/2 accepted/tizen/4.0/unified/20171023.120713 submit/tizen_4.0/20171023.080805
authorYunjin Lee <yunjin-.lee@samsung.com>
Mon, 23 Oct 2017 06:00:38 +0000 (15:00 +0900)
committerYunjin Lee <yunjin-.lee@samsung.com>
Mon, 23 Oct 2017 06:12:05 +0000 (06:12 +0000)
- From 4.0, developer should use privacy-privilege-manager APIs to request privacy privileges. Currently, ppm APIs are supported for native and C# applications but no web device APIs, yet. Hence, allow web applications to get privacy privileges without privacy request popups.

Change-Id: I33941aaf684a1a72d0b0c46351f10edc9bc29f01
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
capi/res/dbspace/privacy_db_generator.sh
capi/src/privilege_db_manager.c

index b6a6099..df40154 100755 (executable)
@@ -7,5 +7,5 @@ echo "Creating $DB_NAME ..."
 touch $DB_NAME
 
 echo "Creating PRIVACY_PACKAGE table ..."
-sqlite3 $DB_NAME "CREATE TABLE PRIVACY_PACKAGE (PKG_ID TEXT not null, UID NUMERIC not null, PRIVACY_NAME TEXT not null, PRIVILEGE_NAME TEXT not null, IS_CRITICAL NUMERIC not null, API_VERSION TEXT not null, UNIQUE(PKG_ID, UID, PRIVILEGE_NAME));"
+sqlite3 $DB_NAME "CREATE TABLE PRIVACY_PACKAGE (PKG_TYPE NUMERIC, PKG_ID TEXT not null, UID NUMERIC not null, PRIVACY_NAME TEXT not null, PRIVILEGE_NAME TEXT not null, IS_CRITICAL NUMERIC not null, API_VERSION TEXT not null, UNIQUE(PKG_ID, UID, PRIVILEGE_NAME));"
 
index 0179382..5feb1bc 100755 (executable)
@@ -901,7 +901,7 @@ int privilege_db_manager_set_package_critical_privilege_info(const uid_t uid, co
                        char * privacy_name = NULL;
                        ret = privilege_db_manager_get_privacy_by_privilege(privilege_name, &privacy_name);
                        if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && privacy_name != NULL && strstr(privacy_name, "N/A") == NULL) {
-                               sql = sqlite3_mprintf("insert or replace into privacy_package (uid, pkg_id, privacy_name, privilege_name, api_version, is_critical) values (%d, %Q, %Q, %Q, %Q, 1)", uid, pkgid, privacy_name, privilege_name, api_version);
+                               sql = sqlite3_mprintf("insert or replace into privacy_package (uid, pkg_type, pkg_id, privacy_name, privilege_name, api_version, is_critical) values (%d, %d, %Q, %Q, %Q, %Q, 1)", uid, package_type, pkgid, privacy_name, privilege_name, api_version);
                                TryReturn(sql != NULL, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); g_list_free_full(mapped_privilege_list, free); free(privacy_name); __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, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); g_list_free_full(mapped_privilege_list, free); free(privacy_name); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] fail to prepare database: %s", sqlite3_errmsg(db));
@@ -947,7 +947,7 @@ int privilege_db_manager_set_package_privacy_privilege_info(const uid_t uid, con
                        char * privacy_name = NULL;
                        ret = privilege_db_manager_get_privacy_by_privilege(privilege_name, &privacy_name);
                        if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && privacy_name != NULL && strstr(privacy_name, "N/A") == NULL) {
-                               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);
+                               sql = sqlite3_mprintf("insert or ignore into privacy_package (uid, pkg_type, pkg_id, privacy_name, privilege_name, api_version, is_critical) values (%d, %d, %Q, %Q, %Q, %Q, 0)", uid, package_type, pkgid, privacy_name, privilege_name, api_version);
                                TryReturn(sql != NULL, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); g_list_free_full(mapped_privilege_list, free); free(privacy_name); __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, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); g_list_free_full(mapped_privilege_list, free); free(privacy_name); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] fail to prepare database: %s", sqlite3_errmsg(db));
@@ -1005,7 +1005,7 @@ int privilege_db_manager_is_privacy_requestable(const uid_t uid, const char* pkg
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
-       char* sql = sqlite3_mprintf("select (case when api_version < 4.0 then 0 else 1 end) from privacy_package where (uid=%d or uid=%d) and pkg_id=%Q", uid, GLOBAL_USER, pkgid);
+       char* sql = sqlite3_mprintf("select (case when api_version < 4.0 then 0 else 1 end) from privacy_package where (uid=%d or uid=%d) and pkg_id=%Q and pkg_type=%d", uid, GLOBAL_USER, pkgid, PRVMGR_PACKAGE_TYPE_CORE);
        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));