diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 0f49ba3b4094098c73bc086ffa048f28016db494..d9fd9c0f47848dcd389824705f53eda3f594a3b0 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -1911,11 +1911,14 @@ int AbilityManagerService::SendResultToAbility(int32_t requestCode, int32_t resu Security::AccessToken::NativeTokenInfo nativeTokenInfo; uint32_t accessToken = IPCSkeleton::GetCallingTokenID(); auto tokenType = Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(accessToken); + auto isGatewayCall = AAFwk::PermissionVerification::GetInstance()->IsGatewayCall(); int32_t result = Security::AccessToken::AccessTokenKit::GetNativeTokenInfo(accessToken, nativeTokenInfo); if (tokenType != Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE || result != ERR_OK || nativeTokenInfo.processName != DMS_PROCESS_NAME) { - HILOG_ERROR("Check processName failed"); - return ERR_INVALID_VALUE; + if (!isGatewayCall) { + HILOG_ERROR("Check processName failed"); + return ERR_INVALID_VALUE; + } } int missionId = resultWant.GetIntParam(DMS_MISSION_ID, DEFAULT_DMS_MISSION_ID); resultWant.RemoveParam(DMS_MISSION_ID); @@ -6869,6 +6872,10 @@ bool AbilityManagerService::IsComponentInterceptionStart(const Want &want, Compo if (callType == AbilityCallType::CALL_REQUEST_TYPE) { newWant.SetParam("abilityConnectionObj", request.connect->AsObject()); } + if (want.GetBoolParam(Want::PARAM_RESV_FOR_RESULT, false)) { + int32_t missionId = GetMissionIdByAbilityToken(componentRequest.callerToken); + newWant.SetParam(DMS_MISSION_ID, missionId); + } int32_t tokenId = static_cast(IPCSkeleton::GetCallingTokenID()); newWant.SetParam("accessTokenId", tokenId); diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index 4ca4b1081ab37d9978afdd57c7c5dca01f0e3cab..881260279ccef18a7e53397dd0f8cd8d1769efc5 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -1566,6 +1566,11 @@ bool AbilityRecord::IsSystemAbilityCall(const sptr &callerToken) if (abilityRecord != nullptr) { return false; } + auto isGatewayCall = AAFwk::PermissionVerification::GetInstance()->IsGatewayCall(); + if (isGatewayCall) { + HILOG_INFO("Is gateway call."); + return true; + } auto tokenType = Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(IPCSkeleton::GetCallingTokenID()); bool isNativeCall = tokenType == Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE; if (!isNativeCall) { diff --git a/services/common/src/permission_verification.cpp b/services/common/src/permission_verification.cpp index f2de6edddcae0a52acf8a573d9276ed42971a03f..b6350051ef6ddcdcd8ccf071b448f9850b3d27f5 100644 --- a/services/common/src/permission_verification.cpp +++ b/services/common/src/permission_verification.cpp @@ -90,6 +90,10 @@ bool PermissionVerification::IsGatewayCall() const bool PermissionVerification::CheckSpecificSystemAbilityAccessPermission() const { HILOG_DEBUG("PermissionVerification::CheckSpecifidSystemAbilityAccessToken is called."); + if (IsGatewayCall()) { + HILOG_INFO("Is gateway call."); + return true; + } if (!IsSACall()) { HILOG_ERROR("caller tokenType is not native, verify failed."); return false;