From b58d3ad3b3431fb47e4c8afefdffb83e5e5008aa Mon Sep 17 00:00:00 2001 From: guoyi Date: Fri, 18 Jul 2025 10:05:48 +0800 Subject: [PATCH] =?UTF-8?q?ndk=E6=B7=BB=E5=8A=A0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: guoyi --- interfaces/kits/ndk/src/dm_client.cpp | 2 +- .../devicenamemgr/device_name_manager.h | 2 +- .../permission/lite/permission_manager.h | 3 ++- .../permission/standard/permission_manager.h | 3 ++- .../service/src/device_manager_service.cpp | 7 ++++++- .../permission/lite/permission_manager.cpp | 7 ++++++- .../standard/permission_manager.cpp | 18 +++++++++++++++++- .../UTTest_permission_manager.cpp | 19 +++++++++++++++++++ test/unittest/UTTest_device_manager_service.h | 2 +- .../UTTest_device_manager_service_two.cpp | 8 ++++++++ .../unittest/mock/permission_manager_mock.cpp | 5 +++++ test/unittest/mock/permission_manager_mock.h | 2 ++ 12 files changed, 70 insertions(+), 8 deletions(-) diff --git a/interfaces/kits/ndk/src/dm_client.cpp b/interfaces/kits/ndk/src/dm_client.cpp index 2d5c6273e..6eeae3288 100644 --- a/interfaces/kits/ndk/src/dm_client.cpp +++ b/interfaces/kits/ndk/src/dm_client.cpp @@ -78,7 +78,7 @@ int32_t DmClient::GetLocalDeviceName(std::string &deviceName) ret = DeviceManager::GetInstance().GetLocalDeviceName(deviceName); if (ret != DM_OK) { LOGE("Get local device name failed, ret=%{public}d", ret); - return DM_ERR_OBTAIN_BUNDLE_NAME; + return DM_ERR_FAILED; } return ERR_OK; } diff --git a/services/service/include/devicenamemgr/device_name_manager.h b/services/service/include/devicenamemgr/device_name_manager.h index ed68ca896..20aa157bc 100644 --- a/services/service/include/devicenamemgr/device_name_manager.h +++ b/services/service/include/devicenamemgr/device_name_manager.h @@ -45,6 +45,7 @@ public: int32_t RestoreLocalDeviceName(); int32_t InitDeviceNameWhenLanguageOrRegionChanged(); std::string GetUserDefinedDeviceName(); + std::string GetLocalMarketName(); private: DeviceNameManager() = default; @@ -60,7 +61,6 @@ private: std::string GetSystemLanguage(); std::string GetSystemRegion(); - std::string GetLocalMarketName(); int32_t InitDisplayDeviceNameToSettingsData(const std::string &nickName, const std::string &deviceName, int32_t userId); diff --git a/services/service/include/permission/lite/permission_manager.h b/services/service/include/permission/lite/permission_manager.h index 212506b7d..4410f20dd 100644 --- a/services/service/include/permission/lite/permission_manager.h +++ b/services/service/include/permission/lite/permission_manager.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -40,6 +40,7 @@ public: bool CheckProcessNameValidModifyLocalDeviceName(const std::string &processName); bool CheckProcessNameValidModifyRemoteDeviceName(const std::string &processName); bool CheckProcessNameValidPutDeviceProfileInfoList(const std::string &processName); + bool CheckReadLocalDeviceName(void); }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/service/include/permission/standard/permission_manager.h b/services/service/include/permission/standard/permission_manager.h index ca52cd987..438721613 100644 --- a/services/service/include/permission/standard/permission_manager.h +++ b/services/service/include/permission/standard/permission_manager.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -39,6 +39,7 @@ public: bool CheckProcessNameValidModifyLocalDeviceName(const std::string &processName); bool CheckProcessNameValidModifyRemoteDeviceName(const std::string &processName); bool CheckProcessNameValidPutDeviceProfileInfoList(const std::string &processName); + bool CheckReadLocalDeviceName(void); }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/service/src/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index edcb3401c..b625e8325 100644 --- a/services/service/src/device_manager_service.cpp +++ b/services/service/src/device_manager_service.cpp @@ -4338,7 +4338,12 @@ int32_t DeviceManagerService::UnRegisterPinHolderCallback(const std::string &pkg int32_t DeviceManagerService::GetLocalDeviceName(std::string &deviceName) { #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE)) - return DeviceNameManager::GetInstance().GetLocalDisplayDeviceName(0, deviceName); + if (PermissionManager::GetInstance().CheckReadLocalDeviceName()) { + return DeviceNameManager::GetInstance().GetLocalDisplayDeviceName(0, deviceName); + } else { + deviceName = DeviceNameManager::GetInstance().GetLocalMarketName(); + return DM_OK; + } #endif (void) deviceName; return DM_OK; diff --git a/services/service/src/permission/lite/permission_manager.cpp b/services/service/src/permission/lite/permission_manager.cpp index a86742e99..5c8ac749f 100644 --- a/services/service/src/permission/lite/permission_manager.cpp +++ b/services/service/src/permission/lite/permission_manager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -100,5 +100,10 @@ bool PermissionManager::CheckProcessNameValidPutDeviceProfileInfoList(const std: (void)processName; return true; } + +bool PermissionManager::CheckReadLocalDeviceName(void) +{ + return true; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/service/src/permission/standard/permission_manager.cpp b/services/service/src/permission/standard/permission_manager.cpp index c88b33ba8..9f838e10d 100644 --- a/services/service/src/permission/standard/permission_manager.cpp +++ b/services/service/src/permission/standard/permission_manager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -90,6 +90,7 @@ constexpr const static char* g_putDeviceProfileInfoListWhiteList[PUT_DEVICE_PROF "com.huawei.hmos.ailifesvc", "com.huawei.hmos.tvcooperation", }; +constexpr const char* READ_LOCAL_DEVICE_NAME_PERMISSION = "ohos.permission.READ_LOCAL_DEVICE_NAME"; } bool PermissionManager::CheckPermission(void) @@ -330,5 +331,20 @@ bool PermissionManager::CheckProcessNameValidPutDeviceProfileInfoList(const std: } return false; } + +bool PermissionManager::CheckReadLocalDeviceName(void) +{ + AccessTokenID tokenCaller = IPCSkeleton::GetCallingTokenID(); + if (tokenCaller == 0) { + LOGE("CheckReadLocalDeviceName GetCallingTokenID error."); + return false; + } + if (AccessTokenKit::VerifyAccessToken(tokenCaller, READ_LOCAL_DEVICE_NAME_PERMISSION) != + PermissionState::PERMISSION_GRANTED) { + LOGE("Read local device name permission is denied, please apply for corresponding permissions."); + return false; + } + return true; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/test/commonunittest/UTTest_permission_manager.cpp b/test/commonunittest/UTTest_permission_manager.cpp index 3d1e18fad..9e37fe130 100644 --- a/test/commonunittest/UTTest_permission_manager.cpp +++ b/test/commonunittest/UTTest_permission_manager.cpp @@ -261,6 +261,25 @@ HWTEST_F(PermissionManagerTest, CheckProcessNameValidOnGetDeviceInfo_001, testin ret = PermissionManager::GetInstance().CheckProcessNameValidOnGetDeviceInfo(processName); ASSERT_TRUE(ret); } + +HWTEST_F(PermissionManagerTest, CheckReadLocalDeviceName_001, testing::ext::TestSize.Level1) +{ + EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(0)); + bool ret = PermissionManager::GetInstance().CheckReadLocalDeviceName(); + ASSERT_FALSE(ret); + + EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(10)); + EXPECT_CALL(*accessTokenKitMock_, VerifyAccessToken(_, _)) + .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_DENIED)); + ret = PermissionManager::GetInstance().CheckPermission(); + ASSERT_FALSE(ret); + + EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(10)); + EXPECT_CALL(*accessTokenKitMock_, VerifyAccessToken(_, _)) + .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_GRANTED)); + ret = PermissionManager::GetInstance().CheckPermission(); + ASSERT_TRUE(ret); +} } } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/UTTest_device_manager_service.h b/test/unittest/UTTest_device_manager_service.h index 4b7b8e87e..853df5e23 100644 --- a/test/unittest/UTTest_device_manager_service.h +++ b/test/unittest/UTTest_device_manager_service.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/test/unittest/UTTest_device_manager_service_two.cpp b/test/unittest/UTTest_device_manager_service_two.cpp index 1ecdd86fa..a685e60ea 100644 --- a/test/unittest/UTTest_device_manager_service_two.cpp +++ b/test/unittest/UTTest_device_manager_service_two.cpp @@ -1926,8 +1926,16 @@ HWTEST_F(DeviceManagerServiceTest, HandleShareUnbindBroadCast_003, testing::ext: HWTEST_F(DeviceManagerServiceTest, GetLocalDeviceName_201, testing::ext::TestSize.Level1) { std::string deviceName = ""; + EXPECT_CALL(*permissionManagerMock_, CheckReadLocalDeviceName()).WillOnce(Return(true)); int32_t ret = DeviceManagerService::GetInstance().GetLocalDeviceName(deviceName); EXPECT_EQ(ret, DM_OK); + EXPECT_FALSE(deviceName.empty()); + + deviceName = ""; + EXPECT_CALL(*permissionManagerMock_, CheckReadLocalDeviceName()).WillOnce(Return(false)); + int32_t ret = DeviceManagerService::GetInstance().GetLocalDeviceName(deviceName); + EXPECT_EQ(ret, DM_OK); + EXPECT_FALSE(deviceName.empty()); } HWTEST_F(DeviceManagerServiceTest, ValidateUnBindDeviceParams_201, testing::ext::TestSize.Level1) diff --git a/test/unittest/mock/permission_manager_mock.cpp b/test/unittest/mock/permission_manager_mock.cpp index becbab5e6..1c0884c44 100644 --- a/test/unittest/mock/permission_manager_mock.cpp +++ b/test/unittest/mock/permission_manager_mock.cpp @@ -69,5 +69,10 @@ bool PermissionManager::CheckProcessNameValidPutDeviceProfileInfoList(const std: { return DmPermissionManager::dmPermissionManager->CheckProcessNameValidPutDeviceProfileInfoList(processName); } + +bool PermissionManager::CheckReadLocalDeviceName() +{ + return DmPermissionManager::dmPermissionManager->CheckReadLocalDeviceName(); +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/mock/permission_manager_mock.h b/test/unittest/mock/permission_manager_mock.h index 29bb5ba51..ec49ac838 100644 --- a/test/unittest/mock/permission_manager_mock.h +++ b/test/unittest/mock/permission_manager_mock.h @@ -36,6 +36,7 @@ public: virtual bool CheckProcessNameValidModifyLocalDeviceName(const std::string &processName) = 0; virtual bool CheckProcessNameValidModifyRemoteDeviceName(const std::string &processName) = 0; virtual bool CheckProcessNameValidPutDeviceProfileInfoList(const std::string &processName) = 0; + virtual bool CheckReadLocalDeviceName() = 0; public: static inline std::shared_ptr dmPermissionManager = nullptr; }; @@ -52,6 +53,7 @@ public: MOCK_METHOD(bool, CheckProcessNameValidModifyLocalDeviceName, (const std::string &)); MOCK_METHOD(bool, CheckProcessNameValidModifyRemoteDeviceName, (const std::string &)); MOCK_METHOD(bool, CheckProcessNameValidPutDeviceProfileInfoList, (const std::string &)); + MOCK_METHOD(bool, CheckReadLocalDeviceName, ()); }; } } -- Gitee