Implement pkgmgrinfo_delete_certinfo
authorJunghyun Yeon <jungh.yeon@samsung.com>
Thu, 4 Mar 2021 10:13:12 +0000 (19:13 +0900)
committer연정현/Tizen Platform Lab(SR)/Staff Engineer/삼성전자 <jungh.yeon@samsung.com>
Fri, 5 Mar 2021 00:03:32 +0000 (09:03 +0900)
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
src/manager/pkginfo_manager.cc
src/manager/pkginfo_manager.h
src/pkgmgrinfo_certinfo.c

index 30edad9..e6d1b7a 100644 (file)
@@ -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<std::string> queries;
+       queries.emplace_back(query);
+       sqlite3_free(query);
+
+       std::shared_ptr<pkgmgr_common::parcel::AbstractParcelable> 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<pkgmgr_common::parcel::ResultParcelable> return_parcel(
+                       std::static_pointer_cast<pkgmgr_common::parcel::ResultParcelable>(
+                                       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;
+}
index 39c9a88..b96b578 100644 (file)
@@ -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
index 55e26c4..5c7e23b 100644 (file)
@@ -8,6 +8,7 @@
 #include <sqlite3.h>
 #include <glib.h>
 
+#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) {