From 7bd651dff83c14dca96d3b3e954d451945448fd6 Mon Sep 17 00:00:00 2001 From: Power-the-WORLD Date: Fri, 12 Sep 2025 15:43:36 +0800 Subject: [PATCH 01/10] fix Signed-off-by: Power-the-WORLD --- .../service/udmf/preprocess/preprocess_utils.cpp | 2 +- .../distributeddataservice/service/udmf/udmf_service_impl.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp b/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp index 6ad139152..8f2b4c884 100644 --- a/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp +++ b/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp @@ -127,7 +127,7 @@ int32_t PreProcessUtils::GetHapUidByToken(uint32_t tokenId, int &userId) bool PreProcessUtils::GetHapBundleNameByToken(uint32_t tokenId, std::string &bundleName) { - if (UTILS::IsTokenNative()) { + if (UTILS::IsTokenNative(IPCSkeleton::GetSelfTokenID())) { ZLOGD("TypeATokenTypeEnum is TOKEN_HAP"); std::string processName; if (GetNativeProcessNameByToken(tokenId, processName)) { diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index 35a14a8e0..6eae176c7 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -671,7 +671,7 @@ int32_t UdmfServiceImpl::AddPrivilege(const QueryOption &query, Privilege &privi int32_t UdmfServiceImpl::Sync(const QueryOption &query, const std::vector &devices) { - if (!UTILS::IsTokenNative() || + if (!UTILS::IsTokenNative(IPCSkeleton::GetSelfTokenID()) || !DistributedKv::PermissionValidator::GetInstance().CheckSyncPermission(query.tokenId)) { ZLOGE("Tokenid permission verification failed!"); return E_NO_PERMISSION; -- Gitee From 9fb0706a2e7d71f29faa52123159b92f790e2de0 Mon Sep 17 00:00:00 2001 From: Power-the-WORLD Date: Fri, 12 Sep 2025 15:51:38 +0800 Subject: [PATCH 02/10] 11 Signed-off-by: Power-the-WORLD --- .../service/udmf/preprocess/preprocess_utils.cpp | 2 +- .../distributeddataservice/service/udmf/udmf_service_impl.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp b/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp index 8f2b4c884..1879f9dff 100644 --- a/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp +++ b/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp @@ -127,7 +127,7 @@ int32_t PreProcessUtils::GetHapUidByToken(uint32_t tokenId, int &userId) bool PreProcessUtils::GetHapBundleNameByToken(uint32_t tokenId, std::string &bundleName) { - if (UTILS::IsTokenNative(IPCSkeleton::GetSelfTokenID())) { + if (UTILS::IsTokenNative(IPCSkeleton::GetCallingTokenID())) { ZLOGD("TypeATokenTypeEnum is TOKEN_HAP"); std::string processName; if (GetNativeProcessNameByToken(tokenId, processName)) { diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index 6eae176c7..a23990593 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -671,7 +671,7 @@ int32_t UdmfServiceImpl::AddPrivilege(const QueryOption &query, Privilege &privi int32_t UdmfServiceImpl::Sync(const QueryOption &query, const std::vector &devices) { - if (!UTILS::IsTokenNative(IPCSkeleton::GetSelfTokenID()) || + if (!UTILS::IsTokenNative(IPCSkeleton::GetCallingTokenID()) || !DistributedKv::PermissionValidator::GetInstance().CheckSyncPermission(query.tokenId)) { ZLOGE("Tokenid permission verification failed!"); return E_NO_PERMISSION; -- Gitee From 6d6fd131e9bfa692eefd67cf6a550efda512377d Mon Sep 17 00:00:00 2001 From: Power-the-WORLD Date: Fri, 12 Sep 2025 17:35:05 +0800 Subject: [PATCH 03/10] delete data when app uninstalled Signed-off-by: Power-the-WORLD --- .../service/udmf/udmf_service_impl.cpp | 47 ++++++++++++++++++- .../service/udmf/udmf_service_impl.h | 3 ++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index a23990593..a721b1119 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -306,7 +306,10 @@ int32_t UdmfServiceImpl::VerifyDataAccessPermission(std::shared_ptr run ZLOGE("Get data failed,key:%{public}s", query.key.c_str()); return E_NO_PERMISSION; } - + std::lock_guard lock(appMutex_); + if (unInstallingApps_.find(runtime->sourcePackage) != unInstallingApps_.end()) { + return E_NO_PERMISSION; + } return E_OK; } @@ -1378,5 +1381,47 @@ std::vector UdmfServiceImpl::ProcessResult(const std::map lock(appMutex_); + unInstallingApps_.insert(bundleName); + std::string dragIntention = UD_INTENTION_MAP.at(UD_INTENTION_DRAG); + std::string dataPrefix = DATA_PREFIX + intention; + store = StoreCache::GetInstance().GetStore(dragIntention); + if (store == nullptr) { + ZLOGE("Get store failed:%{public}s", dragIntention.c_str()); + unInstallingApps_.erase(bundleName); + return E_DB_ERROR; + } + std::vector dataSet; + int32_t status = store->GetBatchData(dataPrefix, dataSet); + if (status != E_OK) { + ZLOGE("Get dataSet failed, dataPrefix: %{public}s, status:%{public}d.", dataPrefix.c_str(), status); + unInstallingApps_.erase(bundleName); + return E_DB_ERROR; + } + std::vector deleteKeys; + for (const auto &data : dataSet) { + auto runtime = data.GetRuntime(); + if (runtime->sourcePackage != bundleName) { + continue; + } + deleteKeys.emplace_back(UnifiedKey(runtime->key.key).GetKeyCommonPrefix()); + } + if (deleteKeys.empty()) { + ZLOGE("No data to delete for this application"); + unInstallingApps_.erase(bundleName); + return E_OK; + } + ZLOGI("Delete data start. size: %{public}zu.", deleteKeys.size()); + status = store->DeleteBatch(deleteKeys); + unInstallingApps_.erase(bundleName); + if (status != E_OK) { + ZLOGE("Remove data failed."); + return E_DB_ERROR; + } + return E_OK; +} } // namespace UDMF } // namespace OHOS \ No newline at end of file diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index beef4dda4..a95f0d710 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -94,6 +94,7 @@ private: DistributedData::StoreMetaData BuildMeta(const std::string &storeId, int userId); int32_t VerifyUpdatePermission(const QueryOption &query, UnifiedData &unifiedData, std::string &bundleName); bool HandleDelayLoad(const QueryOption &query, UnifiedData &unifiedData, int32_t &res); + int32_t OnAppUninstall(const std::string &bundleName, int32_t user, int32_t index) override; class Factory { public: @@ -112,6 +113,8 @@ private: std::unordered_map asyncProcessInfoMap_ {}; ConcurrentMap> dataLoadCallback_ {}; ConcurrentMap delayDataCallback_ {}; + std::mutex appMutex_; + std::set unInstallingApps_ {}; struct BlockDelayData { uint32_t tokenId {0}; -- Gitee From 804a50889cb026aaed994e12f02ff384e4db0119 Mon Sep 17 00:00:00 2001 From: Power-the-WORLD Date: Fri, 12 Sep 2025 19:10:36 +0800 Subject: [PATCH 04/10] 11 Signed-off-by: Power-the-WORLD --- .../service/udmf/preprocess/preprocess_utils.cpp | 2 +- .../distributeddataservice/service/udmf/udmf_service_impl.cpp | 4 ++-- .../distributeddataservice/service/udmf/udmf_service_impl.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp b/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp index 1879f9dff..9eea8d745 100644 --- a/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp +++ b/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp @@ -507,7 +507,7 @@ std::string PreProcessUtils::GetSdkVersionByToken(uint32_t tokenId) bool PreProcessUtils::GetSpecificBundleNameByTokenId(uint32_t tokenId, std::string &specificBundleName, std::string &bundleName) { - if (UTILS::IsTokenNative()) { + if (UTILS::IsTokenNative(IPCSkeleton::GetCallingTokenID())) { ZLOGI("TypeATokenTypeEnum is TOKEN_NATIVE"); std::string processName; if (GetNativeProcessNameByToken(tokenId, processName)) { diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index a721b1119..54dc5c759 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -1387,8 +1387,8 @@ int32_t UdmfServiceImpl::OnAppUninstall(const std::string &bundleName, int32_t u std::lock_guard lock(appMutex_); unInstallingApps_.insert(bundleName); std::string dragIntention = UD_INTENTION_MAP.at(UD_INTENTION_DRAG); - std::string dataPrefix = DATA_PREFIX + intention; - store = StoreCache::GetInstance().GetStore(dragIntention); + std::string dataPrefix = DATA_PREFIX + dragIntention; + auto store = StoreCache::GetInstance().GetStore(dragIntention); if (store == nullptr) { ZLOGE("Get store failed:%{public}s", dragIntention.c_str()); unInstallingApps_.erase(bundleName); diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index a95f0d710..4f515c196 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -113,7 +113,7 @@ private: std::unordered_map asyncProcessInfoMap_ {}; ConcurrentMap> dataLoadCallback_ {}; ConcurrentMap delayDataCallback_ {}; - std::mutex appMutex_; + mutable std::recursive_mutex appMutex_; std::set unInstallingApps_ {}; struct BlockDelayData { -- Gitee From 19e9c9da31f372ec0d9c504dffdd5f9b565cee07 Mon Sep 17 00:00:00 2001 From: Power-the-WORLD Date: Sat, 13 Sep 2025 11:21:30 +0800 Subject: [PATCH 05/10] add uninstall code Signed-off-by: Power-the-WORLD --- .../service/udmf/udmf_service_impl.cpp | 14 +++----------- .../service/udmf/udmf_service_impl.h | 11 ++++++++--- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index 54dc5c759..dafbc8161 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -78,6 +78,8 @@ UdmfServiceImpl::Factory::Factory() } return product_; }, FeatureSystem::BIND_NOW); + staticActs_ = std::make_shared(); + FeatureSystem::GetInstance().RegisterStaticActs("udmf", staticActs_); } UdmfServiceImpl::Factory::~Factory() @@ -306,10 +308,6 @@ int32_t UdmfServiceImpl::VerifyDataAccessPermission(std::shared_ptr run ZLOGE("Get data failed,key:%{public}s", query.key.c_str()); return E_NO_PERMISSION; } - std::lock_guard lock(appMutex_); - if (unInstallingApps_.find(runtime->sourcePackage) != unInstallingApps_.end()) { - return E_NO_PERMISSION; - } return E_OK; } @@ -1382,23 +1380,19 @@ std::vector UdmfServiceImpl::ProcessResult(const std::map lock(appMutex_); - unInstallingApps_.insert(bundleName); std::string dragIntention = UD_INTENTION_MAP.at(UD_INTENTION_DRAG); std::string dataPrefix = DATA_PREFIX + dragIntention; auto store = StoreCache::GetInstance().GetStore(dragIntention); if (store == nullptr) { ZLOGE("Get store failed:%{public}s", dragIntention.c_str()); - unInstallingApps_.erase(bundleName); return E_DB_ERROR; } std::vector dataSet; int32_t status = store->GetBatchData(dataPrefix, dataSet); if (status != E_OK) { ZLOGE("Get dataSet failed, dataPrefix: %{public}s, status:%{public}d.", dataPrefix.c_str(), status); - unInstallingApps_.erase(bundleName); return E_DB_ERROR; } std::vector deleteKeys; @@ -1411,12 +1405,10 @@ int32_t UdmfServiceImpl::OnAppUninstall(const std::string &bundleName, int32_t u } if (deleteKeys.empty()) { ZLOGE("No data to delete for this application"); - unInstallingApps_.erase(bundleName); return E_OK; } ZLOGI("Delete data start. size: %{public}zu.", deleteKeys.size()); status = store->DeleteBatch(deleteKeys); - unInstallingApps_.erase(bundleName); if (status != E_OK) { ZLOGE("Remove data failed."); return E_DB_ERROR; diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index 4f515c196..0df98859b 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -94,7 +94,13 @@ private: DistributedData::StoreMetaData BuildMeta(const std::string &storeId, int userId); int32_t VerifyUpdatePermission(const QueryOption &query, UnifiedData &unifiedData, std::string &bundleName); bool HandleDelayLoad(const QueryOption &query, UnifiedData &unifiedData, int32_t &res); - int32_t OnAppUninstall(const std::string &bundleName, int32_t user, int32_t index) override; + + using StaticActs = DistributedData::StaticActs; + class UdmfStatic : public StaticActs { + public: + ~UdmfStatic() override{}; + int32_t OnAppUninstall(const std::string &bundleName, int32_t user, int32_t index) override; + }; class Factory { public: @@ -103,6 +109,7 @@ private: private: std::shared_ptr product_; + std::shared_ptr staticActs_; }; static Factory factory_; mutable std::recursive_mutex cacheMutex_; @@ -113,8 +120,6 @@ private: std::unordered_map asyncProcessInfoMap_ {}; ConcurrentMap> dataLoadCallback_ {}; ConcurrentMap delayDataCallback_ {}; - mutable std::recursive_mutex appMutex_; - std::set unInstallingApps_ {}; struct BlockDelayData { uint32_t tokenId {0}; -- Gitee From c6b407daa3c4c8734a25738faf3c14a4d255b2d6 Mon Sep 17 00:00:00 2001 From: Power-the-WORLD Date: Sat, 13 Sep 2025 17:53:43 +0800 Subject: [PATCH 06/10] delete data when app uninstalled Signed-off-by: Power-the-WORLD --- .../service/udmf/udmf_service_impl.cpp | 38 ------------------- .../service/udmf/udmf_service_impl.h | 8 ---- 2 files changed, 46 deletions(-) diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index dafbc8161..4504e7da6 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -78,8 +78,6 @@ UdmfServiceImpl::Factory::Factory() } return product_; }, FeatureSystem::BIND_NOW); - staticActs_ = std::make_shared(); - FeatureSystem::GetInstance().RegisterStaticActs("udmf", staticActs_); } UdmfServiceImpl::Factory::~Factory() @@ -1379,41 +1377,5 @@ std::vector UdmfServiceImpl::ProcessResult(const std::map dataSet; - int32_t status = store->GetBatchData(dataPrefix, dataSet); - if (status != E_OK) { - ZLOGE("Get dataSet failed, dataPrefix: %{public}s, status:%{public}d.", dataPrefix.c_str(), status); - return E_DB_ERROR; - } - std::vector deleteKeys; - for (const auto &data : dataSet) { - auto runtime = data.GetRuntime(); - if (runtime->sourcePackage != bundleName) { - continue; - } - deleteKeys.emplace_back(UnifiedKey(runtime->key.key).GetKeyCommonPrefix()); - } - if (deleteKeys.empty()) { - ZLOGE("No data to delete for this application"); - return E_OK; - } - ZLOGI("Delete data start. size: %{public}zu.", deleteKeys.size()); - status = store->DeleteBatch(deleteKeys); - if (status != E_OK) { - ZLOGE("Remove data failed."); - return E_DB_ERROR; - } - return E_OK; -} } // namespace UDMF } // namespace OHOS \ No newline at end of file diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index 0df98859b..beef4dda4 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -95,13 +95,6 @@ private: int32_t VerifyUpdatePermission(const QueryOption &query, UnifiedData &unifiedData, std::string &bundleName); bool HandleDelayLoad(const QueryOption &query, UnifiedData &unifiedData, int32_t &res); - using StaticActs = DistributedData::StaticActs; - class UdmfStatic : public StaticActs { - public: - ~UdmfStatic() override{}; - int32_t OnAppUninstall(const std::string &bundleName, int32_t user, int32_t index) override; - }; - class Factory { public: Factory(); @@ -109,7 +102,6 @@ private: private: std::shared_ptr product_; - std::shared_ptr staticActs_; }; static Factory factory_; mutable std::recursive_mutex cacheMutex_; -- Gitee From 67ab6e1a23d8ed46b6632abf97392b48aebfb27f Mon Sep 17 00:00:00 2001 From: Power-the-WORLD Date: Sat, 13 Sep 2025 18:17:17 +0800 Subject: [PATCH 07/10] fix Signed-off-by: Power-the-WORLD --- .../udmf/preprocess/preprocess_utils.cpp | 1 + .../service/udmf/udmf_service_impl.cpp | 25 ++++++++++++++++--- .../service/udmf/udmf_service_impl.h | 1 + 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp b/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp index 9eea8d745..f01f94fe3 100644 --- a/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp +++ b/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp @@ -194,6 +194,7 @@ int32_t PreProcessUtils::HandleFileUris(uint32_t tokenId, UnifiedData &data) { std::vector uris; ProcessFileType(data.GetRecords(), [&uris](std::shared_ptr obj) { + obj->value_[REMOTE_URI] = ""; // To ensure remoteUri is empty when save data! std::string oriUri; obj->GetValue(ORI_URI, oriUri); if (oriUri.empty()) { diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index 4504e7da6..9a568af83 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -338,6 +338,9 @@ bool UdmfServiceImpl::IsReadAndKeep(const std::vector &privileges, co int32_t UdmfServiceImpl::ProcessUri(const QueryOption &query, UnifiedData &unifiedData) { + if (!VerifySavedTokenId(unifiedData.GetRuntime())) { + return E_ERROR; + } std::string localDeviceId = PreProcessUtils::GetLocalDeviceId(); std::vector allUri; int32_t verifyRes = ProcessCrossDeviceData(query.tokenId, unifiedData, allUri); @@ -363,6 +366,20 @@ int32_t UdmfServiceImpl::ProcessUri(const QueryOption &query, UnifiedData &unifi return E_OK; } +bool UdmfServiceImpl::VerifySavedTokenId(std::shared_ptr runtime) +{ + uint32_t tokenId = runtime->tokenId; + std::string bundleName; + if (!PreProcessUtils::GetHapBundleNameByToken(query.tokenId, bundleName)) { + ZLOGE("Get bundleName fail"); + return false; + } + if (bundleName != runtime->sourcePackage) { + return false; + } + return true; +} + int32_t UdmfServiceImpl::ProcessCrossDeviceData(uint32_t tokenId, UnifiedData &unifiedData, std::vector &uris) { if (unifiedData.GetRuntime() == nullptr) { @@ -385,6 +402,10 @@ int32_t UdmfServiceImpl::ProcessCrossDeviceData(uint32_t tokenId, UnifiedData &u Uri uri(oriUri); std::string scheme = uri.GetScheme(); std::transform(scheme.begin(), scheme.end(), scheme.begin(), ::tolower); + if (uri.GetAuthority().empty() || scheme != FILE_SCHEME) { + ZLOGW("Empty authority or scheme not file"); + return false; + } if (!isLocal) { std::string remoteUri; obj->GetValue(REMOTE_URI, remoteUri); @@ -400,10 +421,6 @@ int32_t UdmfServiceImpl::ProcessCrossDeviceData(uint32_t tokenId, UnifiedData &u std::transform(scheme.begin(), scheme.end(), scheme.begin(), ::tolower); } } - if (uri.GetAuthority().empty() || scheme != FILE_SCHEME) { - ZLOGW("Empty authority or scheme not file"); - return false; - } uris.push_back(uri); return true; }); diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index beef4dda4..e665cc91d 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -94,6 +94,7 @@ private: DistributedData::StoreMetaData BuildMeta(const std::string &storeId, int userId); int32_t VerifyUpdatePermission(const QueryOption &query, UnifiedData &unifiedData, std::string &bundleName); bool HandleDelayLoad(const QueryOption &query, UnifiedData &unifiedData, int32_t &res); + bool VerifySavedTokenId(std::shared_ptr runtime); class Factory { public: -- Gitee From 345d201158723b32436b3cc2416ecf2d03fcb78c Mon Sep 17 00:00:00 2001 From: Power-the-WORLD Date: Sat, 13 Sep 2025 18:19:59 +0800 Subject: [PATCH 08/10] 11 Signed-off-by: Power-the-WORLD --- .../distributeddataservice/service/udmf/udmf_service_impl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index 9a568af83..d0da3b8cc 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -370,7 +370,7 @@ bool UdmfServiceImpl::VerifySavedTokenId(std::shared_ptr runtime) { uint32_t tokenId = runtime->tokenId; std::string bundleName; - if (!PreProcessUtils::GetHapBundleNameByToken(query.tokenId, bundleName)) { + if (!PreProcessUtils::GetHapBundleNameByToken(tokenId, bundleName)) { ZLOGE("Get bundleName fail"); return false; } -- Gitee From 8feaaab5112608e43562193b190f2a4b65d67bc8 Mon Sep 17 00:00:00 2001 From: Power-the-WORLD Date: Sat, 13 Sep 2025 20:20:27 +0800 Subject: [PATCH 09/10] fix Signed-off-by: Power-the-WORLD --- .../service/udmf/preprocess/preprocess_utils.cpp | 1 + .../service/udmf/udmf_service_impl.cpp | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp b/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp index f01f94fe3..41a5533d6 100644 --- a/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp +++ b/services/distributeddataservice/service/udmf/preprocess/preprocess_utils.cpp @@ -397,6 +397,7 @@ void PreProcessUtils::GetHtmlFileUris(uint32_t tokenId, UnifiedData &data, if (record == nullptr) { continue; } + record->ClearUris(); PreProcessUtils::ProcessRecord(record, tokenId, isLocal, uris); } } diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index d0da3b8cc..ebd103609 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -338,9 +338,6 @@ bool UdmfServiceImpl::IsReadAndKeep(const std::vector &privileges, co int32_t UdmfServiceImpl::ProcessUri(const QueryOption &query, UnifiedData &unifiedData) { - if (!VerifySavedTokenId(unifiedData.GetRuntime())) { - return E_ERROR; - } std::string localDeviceId = PreProcessUtils::GetLocalDeviceId(); std::vector allUri; int32_t verifyRes = ProcessCrossDeviceData(query.tokenId, unifiedData, allUri); @@ -358,6 +355,9 @@ int32_t UdmfServiceImpl::ProcessUri(const QueryOption &query, UnifiedData &unifi ZLOGW("No uri permissions needed,queryKey=%{public}s", query.key.c_str()); return E_OK; } + if (!VerifySavedTokenId(unifiedData.GetRuntime())) { + return E_ERROR; + } if (UriPermissionManager::GetInstance().GrantUriPermission(allUri, query.tokenId, query.key) != E_OK) { ZLOGE("GrantUriPermission fail, bundleName=%{public}s, key=%{public}s.", bundleName.c_str(), query.key.c_str()); @@ -409,16 +409,20 @@ int32_t UdmfServiceImpl::ProcessCrossDeviceData(uint32_t tokenId, UnifiedData &u if (!isLocal) { std::string remoteUri; obj->GetValue(REMOTE_URI, remoteUri); - if (remoteUri.empty() && scheme == FILE_SCHEME) { + if (remoteUri.empty()) { ZLOGE("Remote URI required for cross-device"); hasError = true; return false; } if (!remoteUri.empty()) { - obj->value_.insert_or_assign(ORI_URI, remoteUri); // cross dev, need dis path. uri = Uri(remoteUri); + obj->value_.insert_or_assign(ORI_URI, std::move(remoteUri)); // cross dev, need dis path. scheme = uri.GetScheme(); std::transform(scheme.begin(), scheme.end(), scheme.begin(), ::tolower); + if (uri.GetAuthority().empty() || scheme != FILE_SCHEME) { + ZLOGW("Empty authority or scheme not file"); + return false; + } } } uris.push_back(uri); -- Gitee From 69d2e6463985da12a254bf735d5007d792844e27 Mon Sep 17 00:00:00 2001 From: Power-the-WORLD Date: Sat, 13 Sep 2025 20:27:28 +0800 Subject: [PATCH 10/10] add uninstall code Signed-off-by: Power-the-WORLD --- .../service/udmf/udmf_service_impl.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index ebd103609..3151ce457 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -414,15 +414,13 @@ int32_t UdmfServiceImpl::ProcessCrossDeviceData(uint32_t tokenId, UnifiedData &u hasError = true; return false; } - if (!remoteUri.empty()) { - uri = Uri(remoteUri); - obj->value_.insert_or_assign(ORI_URI, std::move(remoteUri)); // cross dev, need dis path. - scheme = uri.GetScheme(); - std::transform(scheme.begin(), scheme.end(), scheme.begin(), ::tolower); - if (uri.GetAuthority().empty() || scheme != FILE_SCHEME) { - ZLOGW("Empty authority or scheme not file"); - return false; - } + uri = Uri(remoteUri); + obj->value_.insert_or_assign(ORI_URI, std::move(remoteUri)); // cross dev, need dis path. + scheme = uri.GetScheme(); + std::transform(scheme.begin(), scheme.end(), scheme.begin(), ::tolower); + if (uri.GetAuthority().empty() || scheme != FILE_SCHEME) { + ZLOGW("Empty authority or scheme not file"); + return false; } } uris.push_back(uri); -- Gitee