From: Junghyun Yeon Date: Thu, 4 Mar 2021 10:13:12 +0000 (+0900) Subject: Implement pkgmgrinfo_delete_certinfo X-Git-Tag: submit/tizen/20210317.082331~82 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0e5373584699e90ace76e862d230be29d248e030;p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git Implement pkgmgrinfo_delete_certinfo Signed-off-by: Junghyun Yeon --- diff --git a/src/manager/pkginfo_manager.cc b/src/manager/pkginfo_manager.cc index 30edad9..e6d1b7a 100644 --- a/src/manager/pkginfo_manager.cc +++ b/src/manager/pkginfo_manager.cc @@ -832,3 +832,49 @@ extern "C" EXPORT_API int _parser_delete_manifest_info(manifest_x *mfx, uid_t ui return 0; } + +extern "C" EXPORT_API int _pkginfo_delete_certinfo(const char *pkgid) +{ + char* query = sqlite3_mprintf("UPDATE package_cert_info SET " + "package_count = package_count - 1 WHERE package=%Q", pkgid); + if (query == nullptr) { + LOG(ERROR) << "Out of memory"; + return PMINFO_R_ERROR; + } + + std::vector queries; + queries.emplace_back(query); + sqlite3_free(query); + + std::shared_ptr parcelable( + new pkgmgr_common::parcel::QueryParcelable(0, queries, + pkgmgr_common::database::AbstractDBHandler::DBType::DB_TYPE_FILE_CERTDB, + pkgmgr_common::database::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE)); + + pkgmgr_client::PkgInfoClient client(parcelable, 0, + pkgmgr_common::ReqType::QUERY); + if (!client.SendRequest()) { + return PMINFO_R_ERROR; + } + + std::shared_ptr return_parcel( + std::static_pointer_cast( + client.GetResultParcel())); + + auto result_list = return_parcel->GetResult(); + if (result_list.size() != 1) { + LOG(ERROR) << "Invalid result"; + return PMINFO_R_ERROR; + } + + if (result_list[0].size() != 1) { + LOG(ERROR) << "Invalid result"; + return PMINFO_R_ERROR; + } + + LOG(ERROR) << "result : " << result_list[0][0]; + if (result_list[0][0] != "SUCCESS") + return PMINFO_R_ERROR; + + return PMINFO_R_OK; +} diff --git a/src/manager/pkginfo_manager.h b/src/manager/pkginfo_manager.h index 39c9a88..b96b578 100644 --- a/src/manager/pkginfo_manager.h +++ b/src/manager/pkginfo_manager.h @@ -76,6 +76,8 @@ int _parser_update_manifest_info(manifest_x *mfx, uid_t uid); int _parser_delete_manifest_info(manifest_x *mfx, uid_t uid); +int _pkginfo_delete_certinfo(const char *pkgid); + #ifdef __cplusplus } #endif diff --git a/src/pkgmgrinfo_certinfo.c b/src/pkgmgrinfo_certinfo.c index 55e26c4..5c7e23b 100644 --- a/src/pkgmgrinfo_certinfo.c +++ b/src/pkgmgrinfo_certinfo.c @@ -8,6 +8,7 @@ #include #include +#include "manager/pkginfo_manager.h" #include "pkgmgr-info.h" #include "pkgmgrinfo_debug.h" #include "pkgmgrinfo_internal.h" @@ -265,9 +266,7 @@ API int pkgmgrinfo_delete_usr_certinfo(const char *pkgid, uid_t uid) { return PMINFO_R_EINVAL; } - // TODO: use pkginfo-client APIs - - return PMINFO_R_OK; + return _pkginfo_delete_certinfo(pkgid); } API int pkgmgrinfo_delete_certinfo(const char *pkgid) {