From 7c39510b92b109212246a5ea6f2a88c52255b517 Mon Sep 17 00:00:00 2001 From: libo429 Date: Tue, 15 Jul 2025 10:28:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=90=86=E7=BB=91=E5=AE=9A=E5=BD=B1?= =?UTF-8?q?=E5=93=8D=E5=8E=9F=E8=A7=A3=E7=BB=91=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E5=AF=BC=E8=87=B4lnn=E6=B8=85=E7=90=86=E4=B8=8D=E6=8E=89?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: libo429 --- .../include/device_manager_service_impl.h | 1 + .../src/device_manager_service_impl.cpp | 23 +++++++++++++++++-- .../service/src/device_manager_service.cpp | 3 ++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/services/implementation/include/device_manager_service_impl.h b/services/implementation/include/device_manager_service_impl.h index 4164ad304..36fdc4d78 100644 --- a/services/implementation/include/device_manager_service_impl.h +++ b/services/implementation/include/device_manager_service_impl.h @@ -183,6 +183,7 @@ public: int32_t CheckDeviceInfoPermission(const std::string &localUdid, const std::string &peerDeviceId); int32_t DeleteAcl(const std::string &sessionName, const std::string &localUdid, const std::string &remoteUdid, int32_t bindLevel, const std::string &extra); + bool IsProxyUnbind(const std::string &extra); int32_t DeleteAclV2(const std::string &sessionName, const std::string &localUdid, const std::string &remoteUdid, int32_t bindLevel, const std::string &extra); void NotifyCleanEvent(uint64_t logicalSessionId); diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 36dccf96a..a00e73303 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -2869,6 +2869,19 @@ int32_t DeviceManagerServiceImpl::DeleteAclForProcV2(const std::string &localUdi return DM_OK; } +bool DeviceManagerServiceImpl::IsProxyUnbind(const std::string &extra) +{ + JsonObject jsonObject(extra); + if (jsonObject.IsDiscarded()) { + return false; + } + if (IsString(jsonObject, PARAM_KEY_IS_PROXY_UNBIND) && + jsonObject[PARAM_KEY_IS_PROXY_UNBIND].Get() == DM_VAL_TRUE) { + return true; + } + return false; +} + int32_t DeviceManagerServiceImpl::DeleteAclV2(const std::string &pkgName, const std::string &localUdid, const std::string &remoteUdid, int32_t bindLevel, const std::string &extra) { @@ -2876,8 +2889,14 @@ int32_t DeviceManagerServiceImpl::DeleteAclV2(const std::string &pkgName, const pkgName.c_str(), GetAnonyString(localUdid).c_str(), GetAnonyString(remoteUdid).c_str(), bindLevel); int64_t tokenId = 0; int32_t userId = MultipleUserConnector::GetCurrentAccountUserID(); - std::string bundleName = pkgName; - AppManager::GetInstance().GetTokenIdByBundleName(userId, bundleName, tokenId); + if (IsProxyUnbind(extra) != true) { + uint32_t callingTokenId = 0; + MultipleUserConnector::GetTokenId(callingTokenId); + tokenId = static_cast(callingTokenId); + } else { + std::string bundleName = pkgName; + AppManager::GetInstance().GetTokenIdByBundleName(userId, bundleName, tokenId); + } bool isNewVersion = IsAuthNewVersion(bindLevel, localUdid, remoteUdid, tokenId, userId); if (!isNewVersion) { return DeleteAcl(pkgName, localUdid, remoteUdid, bindLevel, extra); diff --git a/services/service/src/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index d14d64207..9c744e124 100644 --- a/services/service/src/device_manager_service.cpp +++ b/services/service/src/device_manager_service.cpp @@ -958,7 +958,7 @@ std::set> DeviceManagerService::GetProxyInfo return proxyInfos; } int64_t proxyTokenId = static_cast(IPCSkeleton::GetCallingTokenID()); - for (const auto &object : allProxyObj.Items()) { + for (auto object : allProxyObj.Items()) { if (!object.Contains(TAG_BUNDLE_NAME) || !IsString(object, TAG_BUNDLE_NAME)) { continue; } @@ -969,6 +969,7 @@ std::set> DeviceManagerService::GetProxyInfo int64_t agentTokenId = object[TAG_TOKENID].Get(); for (uint32_t i = 0; i < agentToProxyVec.size(); i++) { if (agentTokenId == agentToProxyVec[i].first && proxyTokenId == agentToProxyVec[i].second) { + object[PARAM_KEY_IS_PROXY_UNBIND] = DM_VAL_TRUE; proxyInfos.insert(std::pair(bundleName, object.Dump())); break; } -- Gitee