在AppVerifyBaseInfo结构中添加isPreinstalled字段

修改BundleInfoQuery,使用GetAllPreinstalledApplicationInfos

Signed-off-by: zhangrn98 <zhangrunan3@huawei.com>
This commit is contained in:
zhangrn98
2026-03-17 15:35:36 +08:00
parent bfbd207f51
commit d213e9c593
6 changed files with 31 additions and 21 deletions
+17 -11
View File
@@ -184,22 +184,28 @@ bool BundleInfoQuery::IsPreInstalledApp(const std::string& bundleName)
APP_DOMAIN_VERIFY_HILOGE(APP_DOMAIN_VERIFY_MODULE_COMMON, "bundleMgrProxy is nullptr.");
return false;
}
int32_t userId = BundleInfoQuery::GetCurrentAccountId();
if (userId < 0) {
return false;
}
OHOS::AppExecFwk::BundleInfo bundleInfo;
// use sa identity
std::vector<AppExecFwk::PreinstalledApplicationInfo> preinstalledApplicationInfos;
std::string identity = IPCSkeleton::ResetCallingIdentity();
auto ret = bundleMgrProxy->GetBundleInfoV9(bundleName,
static_cast<int32_t>(AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_SIGNATURE_INFO), bundleInfo, userId);
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MODULE_COMMON, "GetAllPreinstalledApplicationInfos called");
auto ret = bundleMgrProxy->GetAllPreinstalledApplicationInfos(preinstalledApplicationInfos);
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MODULE_COMMON, "GetAllPreinstalledApplicationInfos called end");
IPCSkeleton::SetCallingIdentity(identity);
if (ret != ERR_OK) {
APP_DOMAIN_VERIFY_HILOGE(APP_DOMAIN_VERIFY_MODULE_COMMON, "GetBundleInfo failed, ret: %{public}d.", ret);
APP_DOMAIN_VERIFY_HILOGE(
APP_DOMAIN_VERIFY_MODULE_COMMON, "GetAllPreinstalledApplicationInfos failed, ret: %{public}d.", ret);
return false;
}
auto it = find_if(preinstalledApplicationInfos.begin(), preinstalledApplicationInfos.end(),
[&](const AppExecFwk::PreinstalledApplicationInfo& obj) { return obj.bundleName == bundleName; });
if (it != preinstalledApplicationInfos.end()) {
APP_DOMAIN_VERIFY_HILOGI(
APP_DOMAIN_VERIFY_MODULE_COMMON, "bundle:%{public}s isPreInstallApp:%{public}d", bundleName.c_str(), true);
return true;
} else {
APP_DOMAIN_VERIFY_HILOGI(
APP_DOMAIN_VERIFY_MODULE_COMMON, "bundle:%{public}s isPreInstallApp:%{public}d", bundleName.c_str(), false);
return false;
}
// Check if the app is pre-installed (system app)
return bundleInfo.isPreInstallApp;
}
}
}
+1 -10
View File
@@ -16,7 +16,6 @@
#include "domain_verifier.h"
#include "app_domain_verify_hilog.h"
#include "domain_json_util.h"
#include "bundle_info_query.h"
namespace OHOS {
namespace AppDomainVerify {
@@ -25,15 +24,7 @@ InnerVerifyStatus DomainVerifier::VerifyHost(OHOS::NetStack::HttpClient::Respons
{
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_AGENT_MODULE_SERVICE, "called");
if (responseCode != OHOS::NetStack::HttpClient::ResponseCode::OK) {
InnerVerifyStatus status = GetVerifyStatusFromHttpError(responseCode);
if (status == InnerVerifyStatus::FAILURE_HTTP_UNKNOWN &&
BundleInfoQuery::IsPreInstalledApp(appVerifyBaseInfo.bundleName)) {
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_AGENT_MODULE_SERVICE,
"pre installed app, bundleName: %{public}s", appVerifyBaseInfo.bundleName.c_str());
return InnerVerifyStatus::PRE_INSTALLED;
} else {
return status;
}
return GetVerifyStatusFromHttpError(responseCode);
}
AssetJsonObj assetJsonObj;
if (JsonUtil::Parse(assetJsonsStr, assetJsonObj)) {
+4
View File
@@ -27,6 +27,7 @@
#include "domain_url_util.h"
#include "app_domain_verify_task_mgr.h"
#include "verify_http_task.h"
#include "bundle_info_query.h"
namespace OHOS {
namespace AppDomainVerify {
@@ -43,6 +44,9 @@ void VerifyTask::OnPostVerify(const std::string& uri, const OHOS::NetStack::Http
(appVerifyBaseInfo_.priority < PRIORITY_MIN || appVerifyBaseInfo_.priority > PRIORITY_MAX)) {
status = InnerVerifyStatus::FAILURE_CLIENT_ERROR;
}
if (status == InnerVerifyStatus::FAILURE_HTTP_UNKNOWN && appVerifyBaseInfo_.isPreinstalled) {
status = InnerVerifyStatus::PRE_INSTALLED;
}
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_AGENT_MODULE_SERVICE,
"OnPostVerify status %{public}d appId:%{public}s, priority:%{public}d", status,
appVerifyBaseInfo_.appIdentifier.c_str(), appVerifyBaseInfo_.priority);
@@ -24,6 +24,7 @@ struct AppVerifyBaseInfo : public Parcelable {
std::string bundleName{};
std::string fingerprint{};
int priority{};
bool isPreinstalled{};
AppVerifyBaseInfo();
AppVerifyBaseInfo(const AppVerifyBaseInfo &appVerifyBaseInfo);
@@ -25,6 +25,7 @@ AppVerifyBaseInfo::AppVerifyBaseInfo()
bundleName = "";
fingerprint = "";
priority = PRIORITY_UNSET;
isPreinstalled = false;
}
AppVerifyBaseInfo::AppVerifyBaseInfo(const AppVerifyBaseInfo &appVerifyBaseInfo)
@@ -33,6 +34,7 @@ AppVerifyBaseInfo::AppVerifyBaseInfo(const AppVerifyBaseInfo &appVerifyBaseInfo)
bundleName = appVerifyBaseInfo.bundleName;
fingerprint = appVerifyBaseInfo.fingerprint;
priority = appVerifyBaseInfo.priority;
isPreinstalled = appVerifyBaseInfo.isPreinstalled;
}
bool AppVerifyBaseInfo::Marshalling(Parcel &parcel) const
{
@@ -40,6 +42,7 @@ bool AppVerifyBaseInfo::Marshalling(Parcel &parcel) const
WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, bundleName);
WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, fingerprint);
WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, priority);
WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isPreinstalled);
return true;
}
bool AppVerifyBaseInfo::ReadFromParcel(Parcel &parcel)
@@ -48,6 +51,7 @@ bool AppVerifyBaseInfo::ReadFromParcel(Parcel &parcel)
READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, bundleName);
READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, fingerprint);
READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, priority);
READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isPreinstalled);
return true;
}
@@ -97,6 +97,10 @@ void AppDomainVerifyMgrService::VerifyDomain(const std::string& appIdentifier, c
VerifyResultInfo verifyResultInfo;
verifyResultInfo.appIdentifier = appIdentifier;
// Check if app is pre-installed
bool isPreInstalled = BundleInfoQuery::IsPreInstalledApp(bundleName);
appVerifyBaseInfo.isPreinstalled = isPreInstalled;
CollectDomains(skillUris, verifyResultInfo);
DelayedSingleton<AppDomainVerifyDataMgr>::GetInstance()->InsertVerifyStatus(bundleName, verifyResultInfo);
AppDomainVerifyAgentClient::GetInstance()->SingleVerify(appVerifyBaseInfo, verifyResultInfo);