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 author_signer_cert FROM package_cert_info "
65 int certid[2] = {-1, };
68 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
69 if (ret != SQLITE_OK) {
70 _LOGE("prepare error: %s", sqlite3_errmsg(db));
71 return PMINFO_R_ERROR;
76 for (i = 0; i < 2; i++) {
77 ret = sqlite3_bind_text(stmt, 1, pkgid[i], -1, SQLITE_STATIC);
78 if (ret != SQLITE_OK) {
79 _LOGE("bind error: %s", sqlite3_errmsg(db));
80 sqlite3_finalize(stmt);
81 return PMINFO_R_ERROR;
84 ret = sqlite3_step(stmt);
85 if (ret == SQLITE_ROW) {
86 _save_column_int(stmt, 0, &certid[i]);
87 } else if (ret != SQLITE_DONE) {
88 _LOGE("step error: %s", sqlite3_errmsg(db));
89 sqlite3_finalize(stmt);
90 return PMINFO_R_ERROR;
94 sqlite3_clear_bindings(stmt);
97 if (certid[0] == -1 && certid[1] == -1)
98 *result = PMINFO_CERT_COMPARE_BOTH_NO_CERT;
99 else if (certid[0] == -1)
100 *result = PMINFO_CERT_COMPARE_LHS_NO_CERT;
101 else if (certid[1] == -1)
102 *result = PMINFO_CERT_COMPARE_RHS_NO_CERT;
103 else if (certid[0] == certid[1])
104 *result = PMINFO_CERT_COMPARE_MATCH;
106 *result = PMINFO_CERT_COMPARE_MISMATCH;
108 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 dbpath = getUserPkgCertDBPathUID(uid);
129 return PMINFO_R_ERROR;
131 ret = sqlite3_open_v2(dbpath, &db, SQLITE_OPEN_READONLY, NULL);
132 if (ret != SQLITE_OK) {
133 _LOGE("failed to open db: %d", ret);
134 return PMINFO_R_ERROR;
137 if (_pkginfo_compare_certinfo(db, lhs_package_id, rhs_package_id,
139 _LOGE("failed to compare certinfo");
140 sqlite3_close_v2(db);
141 return PMINFO_R_ERROR;
144 sqlite3_close_v2(db);
149 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)
151 return pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, GLOBAL_USER, compare_result);
154 static int _pkginfo_get_pkgid_from_appid(uid_t uid, const char *appid,
157 static const char query[] =
158 "SELECT package FROM package_app_info WHERE app_id=?";
164 dbpath = getUserPkgParserDBPathUID(uid);
166 return PMINFO_R_ERROR;
168 ret = sqlite3_open_v2(dbpath, &db, SQLITE_OPEN_READONLY, NULL);
169 if (ret != SQLITE_OK) {
170 _LOGE("failed to open db: %d", ret);
171 return PMINFO_R_ERROR;
174 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
175 if (ret != SQLITE_OK) {
176 _LOGE("prepare error: %s", sqlite3_errmsg(db));
177 sqlite3_close_v2(db);
178 return PMINFO_R_ERROR;
181 ret = sqlite3_bind_text(stmt, 1, appid, -1, SQLITE_STATIC);
182 if (ret != SQLITE_OK) {
183 _LOGE("bind error: %s", sqlite3_errmsg(db));
184 sqlite3_finalize(stmt);
185 sqlite3_close_v2(db);
186 return PMINFO_R_ERROR;
189 ret = sqlite3_step(stmt);
190 if (ret == SQLITE_ROW) {
191 _save_column_str(stmt, 0, (const char **)pkgid);
193 } else if (ret == SQLITE_DONE) {
194 _LOGE("cannot find pkgid of app %s", appid);
195 ret = PMINFO_R_ENOENT;
197 _LOGE("step error: %s", sqlite3_errmsg(db));
198 ret = PMINFO_R_ERROR;
201 sqlite3_finalize(stmt);
202 sqlite3_close_v2(db);
207 API int pkgmgrinfo_pkginfo_compare_usr_app_cert_info(const char *lhs_app_id,
208 const char *rhs_app_id, uid_t uid,
209 pkgmgrinfo_cert_compare_result_type_e *compare_result)
212 char *l_pkgid = NULL;
213 char *r_pkgid = NULL;
215 if (lhs_app_id == NULL || rhs_app_id == NULL ||
216 compare_result == NULL) {
217 _LOGE("invalid parameter");
218 return PMINFO_R_EINVAL;
221 ret = _pkginfo_get_pkgid_from_appid(uid, lhs_app_id, &l_pkgid);
222 if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
223 ret = _pkginfo_get_pkgid_from_appid(GLOBAL_USER, lhs_app_id,
226 if (ret != PMINFO_R_OK)
229 ret = _pkginfo_get_pkgid_from_appid(uid, rhs_app_id, &r_pkgid);
230 if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
231 ret = _pkginfo_get_pkgid_from_appid(GLOBAL_USER, rhs_app_id,
234 if (ret != PMINFO_R_OK) {
239 ret = pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(l_pkgid, r_pkgid,
240 uid, compare_result);
248 API int pkgmgrinfo_pkginfo_compare_app_cert_info(const char *lhs_app_id,
249 const char *rhs_app_id,
250 pkgmgrinfo_cert_compare_result_type_e *compare_result)
252 return pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id,
253 rhs_app_id, GLOBAL_USER, compare_result);
256 static int _pkginfo_get_cert(sqlite3 *db, int cert_id[],
259 static const char query[] =
260 "SELECT cert_info FROM package_cert_index_info WHERE cert_id=?";
265 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
266 if (ret != SQLITE_OK) {
267 _LOGE("prepare failed: %s", sqlite3_errmsg(db));
268 return PMINFO_R_ERROR;
271 for (i = 0; i < MAX_CERT_TYPE; i++) {
272 ret = sqlite3_bind_int(stmt, 1, cert_id[i]);
273 if (ret != SQLITE_OK) {
274 sqlite3_finalize(stmt);
275 _LOGE("bind failed: %s", sqlite3_errmsg(db));
276 return PMINFO_R_ERROR;
279 ret = sqlite3_step(stmt);
280 if (ret == SQLITE_DONE) {
282 sqlite3_clear_bindings(stmt);
284 } else if (ret != SQLITE_ROW) {
285 _LOGE("step failed: %s", sqlite3_errmsg(db));
286 sqlite3_finalize(stmt);
287 return PMINFO_R_ERROR;
290 _save_column_str(stmt, 0, (const char **)&cert_info[i]);
292 sqlite3_clear_bindings(stmt);
295 sqlite3_finalize(stmt);
300 static int _pkginfo_get_certid(sqlite3 *db, const char *pkgid, int cert_id[])
302 static const char query[] =
303 "SELECT author_root_cert, author_im_cert, author_signer_cert, "
304 "dist_root_cert, dist_im_cert, dist_signer_cert, "
305 "dist2_root_cert, dist2_im_cert, dist2_signer_cert "
306 "FROM package_cert_info WHERE package=?";
311 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
312 if (ret != SQLITE_OK) {
313 _LOGE("prepare failed: %s", sqlite3_errmsg(db));
314 return PMINFO_R_ERROR;
317 ret = sqlite3_bind_text(stmt, 1, pkgid, -1, SQLITE_STATIC);
318 if (ret != SQLITE_OK) {
319 _LOGE("bind failed: %s", sqlite3_errmsg(db));
320 sqlite3_finalize(stmt);
321 return PMINFO_R_ERROR;
324 ret = sqlite3_step(stmt);
325 if (ret == SQLITE_DONE) {
326 sqlite3_finalize(stmt);
327 return PMINFO_R_ENOENT;
328 } else if (ret != SQLITE_ROW) {
329 _LOGE("step failed: %s", sqlite3_errmsg(db));
330 sqlite3_finalize(stmt);
331 return PMINFO_R_ERROR;
335 _save_column_int(stmt, idx++, &cert_id[PMINFO_AUTHOR_ROOT_CERT]);
336 _save_column_int(stmt, idx++,
337 &cert_id[PMINFO_AUTHOR_INTERMEDIATE_CERT]);
338 _save_column_int(stmt, idx++, &cert_id[PMINFO_AUTHOR_SIGNER_CERT]);
339 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR_ROOT_CERT]);
340 _save_column_int(stmt, idx++,
341 &cert_id[PMINFO_DISTRIBUTOR_INTERMEDIATE_CERT]);
342 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR_SIGNER_CERT]);
343 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR2_ROOT_CERT]);
344 _save_column_int(stmt, idx++,
345 &cert_id[PMINFO_DISTRIBUTOR2_INTERMEDIATE_CERT]);
346 _save_column_int(stmt, idx++,
347 &cert_id[PMINFO_DISTRIBUTOR2_SIGNER_CERT]);
349 sqlite3_finalize(stmt);
354 static int _pkginfo_get_certinfo(const char *pkgid, uid_t uid,
355 pkgmgr_certinfo_x *info)
361 dbpath = getUserPkgCertDBPathUID(uid);
363 return PMINFO_R_ERROR;
365 ret = sqlite3_open_v2(dbpath, &db, SQLITE_OPEN_READONLY, NULL);
366 if (ret != SQLITE_OK) {
367 _LOGE("failed to open db: %d", ret);
368 return PMINFO_R_ERROR;
371 ret = _pkginfo_get_certid(db, pkgid, info->cert_id);
372 if (ret != PMINFO_R_OK) {
373 sqlite3_close_v2(db);
377 ret = _pkginfo_get_cert(db, info->cert_id, info->cert_info);
378 if (ret != PMINFO_R_OK) {
379 sqlite3_close_v2(db);
386 API int pkgmgrinfo_pkginfo_load_certinfo(const char *pkgid, pkgmgrinfo_certinfo_h handle, uid_t uid)
389 pkgmgr_certinfo_x *info = (pkgmgr_certinfo_x *)handle;
391 if (pkgid == NULL || handle == NULL) {
392 _LOGE("invalid parameter");
393 return PMINFO_R_EINVAL;
396 ret = _pkginfo_get_certinfo(pkgid, uid, info);
397 if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
398 ret = _pkginfo_get_certinfo(pkgid, GLOBAL_USER, info);
400 if (ret != PMINFO_R_OK)
401 _LOGE("failed to get certinfo of %s for user %d", pkgid, uid);
406 API int pkgmgrinfo_pkginfo_get_cert_value(pkgmgrinfo_certinfo_h handle, pkgmgrinfo_cert_type cert_type, const char **cert_value)
408 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
409 retvm_if(cert_value == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
410 retvm_if(cert_type < PMINFO_AUTHOR_ROOT_CERT, PMINFO_R_EINVAL, "Invalid certificate type\n");
411 retvm_if(cert_type > PMINFO_DISTRIBUTOR2_SIGNER_CERT, PMINFO_R_EINVAL, "Invalid certificate type\n");
412 pkgmgr_certinfo_x *certinfo = NULL;
413 certinfo = (pkgmgr_certinfo_x *)handle;
414 if ((certinfo->cert_info)[cert_type])
415 *cert_value = (certinfo->cert_info)[cert_type];
421 API int pkgmgrinfo_pkginfo_destroy_certinfo(pkgmgrinfo_certinfo_h handle)
423 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
425 pkgmgr_certinfo_x *certinfo = NULL;
426 certinfo = (pkgmgr_certinfo_x *)handle;
427 if (certinfo->pkgid) {
428 free(certinfo->pkgid);
429 certinfo->pkgid = NULL;
431 for (i = 0; i < MAX_CERT_TYPE; i++) {
432 if ((certinfo->cert_info)[i]) {
433 free((certinfo->cert_info)[i]);
434 (certinfo->cert_info)[i] = NULL;
442 API int pkgmgrinfo_create_certinfo_set_handle(pkgmgrinfo_instcertinfo_h *handle)
444 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
445 pkgmgr_instcertinfo_x *certinfo = NULL;
447 certinfo = calloc(1, sizeof(pkgmgr_instcertinfo_x));
448 retvm_if(certinfo == NULL, PMINFO_R_ERROR, "Malloc Failed\n");
449 *handle = (void *)certinfo;
453 API int pkgmgrinfo_set_cert_value(pkgmgrinfo_instcertinfo_h handle, pkgmgrinfo_instcert_type cert_type, char *cert_value)
455 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
456 retvm_if(cert_value == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
457 retvm_if(cert_type < PMINFO_SET_AUTHOR_ROOT_CERT, PMINFO_R_EINVAL, "Invalid certificate type\n");
458 retvm_if(cert_type > PMINFO_SET_DISTRIBUTOR2_SIGNER_CERT, PMINFO_R_EINVAL, "Invalid certificate type\n");
459 pkgmgr_instcertinfo_x *certinfo = NULL;
460 certinfo = (pkgmgr_instcertinfo_x *)handle;
461 (certinfo->cert_info)[cert_type] = strdup(cert_value);
465 static int _pkginfo_save_cert_info(sqlite3 *db, const char *pkgid,
468 static const char query[] =
469 "INSERT OR REPLACE INTO package_cert_info (package,"
470 " author_root_cert, author_im_cert, author_signer_cert,"
471 " dist_root_cert, dist_im_cert, dist_signer_cert,"
472 " dist2_root_cert, dist2_im_cert, dist2_signer_cert) "
475 " (SELECT cert_id FROM package_cert_index_info"
476 " WHERE cert_info=?),"
477 " (SELECT author_root_cert FROM package_cert_info"
478 " WHERE package=?))),"
480 " (SELECT cert_id FROM package_cert_index_info"
481 " WHERE cert_info=?),"
482 " (SELECT author_im_cert FROM package_cert_info"
483 " WHERE package=?))),"
485 " (SELECT cert_id FROM package_cert_index_info"
486 " WHERE cert_info=?),"
487 " (SELECT author_signer_cert FROM package_cert_info"
488 " WHERE package=?))),"
490 " (SELECT cert_id FROM package_cert_index_info"
491 " WHERE cert_info=?),"
492 " (SELECT dist_root_cert FROM package_cert_info"
493 " WHERE package=?))),"
495 " (SELECT cert_id FROM package_cert_index_info"
496 " WHERE cert_info=?),"
497 " (SELECT dist_im_cert FROM package_cert_info"
498 " WHERE package=?))),"
500 " (SELECT cert_id FROM package_cert_index_info"
501 " WHERE cert_info=?),"
502 " (SELECT dist_signer_cert FROM package_cert_info"
503 " WHERE package=?))),"
505 " (SELECT cert_id FROM package_cert_index_info"
506 " WHERE cert_info=?),"
507 " (SELECT dist2_root_cert FROM package_cert_info"
508 " WHERE package=?))),"
510 " (SELECT cert_id FROM package_cert_index_info"
511 " WHERE cert_info=?),"
512 " (SELECT dist2_im_cert FROM package_cert_info"
513 " WHERE package=?))),"
515 " (SELECT cert_id FROM package_cert_index_info"
516 " WHERE cert_info=?),"
517 " (SELECT dist2_signer_cert FROM package_cert_info"
518 " WHERE package=?))))";
524 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
525 if (ret != SQLITE_OK) {
526 _LOGE("prepare error: %s", sqlite3_errmsg(db));
527 return PMINFO_R_ERROR;
531 sqlite3_bind_text(stmt, idx++, pkgid, -1, SQLITE_STATIC);
532 for (i = 0; i < MAX_CERT_TYPE; i++) {
533 ret = sqlite3_bind_text(stmt, idx++, cert_info[i], -1,
535 if (ret != SQLITE_OK) {
536 _LOGE("bind error: %s", sqlite3_errmsg(db));
537 sqlite3_finalize(stmt);
538 return PMINFO_R_ERROR;
540 ret = sqlite3_bind_text(stmt, idx++, pkgid, -1,
542 if (ret != SQLITE_OK) {
543 _LOGE("bind error: %s", sqlite3_errmsg(db));
544 sqlite3_finalize(stmt);
545 return PMINFO_R_ERROR;
548 ret = sqlite3_step(stmt);
549 sqlite3_finalize(stmt);
550 if (ret != SQLITE_DONE) {
551 _LOGE("step error: %s", sqlite3_errmsg(db));
552 return PMINFO_R_ERROR;
558 static int _pkginfo_save_cert_index_info(sqlite3 *db, char *cert_info[])
560 static const char query[] =
561 "INSERT OR REPLACE INTO package_cert_index_info "
562 "(cert_info, cert_id, cert_ref_count) "
565 " (SELECT cert_id FROM package_cert_index_info "
566 " WHERE cert_info=?), "
568 " ((SELECT cert_ref_count FROM package_cert_index_info "
569 " WHERE cert_info=?) + 1), 1))";
575 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
576 if (ret != SQLITE_OK) {
577 _LOGE("prepare error: %s", sqlite3_errmsg(db));
578 return PMINFO_R_ERROR;
581 for (i = 0; i < MAX_CERT_TYPE; i++) {
582 if (cert_info[i] == NULL)
585 sqlite3_bind_text(stmt, idx++, cert_info[i], -1, SQLITE_STATIC);
586 sqlite3_bind_text(stmt, idx++, cert_info[i], -1, SQLITE_STATIC);
587 sqlite3_bind_text(stmt, idx++, cert_info[i], -1, SQLITE_STATIC);
589 ret = sqlite3_step(stmt);
590 if (ret != SQLITE_DONE) {
591 _LOGE("step failed: %s", sqlite3_errmsg(db));
592 sqlite3_finalize(stmt);
593 return PMINFO_R_ERROR;
597 sqlite3_clear_bindings(stmt);
600 sqlite3_finalize(stmt);
605 API int pkgmgrinfo_save_certinfo(const char *pkgid, pkgmgrinfo_instcertinfo_h handle, uid_t uid)
610 pkgmgr_instcertinfo_x *info = (pkgmgr_instcertinfo_x *)handle;
612 if (pkgid == NULL || handle == NULL) {
613 _LOGE("invalid parameter");
614 return PMINFO_R_EINVAL;
617 dbpath = getUserPkgCertDBPathUID(uid);
619 return PMINFO_R_ERROR;
621 ret = sqlite3_open_v2(dbpath, &db, SQLITE_OPEN_READWRITE, NULL);
622 if (ret != SQLITE_OK) {
623 _LOGE("failed to open db: %d", ret);
624 return PMINFO_R_ERROR;
627 ret = sqlite3_exec(db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
628 if (ret != SQLITE_OK) {
629 _LOGE("failed to begin transaction");
630 sqlite3_close_v2(db);
631 return PMINFO_R_ERROR;
634 _check_create_cert_db(db);
636 if (_pkginfo_save_cert_index_info(db, info->cert_info)) {
637 _LOGE("failed to save cert index info");
638 sqlite3_close_v2(db);
639 return PMINFO_R_ERROR;
641 if (_pkginfo_save_cert_info(db, pkgid, info->cert_info)) {
642 _LOGE("failed to save cert info");
643 sqlite3_close_v2(db);
644 return PMINFO_R_ERROR;
647 ret = sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
648 if (ret != SQLITE_OK) {
649 _LOGE("failed to commit transaction, rollback now");
650 sqlite3_exec(GET_DB(cert_db), "ROLLBACK", NULL, NULL, NULL);
651 sqlite3_close_v2(db);
652 return PMINFO_R_ERROR;
655 sqlite3_close_v2(db);
660 API int pkgmgrinfo_destroy_certinfo_set_handle(pkgmgrinfo_instcertinfo_h handle)
662 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
664 pkgmgr_instcertinfo_x *certinfo = NULL;
665 certinfo = (pkgmgr_instcertinfo_x *)handle;
666 if (certinfo->pkgid) {
667 free(certinfo->pkgid);
668 certinfo->pkgid = NULL;
670 for (i = 0; i < MAX_CERT_TYPE; i++) {
671 if ((certinfo->cert_info)[i]) {
672 free((certinfo->cert_info)[i]);
673 (certinfo->cert_info)[i] = NULL;
681 static int _pkginfo_delete_certinfo(sqlite3 *db, const char *pkgid)
683 static const char query[] =
684 "DELETE FROM package_cert_info WHERE package=?";
688 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
689 if (ret != SQLITE_OK) {
690 _LOGE("prepare error: %s", sqlite3_errmsg(db));
691 return PMINFO_R_ERROR;
694 ret = sqlite3_bind_text(stmt, 1, pkgid, -1, SQLITE_STATIC);
695 if (ret != SQLITE_OK) {
696 _LOGE("bind error: %s", sqlite3_errmsg(db));
697 sqlite3_finalize(stmt);
698 return PMINFO_R_ERROR;
701 ret = sqlite3_step(stmt);
702 sqlite3_finalize(stmt);
703 if (ret != SQLITE_DONE) {
704 _LOGE("step error: %s", sqlite3_errmsg(db));
705 return PMINFO_R_ERROR;
711 API int pkgmgrinfo_delete_usr_certinfo(const char *pkgid, uid_t uid)
718 _LOGE("invalid parameter");
719 return PMINFO_R_EINVAL;
722 dbpath = getUserPkgCertDBPathUID(uid);
724 return PMINFO_R_ERROR;
726 ret = sqlite3_open_v2(dbpath, &db, SQLITE_OPEN_READWRITE, NULL);
727 if (ret != SQLITE_OK) {
728 _LOGE("failed to open db: %d", ret);
729 return PMINFO_R_ERROR;
732 ret = sqlite3_exec(db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
733 if (ret != SQLITE_OK) {
734 _LOGE("failed to begin transaction");
735 sqlite3_close_v2(db);
736 return PMINFO_R_ERROR;
739 if (_pkginfo_delete_certinfo(db, pkgid))
740 _LOGE("failed to delete certinfo of %s", pkgid);
742 ret = sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
743 if (ret != SQLITE_OK) {
744 _LOGE("failed to commit transaction, rollback now");
745 sqlite3_exec(GET_DB(cert_db), "ROLLBACK", NULL, NULL, NULL);
746 sqlite3_close_v2(db);
747 return PMINFO_R_ERROR;
750 sqlite3_close_v2(db);
755 API int pkgmgrinfo_delete_certinfo(const char *pkgid)
757 return pkgmgrinfo_delete_usr_certinfo(pkgid, GLOBAL_USER);