From a6d52c7871195a3d18c4d59e96cd192fab00c289 Mon Sep 17 00:00:00 2001 From: zuojiangjiang Date: Mon, 9 May 2022 11:02:31 +0800 Subject: [PATCH 1/5] accesstoken bugfix Signed-off-by: zuojiangjiang --- .../adapter/permission/src/bundle_checker.cpp | 3 +- .../permission/src/media_lib_checker.cpp | 2 +- .../adapter/permission/src/system_checker.cpp | 3 +- .../app/src/kvstore_app_accessor.cpp | 13 +--- .../framework/test/checker_manager_test.cpp | 69 ++++++++++--------- 5 files changed, 42 insertions(+), 48 deletions(-) diff --git a/services/distributeddataservice/adapter/permission/src/bundle_checker.cpp b/services/distributeddataservice/adapter/permission/src/bundle_checker.cpp index 3cb2c96f8..4a1080f46 100644 --- a/services/distributeddataservice/adapter/permission/src/bundle_checker.cpp +++ b/services/distributeddataservice/adapter/permission/src/bundle_checker.cpp @@ -64,8 +64,7 @@ std::string BundleChecker::GetAppId(const CheckerManager::StoreInfo &info) return info.bundleName; } - ZLOGD("bundleName:%{public}s, token:%{public}u, appId:%{public}s", - info.bundleName.c_str(), info.tokenId, tokenInfo.appID.c_str()); + ZLOGD("bundleName:%{public}s, appId:%{public}s", info.bundleName.c_str(), tokenInfo.appID.c_str()); return Crypto::Sha256(tokenInfo.appID); } diff --git a/services/distributeddataservice/adapter/permission/src/media_lib_checker.cpp b/services/distributeddataservice/adapter/permission/src/media_lib_checker.cpp index 974914e1e..bbd1b897c 100644 --- a/services/distributeddataservice/adapter/permission/src/media_lib_checker.cpp +++ b/services/distributeddataservice/adapter/permission/src/media_lib_checker.cpp @@ -58,7 +58,7 @@ std::string MediaLibChecker::GetAppId(const CheckerManager::StoreInfo &info) if (!success) { return ""; } - ZLOGD("orion: %{public}s, uid: %{public}d, bundle: %{public}s appId: %{public}s", orionBundle.c_str(), info.uid, + ZLOGD("orion: %{public}s, bundle: %{public}s appId: %{public}s", orionBundle.c_str(), info.bundleName.c_str(), bundleInfo->appId.c_str()); return Crypto::Sha256(bundleInfo->appId); } diff --git a/services/distributeddataservice/adapter/permission/src/system_checker.cpp b/services/distributeddataservice/adapter/permission/src/system_checker.cpp index 807620410..7e23910c2 100644 --- a/services/distributeddataservice/adapter/permission/src/system_checker.cpp +++ b/services/distributeddataservice/adapter/permission/src/system_checker.cpp @@ -46,8 +46,7 @@ std::string SystemChecker::GetAppId(const CheckerManager::StoreInfo &info) return ""; } std::string appId = (trusts_.find(info.bundleName) != trusts_.end()) ? trusts_[info.bundleName] : info.bundleName; - ZLOGD("bundleName:%{public}s, token:%{public}u, appId:%{public}s", info.bundleName.c_str(), info.tokenId, - appId.c_str()); + ZLOGD("bundleName:%{public}s, appId:%{public}s", info.bundleName.c_str(), appId.c_str()); return appId; } diff --git a/services/distributeddataservice/app/src/kvstore_app_accessor.cpp b/services/distributeddataservice/app/src/kvstore_app_accessor.cpp index b504a340f..993a197cd 100644 --- a/services/distributeddataservice/app/src/kvstore_app_accessor.cpp +++ b/services/distributeddataservice/app/src/kvstore_app_accessor.cpp @@ -24,7 +24,7 @@ #include "kvstore_meta_manager.h" #include "metadata/meta_data_manager.h" #include "metadata/store_meta_data.h" -#include "metadata//secret_key_meta_data.h" +#include "metadata/secret_key_meta_data.h" #include "log_print.h" #include "permission_validator.h" @@ -51,17 +51,6 @@ KvStoreAppAccessor &KvStoreAppAccessor::GetInstance() void KvStoreAppAccessor::EnableKvStoreAutoLaunch(const AppAccessorParam ¶m) { return; - - auto callback = std::bind(&KvStoreAppAccessor::OnCallback, this, std::placeholders::_1, std::placeholders::_2, - std::placeholders::_3, std::placeholders::_4); - auto dbStatus = DistributedDB::KvStoreDelegateManager::EnableKvStoreAutoLaunch(param.userId, param.appId, - param.storeId, param.launchOption, - callback); - if (dbStatus == DistributedDB::DBStatus::OK || dbStatus == DistributedDB::DBStatus::ALREADY_SET) { - ZLOGI("AppId:%s enable auto launch success.", param.appId.c_str()); - return; - } - ZLOGW("AppId:%s enable auto launch failed.", param.appId.c_str()); } void KvStoreAppAccessor::EnableKvStoreAutoLaunch() diff --git a/services/distributeddataservice/framework/test/checker_manager_test.cpp b/services/distributeddataservice/framework/test/checker_manager_test.cpp index bd14a56e7..f39c9a206 100644 --- a/services/distributeddataservice/framework/test/checker_manager_test.cpp +++ b/services/distributeddataservice/framework/test/checker_manager_test.cpp @@ -28,7 +28,7 @@ public: static void SetUpTestCase(void) {} static void TearDownTestCase(void) {} void SetUp(); - void TearDown() {} + void TearDown(); NativeTokenInfoParams infoInstance; }; @@ -39,11 +39,48 @@ void CheckerManagerTest::SetUp(void) infoInstance.processName = "foundation"; infoInstance.aplStr = "system_core"; + HapInfoParams info = { + .userID = 100, + .bundleName = "ohos.test.demo", + .instIndex = 0, + .appIDDesc = "ohos.test.demo" + }; + PermissionDef infoManagerTestPermDef = { + .permissionName = "ohos.permission.test", + .bundleName = "ohos.test.demo", + .grantMode = 1, + .availableLevel = APL_NORMAL, + .label = "label", + .labelId = 1, + .description = "open the door", + .descriptionId = 1 + }; + PermissionStateFull infoManagerTestState = { + .permissionName = "ohos.permission.test", + .isGeneral = true, + .resDeviceID = {"local"}, + .grantStatus = {PermissionState::PERMISSION_GRANTED}, + .grantFlags = {1} + }; + HapPolicyParams policy = { + .apl = APL_NORMAL, + .domain = "test.domain", + .permList = {infoManagerTestPermDef}, + .permStateList = {infoManagerTestState} + }; + AccessTokenKit::AllocHapToken(info, policy); + Bootstrap::GetInstance().LoadComponents(); Bootstrap::GetInstance().LoadDirectory(); Bootstrap::GetInstance().LoadCheckers(); Bootstrap::GetInstance().LoadNetworks(); } + +void CheckerManagerTest::TearDown() +{ + auto tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo", 0); + AccessTokenKit::DeleteToken(tokenId); +} /** * @tc.name: checkers * @tc.desc: checker the bundle name of the system abilities. @@ -121,36 +158,6 @@ HWTEST_F(CheckerManagerTest, SystemCheckerIVI, TestSize.Level0) */ HWTEST_F(CheckerManagerTest, BundleChecker, TestSize.Level0) { - HapInfoParams info = { - .userID = 100, - .bundleName = "ohos.test.demo", - .instIndex = 0, - .appIDDesc = "ohos.test.demo" - }; - PermissionDef infoManagerTestPermDef = { - .permissionName = "ohos.permission.test", - .bundleName = "ohos.test.demo", - .grantMode = 1, - .availableLevel = APL_NORMAL, - .label = "label", - .labelId = 1, - .description = "open the door", - .descriptionId = 1 - }; - PermissionStateFull infoManagerTestState = { - .permissionName = "ohos.permission.test", - .isGeneral = true, - .resDeviceID = {"local"}, - .grantStatus = {PermissionState::PERMISSION_GRANTED}, - .grantFlags = {1} - }; - HapPolicyParams policy = { - .apl = APL_NORMAL, - .domain = "test.domain", - .permList = {infoManagerTestPermDef}, - .permStateList = {infoManagerTestState} - }; - AccessTokenKit::AllocHapToken(info, policy); CheckerManager::StoreInfo storeInfo; storeInfo.uid = 2000000; storeInfo.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo", 0); -- Gitee From 50a8118bbadc9ea79837574ecbceaac56a68e156 Mon Sep 17 00:00:00 2001 From: zuojiangjiang Date: Mon, 9 May 2022 11:23:31 +0800 Subject: [PATCH 2/5] bugfix Signed-off-by: zuojiangjiang --- .../service/kvdb/user_delegate.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/services/distributeddataservice/service/kvdb/user_delegate.cpp b/services/distributeddataservice/service/kvdb/user_delegate.cpp index 0e75cb7ab..b28e7c946 100644 --- a/services/distributeddataservice/service/kvdb/user_delegate.cpp +++ b/services/distributeddataservice/service/kvdb/user_delegate.cpp @@ -74,14 +74,13 @@ void UserDelegate::DeleteUsers(const std::string &deviceId) void UserDelegate::UpdateUsers(const std::string &deviceId, const std::vector &userStatus) { ZLOGI("begin, device:%{public}.10s, users:%{public}zu", Anonymous::Change(deviceId).c_str(), userStatus.size()); - deviceUserMap_.ComputeIfPresent(deviceId, [](const auto &key, std::map &userMap) { - for (auto &user : userMap) { - user.second = false; + deviceUserMap_.Compute(deviceId, [&userStatus](const auto &key, std::map &userMap) { + userMap = {}; + for (auto &user : userStatus) { + userMap[user.id] = user.isActive; } return true; }); - for (auto &user : userStatus) { - deviceUserMap_[deviceId][user.id] = user.isActive; } ZLOGI("end, device:%{public}s, users:%{public}zu", Anonymous::Change(deviceId).c_str(), deviceUserMap_[deviceId].size()); -- Gitee From 7c5ab0dae23dfa8d5ac23880144266ea641e5dc1 Mon Sep 17 00:00:00 2001 From: zuojiangjiang Date: Mon, 9 May 2022 11:42:36 +0800 Subject: [PATCH 3/5] bugfix Signed-off-by: zuojiangjiang --- services/distributeddataservice/service/kvdb/user_delegate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/distributeddataservice/service/kvdb/user_delegate.cpp b/services/distributeddataservice/service/kvdb/user_delegate.cpp index b28e7c946..d8146ddbf 100644 --- a/services/distributeddataservice/service/kvdb/user_delegate.cpp +++ b/services/distributeddataservice/service/kvdb/user_delegate.cpp @@ -81,7 +81,7 @@ void UserDelegate::UpdateUsers(const std::string &deviceId, const std::vector Date: Mon, 9 May 2022 16:29:35 +0800 Subject: [PATCH 4/5] bugfix Signed-off-by: zuojiangjiang --- .../src/session_manager/session_manager.cpp | 15 +++++++------- .../service/kvdb/user_delegate.cpp | 20 +++++++++++++------ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/services/distributeddataservice/app/src/session_manager/session_manager.cpp b/services/distributeddataservice/app/src/session_manager/session_manager.cpp index 7622c2b7c..5ec8b43e7 100644 --- a/services/distributeddataservice/app/src/session_manager/session_manager.cpp +++ b/services/distributeddataservice/app/src/session_manager/session_manager.cpp @@ -44,16 +44,15 @@ Session SessionManager::GetSession(const SessionPoint &from, const std::string & session.sourceDeviceId = from.deviceId; session.targetDeviceId = targetDeviceId; auto users = UserDelegate::GetInstance().GetRemoteUserStatus(targetDeviceId); - StoreMetaData metaData; - auto key = StoreMetaData::GetKey({ from.deviceId, std::to_string(from.userId), - "default", from.appId, from.storeId }); - if (!MetaDataManager::GetInstance().LoadMeta(key, metaData)) { - return session; - } // system service if (from.userId == UserDelegate::SYSTEM_USER) { - if (CheckerManager::GetInstance().GetAppId({ metaData.uid, metaData.tokenId, metaData.bundleName }) - == metaData.bundleName) { + StoreMetaData metaData; + metaData.deviceId = from.deviceId; + metaData.user = std::to_string(from.userId); + metaData.bundleName = from.appId; + metaData.storeId = from.storeId; + if (MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData) && + CheckerManager::GetInstance().GetAppId(Converter::ConvertToStoreInfo(metaData)) == from.appId) { session.targetUserIds.push_back(UserDelegate::SYSTEM_USER); } } diff --git a/services/distributeddataservice/service/kvdb/user_delegate.cpp b/services/distributeddataservice/service/kvdb/user_delegate.cpp index d8146ddbf..cb0c3c5cf 100644 --- a/services/distributeddataservice/service/kvdb/user_delegate.cpp +++ b/services/distributeddataservice/service/kvdb/user_delegate.cpp @@ -17,9 +17,9 @@ #define LOG_TAG "UserDelegate" +#include #include "account_delegate.h" #include "communication_provider.h" -#include "device_kvstore_impl.h" #include "executor_factory.h" #include "log_print.h" #include "metadata/meta_data_manager.h" @@ -29,18 +29,23 @@ using OHOS::AppDistributedKv::CommunicationProvider; using namespace OHOS::DistributedKv; std::string GetLocalDeviceId() { - return DeviceKvStoreImpl::GetLocalDeviceId(); + static std::string deviceId; + if (deviceId.empty()) { + deviceId = CommunicationProvider::GetInstance().GetLocalDevice().uuid; + } + + return deviceId; } std::vector UserDelegate::GetLocalUserStatus() { ZLOGI("begin"); - auto deviceInfo = CommunicationProvider::GetInstance().GetLocalDevice(); - if (deviceInfo.uuid.empty()) { + auto deviceId = GetLocalDeviceId(); + if (deviceId.empty()) { ZLOGE("failed to get local device id"); return {}; } - return GetUsers(deviceInfo.uuid); + return GetUsers(deviceId); } std::vector UserDelegate::GetRemoteUserStatus(const std::string &deviceId) @@ -139,7 +144,7 @@ void UserDelegate::Init() } while (true); ZLOGI("update user meta ok"); }); - ExecutorFactory::GetInstance().Execute(std::move(retryTask)); + auto ret = AccountDelegate::GetInstance()->Subscribe(std::make_shared(*this)); MetaDataManager::GetInstance().Subscribe( UserMetaRow::KEY_PREFIX, [this](const std::string &key, const std::string &value, int32_t flag) -> auto { @@ -159,6 +164,9 @@ void UserDelegate::Init() } return true; }); + if (!InitLocalUserMeta()) { + ExecutorFactory::GetInstance().Execute(std::move(retryTask)); + } ZLOGD("subscribe os account ret:%{public}d", ret); } -- Gitee From 21cd51c9b535da83270b6bc261dd44f4a17544ec Mon Sep 17 00:00:00 2001 From: zuojiangjiang Date: Mon, 9 May 2022 17:14:34 +0800 Subject: [PATCH 5/5] bugfix Signed-off-by: zuojiangjiang --- .../app/src/session_manager/session_manager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/services/distributeddataservice/app/src/session_manager/session_manager.cpp b/services/distributeddataservice/app/src/session_manager/session_manager.cpp index 5ec8b43e7..a9cc0900c 100644 --- a/services/distributeddataservice/app/src/session_manager/session_manager.cpp +++ b/services/distributeddataservice/app/src/session_manager/session_manager.cpp @@ -26,6 +26,7 @@ #include "metadata/store_meta_data.h" #include "user_delegate.h" #include "utils/anonymous.h" +#include "utils/converter.h" namespace OHOS::DistributedData { using namespace OHOS::DistributedKv; -- Gitee