Fix compare and load certinfo by GLOBAL USER. 62/43662/2 accepted/tizen/mobile/20150714.074933 accepted/tizen/tv/20150714.074952 accepted/tizen/wearable/20150714.074959 submit/tizen/20150714.024616
authorJiwoong Im <jiwoong.im@samsung.com>
Mon, 13 Jul 2015 05:42:47 +0000 (14:42 +0900)
committerJiwoong Im <jiwoong.im@samsung.com>
Tue, 14 Jul 2015 01:14:30 +0000 (10:14 +0900)
- 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 <jiwoong.im@samsung.com>
src/pkgmgr-info.c

index a4e772d..3a7c264 100644 (file)
@@ -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");