From 662eb8243b433676c0c814427ba93cc6e9aace81 Mon Sep 17 00:00:00 2001 From: YinZong Date: Fri, 8 Aug 2025 03:16:42 +0000 Subject: [PATCH 1/3] update interfaces/innerkits/native/file_share/include/file_permission.h. Signed-off-by: YinZong --- .../innerkits/native/file_share/include/file_permission.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interfaces/innerkits/native/file_share/include/file_permission.h b/interfaces/innerkits/native/file_share/include/file_permission.h index b4073028d..db7391cfd 100644 --- a/interfaces/innerkits/native/file_share/include/file_permission.h +++ b/interfaces/innerkits/native/file_share/include/file_permission.h @@ -102,6 +102,8 @@ private: deque &errorResults, bool checkAccess = true); static vector GetPathPolicyInfoFromUriPolicyInfo(const vector &uriPolicies, vector &errorResults); + static vector GetPathPolicyInfoFromUriPolicyInfo(const vector &uriPolicies, + const std::string &targetBundleName, deque &errorResults); static vector GetSandboxPolicyInfo(const vector &pathPolicies); #endif }; -- Gitee From 067d6d97fee724ad411377603533769d44654ea8 Mon Sep 17 00:00:00 2001 From: YinZong Date: Fri, 8 Aug 2025 03:20:09 +0000 Subject: [PATCH 2/3] update interfaces/innerkits/native/file_share/src/file_permission.cpp. Signed-off-by: YinZong --- .../native/file_share/src/file_permission.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/interfaces/innerkits/native/file_share/src/file_permission.cpp b/interfaces/innerkits/native/file_share/src/file_permission.cpp index 790e6d5ef..cfc4945a2 100644 --- a/interfaces/innerkits/native/file_share/src/file_permission.cpp +++ b/interfaces/innerkits/native/file_share/src/file_permission.cpp @@ -218,6 +218,25 @@ vector FilePermission::GetPathPolicyInfoFromUriPolicyInfo(const vect return pathPolicies; } +vector FilePermission::GetPathPolicyInfoFromUriPolicyInfo(const vector &uriPolicies, + const std::string &targetBundleName, deque &errorResults) +{ + vector pathPolicies; + for (const auto &uriPolicy : uriPolicies) { + AppFileService::ModuleFileUri::FileUri fileuri(uriPolicy.uri); + string path = fileuri.GetRealPathBySA(targetBundleName); + if (!CheckValidUri(uriPolicy.uri, path, false, "")) { + LOGE("Not correct uri!"); + PolicyErrorResult result = {uriPolicy.uri, PolicyErrorCode::INVALID_PATH, INVALID_PATH_MESSAGE}; + errorResults.emplace_back(result); + } else { + PolicyInfo policyInfo = {path, uriPolicy.mode}; + pathPolicies.emplace_back(policyInfo); + } + } + return pathPolicies; +} + vector FilePermission::GetSandboxPolicyInfo(const vector &pathPolicies) { vector policies; @@ -342,7 +361,7 @@ int32_t FilePermission::GrantPermission(const vector &uriPolicies LOGE("The number of result codes exceeds the maximum"); return EPERM; } - vector pathPolicies = GetPathPolicyInfoFromUriPolicyInfo(uriPolicies, errorResults, false); + vector pathPolicies = GetPathPolicyInfoFromUriPolicyInfo(uriPolicies, bundleName, errorResults); if (pathPolicies.size() == 0) { return EPERM; } -- Gitee From 6571eed08c44bd8bed538fda0643fcca15507c8e Mon Sep 17 00:00:00 2001 From: YinZong Date: Fri, 8 Aug 2025 03:21:11 +0000 Subject: [PATCH 3/3] update test/unittest/file_permission_native/src/file_permission_test.cpp. Signed-off-by: YinZong --- .../src/file_permission_test.cpp | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/test/unittest/file_permission_native/src/file_permission_test.cpp b/test/unittest/file_permission_native/src/file_permission_test.cpp index f9f7de218..43987d522 100644 --- a/test/unittest/file_permission_native/src/file_permission_test.cpp +++ b/test/unittest/file_permission_native/src/file_permission_test.cpp @@ -560,6 +560,54 @@ HWTEST_F(FilePermissionTest, GetPathPolicyInfoFromUriPolicyInfo_test_0001, testi GTEST_LOG_(INFO) << "FileShareTest-end GetPathPolicyInfoFromUriPolicyInfo_test_0001"; } +/** + * @tc.name: GetPathPolicyInfoFromUriPolicyInfo_test_0002 + * @tc.desc: Test function of GetPathPolicyInfoFromUriPolicyInfo() interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: + */ +HWTEST_F(FilePermissionTest, GetPathPolicyInfoFromUriPolicyInfo_test_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileShareTest-begin GetPathPolicyInfoFromUriPolicyInfo_test_0002"; + + std::string targetBundleName1 = "com.huawei.hmos.browser"; + std::string targetBundleName2 = "com.grantpermission.myapplication"; + UriPolicyInfo infoA = {.uri = "file://com.grantpermission.myapplication/data/storage/el2/cloud/457475.txt"}; + UriPolicyInfo infoB = {.uri = "file://docs/storage/Users/currentUser/Documents/1.txt"}; + UriPolicyInfo infoC = {.uri = "file://docs/storage/Users/currentUser/appdata/el2/base/com.huawei.hmos.browser/files/grs_files/ei_hmos_browser/version.txt"}; + UriPolicyInfo infoD = {.uri = "file://com.grantpermission.myapplication/data/storage/el2/cloud/457475.txt"}; + UriPolicyInfo infoE = {.uri = "/"}; + + std::vector uriPolicies; + uriPolicies.emplace_back(infoA); + uriPolicies.emplace_back(infoB); + uriPolicies.emplace_back(infoC); + + deque errorResults; + EXPECT_CALL(*funcMock, access(_, _)).WillRepeatedly(Return(0)); + auto pathPolicies = FilePermission::GetPathPolicyInfoFromUriPolicyInfo(uriPolicies, targetBundleName1, errorResults); + ASSERT_TRUE(pathPolicies.size() == 3); + EXPECT_EQ(pathPolicies[0].path, "/storage/Users/currentUser/appdata/el2/cloud/com.grantpermission.myapplication/457475.txt"); + EXPECT_EQ(pathPolicies[1].path, "/storage/Users/currentUser/Documents/1.txt"); + EXPECT_EQ(pathPolicies[2].path, "/storage/Users/currentUser/appdata/el2/base/com.huawei.hmos.browser/files/grs_files/ei_hmos_browser/version.txt"); + + std::vector uriPolicies2; + uriPolicies2.emplace_back(infoD); + pathPolicies = FilePermission::GetPathPolicyInfoFromUriPolicyInfo(uriPolicies2, targetBundleName2, errorResults); + ASSERT_TRUE(pathPolicies.size() == 1); + EXPECT_EQ(pathPolicies[0].path, "/data/storage/el2/cloud/457475.txt"); + + std::vector uriPolicies3; + uriPolicies3.emplace_back(infoE); + pathPolicies = FilePermission::GetPathPolicyInfoFromUriPolicyInfo(uriPolicies3, targetBundleName2, errorResults); + ASSERT_TRUE(errorResults.size() == 1); + EXPECT_EQ(errorResults[0].code, PolicyErrorCode::INVALID_PATH); + + GTEST_LOG_(INFO) << "FileShareTest-end GetPathPolicyInfoFromUriPolicyInfo_test_0002"; +} + /** * @tc.name: ParseErrorResults_test_0001 * @tc.desc: Test function of ParseErrorResults() interface for SUCCESS. -- Gitee