const char *r_pkgid, pkgmgrinfo_cert_compare_result_type_e *result) {
char *query = sqlite3_mprintf("SELECT package, "
"COALESCE(author_signer_cert, -1) FROM package_cert_info WHERE "
- "package IN (%Q, %Q)");
+ "package IN (%Q, %Q)", l_pkgid, r_pkgid);
if (query == nullptr) {
LOG(ERROR) << "Out of memory";
return PMINFO_R_ERROR;
else
*result = PMINFO_CERT_COMPARE_MISMATCH;
-/*
- auto cert_list = return_parcel->GetResult();
- for (auto& cert : cert_list) {
+ return PMINFO_R_OK;
+}
+extern "C" EXPORT_API int _certinfo_compare_app_certinfo(uid_t uid,
+ const char *l_appid, const char *r_appid,
+ pkgmgrinfo_cert_compare_result_type_e *result) {
+ char* query = sqlite3_mprintf("SELECT app_id, package FROM "
+ "package_app_info WHERE app_id IN (%Q, %Q)", l_appid, r_appid);
+ if (query == nullptr) {
+ LOG(ERROR) << "Out of memory";
+ return PMINFO_R_ERROR;
}
-*/
- return PMINFO_R_OK;
+ 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(uid, queries,
+ pkgmgr_common::database::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
+ pkgmgr_common::database::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+ pkgmgr_client::PkgInfoClient client(parcelable, uid,
+ 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 pkgid_list = return_parcel->GetResult();
+ std::map<std::string, std::string> result_map;
+ for (auto& pkgid : pkgid_list)
+ result_map.insert(make_pair(pkgid.front(), pkgid.back()));
+
+ if (result_map.find(std::string(l_appid)) == result_map.end()) {
+ LOG(ERROR) << "Cannot find pkgid of app " << l_appid
+ << " for uid " << uid;
+ return PMINFO_R_ENOENT;
+ } else if (result_map.find(std::string(r_appid)) == result_map.end()) {
+ LOG(ERROR) << "Cannot find pkgid of app " << r_appid
+ << " for uid " << uid;
+ return PMINFO_R_ENOENT;
+ }
+
+ const char* l_pkgid = result_map.find(
+ std::string(l_appid))->second.c_str();
+ const char* r_pkgid = result_map.find(
+ std::string(r_appid))->second.c_str();
+
+ return _certinfo_compare_pkg_certinfo(l_pkgid, r_pkgid, result);
}
extern "C" EXPORT_API int _parser_execute_write_query(const char *query, uid_t uid)