From 0330bfb992ffa03a46378c8f930507431abcc056 Mon Sep 17 00:00:00 2001 From: BrainL Date: Tue, 11 Feb 2025 20:11:37 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=8D=E8=B6=85=E8=BF=87=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- .../include/deviceprofile_connector.h | 1 + .../src/deviceprofile_connector.cpp | 29 +++++++++++++++++++ .../include/device_manager_service_impl.h | 1 + .../device_manager_service_impl_lite.h | 1 + .../src/device_manager_service_impl.cpp | 11 +++++++ .../src/device_manager_service_impl_lite.cpp | 8 +++++ .../include/idevice_manager_service_impl.h | 1 + .../service/src/device_manager_service.cpp | 26 +++++++++++++++-- 8 files changed, 76 insertions(+), 2 deletions(-) diff --git a/commondependency/include/deviceprofile_connector.h b/commondependency/include/deviceprofile_connector.h index d0bb054ce..f37fc6b9b 100644 --- a/commondependency/include/deviceprofile_connector.h +++ b/commondependency/include/deviceprofile_connector.h @@ -167,6 +167,7 @@ public: int32_t SubscribeDeviceProfileInited(sptr dpInitedCallback); int32_t UnSubscribeDeviceProfileInited(); int32_t PutAllTrustedDevices(const std::vector &deviceInfos); + int32_t CheckDeviceInfoPermission(const std::string &localUdid, const std::string &peerDeviceId); private: int32_t HandleDmAuthForm(DistributedDeviceProfile::AccessControlProfile profiles, DmDiscoveryInfo discoveryInfo); diff --git a/commondependency/src/deviceprofile_connector.cpp b/commondependency/src/deviceprofile_connector.cpp index 6d57f99bc..94c3c684d 100644 --- a/commondependency/src/deviceprofile_connector.cpp +++ b/commondependency/src/deviceprofile_connector.cpp @@ -1631,6 +1631,35 @@ int32_t DeviceProfileConnector::PutAllTrustedDevices( return DM_OK; } +int32_t DeviceProfileConnector::CheckDeviceInfoPermission(const std::string &localUdid, + const std::string &peerDeviceId) +{ + LOGI("CheckDeviceInfoPermission Start."); + int32_t localUserId = 0; + uint32_t tempLocalTokenId = 0; + MultipleUserConnector::GetTokenIdAndForegroundUserId(tempLocalTokenId, localUserId); + int64_t localTokenId = static_cast(tempLocalTokenId); + std::string localAccountId = MultipleUserConnector::GetOhosAccountIdByUserId(localUserId); + std::vector profiles = GetAccessControlProfileByUserId(localUserId); + for (auto &item : profiles) { + if (item.GetAccesser().GetAccesserDeviceId() == localUdid && + item.GetAccesser().GetAccesserUserId() == localUserId && + item.GetAccesser().GetAccesserAccountId() == localAccountId && + item.GetAccesser().GetAccesserTokenId() == localTokenId && + item.GetAccessee().GetAccesseeDeviceId() == peerDeviceId) { + return DM_OK; + } + if (item.GetAccessee().GetAccesseeDeviceId() == localUdid && + item.GetAccessee().GetAccesseeUserId() == localUserId && + item.GetAccessee().GetAccesseeAccountId() == localAccountId && + item.GetAccessee().GetAccesseeTokenId() == localTokenId && + item.GetAccesser().GetAccesserDeviceId() == peerDeviceId) { + return DM_OK; + } + } + return ERR_DM_NO_PERMISSION; +} + IDeviceProfileConnector *CreateDpConnectorInstance() { return &DeviceProfileConnector::GetInstance(); diff --git a/services/implementation/include/device_manager_service_impl.h b/services/implementation/include/device_manager_service_impl.h index 0ad140dc5..2f91bd3d8 100644 --- a/services/implementation/include/device_manager_service_impl.h +++ b/services/implementation/include/device_manager_service_impl.h @@ -134,6 +134,7 @@ public: void HandleDeviceUnBind(int32_t bindType, const std::string &peerUdid, const std::string &localUdid, int32_t localUserId, const std::string &localAccountId); int32_t RegisterAuthenticationType(int32_t authenticationType); + int32_t CheckDeviceInfoPermission(const std::string &localUdid, const std::string &peerDeviceId); private: int32_t PraseNotifyEventJson(const std::string &event, nlohmann::json &jsonObject); std::string GetUdidHashByNetworkId(const std::string &networkId); diff --git a/services/implementation/include/device_manager_service_impl_lite.h b/services/implementation/include/device_manager_service_impl_lite.h index 017f46316..cab542b2c 100644 --- a/services/implementation/include/device_manager_service_impl_lite.h +++ b/services/implementation/include/device_manager_service_impl_lite.h @@ -156,6 +156,7 @@ public: void HandleDeviceUnBind(int32_t bindType, const std::string &peerUdid, const std::string &localUdid, int32_t localUserId, const std::string &localAccountId); int32_t RegisterAuthenticationType(int32_t authenticationType); + int32_t CheckDeviceInfoPermission(const std::string &localUdid, const std::string &peerDeviceId); private: std::string GetUdidHashByNetworkId(const std::string &networkId); diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index df37b5f6d..5d914b48e 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -1016,6 +1016,17 @@ int32_t DeviceManagerServiceImpl::RegisterAuthenticationType(int32_t authenticat return authMgr_->RegisterAuthenticationType(authenticationType); } +int32_t DeviceManagerServiceImpl::CheckDeviceInfoPermission(const std::string &localUdid, + const std::string &peerDeviceId) +{ + int32_t ret = DeviceProfileConnector::GetInstance().CheckDeviceInfoPermission(localUdid, peerDeviceId); + if (ret != DM_OK) { + LOGE("CheckDeviceInfoPermission failed, ret: %{public}d", ret); + return ret; + } + return DM_OK; +} + extern "C" IDeviceManagerServiceImpl *CreateDMServiceObject(void) { return new DeviceManagerServiceImpl; diff --git a/services/implementation/src/device_manager_service_impl_lite.cpp b/services/implementation/src/device_manager_service_impl_lite.cpp index 9bad670d5..4959149a7 100644 --- a/services/implementation/src/device_manager_service_impl_lite.cpp +++ b/services/implementation/src/device_manager_service_impl_lite.cpp @@ -593,6 +593,14 @@ int32_t DeviceManagerServiceImpl::RegisterAuthenticationType(int32_t authenticat return DM_OK; } +int32_t DeviceManagerServiceImpl::CheckDeviceInfoPermission(const std::string &localUdid, + const std::string &peerDeviceId) +{ + (void)localUdid; + (void)peerDeviceId; + return DM_OK; +} + extern "C" IDeviceManagerServiceImpl *CreateDMServiceObject(void) { return new DeviceManagerServiceImpl; diff --git a/services/service/include/idevice_manager_service_impl.h b/services/service/include/idevice_manager_service_impl.h index 52292916e..9247e049e 100644 --- a/services/service/include/idevice_manager_service_impl.h +++ b/services/service/include/idevice_manager_service_impl.h @@ -257,6 +257,7 @@ public: virtual void HandleDeviceUnBind(int32_t bindType, const std::string &peerUdid, const std::string &localUdid, int32_t localUserId, const std::string &localAccountId) = 0; virtual int32_t RegisterAuthenticationType(int32_t authenticationType) = 0; + virtual int32_t CheckDeviceInfoPermission(const std::string &localUdid, const std::string &peerDeviceId) = 0; }; using CreateDMServiceFuncPtr = IDeviceManagerServiceImpl *(*)(void); diff --git a/services/service/src/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index 772787869..f09ae93da 100755 --- a/services/service/src/device_manager_service.cpp +++ b/services/service/src/device_manager_service.cpp @@ -379,11 +379,33 @@ int32_t DeviceManagerService::GetDeviceInfo(const std::string &networkId, DmDevi return ERR_DM_INPUT_PARA_INVALID; } CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL); - int32_t ret = softbusListener_->GetDeviceInfo(networkId, info); + DmDeviceInfo tempInfo; + int32_t ret = softbusListener_->GetDeviceInfo(networkId, tempInfo); if (ret != DM_OK) { LOGE("Get DeviceInfo By NetworkId failed, ret : %{public}d", ret); + return ERR_DM_FAILED; + } + std::string peerDeviceId = ""; + int32_t udidRet = softbusListener_->GetUdidByNetworkId(networkId.c_str(), peerDeviceId); + if (udidRet != DM_OK) { + LOGE("GetUdidByNetworkId failed, ret : %{public}d", udidRet); + return ERR_DM_FAILED; + } + if (!IsDMServiceImplReady()) { + LOGE("GetDeviceInfo failed, instance not init or init failed."); + return ERR_DM_NOT_INIT; + } + char localDeviceId[DEVICE_UUID_LENGTH] = {0}; + GetDevUdid(localDeviceId, DEVICE_UUID_LENGTH); + std::string localUdid = static_cast(localDeviceId); + int32_t permissionRet = dmServiceImpl_->CheckDeviceInfoPermission(localUdid, peerDeviceId); + if (permissionRet == DM_OK) { + info = tempInfo; + return DM_OK; + } else { + LOGE("CheckDevicePermission failed, ret : %{public}d", permissionRet); + return ERR_DM_NO_PERMISSION; } - return ret; } int32_t DeviceManagerService::GetLocalDeviceInfo(DmDeviceInfo &info) -- Gitee From 6abf51914144a8a9d0cd5585ab554e4ff31cc299 Mon Sep 17 00:00:00 2001 From: BrainL Date: Wed, 12 Feb 2025 16:33:58 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E4=B8=8D=E8=B6=85=E8=BF=87=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=20=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- commondependency/src/deviceprofile_connector.cpp | 9 +++++++-- services/service/src/device_manager_service.cpp | 14 +++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/commondependency/src/deviceprofile_connector.cpp b/commondependency/src/deviceprofile_connector.cpp index 94c3c684d..26cbdc127 100644 --- a/commondependency/src/deviceprofile_connector.cpp +++ b/commondependency/src/deviceprofile_connector.cpp @@ -1642,15 +1642,20 @@ int32_t DeviceProfileConnector::CheckDeviceInfoPermission(const std::string &loc std::string localAccountId = MultipleUserConnector::GetOhosAccountIdByUserId(localUserId); std::vector profiles = GetAccessControlProfileByUserId(localUserId); for (auto &item : profiles) { + if (item.GetBindType() == DM_IDENTICAL_ACCOUNT || item.GetBindLevel() == DEVICE) { + return DM_OK; + } + int32_t profileUserId = item.GetAccesser().GetAccesserUserId(); if (item.GetAccesser().GetAccesserDeviceId() == localUdid && - item.GetAccesser().GetAccesserUserId() == localUserId && + (profileUserId == localUserId || profileUserId == -1 || profileUserId == 0) && item.GetAccesser().GetAccesserAccountId() == localAccountId && item.GetAccesser().GetAccesserTokenId() == localTokenId && item.GetAccessee().GetAccesseeDeviceId() == peerDeviceId) { return DM_OK; } + profileUserId = item.GetAccessee().GetAccesseeUserId(); if (item.GetAccessee().GetAccesseeDeviceId() == localUdid && - item.GetAccessee().GetAccesseeUserId() == localUserId && + (profileUserId == localUserId || profileUserId == -1 || profileUserId == 0) && item.GetAccessee().GetAccesseeAccountId() == localAccountId && item.GetAccessee().GetAccesseeTokenId() == localTokenId && item.GetAccesser().GetAccesserDeviceId() == peerDeviceId) { diff --git a/services/service/src/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index f09ae93da..6a5669bed 100755 --- a/services/service/src/device_manager_service.cpp +++ b/services/service/src/device_manager_service.cpp @@ -379,12 +379,6 @@ int32_t DeviceManagerService::GetDeviceInfo(const std::string &networkId, DmDevi return ERR_DM_INPUT_PARA_INVALID; } CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL); - DmDeviceInfo tempInfo; - int32_t ret = softbusListener_->GetDeviceInfo(networkId, tempInfo); - if (ret != DM_OK) { - LOGE("Get DeviceInfo By NetworkId failed, ret : %{public}d", ret); - return ERR_DM_FAILED; - } std::string peerDeviceId = ""; int32_t udidRet = softbusListener_->GetUdidByNetworkId(networkId.c_str(), peerDeviceId); if (udidRet != DM_OK) { @@ -400,10 +394,12 @@ int32_t DeviceManagerService::GetDeviceInfo(const std::string &networkId, DmDevi std::string localUdid = static_cast(localDeviceId); int32_t permissionRet = dmServiceImpl_->CheckDeviceInfoPermission(localUdid, peerDeviceId); if (permissionRet == DM_OK) { - info = tempInfo; - return DM_OK; + int32_t ret = softbusListener_->GetDeviceInfo(networkId, info); + if (ret != DM_OK) { + LOGE("Get DeviceInfo By NetworkId failed, ret : %{public}d", ret); + } + return ret; } else { - LOGE("CheckDevicePermission failed, ret : %{public}d", permissionRet); return ERR_DM_NO_PERMISSION; } } -- Gitee From 3c97642efe4a00e8ea0de5a2c788ad7051a97b36 Mon Sep 17 00:00:00 2001 From: BrainL Date: Thu, 13 Feb 2025 09:26:07 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=B8=8D=E8=B6=85=E8=BF=87=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=8E=88=E6=9D=83=E8=8C=83=E5=9B=B4=E5=88=A4=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- commondependency/src/deviceprofile_connector.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/commondependency/src/deviceprofile_connector.cpp b/commondependency/src/deviceprofile_connector.cpp index 26cbdc127..184c02f2b 100644 --- a/commondependency/src/deviceprofile_connector.cpp +++ b/commondependency/src/deviceprofile_connector.cpp @@ -1642,8 +1642,10 @@ int32_t DeviceProfileConnector::CheckDeviceInfoPermission(const std::string &loc std::string localAccountId = MultipleUserConnector::GetOhosAccountIdByUserId(localUserId); std::vector profiles = GetAccessControlProfileByUserId(localUserId); for (auto &item : profiles) { - if (item.GetBindType() == DM_IDENTICAL_ACCOUNT || item.GetBindLevel() == DEVICE) { - return DM_OK; + if (item.GetTrustDeviceId() == peerDeviceId) { + if (item.GetBindType() == DM_IDENTICAL_ACCOUNT || item.GetBindLevel() == DEVICE) { + return DM_OK; + } } int32_t profileUserId = item.GetAccesser().GetAccesserUserId(); if (item.GetAccesser().GetAccesserDeviceId() == localUdid && -- Gitee