From 5043e9c9938ba08e199b0c9fdea61151f32bfa33 Mon Sep 17 00:00:00 2001 From: chennian Date: Fri, 29 Aug 2025 10:53:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chennian Change-Id: I35f595a9a84dd6664343f239c72019e3728a742d --- .../src/ani_request_permission.cpp | 4 -- .../src/napi_request_permission.cpp | 3 +- .../test/tool/add_permission_used_record.cpp | 44 ++++++++++--------- .../include/napi_request_permission.h | 4 ++ .../service/accesstoken_manager_service.cpp | 3 ++ 5 files changed, 32 insertions(+), 26 deletions(-) diff --git a/frameworks/ets/ani/accesstoken/src/ani_request_permission.cpp b/frameworks/ets/ani/accesstoken/src/ani_request_permission.cpp index a440cd234..ef06cb841 100644 --- a/frameworks/ets/ani/accesstoken/src/ani_request_permission.cpp +++ b/frameworks/ets/ani/accesstoken/src/ani_request_permission.cpp @@ -236,10 +236,6 @@ bool RequestAsyncContext::IsDynamicRequest() permList.emplace_back(permState); } auto ret = AccessToken::AccessTokenKit::GetSelfPermissionsState(permList, this->info); - LOGI(ATM_DOMAIN, ATM_TAG, - "TokenID: %{public}d, bundle: %{public}s, uiExAbility: %{public}s, serExAbility: %{public}s.", - this->tokenId, this->info.grantBundleName.c_str(), this->info.grantAbilityName.c_str(), - this->info.grantServiceAbilityName.c_str()); if (ret == AccessToken::FORBIDDEN_OPER) { LOGE(ATM_DOMAIN, ATM_TAG, "FORBIDDEN_OPER"); for (auto& perm : permList) { diff --git a/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp b/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp index 81f65d718..545c39c6f 100644 --- a/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp +++ b/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp @@ -858,7 +858,8 @@ void NapiRequestPermission::GetPermissionsStatusExecute(napi_env env, void* data LOGD(ATM_DOMAIN, ATM_TAG, "PermList size: %{public}zu, asyncContext->permissionList size: %{public}zu.", permList.size(), asyncContext->permissionList.size()); - asyncContext->result.errorCode = AccessTokenKit::GetPermissionsStatus(asyncContext->tokenId, permList); + int32_t errorCode = AccessTokenKit::GetPermissionsStatus(asyncContext->tokenId, permList); + asyncContext->SetErrorResult(errorCode, ""); for (const auto& permState : permList) { LOGD(ATM_DOMAIN, ATM_TAG, "Permission: %{public}s", permState.permissionName.c_str()); asyncContext->permissionQueryResults.emplace_back(permState.state); diff --git a/interfaces/innerkits/privacy/test/tool/add_permission_used_record.cpp b/interfaces/innerkits/privacy/test/tool/add_permission_used_record.cpp index 4036b6579..c7a5c8858 100644 --- a/interfaces/innerkits/privacy/test/tool/add_permission_used_record.cpp +++ b/interfaces/innerkits/privacy/test/tool/add_permission_used_record.cpp @@ -16,36 +16,36 @@ #include #include #include +#include #include #include "accesstoken_kit.h" -#include "nativetoken_kit.h" #include "privacy_kit.h" #include "token_setproc.h" using namespace std; using namespace OHOS::Security::AccessToken; -static void NativeTokenGet() +AccessTokenID GetNativeTokenIdFromProcess(const std::string &process) { - uint64_t tokenID; - const char **perms = new (std::nothrow) const char *[1]; // size of array - perms[0] = "ohos.permission.PERMISSION_USED_STATS"; // 0: index - - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 1, // size of permission list - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; + std::string dumpInfo; + AtmToolsParamInfo info; + info.processName = process; + AccessTokenKit::DumpTokenInfo(info, dumpInfo); + size_t pos = dumpInfo.find("\"tokenID\": "); + if (pos == std::string::npos) { + return 0; + } + pos += std::string("\"tokenID\": ").length(); + std::string numStr; + while (pos < dumpInfo.length() && std::isdigit(dumpInfo[pos])) { + numStr += dumpInfo[pos]; + ++pos; + } - infoInstance.processName = "AddPermissionUsedRecord"; - tokenID = GetAccessTokenId(&infoInstance); - SetSelfTokenID(tokenID); - AccessTokenKit::ReloadNativeTokenInfo(); - delete[] perms; + std::istringstream iss(numStr); + AccessTokenID tokenID; + iss >> tokenID; + return tokenID; } int32_t main(int argc, char *argv[]) @@ -55,7 +55,9 @@ int32_t main(int argc, char *argv[]) return 0; } - NativeTokenGet(); + AccessTokenID mockTokenID = GetNativeTokenIdFromProcess("camera_service"); + SetSelfTokenID(mockTokenID); + std::cout << "#SelfTokenID: " << GetSelfTokenID() << std::endl; uint32_t tokenId = static_cast(atoi(argv[1])); // 1: index std::string permisisionName = argv[2]; // 2: index diff --git a/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h b/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h index 45cd3f390..a10df1b66 100644 --- a/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h +++ b/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h @@ -34,6 +34,10 @@ struct RequestAsyncContext : public AtManagerAsyncWorkData { { this->env = env; } + void SetErrorResult(int32_t errorCode, const std::string& errorMsg) { + result.errorCode = errorCode; + result.errorMsg = errorMsg; + } AccessTokenID tokenId = 0; std::string bundleName = ""; diff --git a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp index cf0043e31..f6bbbee66 100644 --- a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp +++ b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp @@ -302,6 +302,9 @@ int32_t AccessTokenManagerService::GetSelfPermissionsState(std::vector