From 175168e985d3d37e7b5e5a310d40bda84e64b134 Mon Sep 17 00:00:00 2001 From: gongyuechen Date: Mon, 27 Mar 2023 12:47:58 +0000 Subject: [PATCH] Description: granturipermmsion Sig:SIG_ApplicationFramework Feature or Bugfix:Feature Binary Source:No Signed-off-by: gongyuechen --- frameworks/js/napi/uri_permission/js_uri_perm_mgr.cpp | 5 ++--- .../src/uri_permission_manager_client.cpp | 1 - services/abilitymgr/src/ability_record.cpp | 1 - .../include/uri_permission_manager_stub_impl.h | 3 +-- .../src/uri_permission_manager_stub_impl.cpp | 11 +++++++++-- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/frameworks/js/napi/uri_permission/js_uri_perm_mgr.cpp b/frameworks/js/napi/uri_permission/js_uri_perm_mgr.cpp index 7563777b87..8d959a3a94 100644 --- a/frameworks/js/napi/uri_permission/js_uri_perm_mgr.cpp +++ b/frameworks/js/napi/uri_permission/js_uri_perm_mgr.cpp @@ -126,7 +126,6 @@ private: ThrowError(engine, AbilityErrorCode::ERROR_CODE_INVALID_PARAM); return engine.CreateUndefined(); } - AsyncTask::CompleteCallback complete = [uriStr, bundleName](NativeEngine& engine, AsyncTask& task, int32_t status) { Uri uri(uriStr); @@ -135,13 +134,13 @@ private: if (errCode == ERR_OK) { task.ResolveWithNoError(engine, engine.CreateUndefined()); } else if (errCode == AAFwk::CHECK_PERMISSION_FAILED) { - task.Reject(engine, CreateNoPermissionError(engine, "ohos.permission.PROXY_AUTHORIZATION_URI")); + task.Reject(engine, CreateNoPermissionError(engine, + "Do not have permission ohos.permission.PROXY_AUTHORIZATION_URI")); } else { task.Reject(engine, CreateJsError(engine, ERR_ABILITY_RUNTIME_EXTERNAL_INTERNAL_ERROR, "Internal Error.")); } }; - NativeValue* lastParam = (info.argc == argCountThree) ? info.argv[argCountTwo] : nullptr; NativeValue* result = nullptr; AsyncTask::Schedule("JsUriPermMgr::OnRevokeUriPermission", diff --git a/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp b/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp index 83e2baffa6..d076b35d0f 100644 --- a/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp +++ b/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp @@ -42,7 +42,6 @@ void UriPermissionManagerClient::RevokeUriPermission(const Security::AccessToken if (uriPermMgr) { return uriPermMgr->RevokeUriPermission(tokenId); } - return; } int UriPermissionManagerClient::RevokeUriPermissionManually(const Uri &uri, const std::string bundleName) diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index 76314993d5..6eed23415e 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -1200,7 +1200,6 @@ void AbilityRecord::Terminate(const Closure &task) // earlier than above actions. currentState_ = AbilityState::TERMINATING; lifecycleDeal_->Terminate(want_, lifeCycleStateInfo_); - RevokeUriPermission(); } void AbilityRecord::ConnectAbility() diff --git a/services/uripermmgr/include/uri_permission_manager_stub_impl.h b/services/uripermmgr/include/uri_permission_manager_stub_impl.h index 4a3d3d1cf8..56844b3847 100644 --- a/services/uripermmgr/include/uri_permission_manager_stub_impl.h +++ b/services/uripermmgr/include/uri_permission_manager_stub_impl.h @@ -55,8 +55,7 @@ private: void ClearSMProxy(); int GrantUriPermissionImpl(const Uri &uri, unsigned int flag, Security::AccessToken::AccessTokenID fromTokenId, - Security::AccessToken::AccessTokenID targetTokenId, - int autoremove); + Security::AccessToken::AccessTokenID targetTokenId, int autoremove); Security::AccessToken::AccessTokenID GetTokenIdByBundleName(const std::string bundleName); class BMSOrSMDeathRecipient : public IRemoteObject::DeathRecipient { diff --git a/services/uripermmgr/src/uri_permission_manager_stub_impl.cpp b/services/uripermmgr/src/uri_permission_manager_stub_impl.cpp index a13422e61b..985af02e9f 100644 --- a/services/uripermmgr/src/uri_permission_manager_stub_impl.cpp +++ b/services/uripermmgr/src/uri_permission_manager_stub_impl.cpp @@ -62,7 +62,7 @@ int UriPermissionManagerStubImpl::GrantUriPermission(const Uri &uri, unsigned in tmpFlag = Want::FLAG_AUTH_READ_URI_PERMISSION; } auto&& scheme = uri_inner.GetScheme(); - if (scheme != "file" && scheme != "dataShare") { + if (scheme != "file") { HILOG_WARN("only support file or dataShare uri."); return INNER_ERR; } @@ -118,6 +118,14 @@ int UriPermissionManagerStubImpl::GrantUriPermissionImpl(const Uri &uri, unsigne void UriPermissionManagerStubImpl::RevokeUriPermission(const TokenId tokenId) { HILOG_DEBUG("Start to remove uri permission."); + auto callerTokenId = IPCSkeleton::GetCallingTokenID(); + Security::AccessToken::NativeTokenInfo nativeInfo; + Security::AccessToken::AccessTokenKit::GetNativeTokenInfo(callerTokenId, nativeInfo); + HILOG_DEBUG("callerprocessName : %{public}s", nativeInfo.processName.c_str()); + if (nativeInfo.processName != "fodundation") { + HILOG_ERROR("RevokeUriPermission can only be called by foundation"); + return; + } std::vector uriList; { std::lock_guard guard(mutex_); @@ -148,7 +156,6 @@ void UriPermissionManagerStubImpl::RevokeUriPermission(const TokenId tokenId) if (!uriList.empty()) { storageMgrProxy->DeleteShareFile(tokenId, uriList); } - return; } int UriPermissionManagerStubImpl::RevokeUriPermissionManually(const Uri &uri, const std::string bundleName)