From 199957409b32e6bcd59d399588274c4cfe6fa923 Mon Sep 17 00:00:00 2001 From: Zhou Shihui Date: Mon, 1 Sep 2025 14:58:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=83=E6=9C=8D=E5=8A=A1=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E9=85=8D=E9=A2=9D=E6=A0=A1=E9=AA=8C=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Zhou Shihui --- .../bundlemgr/include/base_bundle_installer.h | 2 +- .../bundle_mgr_service_event_handler.h | 2 +- .../bundlemgr/src/base_bundle_installer.cpp | 10 +++- .../src/bundle_mgr_service_event_handler.cpp | 9 +++- .../bms_bundle_installer_permission_test.cpp | 43 +++++++++++++++++ .../bms_bundle_installer_test.cpp | 41 ----------------- .../bms_bundle_permission_getrequest_test.cpp | 46 +++++++++++++++++++ .../bms_event_handler_test.cpp | 43 ----------------- 8 files changed, 106 insertions(+), 90 deletions(-) diff --git a/services/bundlemgr/include/base_bundle_installer.h b/services/bundlemgr/include/base_bundle_installer.h index 4655355be4..0ce22a287a 100644 --- a/services/bundlemgr/include/base_bundle_installer.h +++ b/services/bundlemgr/include/base_bundle_installer.h @@ -764,7 +764,7 @@ private: #endif void PrepareBundleDirQuota(const std::string &bundleName, const int32_t uid, const std::string &bundleDataDirPath, const int32_t limitSize) const; - void ParseSizeFromProvision(int32_t &sizeMb) const; + void ParseSizeFromProvision(const std::string &bundleName, const int32_t uid, int32_t &sizeMb) const; void VerifyDomain(); void ClearDomainVerifyStatus(const std::string &appIdentifier, const std::string &bundleName) const; bool IsRdDevice() const; diff --git a/services/bundlemgr/include/bundle_mgr_service_event_handler.h b/services/bundlemgr/include/bundle_mgr_service_event_handler.h index 270dbcfe63..7a4b98aafb 100644 --- a/services/bundlemgr/include/bundle_mgr_service_event_handler.h +++ b/services/bundlemgr/include/bundle_mgr_service_event_handler.h @@ -559,7 +559,7 @@ private: void PrepareBundleDirQuota(const std::string &bundleName, const int32_t uid, const std::string &bundleDataDirPath, const int32_t limitSize) const; - void ParseSizeFromProvision(const std::string &bundleName, int32_t &sizeMb) const; + void ParseSizeFromProvision(const std::string &bundleName, const int32_t uid, int32_t &sizeMb) const; void RefreshQuotaForAllUid(); void InnerProcessStockBundleRouterInfo(); diff --git a/services/bundlemgr/src/base_bundle_installer.cpp b/services/bundlemgr/src/base_bundle_installer.cpp index 2d83c03167..2c83751639 100644 --- a/services/bundlemgr/src/base_bundle_installer.cpp +++ b/services/bundlemgr/src/base_bundle_installer.cpp @@ -3230,11 +3230,12 @@ void BaseBundleInstaller::PrepareBundleDirQuota(const std::string &bundleName, c } #endif // QUOTA_PARAM_SET_ENABLE #endif // STORAGE_SERVICE_ENABLE - ParseSizeFromProvision(atomicserviceDatasizeThreshold); + ParseSizeFromProvision(bundleName, uid, atomicserviceDatasizeThreshold); SendToStorageQuota(bundleName, uid, bundleDataDirPath, atomicserviceDatasizeThreshold); } -void BaseBundleInstaller::ParseSizeFromProvision(int32_t &sizeMb) const +void BaseBundleInstaller::ParseSizeFromProvision( + const std::string &bundleName, const int32_t uid, int32_t &sizeMb) const { std::string appServiceCapabilities = verifyRes_.GetProvisionInfo().appServiceCapabilities; if (appServiceCapabilities.empty()) { @@ -3245,6 +3246,11 @@ void BaseBundleInstaller::ParseSizeFromProvision(int32_t &sizeMb) const if (item.first != ServiceConstants::PERMISSION_MANAGE_STORAGE) { continue; } + if (BundlePermissionMgr::VerifyPermission(bundleName, ServiceConstants::PERMISSION_MANAGE_STORAGE, + uid / Constants::BASE_USER_RANGE) != Security::AccessToken::PermissionState::PERMISSION_GRANTED) { + APP_LOGW("no manage storage permission for %{public}s", bundleName.c_str()); + return; + } std::unordered_map storageMap = BundleUtil::ParseMapFromJson(item.second); auto it = storageMap.find(KEY_STORAGE_SIZE); if (it == storageMap.end()) { diff --git a/services/bundlemgr/src/bundle_mgr_service_event_handler.cpp b/services/bundlemgr/src/bundle_mgr_service_event_handler.cpp index a05d40006e..5c8a3af7fd 100644 --- a/services/bundlemgr/src/bundle_mgr_service_event_handler.cpp +++ b/services/bundlemgr/src/bundle_mgr_service_event_handler.cpp @@ -1969,11 +1969,11 @@ void BMSEventHandler::PrepareBundleDirQuota(const std::string &bundleName, const } #endif // QUOTA_PARAM_SET_ENABLE #endif // STORAGE_SERVICE_ENABLE - ParseSizeFromProvision(bundleName, atomicserviceDatasizeThreshold); + ParseSizeFromProvision(bundleName, uid, atomicserviceDatasizeThreshold); SendToStorageQuota(bundleName, uid, bundleDataDirPath, atomicserviceDatasizeThreshold); } -void BMSEventHandler::ParseSizeFromProvision(const std::string &bundleName, int32_t &sizeMb) const +void BMSEventHandler::ParseSizeFromProvision(const std::string &bundleName, const int32_t uid, int32_t &sizeMb) const { AppProvisionInfo provisionInfo; if (!DelayedSingleton::GetInstance()->GetAppProvisionInfo(bundleName, provisionInfo)) { @@ -1988,6 +1988,11 @@ void BMSEventHandler::ParseSizeFromProvision(const std::string &bundleName, int3 if (item.first != ServiceConstants::PERMISSION_MANAGE_STORAGE) { continue; } + if (BundlePermissionMgr::VerifyPermission(bundleName, ServiceConstants::PERMISSION_MANAGE_STORAGE, + uid / Constants::BASE_USER_RANGE) != Security::AccessToken::PermissionState::PERMISSION_GRANTED) { + APP_LOGW("no manage storage permission for %{public}s", bundleName.c_str()); + return; + } std::unordered_map storageMap = BundleUtil::ParseMapFromJson(item.second); auto it = storageMap.find(KEY_STORAGE_SIZE); if (it == storageMap.end()) { diff --git a/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_permission_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_permission_test.cpp index 05deb2f311..58dc2d7aed 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_permission_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_permission_test.cpp @@ -1219,4 +1219,47 @@ HWTEST_F(BmsBundleInstallerPermissionTest, ProcessArkStartupCache_0010, Function ErrCode ret = installer.ProcessArkStartupCache(ceateArk, 1, 100); EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALLD_PERMISSION_DENIED); } + +/** +* @tc.number: ParseSizeFromProvision_0010 +* @tc.name: test arseSizeFromProvision +* @tc.desc: 1.Test arseSizeFromProvision +*/ +HWTEST_F(BmsBundleInstallerPermissionTest, ParseSizeFromProvision_0010, Function | MediumTest | Level1) +{ + BaseBundleInstaller installer; + int32_t sizeMb = 200; + std::string bundleName = "test"; + int32_t uid = 20020000; + Security::Verify::ProvisionInfo provisionInfo; + + provisionInfo.appServiceCapabilities = ""; + installer.verifyRes_.SetProvisionInfo(provisionInfo); + installer.ParseSizeFromProvision(bundleName, uid, sizeMb); + EXPECT_EQ(sizeMb, 200); + + provisionInfo.appServiceCapabilities = + "{\"ohos.permission.TEST\":{\"storageSize\": 1024}}"; + installer.verifyRes_.SetProvisionInfo(provisionInfo); + installer.ParseSizeFromProvision(bundleName, uid, sizeMb); + EXPECT_EQ(sizeMb, 200); + + provisionInfo.appServiceCapabilities = + "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"test\": 1024}}"; + installer.verifyRes_.SetProvisionInfo(provisionInfo); + installer.ParseSizeFromProvision(bundleName, uid, sizeMb); + EXPECT_EQ(sizeMb, 200); + + provisionInfo.appServiceCapabilities = + "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"storageSize\": 100}}"; + installer.verifyRes_.SetProvisionInfo(provisionInfo); + installer.ParseSizeFromProvision(bundleName, uid, sizeMb); + EXPECT_EQ(sizeMb, 200); + + provisionInfo.appServiceCapabilities = + "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"storageSize\": 1024}}"; + installer.verifyRes_.SetProvisionInfo(provisionInfo); + installer.ParseSizeFromProvision(bundleName, uid, sizeMb); + EXPECT_EQ(sizeMb, 1024); +} } // OHOS diff --git a/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_test.cpp index 853df9294e..388b6e0b08 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_test.cpp @@ -10038,47 +10038,6 @@ HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_9600, Function | MediumTest EXPECT_TRUE(targetSoPath.find(BUNDLE_CODE_PATH_DIR_NEW) == 0); } -/** -* @tc.number: ParseSizeFromProvision_0010 -* @tc.name: test arseSizeFromProvision -* @tc.desc: 1.Test arseSizeFromProvision -*/ -HWTEST_F(BmsBundleInstallerTest, ParseSizeFromProvision_0010, Function | MediumTest | Level1) -{ - BaseBundleInstaller installer; - int32_t sizeMb = 200; - Security::Verify::ProvisionInfo provisionInfo; - - provisionInfo.appServiceCapabilities = ""; - installer.verifyRes_.SetProvisionInfo(provisionInfo); - installer.ParseSizeFromProvision(sizeMb); - EXPECT_EQ(sizeMb, 200); - - provisionInfo.appServiceCapabilities = - "{\"ohos.permission.TEST\":{\"storageSize\": 1024}}"; - installer.verifyRes_.SetProvisionInfo(provisionInfo); - installer.ParseSizeFromProvision(sizeMb); - EXPECT_EQ(sizeMb, 200); - - provisionInfo.appServiceCapabilities = - "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"test\": 1024}}"; - installer.verifyRes_.SetProvisionInfo(provisionInfo); - installer.ParseSizeFromProvision(sizeMb); - EXPECT_EQ(sizeMb, 200); - - provisionInfo.appServiceCapabilities = - "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"storageSize\": 100}}"; - installer.verifyRes_.SetProvisionInfo(provisionInfo); - installer.ParseSizeFromProvision(sizeMb); - EXPECT_EQ(sizeMb, 200); - - provisionInfo.appServiceCapabilities = - "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"storageSize\": 1024}}"; - installer.verifyRes_.SetProvisionInfo(provisionInfo); - installer.ParseSizeFromProvision(sizeMb); - EXPECT_EQ(sizeMb, 1024); -} - /** * @tc.number: ProcessDynamicIconFileWhenUpdate_0010 * @tc.name: test ProcessDynamicIconFileWhenUpdate diff --git a/services/bundlemgr/test/unittest/bms_bundle_permission_grant_test/bms_bundle_permission_getrequest_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_permission_grant_test/bms_bundle_permission_getrequest_test.cpp index ce247dd1c4..e5e0b72a0b 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_permission_grant_test/bms_bundle_permission_getrequest_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_permission_grant_test/bms_bundle_permission_getrequest_test.cpp @@ -19,9 +19,11 @@ #include #include +#include "app_provision_info_manager.h" #include "bundle_info.h" #include "bundle_mgr_host_impl.h" #include "bundle_mgr_service.h" +#include "bundle_mgr_service_event_handler.h" #include "bundle_permission_mgr.h" using namespace testing::ext; @@ -274,4 +276,48 @@ HWTEST_F(BmsBundlePermissionGetRequestTest, BundleMgrHostImpl_0009, Function | S bool ret = localBundleMgrHostImpl->GetProvisionMetadata(bundleName, userId, provisionMetadatas); EXPECT_TRUE(ret); } + +/** + * @tc.number: ParseSizeFromProvision_0010 + * @tc.name: ParseSizeFromProvision + * @tc.desc: test ParseSizeFromProvision + */ +HWTEST_F(BmsBundlePermissionGetRequestTest, ParseSizeFromProvision_0010, Function | SmallTest | Level1) +{ + std::shared_ptr handler = std::make_shared(); + ASSERT_NE(handler, nullptr); + std::string bundleName = "com.example.test"; + int32_t uid = 20020000; + int32_t sizeMb = 200; + AppProvisionInfo provisionInfo; + + provisionInfo.appServiceCapabilities = ""; + DelayedSingleton::GetInstance()->AddAppProvisionInfo(bundleName, provisionInfo); + handler->ParseSizeFromProvision(bundleName, uid, sizeMb); + EXPECT_EQ(sizeMb, 200); + + provisionInfo.appServiceCapabilities = + "{\"ohos.permission.TEST\":{\"storageSize\": 1024}}"; + DelayedSingleton::GetInstance()->AddAppProvisionInfo(bundleName, provisionInfo); + handler->ParseSizeFromProvision(bundleName, uid, sizeMb); + EXPECT_EQ(sizeMb, 200); + + provisionInfo.appServiceCapabilities = + "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"test\": 1024}}"; + DelayedSingleton::GetInstance()->AddAppProvisionInfo(bundleName, provisionInfo); + handler->ParseSizeFromProvision(bundleName, uid, sizeMb); + EXPECT_EQ(sizeMb, 200); + + provisionInfo.appServiceCapabilities = + "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"storageSize\": 100}}"; + DelayedSingleton::GetInstance()->AddAppProvisionInfo(bundleName, provisionInfo); + handler->ParseSizeFromProvision(bundleName, uid, sizeMb); + EXPECT_EQ(sizeMb, 200); + + provisionInfo.appServiceCapabilities = + "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"storageSize\": 1024}}"; + DelayedSingleton::GetInstance()->AddAppProvisionInfo(bundleName, provisionInfo); + handler->ParseSizeFromProvision(bundleName, uid, sizeMb); + EXPECT_EQ(sizeMb, 1024); +} } // OHOS diff --git a/services/bundlemgr/test/unittest/bms_event_handler_test/bms_event_handler_test.cpp b/services/bundlemgr/test/unittest/bms_event_handler_test/bms_event_handler_test.cpp index 718b7f849c..912ef570e5 100644 --- a/services/bundlemgr/test/unittest/bms_event_handler_test/bms_event_handler_test.cpp +++ b/services/bundlemgr/test/unittest/bms_event_handler_test/bms_event_handler_test.cpp @@ -2763,49 +2763,6 @@ HWTEST_F(BmsEventHandlerTest, SaveUpdatePermissionsFlag_0100, Function | SmallTe } } -/** - * @tc.number: ParseSizeFromProvision_0010 - * @tc.name: ParseSizeFromProvision - * @tc.desc: test ParseSizeFromProvision - */ -HWTEST_F(BmsEventHandlerTest, ParseSizeFromProvision_0010, Function | SmallTest | Level0) -{ - std::shared_ptr handler = std::make_shared(); - ASSERT_NE(handler, nullptr); - std::string bundleName = "com.example.test"; - int32_t sizeMb = 200; - AppProvisionInfo provisionInfo; - - provisionInfo.appServiceCapabilities = ""; - DelayedSingleton::GetInstance()->AddAppProvisionInfo(bundleName, provisionInfo); - handler->ParseSizeFromProvision(bundleName, sizeMb); - EXPECT_EQ(sizeMb, 200); - - provisionInfo.appServiceCapabilities = - "{\"ohos.permission.TEST\":{\"storageSize\": 1024}}"; - DelayedSingleton::GetInstance()->AddAppProvisionInfo(bundleName, provisionInfo); - handler->ParseSizeFromProvision(bundleName, sizeMb); - EXPECT_EQ(sizeMb, 200); - - provisionInfo.appServiceCapabilities = - "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"test\": 1024}}"; - DelayedSingleton::GetInstance()->AddAppProvisionInfo(bundleName, provisionInfo); - handler->ParseSizeFromProvision(bundleName, sizeMb); - EXPECT_EQ(sizeMb, 200); - - provisionInfo.appServiceCapabilities = - "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"storageSize\": 100}}"; - DelayedSingleton::GetInstance()->AddAppProvisionInfo(bundleName, provisionInfo); - handler->ParseSizeFromProvision(bundleName, sizeMb); - EXPECT_EQ(sizeMb, 200); - - provisionInfo.appServiceCapabilities = - "{\"ohos.permission.atomicService.MANAGE_STORAGE\":{\"storageSize\": 1024}}"; - DelayedSingleton::GetInstance()->AddAppProvisionInfo(bundleName, provisionInfo); - handler->ParseSizeFromProvision(bundleName, sizeMb); - EXPECT_EQ(sizeMb, 1024); -} - /** * @tc.number: CheckSystemOptimizeShaderCache_0100 * @tc.name: CheckSystemOptimizeShaderCache -- Gitee