11 #include "pkgmgr-info.h"
12 #include "pkgmgrinfo_debug.h"
13 #include "pkgmgrinfo_private.h"
14 #include "pkgmgr_parser.h"
16 API int pkgmgrinfo_pkginfo_create_certinfo(pkgmgrinfo_certinfo_h *handle) {
17 retvm_if(handle == NULL, PMINFO_R_EINVAL,
18 "Argument supplied to hold return value is NULL\n");
19 pkgmgr_certinfo_x *certinfo = NULL;
20 certinfo = calloc(1, sizeof(pkgmgr_certinfo_x));
22 retvm_if(certinfo == NULL, PMINFO_R_ERROR, "Malloc Failed\n");
23 *handle = (void *)certinfo;
27 static int _pkginfo_compare_certinfo(
28 sqlite3 *db, const char *l_pkgid, const char *r_pkgid,
29 pkgmgrinfo_cert_compare_result_type_e *result) {
30 static const char query[] =
31 "SELECT COALESCE(author_signer_cert, -1) FROM package_cert_info "
36 int certid[2] = {-1, -1};
42 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
43 if (ret != SQLITE_OK) {
44 _LOGE("prepare error: %s", sqlite3_errmsg(db));
45 return PMINFO_R_ERROR;
48 for (i = 0; i < 2; i++) {
49 ret = sqlite3_bind_text(stmt, 1, pkgid[i], -1, SQLITE_STATIC);
50 if (ret != SQLITE_OK) {
51 _LOGE("bind error: %s", sqlite3_errmsg(db));
52 sqlite3_finalize(stmt);
53 return PMINFO_R_ERROR;
56 ret = sqlite3_step(stmt);
57 if (ret == SQLITE_ROW) {
58 _save_column_int(stmt, 0, &certid[i]);
59 } else if (ret != SQLITE_DONE) {
60 _LOGE("step error: %s", sqlite3_errmsg(db));
61 sqlite3_finalize(stmt);
62 return PMINFO_R_ERROR;
66 sqlite3_clear_bindings(stmt);
69 if (certid[0] == -1 && certid[1] == -1)
70 *result = PMINFO_CERT_COMPARE_BOTH_NO_CERT;
71 else if (certid[0] == -1)
72 *result = PMINFO_CERT_COMPARE_LHS_NO_CERT;
73 else if (certid[1] == -1)
74 *result = PMINFO_CERT_COMPARE_RHS_NO_CERT;
75 else if (certid[0] == certid[1])
76 *result = PMINFO_CERT_COMPARE_MATCH;
78 *result = PMINFO_CERT_COMPARE_MISMATCH;
80 sqlite3_finalize(stmt);
84 API int pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(
85 const char *lhs_package_id, const char *rhs_package_id, uid_t uid,
86 pkgmgrinfo_cert_compare_result_type_e *compare_result) {
91 if (lhs_package_id == NULL || rhs_package_id == NULL ||
92 compare_result == NULL) {
93 _LOGE("invalid parameter");
94 return PMINFO_R_EINVAL;
97 /* open unified global cert db */
98 dbpath = getUserPkgCertDBPath();
99 if (dbpath == NULL) return PMINFO_R_ERROR;
101 ret = __open_db(dbpath, &db, SQLITE_OPEN_READONLY);
102 if (ret != SQLITE_OK) {
103 _LOGE("failed to open db: %d", ret);
105 return PMINFO_R_ERROR;
109 if (_pkginfo_compare_certinfo(db, lhs_package_id, rhs_package_id,
111 _LOGE("failed to compare certinfo");
112 sqlite3_close_v2(db);
113 return PMINFO_R_ERROR;
116 sqlite3_close_v2(db);
121 API int pkgmgrinfo_pkginfo_compare_pkg_cert_info(
122 const char *lhs_package_id, const char *rhs_package_id,
123 pkgmgrinfo_cert_compare_result_type_e *compare_result) {
124 return pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(
125 lhs_package_id, rhs_package_id, _getuid(), compare_result);
128 static int _pkginfo_get_pkgid_from_appid(uid_t uid, const char *appid,
130 static const char query[] =
131 "SELECT package FROM package_app_info WHERE app_id=?";
137 dbpath = getUserPkgParserDBPathUID(uid);
138 if (dbpath == NULL) return PMINFO_R_ERROR;
140 ret = __open_db(dbpath, &db, SQLITE_OPEN_READONLY);
141 if (ret != SQLITE_OK) {
142 _LOGE("failed to open db: %d", ret);
144 return PMINFO_R_ERROR;
148 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
149 if (ret != SQLITE_OK) {
150 _LOGE("prepare error: %s", sqlite3_errmsg(db));
151 sqlite3_close_v2(db);
152 return PMINFO_R_ERROR;
155 ret = sqlite3_bind_text(stmt, 1, appid, -1, SQLITE_STATIC);
156 if (ret != SQLITE_OK) {
157 _LOGE("bind error: %s", sqlite3_errmsg(db));
158 sqlite3_finalize(stmt);
159 sqlite3_close_v2(db);
160 return PMINFO_R_ERROR;
163 ret = sqlite3_step(stmt);
164 if (ret == SQLITE_ROW) {
165 _save_column_str(stmt, 0, pkgid);
167 } else if (ret == SQLITE_DONE) {
168 _LOGI("cannot find pkgid of app %s for uid %d", appid, (int)uid);
169 ret = PMINFO_R_ENOENT;
171 _LOGE("step error: %s", sqlite3_errmsg(db));
172 ret = PMINFO_R_ERROR;
175 sqlite3_finalize(stmt);
176 sqlite3_close_v2(db);
181 API int pkgmgrinfo_pkginfo_compare_usr_app_cert_info(
182 const char *lhs_app_id, const char *rhs_app_id, uid_t uid,
183 pkgmgrinfo_cert_compare_result_type_e *compare_result) {
185 char *l_pkgid = NULL;
186 char *r_pkgid = NULL;
188 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL) {
189 _LOGE("invalid parameter");
190 return PMINFO_R_EINVAL;
193 ret = _pkginfo_get_pkgid_from_appid(uid, lhs_app_id, &l_pkgid);
194 if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
195 ret = _pkginfo_get_pkgid_from_appid(GLOBAL_USER, lhs_app_id, &l_pkgid);
197 if (ret != PMINFO_R_OK) return ret;
199 ret = _pkginfo_get_pkgid_from_appid(uid, rhs_app_id, &r_pkgid);
200 if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
201 ret = _pkginfo_get_pkgid_from_appid(GLOBAL_USER, rhs_app_id, &r_pkgid);
203 if (ret != PMINFO_R_OK) {
208 ret = pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(l_pkgid, r_pkgid, uid,
217 API int pkgmgrinfo_pkginfo_compare_app_cert_info(
218 const char *lhs_app_id, const char *rhs_app_id,
219 pkgmgrinfo_cert_compare_result_type_e *compare_result) {
220 return pkgmgrinfo_pkginfo_compare_usr_app_cert_info(
221 lhs_app_id, rhs_app_id, _getuid(), compare_result);
224 static int _pkginfo_get_cert(sqlite3 *db, int cert_id[], char *cert_info[]) {
225 static const char query[] =
226 "SELECT cert_info FROM package_cert_index_info WHERE cert_id=?";
231 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
232 if (ret != SQLITE_OK) {
233 _LOGE("prepare failed: %s", sqlite3_errmsg(db));
234 return PMINFO_R_ERROR;
237 for (i = 0; i < MAX_CERT_TYPE; i++) {
238 ret = sqlite3_bind_int(stmt, 1, cert_id[i]);
239 if (ret != SQLITE_OK) {
240 sqlite3_finalize(stmt);
241 _LOGE("bind failed: %s", sqlite3_errmsg(db));
242 return PMINFO_R_ERROR;
245 ret = sqlite3_step(stmt);
246 if (ret == SQLITE_DONE) {
248 sqlite3_clear_bindings(stmt);
250 } else if (ret != SQLITE_ROW) {
251 _LOGE("step failed: %s", sqlite3_errmsg(db));
252 sqlite3_finalize(stmt);
253 return PMINFO_R_ERROR;
256 _save_column_str(stmt, 0, &cert_info[i]);
258 sqlite3_clear_bindings(stmt);
261 sqlite3_finalize(stmt);
266 static int _pkginfo_get_certid(sqlite3 *db, const char *pkgid, int cert_id[]) {
267 static const char query[] =
268 "SELECT author_root_cert, author_im_cert, author_signer_cert, "
269 "dist_root_cert, dist_im_cert, dist_signer_cert, "
270 "dist2_root_cert, dist2_im_cert, dist2_signer_cert "
271 "FROM package_cert_info WHERE package=?";
276 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
277 if (ret != SQLITE_OK) {
278 _LOGE("prepare failed: %s", sqlite3_errmsg(db));
279 return PMINFO_R_ERROR;
282 ret = sqlite3_bind_text(stmt, 1, pkgid, -1, SQLITE_STATIC);
283 if (ret != SQLITE_OK) {
284 _LOGE("bind failed: %s", sqlite3_errmsg(db));
285 sqlite3_finalize(stmt);
286 return PMINFO_R_ERROR;
289 ret = sqlite3_step(stmt);
290 if (ret == SQLITE_DONE) {
291 sqlite3_finalize(stmt);
292 return PMINFO_R_ENOENT;
293 } else if (ret != SQLITE_ROW) {
294 _LOGE("step failed: %s", sqlite3_errmsg(db));
295 sqlite3_finalize(stmt);
296 return PMINFO_R_ERROR;
300 _save_column_int(stmt, idx++, &cert_id[PMINFO_AUTHOR_ROOT_CERT]);
301 _save_column_int(stmt, idx++, &cert_id[PMINFO_AUTHOR_INTERMEDIATE_CERT]);
302 _save_column_int(stmt, idx++, &cert_id[PMINFO_AUTHOR_SIGNER_CERT]);
303 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR_ROOT_CERT]);
304 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR_INTERMEDIATE_CERT]);
305 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR_SIGNER_CERT]);
306 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR2_ROOT_CERT]);
307 _save_column_int(stmt, idx++,
308 &cert_id[PMINFO_DISTRIBUTOR2_INTERMEDIATE_CERT]);
309 _save_column_int(stmt, idx++, &cert_id[PMINFO_DISTRIBUTOR2_SIGNER_CERT]);
311 sqlite3_finalize(stmt);
316 static int _pkginfo_get_certinfo(const char *pkgid, pkgmgr_certinfo_x *info) {
321 /* open unified global cert db */
322 dbpath = getUserPkgCertDBPath();
323 if (dbpath == NULL) return PMINFO_R_ERROR;
325 ret = __open_db(dbpath, &db, SQLITE_OPEN_READONLY);
326 if (ret != SQLITE_OK) {
327 _LOGE("failed to open db: %d", ret);
329 return PMINFO_R_ERROR;
333 ret = _pkginfo_get_certid(db, pkgid, info->cert_id);
334 if (ret != PMINFO_R_OK) {
335 sqlite3_close_v2(db);
339 ret = _pkginfo_get_cert(db, info->cert_id, info->cert_info);
340 if (ret != PMINFO_R_OK) {
341 sqlite3_close_v2(db);
345 sqlite3_close_v2(db);
350 API int pkgmgrinfo_pkginfo_load_certinfo(const char *pkgid,
351 pkgmgrinfo_certinfo_h handle,
354 pkgmgr_certinfo_x *info = (pkgmgr_certinfo_x *)handle;
356 if (pkgid == NULL || handle == NULL) {
357 _LOGE("invalid parameter");
358 return PMINFO_R_EINVAL;
361 ret = _pkginfo_get_certinfo(pkgid, info);
362 if (ret != PMINFO_R_OK) _LOGE("failed to get certinfo of %s ", pkgid);
367 API int pkgmgrinfo_pkginfo_get_cert_value(pkgmgrinfo_certinfo_h handle,
368 pkgmgrinfo_cert_type cert_type,
369 const char **cert_value) {
370 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
371 retvm_if(cert_value == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
372 retvm_if(cert_type < PMINFO_AUTHOR_ROOT_CERT, PMINFO_R_EINVAL,
373 "Invalid certificate type\n");
374 retvm_if(cert_type > PMINFO_DISTRIBUTOR2_SIGNER_CERT, PMINFO_R_EINVAL,
375 "Invalid certificate type\n");
376 pkgmgr_certinfo_x *certinfo = NULL;
377 certinfo = (pkgmgr_certinfo_x *)handle;
378 if ((certinfo->cert_info)[cert_type])
379 *cert_value = (certinfo->cert_info)[cert_type];
385 API int pkgmgrinfo_pkginfo_destroy_certinfo(pkgmgrinfo_certinfo_h handle) {
386 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
388 pkgmgr_certinfo_x *certinfo = NULL;
389 certinfo = (pkgmgr_certinfo_x *)handle;
390 if (certinfo->pkgid) {
391 free(certinfo->pkgid);
392 certinfo->pkgid = NULL;
394 for (i = 0; i < MAX_CERT_TYPE; i++) {
395 if ((certinfo->cert_info)[i]) {
396 free((certinfo->cert_info)[i]);
397 (certinfo->cert_info)[i] = NULL;
405 API int pkgmgrinfo_create_certinfo_set_handle(
406 pkgmgrinfo_instcertinfo_h *handle) {
407 retvm_if(handle == NULL, PMINFO_R_EINVAL,
408 "Argument supplied to hold return value is NULL\n");
409 pkgmgr_certinfo_x *certinfo = NULL;
411 certinfo = calloc(1, sizeof(pkgmgr_certinfo_x));
412 retvm_if(certinfo == NULL, PMINFO_R_ERROR, "Malloc Failed\n");
413 *handle = (void *)certinfo;
417 API int pkgmgrinfo_set_cert_value(pkgmgrinfo_instcertinfo_h handle,
418 pkgmgrinfo_instcert_type cert_type,
420 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
421 retvm_if(cert_value == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
422 retvm_if(cert_type < PMINFO_SET_AUTHOR_ROOT_CERT, PMINFO_R_EINVAL,
423 "Invalid certificate type\n");
424 retvm_if(cert_type > PMINFO_SET_DISTRIBUTOR2_SIGNER_CERT, PMINFO_R_EINVAL,
425 "Invalid certificate type\n");
426 pkgmgr_certinfo_x *certinfo = NULL;
427 certinfo = (pkgmgr_certinfo_x *)handle;
428 if (certinfo->cert_info[cert_type]) free(certinfo->cert_info[cert_type]);
429 (certinfo->cert_info)[cert_type] = strdup(cert_value);
433 static int _pkginfo_save_cert_info(sqlite3 *db, const char *pkgid,
435 static const char query_insert[] =
436 "INSERT INTO package_cert_info (package, package_count,"
437 " author_root_cert, author_im_cert, author_signer_cert,"
438 " dist_root_cert, dist_im_cert, dist_signer_cert,"
439 " dist2_root_cert, dist2_im_cert, dist2_signer_cert) "
441 " (SELECT cert_id FROM package_cert_index_info"
442 " WHERE cert_info=?),"
443 " (SELECT cert_id FROM package_cert_index_info"
444 " WHERE cert_info=?),"
445 " (SELECT cert_id FROM package_cert_index_info"
446 " WHERE cert_info=?),"
447 " (SELECT cert_id FROM package_cert_index_info"
448 " WHERE cert_info=?),"
449 " (SELECT cert_id FROM package_cert_index_info"
450 " WHERE cert_info=?),"
451 " (SELECT cert_id FROM package_cert_index_info"
452 " WHERE cert_info=?),"
453 " (SELECT cert_id FROM package_cert_index_info"
454 " WHERE cert_info=?),"
455 " (SELECT cert_id FROM package_cert_index_info"
456 " WHERE cert_info=?),"
457 " (SELECT cert_id FROM package_cert_index_info"
458 " WHERE cert_info=?))";
459 static const char query_update[] =
460 "UPDATE package_cert_info "
461 "SET package_count = package_count + 1 "
468 ret = sqlite3_prepare_v2(db, query_insert, strlen(query_insert), &stmt, NULL);
469 if (ret != SQLITE_OK) {
470 _LOGE("prepare error: %s", sqlite3_errmsg(db));
471 return PMINFO_R_ERROR;
475 ret = sqlite3_bind_text(stmt, idx++, pkgid, -1, SQLITE_STATIC);
476 if (ret != SQLITE_OK) {
477 _LOGE("bind failed: %s", sqlite3_errmsg(db));
478 sqlite3_finalize(stmt);
479 return PMINFO_R_ERROR;
482 for (i = 0; i < MAX_CERT_TYPE; i++) {
483 if (sqlite3_bind_text(stmt, idx++, cert_info[i], -1, SQLITE_STATIC)) {
484 _LOGE("bind error: %s", sqlite3_errmsg(db));
485 sqlite3_finalize(stmt);
486 return PMINFO_R_ERROR;
490 ret = sqlite3_step(stmt);
491 sqlite3_finalize(stmt);
492 if (ret == SQLITE_CONSTRAINT) {
494 sqlite3_prepare_v2(db, query_update, strlen(query_update), &stmt, NULL);
495 if (ret != SQLITE_OK) {
496 _LOGE("prepare error: %s", sqlite3_errmsg(db));
497 return PMINFO_R_ERROR;
500 if (sqlite3_bind_text(stmt, 1, pkgid, -1, SQLITE_STATIC)) {
501 _LOGE("bind error: %s", sqlite3_errmsg(db));
502 sqlite3_finalize(stmt);
503 return PMINFO_R_ERROR;
506 ret = sqlite3_step(stmt);
507 sqlite3_finalize(stmt);
510 if (ret != SQLITE_DONE) {
511 _LOGE("step error: %s", sqlite3_errmsg(db));
512 return PMINFO_R_ERROR;
518 static int _pkginfo_save_cert_index_info(sqlite3 *db, char *cert_info[]) {
519 static const char query[] =
520 "INSERT OR REPLACE INTO package_cert_index_info "
521 "(cert_info, cert_id, cert_ref_count) "
524 " (SELECT cert_id FROM package_cert_index_info "
525 " WHERE cert_info=?), "
527 " ((SELECT cert_ref_count FROM package_cert_index_info "
528 " WHERE cert_info=?) + 1), 1))";
534 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
535 if (ret != SQLITE_OK) {
536 _LOGE("prepare error: %s", sqlite3_errmsg(db));
537 return PMINFO_R_ERROR;
540 for (i = 0; i < MAX_CERT_TYPE; i++) {
541 if (cert_info[i] == NULL) continue;
543 ret = sqlite3_bind_text(stmt, idx++, cert_info[i], -1, SQLITE_STATIC);
544 if (ret != SQLITE_OK) {
545 _LOGE("bind failed: %s", sqlite3_errmsg(db));
546 sqlite3_finalize(stmt);
547 return PMINFO_R_ERROR;
549 ret = sqlite3_bind_text(stmt, idx++, cert_info[i], -1, SQLITE_STATIC);
550 if (ret != SQLITE_OK) {
551 _LOGE("bind failed: %s", sqlite3_errmsg(db));
552 sqlite3_finalize(stmt);
553 return PMINFO_R_ERROR;
555 ret = sqlite3_bind_text(stmt, idx++, cert_info[i], -1, SQLITE_STATIC);
556 if (ret != SQLITE_OK) {
557 _LOGE("bind failed: %s", sqlite3_errmsg(db));
558 sqlite3_finalize(stmt);
559 return PMINFO_R_ERROR;
562 ret = sqlite3_step(stmt);
563 if (ret != SQLITE_DONE) {
564 _LOGE("step failed: %s", sqlite3_errmsg(db));
565 sqlite3_finalize(stmt);
566 return PMINFO_R_ERROR;
570 sqlite3_clear_bindings(stmt);
573 sqlite3_finalize(stmt);
578 API int pkgmgrinfo_save_certinfo(const char *pkgid,
579 pkgmgrinfo_instcertinfo_h handle, uid_t uid) {
583 pkgmgr_certinfo_x *info = (pkgmgr_certinfo_x *)handle;
585 if (pkgid == NULL || handle == NULL) {
586 _LOGE("invalid parameter");
587 return PMINFO_R_EINVAL;
590 _check_create_cert_db();
592 /* open unified global cert db */
593 dbpath = getUserPkgCertDBPath();
594 if (dbpath == NULL) return PMINFO_R_ERROR;
596 ret = __open_db(dbpath, &db, SQLITE_OPEN_READWRITE);
597 if (ret != SQLITE_OK) {
598 _LOGE("failed to open db: %d", ret);
600 return PMINFO_R_ERROR;
604 ret = sqlite3_exec(db, "BEGIN DEFERRED", NULL, NULL, NULL);
605 if (ret != SQLITE_OK) {
606 _LOGE("failed to begin transaction");
607 sqlite3_close_v2(db);
608 return PMINFO_R_ERROR;
611 if (_pkginfo_save_cert_index_info(db, info->cert_info)) {
612 _LOGE("failed to save cert index info, rollback now");
613 ret = sqlite3_exec(db, "ROLLBACK", NULL, NULL, NULL);
614 if (ret != SQLITE_OK)
615 LOGE("Rollback is failed. error(%s)", sqlite3_errmsg(db));
616 sqlite3_close_v2(db);
617 return PMINFO_R_ERROR;
620 if (_pkginfo_save_cert_info(db, pkgid, info->cert_info)) {
621 _LOGE("failed to save cert info, rollback now");
622 ret = sqlite3_exec(db, "ROLLBACK", NULL, NULL, NULL);
623 if (ret != SQLITE_OK)
624 LOGE("Rollback is failed. error(%s)", sqlite3_errmsg(db));
625 sqlite3_close_v2(db);
626 return PMINFO_R_ERROR;
629 ret = sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
630 if (ret != SQLITE_OK) {
631 _LOGE("failed to commit transaction, rollback now");
632 ret = sqlite3_exec(db, "ROLLBACK", NULL, NULL, NULL);
633 if (ret != SQLITE_OK)
634 LOGE("Rollback is failed. error(%s)", sqlite3_errmsg(db));
635 sqlite3_close_v2(db);
636 return PMINFO_R_ERROR;
639 sqlite3_close_v2(db);
644 API int pkgmgrinfo_destroy_certinfo_set_handle(
645 pkgmgrinfo_instcertinfo_h handle) {
646 retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
648 pkgmgr_certinfo_x *certinfo = NULL;
649 certinfo = (pkgmgr_certinfo_x *)handle;
650 if (certinfo->pkgid) {
651 free(certinfo->pkgid);
652 certinfo->pkgid = NULL;
654 for (i = 0; i < MAX_CERT_TYPE; i++) {
655 if ((certinfo->cert_info)[i]) {
656 free((certinfo->cert_info)[i]);
657 (certinfo->cert_info)[i] = NULL;
665 static int _pkginfo_delete_certinfo(sqlite3 *db, const char *pkgid) {
666 static const char query[] =
667 "UPDATE package_cert_info "
668 "SET package_count = package_count - 1 "
673 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
674 if (ret != SQLITE_OK) {
675 _LOGE("prepare error: %s", sqlite3_errmsg(db));
676 return PMINFO_R_ERROR;
679 ret = sqlite3_bind_text(stmt, 1, pkgid, -1, SQLITE_STATIC);
680 if (ret != SQLITE_OK) {
681 _LOGE("bind error: %s", sqlite3_errmsg(db));
682 sqlite3_finalize(stmt);
683 return PMINFO_R_ERROR;
686 ret = sqlite3_step(stmt);
687 sqlite3_finalize(stmt);
688 if (ret != SQLITE_DONE) {
689 _LOGE("step error: %s", sqlite3_errmsg(db));
690 return PMINFO_R_ERROR;
696 API int pkgmgrinfo_delete_usr_certinfo(const char *pkgid, uid_t uid) {
702 _LOGE("invalid parameter");
703 return PMINFO_R_EINVAL;
706 /* open unified global cert db */
707 dbpath = getUserPkgCertDBPath();
708 if (dbpath == NULL) return PMINFO_R_ERROR;
710 ret = __open_db(dbpath, &db, SQLITE_OPEN_READWRITE);
711 if (ret != SQLITE_OK) {
712 _LOGE("failed to open db: %d", ret);
714 return PMINFO_R_ERROR;
718 ret = sqlite3_exec(db, "BEGIN DEFERRED", NULL, NULL, NULL);
719 if (ret != SQLITE_OK) {
720 _LOGE("failed to begin transaction");
721 sqlite3_close_v2(db);
722 return PMINFO_R_ERROR;
725 if (_pkginfo_delete_certinfo(db, pkgid)) {
726 _LOGE("failed to delete certinfo of %s, rollback now", pkgid);
727 ret = sqlite3_exec(db, "ROLLBACK", NULL, NULL, NULL);
728 if (ret != SQLITE_OK)
729 LOGE("Rollback is failed. error(%s)", sqlite3_errmsg(db));
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 ret = sqlite3_exec(db, "ROLLBACK", NULL, NULL, NULL);
738 if (ret != SQLITE_OK)
739 LOGE("Rollback is failed. error(%s)", sqlite3_errmsg(db));
740 sqlite3_close_v2(db);
741 return PMINFO_R_ERROR;
744 sqlite3_close_v2(db);
749 API int pkgmgrinfo_delete_certinfo(const char *pkgid) {
750 return pkgmgrinfo_delete_usr_certinfo(pkgid, _getuid());