diff --git a/services/implementation/include/device_manager_service_impl.h b/services/implementation/include/device_manager_service_impl.h index 4164ad304f71b49208167be35449d9f83746736b..36fdc4d78b7322ff796f4370a95f9e13921cceea 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 36dccf96aa6b107eb30ad7218818dec8efd90ffd..a00e733033dfa82944de7f19ba95573db43cbad0 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 d14d6420768829c3a926b454f8eea59e22b4af96..9c744e124b90569ab425ff862dbf7621b8a90f66 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; }