13 #include "pkgmgr-info.h"
14 #include "pkgmgrinfo_debug.h"
15 #include "pkgmgrinfo_private.h"
16 #include "pkgmgr_parser.h"
18 typedef struct _pkgmgr_certinfo_x {
22 char *cert_info[MAX_CERT_TYPE]; /*certificate info*/
23 int cert_id[MAX_CERT_TYPE]; /*certificate ID in index table*/
26 typedef struct _pkgmgr_instcertinfo_x {
28 char *cert_info[MAX_CERT_TYPE]; /*certificate data*/
29 int is_new[MAX_CERT_TYPE]; /*whether already exist in table or not*/
30 int ref_count[MAX_CERT_TYPE]; /*reference count of certificate data*/
31 int cert_id[MAX_CERT_TYPE]; /*certificate ID in index table*/
32 } pkgmgr_instcertinfo_x;
34 typedef struct _pkgmgr_certindexinfo_x {
37 } pkgmgr_certindexinfo_x;
39 typedef struct _pkgmgr_cert_x {
44 API int pkgmgrinfo_pkginfo_create_certinfo(pkgmgrinfo_certinfo_h *handle)
46 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
47 pkgmgr_certinfo_x *certinfo = NULL;
48 certinfo = calloc(1, sizeof(pkgmgr_certinfo_x));
50 retvm_if(certinfo == NULL, PMINFO_R_ERROR, "Malloc Failed\n");
51 *handle = (void *)certinfo;
55 static int _pkginfo_compare_certinfo(sqlite3 *db, const char *l_pkgid,
57 pkgmgrinfo_cert_compare_result_type_e *result)
59 static const char query[] =
60 "SELECT COALESCE(author_signer_cert, -1) FROM package_cert_info "
65 int certid[2] = {-1, -1};
71 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
72 if (ret != SQLITE_OK) {
73 _LOGE("prepare error: %s", sqlite3_errmsg(db));
74 return PMINFO_R_ERROR;
77 for (i = 0; i < 2; i++) {
78 ret = sqlite3_bind_text(stmt, 1, pkgid[i], -1, SQLITE_STATIC);
79 if (ret != SQLITE_OK) {
80 _LOGE("bind error: %s", sqlite3_errmsg(db));
81 sqlite3_finalize(stmt);
82 return PMINFO_R_ERROR;
85 ret = sqlite3_step(stmt);
86 if (ret == SQLITE_ROW) {
87 _save_column_int(stmt, 0, &certid[i]);
88 } else if (ret != SQLITE_DONE) {
89 _LOGE("step error: %s", sqlite3_errmsg(db));
90 sqlite3_finalize(stmt);
91 return PMINFO_R_ERROR;
95 sqlite3_clear_bindings(stmt);
98 if (certid[0] == -1 && certid[1] == -1)
99 *result = PMINFO_CERT_COMPARE_BOTH_NO_CERT;
100 else if (certid[0] == -1)
101 *result = PMINFO_CERT_COMPARE_LHS_NO_CERT;
102 else if (certid[1] == -1)
103 *result = PMINFO_CERT_COMPARE_RHS_NO_CERT;
104 else if (certid[0] == certid[1])
105 *result = PMINFO_CERT_COMPARE_MATCH;
107 *result = PMINFO_CERT_COMPARE_MISMATCH;
109 sqlite3_finalize(stmt);
113 API int pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(const char *lhs_package_id,
114 const char *rhs_package_id, uid_t uid,
115 pkgmgrinfo_cert_compare_result_type_e *compare_result)
121 if (lhs_package_id == NULL || rhs_package_id == NULL ||
122 compare_result == NULL) {
123 _LOGE("invalid parameter");
124 return PMINFO_R_EINVAL;
127 /* open unified global cert db */
128 dbpath = getUserPkgCertDBPathUID(GLOBAL_USER);
130 return PMINFO_R_ERROR;
132 ret = sqlite3_open_v2(dbpath, &db, SQLITE_OPEN_READONLY, NULL);
133 if (ret != SQLITE_OK) {
134 _LOGE("failed to open db: %d", ret);
135 return PMINFO_R_ERROR;
138 if (_pkginfo_compare_certinfo(db, lhs_package_id, rhs_package_id,
140 _LOGE("failed to compare certinfo");
141 sqlite3_close_v2(db);
142 return PMINFO_R_ERROR;
145 sqlite3_close_v2(db);
150 API int pkgmgrinfo_pkginfo_compare_pkg_cert_info(const char *lhs_package_id, const char *rhs_package_id, pkgmgrinfo_cert_compare_result_type_e *compare_result)
152 return pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, _getuid(), compare_result);
155 static int _pkginfo_get_pkgid_from_appid(uid_t uid, const char *appid,
158 static const char query[] =
159 "SELECT package FROM package_app_info WHERE app_id=?";
165 dbpath = getUserPkgParserDBPathUID(uid);
167 return PMINFO_R_ERROR;
169 ret = sqlite3_open_v2(dbpath, &db, SQLITE_OPEN_READONLY, NULL);
170 if (ret != SQLITE_OK) {
171 _LOGE("failed to open db: %d", ret);
172 return PMINFO_R_ERROR;
175 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
176 if (ret != SQLITE_OK) {
177 _LOGE("prepare error: %s", sqlite3_errmsg(db));
178 sqlite3_close_v2(db);
179 return PMINFO_R_ERROR;
182 ret = sqlite3_bind_text(stmt, 1, appid, -1, SQLITE_STATIC);
183 if (ret != SQLITE_OK) {
184 _LOGE("bind error: %s", sqlite3_errmsg(db));
185 sqlite3_finalize(stmt);
186 sqlite3_close_v2(db);
187 return PMINFO_R_ERROR;
190 ret = sqlite3_step(stmt);
191 if (ret == SQLITE_ROW) {
192 _save_column_str(stmt, 0, pkgid);
194 } else if (ret == SQLITE_DONE) {
195 _LOGI("cannot find pkgid of app %s for uid %d", appid, (int)uid);
196 ret = PMINFO_R_ENOENT;
198 _LOGE("step error: %s", sqlite3_errmsg(db));
199 ret = PMINFO_R_ERROR;
202 sqlite3_finalize(stmt);
203 sqlite3_close_v2(db);
208 API int pkgmgrinfo_pkginfo_compare_usr_app_cert_info(const char *lhs_app_id,
209 const char *rhs_app_id, uid_t uid,
210 pkgmgrinfo_cert_compare_result_type_e *compare_result)
213 char *l_pkgid = NULL;
214 char *r_pkgid = NULL;
216 if (lhs_app_id == NULL || rhs_app_id == NULL ||
217 compare_result == NULL) {
218 _LOGE("invalid parameter");
219 return PMINFO_R_EINVAL;
222 ret = _pkginfo_get_pkgid_from_appid(uid, lhs_app_id, &l_pkgid);
223 if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
224 ret = _pkginfo_get_pkgid_from_appid(GLOBAL_USER, lhs_app_id,
227 if (ret != PMINFO_R_OK)
230 ret = _pkginfo_get_pkgid_from_appid(uid, rhs_app_id, &r_pkgid);
231 if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
232 ret = _pkginfo_get_pkgid_from_appid(GLOBAL_USER, rhs_app_id,
235 if (ret != PMINFO_R_OK) {
240 ret = pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(l_pkgid, r_pkgid,
241 uid, compare_result);
249 API int pkgmgrinfo_pkginfo_compare_app_cert_info(const char *lhs_app_id,
250 const char *rhs_app_id,
251 pkgmgrinfo_cert_compare_result_type_e *compare_result)
253 return pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id,
254 rhs_app_id, _getuid(), compare_result);
257 static int _pkginfo_get_cert(sqlite3 *db, int cert_id[],
260 static const char query[] =
261 "SELECT cert_info FROM package_cert_index_info WHERE cert_id=?";
266 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
267 if (ret != SQLITE_OK) {
268 _LOGE("prepare failed: %s", sqlite3_errmsg(db));
269 return PMINFO_R_ERROR;
272 for (i = 0; i < MAX_CERT_TYPE; i++) {
273 ret = sqlite3_bind_int(stmt, 1, cert_id[i]);
274 if (ret != SQLITE_OK) {
275 sqlite3_finalize(stmt);
276 _LOGE("bind failed: %s", sqlite3_errmsg(db));
277 return PMINFO_R_ERROR;
280 ret = sqlite3_step(stmt);
281 if (ret == SQLITE_DONE) {
283 sqlite3_clear_bindings(stmt);
285 } else if (ret != SQLITE_ROW) {
286 _LOGE("step failed: %s", sqlite3_errmsg(db));
287 sqlite3_finalize(stmt);
288 return PMINFO_R_ERROR;
291 _save_column_str(stmt, 0, &cert_info[i]);
293 sqlite3_clear_bindings(stmt);
296 sqlite3_finalize(stmt);
301 static int _pkginfo_get_certid(sqlite3 *db, const char *pkgid, int cert_id[])
303 static const char query[] =
304 "SELECT author_root_cert, author_im_cert, author_signer_cert, "
305 "dist_root_cert, dist_im_cert, dist_signer_cert, "
306 "dist2_root_cert, dist2_im_cert, dist2_signer_cert "
307 "FROM package_cert_info WHERE package=?";
312 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
313 if (ret != SQLITE_OK) {
314 _LOGE("prepare failed: %s", sqlite3_errmsg(db));
315 return PMINFO_R_ERROR;
318 ret = sqlite3_bind_text(stmt, 1, pkgid, -1, SQLITE_STATIC);
319 if (ret != SQLITE_OK) {
320 _LOGE("bind failed: %s", sqlite3_errmsg(db));
321 sqlite3_finalize(stmt);
322 return PMINFO_R_ERROR;
325 ret = sqlite3_step(stmt);
326 if (ret == SQLITE_DONE) {
327 sqlite3_finalize(stmt);
328 return PMINFO_R_ENOENT;
329 } else if (ret != SQLITE_ROW) {
330 _LOGE("step failed: %s", sqlite3_errmsg(db));
331 sqlite3_finalize(stmt);
332 return PMINFO_R_ERROR;
336 _save_column_int(stmt, idx++, &cert_id[PMINFO_AUTHOR_ROOT_CERT]);
337 _save_column_int(stmt, idx++,
338 &cert_id[PMINFO_AUTHOR_INTERMEDIATE_CERT]);
339 _save_column_int(stmt, idx++, &cert_id[PMINFO_AUTHOR_SIGNER_CERT]);
340 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR_ROOT_CERT]);
341 _save_column_int(stmt, idx++,
342 &cert_id[PMINFO_DISTRIBUTOR_INTERMEDIATE_CERT]);
343 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR_SIGNER_CERT]);
344 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR2_ROOT_CERT]);
345 _save_column_int(stmt, idx++,
346 &cert_id[PMINFO_DISTRIBUTOR2_INTERMEDIATE_CERT]);
347 _save_column_int(stmt, idx++,
348 &cert_id[PMINFO_DISTRIBUTOR2_SIGNER_CERT]);
350 sqlite3_finalize(stmt);
355 static int _pkginfo_get_certinfo(const char *pkgid, pkgmgr_certinfo_x *info)
361 /* open unified global cert db */
362 dbpath = getUserPkgCertDBPathUID(GLOBAL_USER);
364 return PMINFO_R_ERROR;
366 ret = sqlite3_open_v2(dbpath, &db, SQLITE_OPEN_READONLY, NULL);
367 if (ret != SQLITE_OK) {
368 _LOGE("failed to open db: %d", ret);
369 return PMINFO_R_ERROR;
372 ret = _pkginfo_get_certid(db, pkgid, info->cert_id);
373 if (ret != PMINFO_R_OK) {
374 sqlite3_close_v2(db);
378 ret = _pkginfo_get_cert(db, info->cert_id, info->cert_info);
379 if (ret != PMINFO_R_OK) {
380 sqlite3_close_v2(db);
387 API int pkgmgrinfo_pkginfo_load_certinfo(const char *pkgid, pkgmgrinfo_certinfo_h handle, uid_t uid)
390 pkgmgr_certinfo_x *info = (pkgmgr_certinfo_x *)handle;
392 if (pkgid == NULL || handle == NULL) {
393 _LOGE("invalid parameter");
394 return PMINFO_R_EINVAL;
397 ret = _pkginfo_get_certinfo(pkgid, info);
398 if (ret != PMINFO_R_OK)
399 _LOGE("failed to get certinfo of %s ", pkgid);
404 API int pkgmgrinfo_pkginfo_get_cert_value(pkgmgrinfo_certinfo_h handle, pkgmgrinfo_cert_type cert_type, const char **cert_value)
406 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
407 retvm_if(cert_value == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
408 retvm_if(cert_type < PMINFO_AUTHOR_ROOT_CERT, PMINFO_R_EINVAL, "Invalid certificate type\n");
409 retvm_if(cert_type > PMINFO_DISTRIBUTOR2_SIGNER_CERT, PMINFO_R_EINVAL, "Invalid certificate type\n");
410 pkgmgr_certinfo_x *certinfo = NULL;
411 certinfo = (pkgmgr_certinfo_x *)handle;
412 if ((certinfo->cert_info)[cert_type])
413 *cert_value = (certinfo->cert_info)[cert_type];
419 API int pkgmgrinfo_pkginfo_destroy_certinfo(pkgmgrinfo_certinfo_h handle)
421 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
423 pkgmgr_certinfo_x *certinfo = NULL;
424 certinfo = (pkgmgr_certinfo_x *)handle;
425 if (certinfo->pkgid) {
426 free(certinfo->pkgid);
427 certinfo->pkgid = NULL;
429 for (i = 0; i < MAX_CERT_TYPE; i++) {
430 if ((certinfo->cert_info)[i]) {
431 free((certinfo->cert_info)[i]);
432 (certinfo->cert_info)[i] = NULL;
440 API int pkgmgrinfo_create_certinfo_set_handle(pkgmgrinfo_instcertinfo_h *handle)
442 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
443 pkgmgr_instcertinfo_x *certinfo = NULL;
445 certinfo = calloc(1, sizeof(pkgmgr_instcertinfo_x));
446 retvm_if(certinfo == NULL, PMINFO_R_ERROR, "Malloc Failed\n");
447 *handle = (void *)certinfo;
451 API int pkgmgrinfo_set_cert_value(pkgmgrinfo_instcertinfo_h handle, pkgmgrinfo_instcert_type cert_type, char *cert_value)
453 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
454 retvm_if(cert_value == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
455 retvm_if(cert_type < PMINFO_SET_AUTHOR_ROOT_CERT, PMINFO_R_EINVAL, "Invalid certificate type\n");
456 retvm_if(cert_type > PMINFO_SET_DISTRIBUTOR2_SIGNER_CERT, PMINFO_R_EINVAL, "Invalid certificate type\n");
457 pkgmgr_instcertinfo_x *certinfo = NULL;
458 certinfo = (pkgmgr_instcertinfo_x *)handle;
459 (certinfo->cert_info)[cert_type] = strdup(cert_value);
463 static int _pkginfo_save_cert_info(sqlite3 *db, const char *pkgid,
466 static const char query_insert[] =
467 "INSERT INTO package_cert_info (package, package_count,"
468 " author_root_cert, author_im_cert, author_signer_cert,"
469 " dist_root_cert, dist_im_cert, dist_signer_cert,"
470 " dist2_root_cert, dist2_im_cert, dist2_signer_cert) "
472 " (SELECT cert_id FROM package_cert_index_info"
473 " WHERE cert_info=?),"
474 " (SELECT cert_id FROM package_cert_index_info"
475 " WHERE cert_info=?),"
476 " (SELECT cert_id FROM package_cert_index_info"
477 " WHERE cert_info=?),"
478 " (SELECT cert_id FROM package_cert_index_info"
479 " WHERE cert_info=?),"
480 " (SELECT cert_id FROM package_cert_index_info"
481 " WHERE cert_info=?),"
482 " (SELECT cert_id FROM package_cert_index_info"
483 " WHERE cert_info=?),"
484 " (SELECT cert_id FROM package_cert_index_info"
485 " WHERE cert_info=?),"
486 " (SELECT cert_id FROM package_cert_index_info"
487 " WHERE cert_info=?),"
488 " (SELECT cert_id FROM package_cert_index_info"
489 " WHERE cert_info=?))";
490 static const char query_update[] =
491 "UPDATE package_cert_info "
492 "SET package_count = package_count + 1 "
499 ret = sqlite3_prepare_v2(db, query_insert, strlen(query_insert),
501 if (ret != SQLITE_OK) {
502 _LOGE("prepare error: %s", sqlite3_errmsg(db));
503 return PMINFO_R_ERROR;
507 sqlite3_bind_text(stmt, idx++, pkgid, -1, SQLITE_STATIC);
508 for (i = 0; i < MAX_CERT_TYPE; i++) {
509 if (sqlite3_bind_text(stmt, idx++, cert_info[i], -1,
511 _LOGE("bind error: %s", sqlite3_errmsg(db));
512 sqlite3_finalize(stmt);
513 return PMINFO_R_ERROR;
517 ret = sqlite3_step(stmt);
518 sqlite3_finalize(stmt);
519 if (ret == SQLITE_CONSTRAINT) {
520 ret = sqlite3_prepare_v2(db, query_update, strlen(query_update),
522 if (ret != SQLITE_OK) {
523 _LOGE("prepare error: %s", sqlite3_errmsg(db));
524 return PMINFO_R_ERROR;
526 sqlite3_bind_text(stmt, 1, pkgid, -1, SQLITE_STATIC);
527 ret = sqlite3_step(stmt);
528 sqlite3_finalize(stmt);
531 if (ret != SQLITE_DONE) {
532 _LOGE("step error: %s", sqlite3_errmsg(db));
533 return PMINFO_R_ERROR;
539 static int _pkginfo_save_cert_index_info(sqlite3 *db, char *cert_info[])
541 static const char query[] =
542 "INSERT OR REPLACE INTO package_cert_index_info "
543 "(cert_info, cert_id, cert_ref_count) "
546 " (SELECT cert_id FROM package_cert_index_info "
547 " WHERE cert_info=?), "
549 " ((SELECT cert_ref_count FROM package_cert_index_info "
550 " WHERE cert_info=?) + 1), 1))";
556 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
557 if (ret != SQLITE_OK) {
558 _LOGE("prepare error: %s", sqlite3_errmsg(db));
559 return PMINFO_R_ERROR;
562 for (i = 0; i < MAX_CERT_TYPE; i++) {
563 if (cert_info[i] == NULL)
566 sqlite3_bind_text(stmt, idx++, cert_info[i], -1, SQLITE_STATIC);
567 sqlite3_bind_text(stmt, idx++, cert_info[i], -1, SQLITE_STATIC);
568 sqlite3_bind_text(stmt, idx++, cert_info[i], -1, SQLITE_STATIC);
570 ret = sqlite3_step(stmt);
571 if (ret != SQLITE_DONE) {
572 _LOGE("step failed: %s", sqlite3_errmsg(db));
573 sqlite3_finalize(stmt);
574 return PMINFO_R_ERROR;
578 sqlite3_clear_bindings(stmt);
581 sqlite3_finalize(stmt);
586 API int pkgmgrinfo_save_certinfo(const char *pkgid, pkgmgrinfo_instcertinfo_h handle, uid_t uid)
591 pkgmgr_instcertinfo_x *info = (pkgmgr_instcertinfo_x *)handle;
593 if (pkgid == NULL || handle == NULL) {
594 _LOGE("invalid parameter");
595 return PMINFO_R_EINVAL;
598 /* open unified global cert db */
599 dbpath = getUserPkgCertDBPathUID(GLOBAL_USER);
601 return PMINFO_R_ERROR;
603 ret = sqlite3_open_v2(dbpath, &db, SQLITE_OPEN_READWRITE, NULL);
604 if (ret != SQLITE_OK) {
605 _LOGE("failed to open db: %d", ret);
606 return PMINFO_R_ERROR;
609 ret = sqlite3_exec(db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
610 if (ret != SQLITE_OK) {
611 _LOGE("failed to begin transaction");
612 sqlite3_close_v2(db);
613 return PMINFO_R_ERROR;
616 _check_create_cert_db(db);
618 if (_pkginfo_save_cert_index_info(db, info->cert_info)) {
619 _LOGE("failed to save cert index info, rollback now");
620 sqlite3_exec(GET_DB(cert_db), "ROLLBACK", NULL, NULL, NULL);
621 sqlite3_close_v2(db);
622 return PMINFO_R_ERROR;
625 if (_pkginfo_save_cert_info(db, pkgid, info->cert_info)) {
626 _LOGE("failed to save cert info, rollback now");
627 sqlite3_exec(GET_DB(cert_db), "ROLLBACK", NULL, NULL, NULL);
628 sqlite3_close_v2(db);
629 return PMINFO_R_ERROR;
632 ret = sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
633 if (ret != SQLITE_OK) {
634 _LOGE("failed to commit transaction, rollback now");
635 sqlite3_exec(GET_DB(cert_db), "ROLLBACK", NULL, NULL, NULL);
636 sqlite3_close_v2(db);
637 return PMINFO_R_ERROR;
640 sqlite3_close_v2(db);
645 API int pkgmgrinfo_destroy_certinfo_set_handle(pkgmgrinfo_instcertinfo_h handle)
647 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
649 pkgmgr_instcertinfo_x *certinfo = NULL;
650 certinfo = (pkgmgr_instcertinfo_x *)handle;
651 if (certinfo->pkgid) {
652 free(certinfo->pkgid);
653 certinfo->pkgid = NULL;
655 for (i = 0; i < MAX_CERT_TYPE; i++) {
656 if ((certinfo->cert_info)[i]) {
657 free((certinfo->cert_info)[i]);
658 (certinfo->cert_info)[i] = NULL;
666 static int _pkginfo_delete_certinfo(sqlite3 *db, const char *pkgid)
668 static const char query[] =
669 "UPDATE package_cert_info "
670 "SET package_count = package_count - 1 "
675 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
676 if (ret != SQLITE_OK) {
677 _LOGE("prepare error: %s", sqlite3_errmsg(db));
678 return PMINFO_R_ERROR;
681 ret = sqlite3_bind_text(stmt, 1, pkgid, -1, SQLITE_STATIC);
682 if (ret != SQLITE_OK) {
683 _LOGE("bind error: %s", sqlite3_errmsg(db));
684 sqlite3_finalize(stmt);
685 return PMINFO_R_ERROR;
688 ret = sqlite3_step(stmt);
689 sqlite3_finalize(stmt);
690 if (ret != SQLITE_DONE) {
691 _LOGE("step error: %s", sqlite3_errmsg(db));
692 return PMINFO_R_ERROR;
698 API int pkgmgrinfo_delete_usr_certinfo(const char *pkgid, uid_t uid)
705 _LOGE("invalid parameter");
706 return PMINFO_R_EINVAL;
709 /* open unified global cert db */
710 dbpath = getUserPkgCertDBPathUID(GLOBAL_USER);
712 return PMINFO_R_ERROR;
714 ret = sqlite3_open_v2(dbpath, &db, SQLITE_OPEN_READWRITE, NULL);
715 if (ret != SQLITE_OK) {
716 _LOGE("failed to open db: %d", ret);
717 return PMINFO_R_ERROR;
720 ret = sqlite3_exec(db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
721 if (ret != SQLITE_OK) {
722 _LOGE("failed to begin transaction");
723 sqlite3_close_v2(db);
724 return PMINFO_R_ERROR;
727 if (_pkginfo_delete_certinfo(db, pkgid)) {
728 _LOGE("failed to delete certinfo of %s, rollback now", pkgid);
729 sqlite3_exec(GET_DB(cert_db), "ROLLBACK", NULL, NULL, NULL);
730 sqlite3_close_v2(db);
731 return PMINFO_R_ERROR;
734 ret = sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
735 if (ret != SQLITE_OK) {
736 _LOGE("failed to commit transaction, rollback now");
737 sqlite3_exec(GET_DB(cert_db), "ROLLBACK", NULL, NULL, NULL);
738 sqlite3_close_v2(db);
739 return PMINFO_R_ERROR;
742 sqlite3_close_v2(db);
747 API int pkgmgrinfo_delete_certinfo(const char *pkgid)
749 return pkgmgrinfo_delete_usr_certinfo(pkgid, _getuid());