From 83f990165548fb458fbb677dbefa446f1fdb026d Mon Sep 17 00:00:00 2001 From: Jiwoong Im Date: Mon, 13 Jul 2015 14:42:47 +0900 Subject: [PATCH] Fix compare and load certinfo by GLOBAL USER. - comparing and loading package certinfo by GLOBAL USER returns error because of for_all_users column. - modify query in compare and load certinfo function. Change-Id: I172184fbb813c0254c140fd9302f4311f620943b Signed-off-by: Jiwoong Im --- src/pkgmgr-info.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/pkgmgr-info.c b/src/pkgmgr-info.c index a4e772d..3a7c264 100644 --- a/src/pkgmgr-info.c +++ b/src/pkgmgr-info.c @@ -3548,6 +3548,7 @@ API int pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(const char *lhs_package_id, int rcert = 0; int exist = -1; int i; + int is_global = 0; *compare_result = PMINFO_CERT_COMPARE_ERROR; ret = __open_cert_db(uid, "r"); @@ -3576,14 +3577,18 @@ API int pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(const char *lhs_package_id, } rcert = exist; - snprintf(query, MAX_QUERY_LEN, "select cert_info from package_cert_index_info where cert_id=(select author_signer_cert from package_cert_info where package=?) and for_all_users=(select for_all_users from package_cert_info where package=?)"); + if (uid == GLOBAL_USER || uid == ROOT_UID) { + snprintf(query, MAX_QUERY_LEN, "select cert_info from package_cert_index_info where cert_id=(select author_signer_cert from package_cert_info where package=?)"); + is_global = 1; + } else + snprintf(query, MAX_QUERY_LEN, "select cert_info from package_cert_index_info where cert_id=(select author_signer_cert from package_cert_info where package=?) and for_all_users=(select for_all_users from package_cert_info where package=?)"); if (SQLITE_OK != sqlite3_prepare_v2(GET_DB(cert_db), query, strlen(query), &stmt, NULL)) { _LOGE("sqlite3_prepare_v2 error: %s", sqlite3_errmsg(GET_DB(cert_db))); ret = PMINFO_R_ERROR; goto err; } - for (i = 1; i <= 2; i++) { + for (i = 1; i <= 2 - is_global; i++) { if (SQLITE_OK != sqlite3_bind_text(stmt, i, lhs_package_id, -1, SQLITE_STATIC)) { _LOGE("sqlite3_bind_text error: %s", sqlite3_errmsg(GET_DB(cert_db))); ret = PMINFO_R_ERROR; @@ -3600,7 +3605,7 @@ API int pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(const char *lhs_package_id, sqlite3_reset(stmt); sqlite3_clear_bindings(stmt); - for (i = 1; i <= 2; i++) { + for (i = 1; i <= 2 - is_global; i++) { if (SQLITE_OK != sqlite3_bind_text(stmt, i, rhs_package_id, -1, SQLITE_STATIC)) { _LOGE("sqlite3_bind_text error: %s", sqlite3_errmsg(GET_DB(cert_db))); ret = PMINFO_R_ERROR; @@ -7036,7 +7041,10 @@ API int pkgmgrinfo_pkginfo_load_certinfo(const char *pkgid, pkgmgrinfo_certinfo_ } for (i = 0; i < MAX_CERT_TYPE; i++) { memset(query, '\0', MAX_QUERY_LEN); - snprintf(query, MAX_QUERY_LEN, "select cert_info from package_cert_index_info where cert_id=%d and for_all_users=%d", (certinfo->cert_id)[i], certinfo->for_all_users); + if (uid == GLOBAL_USER || uid == ROOT_UID) + snprintf(query, MAX_QUERY_LEN, "select cert_info from package_cert_index_info where cert_id=%d", (certinfo->cert_id)[i]); + else + snprintf(query, MAX_QUERY_LEN, "select cert_info from package_cert_index_info where cert_id=%d and for_all_users=%d", (certinfo->cert_id)[i], certinfo->for_all_users); ret = __exec_certinfo_query(query, (void *)certinfo); if (ret == -1) { _LOGE("Cert Info DB Information retrieval failed\n"); -- 2.7.4