From c5382cc26b31a2f537ff73462e23f162c3670a37 Mon Sep 17 00:00:00 2001 From: chennian1121 Date: Sat, 30 Aug 2025 08:44:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96DFX=E6=89=93=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chennian1121 Change-Id: I4ce0c4a1e4de6405593076b4c38eccb00196e88a --- .../common/include/hisysevent_adapter.h | 39 ++- frameworks/common/src/hisysevent_adapter.cpp | 81 ++++-- .../HapTokenTest/get_hap_token_test.cpp | 49 ++-- .../service/accesstoken_manager_service.h | 9 +- .../permission/accesstoken_info_manager.cpp | 26 +- .../service/accesstoken_manager_service.cpp | 237 ++++++++---------- 6 files changed, 236 insertions(+), 205 deletions(-) diff --git a/frameworks/common/include/hisysevent_adapter.h b/frameworks/common/include/hisysevent_adapter.h index 52950f7b8..10eb7e648 100644 --- a/frameworks/common/include/hisysevent_adapter.h +++ b/frameworks/common/include/hisysevent_adapter.h @@ -23,22 +23,33 @@ namespace OHOS { namespace Security { namespace AccessToken { -struct AccessTokenDfxInfo { - AddHapSceneCode sceneCode; - AccessTokenID tokenId; - AccessTokenID oriTokenId; - AccessTokenIDEx tokenIdEx; - int32_t userId; +// base info +struct BaseDfxInfo { + AccessTokenID tokenId = 0; + int32_t userID = 0; std::string bundleName; int32_t instIndex; - HapDlpType dlpType; - bool isRestore; + int64_t duration = 0; + int32_t ipcCode = -1; +}; + +// add or update or delete +struct HapDfxInfo : public BaseDfxInfo { + AccessTokenID oriTokenId; + AccessTokenIDEx tokenIdEx; std::string permInfo; std::string aclInfo; std::string preauthInfo; std::string extendInfo; - int64_t duration; - int32_t errorCode; + + // only for add + int32_t sceneCode; + HapDlpType dlpType; + bool isRestore; +}; + +// init +struct InitDfxInfo { int32_t pid; uint32_t hapSize; uint32_t nativeSize; @@ -46,13 +57,15 @@ struct AccessTokenDfxInfo { uint32_t dlpSize; uint32_t parseConfigFlag; }; + void ReportSysEventPerformance(); -void ReportSysEventServiceStart(const AccessTokenDfxInfo& info); +void ReportSysEventServiceStart(const InitDfxInfo& info); void ReportSysEventServiceStartError(SceneCode scene, const std::string& errMsg, int32_t errCode); void ReportSysCommonEventError(int32_t ipcCode, int32_t errCode); -void ReportSysEventAddHap(const AccessTokenDfxInfo& info); +void ReportSysEventAddHap(int32_t errorCode, const HapDfxInfo& info, bool needReportFault); +void ReportSysEventUpdateHap(int32_t errorCode, const HapDfxInfo& info); +void ReportSysEventDelHap(int32_t errorCode, const HapDfxInfo& info); void ReportSysEventDbException(AccessTokenDbSceneCode sceneCode, int32_t errCode, const std::string& tableName); - } // namespace AccessToken } // namespace Security } // namespace OHOS diff --git a/frameworks/common/src/hisysevent_adapter.cpp b/frameworks/common/src/hisysevent_adapter.cpp index f0bae142c..160db0d69 100644 --- a/frameworks/common/src/hisysevent_adapter.cpp +++ b/frameworks/common/src/hisysevent_adapter.cpp @@ -39,12 +39,15 @@ void ReportSysEventPerformance() } } -void ReportSysEventServiceStart(const AccessTokenDfxInfo& info) +void ReportSysEventServiceStart(const InitDfxInfo& info) { int32_t ret = HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "ACCESSTOKEN_SERVICE_START", HiviewDFX::HiSysEvent::EventType::STATISTIC, - "PID", info.pid, "HAP_SIZE", info.hapSize, "NATIVE_SIZE", info.nativeSize, - "PERM_DEFINITION_SIZE", info.permDefSize, "DLP_PERMISSION_SIZE", info.dlpSize, + "PID", info.pid, + "HAP_SIZE", info.hapSize, + "NATIVE_SIZE", info.nativeSize, + "PERM_DEFINITION_SIZE", info.permDefSize, + "DLP_PERMISSION_SIZE", info.dlpSize, "PARSE_CONFIG_FLAG", info.parseConfigFlag); if (ret != 0) { LOGE(ATM_DOMAIN, ATM_TAG, "Failed to write hisysevent write, ret %{public}d.", ret); @@ -74,26 +77,70 @@ void ReportSysCommonEventError(int32_t ipcCode, int32_t errCode) ClearThreadErrorMsg(); } -void ReportSysEventAddHap(const AccessTokenDfxInfo& info) +void ReportSysEventAddHap(int32_t errorCode, const HapDfxInfo& info, bool needReportFault) { - if ((info.sceneCode != AddHapSceneCode::INSTALL_START) && - (info.sceneCode != AddHapSceneCode::TOKEN_ID_CHANGE) && - (info.sceneCode != AddHapSceneCode::INIT) && - (info.sceneCode != AddHapSceneCode::MAP) && - (info.sceneCode != AddHapSceneCode::INSTALL_FINISH)) { - return; - } int32_t res = HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "ADD_HAP", HiviewDFX::HiSysEvent::EventType::STATISTIC, - "SCENE_CODE", info.sceneCode, "TOKENID", info.tokenId, "ORI_TOKENID", info.oriTokenId, - "TOKENIDEX", static_cast(info.tokenIdEx.tokenIDEx), "USERID", info.userId, - "BUNDLENAME", info.bundleName, "INSTINDEX", info.instIndex, "DLP_TYPE", info.dlpType, - "IS_RESTORE", info.isRestore, "PERM_INFO", info.permInfo, "ACL_INFO", info.aclInfo, - "PREAUTH_INFO", info.preauthInfo, "EXTEND_INFO", info.extendInfo, "DURATION", info.duration, - "ERROR_CODE", info.errorCode); + "SCENE_CODE", info.sceneCode, + "TOKENID", info.tokenId, + "ORI_TOKENID", info.oriTokenId, + "TOKENIDEX", static_cast(info.tokenIdEx.tokenIDEx), + "USERID", info.userID, + "BUNDLENAME", info.bundleName, + "INSTINDEX", info.instIndex, + "DLP_TYPE", info.dlpType, + "IS_RESTORE", info.isRestore, + "PERM_INFO", info.permInfo, + "ACL_INFO", info.aclInfo, + "PREAUTH_INFO", info.preauthInfo, + "EXTEND_INFO", info.extendInfo, + "DURATION", info.duration, + "ERROR_CODE", errorCode); + if (res != 0) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to write hisysevent write, ret %{public}d.", res); + } + if (needReportFault) { + ReportSysCommonEventError(info.ipcCode, errorCode); + } +} + +void ReportSysEventUpdateHap(int32_t errorCode, const HapDfxInfo& info) +{ + int32_t res = HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "UPDATE_HAP", + HiviewDFX::HiSysEvent::EventType::STATISTIC, + "TOKENID", info.tokenId, + "USERID", info.userID, + "BUNDLENAME", info.bundleName, + "INSTINDEX", info.instIndex, + "SCENE_CODE", CommonSceneCode::AT_COMMON_FINISH, + "ERROR_CODE", errorCode, + "TOKENIDEX", static_cast(info.tokenIdEx.tokenIDEx), + "PERM_INFO", info.permInfo, + "ACL_INFO", info.aclInfo, + "PREAUTH_INFO", info.preauthInfo, + "EXTEND_INFO", info.extendInfo, + "DURATION", info.duration); + if (res != 0) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to write hisysevent write, ret %{public}d.", res); + } + ReportSysCommonEventError(info.ipcCode, errorCode); +} + +void ReportSysEventDelHap(int32_t errorCode, const HapDfxInfo& info) +{ + int32_t res = HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "DEL_HAP", + HiviewDFX::HiSysEvent::EventType::STATISTIC, + "TOKENID", info.tokenId, + "USERID", info.userID, + "BUNDLENAME", info.bundleName, + "INSTINDEX", info.instIndex, + "SCENE_CODE", CommonSceneCode::AT_COMMON_FINISH, + "ERROR_CODE", errorCode, + "DURATION", info.duration); if (res != 0) { LOGE(ATM_DOMAIN, ATM_TAG, "Failed to write hisysevent write, ret %{public}d.", res); } + ReportSysCommonEventError(info.ipcCode, errorCode); } void ReportSysEventDbException(AccessTokenDbSceneCode sceneCode, int32_t errCode, const std::string& tableName) diff --git a/interfaces/innerkits/accesstoken/test/unittest/HapTokenTest/get_hap_token_test.cpp b/interfaces/innerkits/accesstoken/test/unittest/HapTokenTest/get_hap_token_test.cpp index 0ec629b65..71faefc2d 100644 --- a/interfaces/innerkits/accesstoken/test/unittest/HapTokenTest/get_hap_token_test.cpp +++ b/interfaces/innerkits/accesstoken/test/unittest/HapTokenTest/get_hap_token_test.cpp @@ -40,9 +40,9 @@ static const int TEST_USER_ID = 0; static constexpr int32_t DEFAULT_API_VERSION = 8; static const int TEST_USER_ID_INVALID = -1; static MockNativeToken* g_mock; -HapInfoParams g_infoManagerTestSystemInfoParms = TestCommon::GetInfoManagerTestSystemInfoParms(); -HapInfoParams g_infoManagerTestNormalInfoParms = TestCommon::GetInfoManagerTestNormalInfoParms(); -HapPolicyParams g_infoManagerTestPolicyPrams = TestCommon::GetInfoManagerTestPolicyPrams(); +HapInfoParams g_testSystemInfoParms = TestCommon::GetInfoManagerTestSystemInfoParms(); +HapInfoParams g_testNormalInfoParms = TestCommon::GetInfoManagerTestNormalInfoParms(); +HapPolicyParams g_testPolicyPrams = TestCommon::GetInfoManagerTestPolicyPrams(); } void GetHapTokenTest::SetUpTestCase() @@ -176,16 +176,15 @@ HWTEST_F(GetHapTokenTest, GetHapTokenIDExFuncTest001, TestSize.Level0) LOGI(ATM_DOMAIN, ATM_TAG, "GetHapTokenIDExFuncTest001"); AccessTokenIDEx tokenIdEx; - TestCommon::AllocTestHapToken(g_infoManagerTestSystemInfoParms, g_infoManagerTestPolicyPrams, tokenIdEx); - AccessTokenIDEx tokenIdEx1 = TestCommon::GetHapTokenIdFromBundle(g_infoManagerTestSystemInfoParms.userID, - g_infoManagerTestSystemInfoParms.bundleName, - g_infoManagerTestSystemInfoParms.instIndex); + TestCommon::AllocTestHapToken(g_testSystemInfoParms, g_testPolicyPrams, tokenIdEx); + AccessTokenIDEx tokenIdEx1 = TestCommon::GetHapTokenIdFromBundle(g_testSystemInfoParms.userID, + g_testSystemInfoParms.bundleName, g_testSystemInfoParms.instIndex); EXPECT_EQ(tokenIdEx.tokenIDEx, tokenIdEx1.tokenIDEx); HapTokenInfo hapTokenInfoRes; AccessTokenID tokenID = tokenIdEx.tokenIdExStruct.tokenID; EXPECT_EQ(RET_SUCCESS, AccessTokenKit::GetHapTokenInfo(tokenID, hapTokenInfoRes)); - EXPECT_EQ(hapTokenInfoRes.bundleName, g_infoManagerTestSystemInfoParms.bundleName); + EXPECT_EQ(hapTokenInfoRes.bundleName, g_testSystemInfoParms.bundleName); EXPECT_EQ(RET_SUCCESS, TestCommon::DeleteTestHapToken(tokenID)); } @@ -305,18 +304,21 @@ HWTEST_F(GetHapTokenTest, IsSystemAppByFullTokenIDTest001, TestSize.Level0) { std::vector reqPerm; AccessTokenIDEx tokenIdEx = {0}; - TestCommon::AllocTestHapToken(g_infoManagerTestSystemInfoParms, g_infoManagerTestPolicyPrams, tokenIdEx); + TestCommon::AllocTestHapToken(g_testSystemInfoParms, g_testPolicyPrams, tokenIdEx); ASSERT_EQ(true, TokenIdKit::IsSystemAppByFullTokenID(tokenIdEx.tokenIDEx)); - AccessTokenIDEx tokenIdEx1 = AccessTokenKit::GetHapTokenIDEx(1, "accesstoken_test", 0); + AccessTokenIDEx tokenIdEx1 = TestCommon::GetHapTokenIdFromBundle(g_testSystemInfoParms.userID, + g_testSystemInfoParms.bundleName, g_testSystemInfoParms.instIndex); + EXPECT_EQ(tokenIdEx.tokenIDEx, tokenIdEx1.tokenIDEx); UpdateHapInfoParams info; - info.appIDDesc = g_infoManagerTestSystemInfoParms.appIDDesc; - info.apiVersion = g_infoManagerTestSystemInfoParms.apiVersion; + info.appIDDesc = g_testSystemInfoParms.appIDDesc; + info.apiVersion = g_testSystemInfoParms.apiVersion; info.isSystemApp = false; - EXPECT_EQ(RET_SUCCESS, AccessTokenKit::UpdateHapToken(tokenIdEx, info, g_infoManagerTestPolicyPrams)); - tokenIdEx1 = AccessTokenKit::GetHapTokenIDEx(1, "accesstoken_test", 0); + EXPECT_EQ(RET_SUCCESS, AccessTokenKit::UpdateHapToken(tokenIdEx, info, g_testPolicyPrams)); + tokenIdEx1 = TestCommon::GetHapTokenIdFromBundle(g_testSystemInfoParms.userID, + g_testSystemInfoParms.bundleName, g_testSystemInfoParms.instIndex); EXPECT_EQ(tokenIdEx.tokenIDEx, tokenIdEx1.tokenIDEx); EXPECT_EQ(false, TokenIdKit::IsSystemAppByFullTokenID(tokenIdEx.tokenIDEx)); @@ -332,17 +334,19 @@ HWTEST_F(GetHapTokenTest, IsSystemAppByFullTokenIDTest001, TestSize.Level0) HWTEST_F(GetHapTokenTest, IsSystemAppByFullTokenIDTest002, TestSize.Level0) { AccessTokenIDEx tokenIdEx = {0}; - TestCommon::AllocTestHapToken(g_infoManagerTestSystemInfoParms, g_infoManagerTestPolicyPrams, tokenIdEx); + TestCommon::AllocTestHapToken(g_testSystemInfoParms, g_testPolicyPrams, tokenIdEx); EXPECT_TRUE(TokenIdKit::IsSystemAppByFullTokenID(tokenIdEx.tokenIDEx)); - AccessTokenIDEx tokenIdEx1 = AccessTokenKit::GetHapTokenIDEx(1, "accesstoken_test", 0); + AccessTokenIDEx tokenIdEx1 = TestCommon::GetHapTokenIdFromBundle(g_testSystemInfoParms.userID, + g_testSystemInfoParms.bundleName, g_testSystemInfoParms.instIndex); EXPECT_EQ(tokenIdEx.tokenIDEx, tokenIdEx1.tokenIDEx); UpdateHapInfoParams info; - info.appIDDesc = g_infoManagerTestNormalInfoParms.appIDDesc; - info.apiVersion = g_infoManagerTestNormalInfoParms.apiVersion; + info.appIDDesc = g_testNormalInfoParms.appIDDesc; + info.apiVersion = g_testNormalInfoParms.apiVersion; info.isSystemApp = true; - EXPECT_EQ(RET_SUCCESS, AccessTokenKit::UpdateHapToken(tokenIdEx, info, g_infoManagerTestPolicyPrams)); - tokenIdEx1 = AccessTokenKit::GetHapTokenIDEx(1, "accesstoken_test", 0); + EXPECT_EQ(RET_SUCCESS, AccessTokenKit::UpdateHapToken(tokenIdEx, info, g_testPolicyPrams)); + tokenIdEx1 = TestCommon::GetHapTokenIdFromBundle(g_testSystemInfoParms.userID, + g_testSystemInfoParms.bundleName, g_testSystemInfoParms.instIndex); EXPECT_EQ(tokenIdEx.tokenIDEx, tokenIdEx1.tokenIDEx); EXPECT_EQ(true, TokenIdKit::IsSystemAppByFullTokenID(tokenIdEx.tokenIDEx)); @@ -358,8 +362,9 @@ HWTEST_F(GetHapTokenTest, IsSystemAppByFullTokenIDTest002, TestSize.Level0) HWTEST_F(GetHapTokenTest, IsSystemAppByFullTokenIDTest003, TestSize.Level0) { AccessTokenIDEx tokenIdEx = {0}; - TestCommon::AllocTestHapToken(g_infoManagerTestSystemInfoParms, g_infoManagerTestPolicyPrams, tokenIdEx); - AccessTokenIDEx tokenIdEx1 = AccessTokenKit::GetHapTokenIDEx(1, "accesstoken_test", 0); + TestCommon::AllocTestHapToken(g_testSystemInfoParms, g_testPolicyPrams, tokenIdEx); + AccessTokenIDEx tokenIdEx1 = TestCommon::GetHapTokenIdFromBundle(g_testSystemInfoParms.userID, + g_testSystemInfoParms.bundleName, g_testSystemInfoParms.instIndex); ASSERT_EQ(tokenIdEx.tokenIDEx, tokenIdEx1.tokenIDEx); bool res = AccessTokenKit::IsSystemAppByFullTokenID(tokenIdEx.tokenIDEx); ASSERT_TRUE(res); diff --git a/services/accesstokenmanager/main/cpp/include/service/accesstoken_manager_service.h b/services/accesstokenmanager/main/cpp/include/service/accesstoken_manager_service.h index e1ef079b3..28dacb94e 100644 --- a/services/accesstokenmanager/main/cpp/include/service/accesstoken_manager_service.h +++ b/services/accesstokenmanager/main/cpp/include/service/accesstoken_manager_service.h @@ -145,11 +145,10 @@ private: bool isLocationPermSpecialHandle(std::string permissionName, int32_t apiVersion); int VerifyAccessToken(AccessTokenID tokenID, const std::string& permissionName); PermissionOper GetPermissionsState(AccessTokenID tokenID, std::vector& reqPermList); - int32_t UpdateHapTokenCore(AccessTokenIDEx& tokenIdEx, const std::string& bundleName, - const UpdateHapInfoParams& info, const HapPolicyParcel& policyParcel, HapInfoCheckResultIdl& resultInfoIdl); - void ReportAddHap(const HapInfoParcel& info, const HapPolicyParcel& policy); - void ReportAddHapFinish(AccessTokenIDEx fullTokenId, const HapInfoParcel& info, int64_t beginTime, - int32_t errorCode); + void ReportAddHap(AccessTokenIDEx fullTokenId, const HapInfoParams& hapInfo, + const HapPolicy& policy, int64_t beginTime, int32_t errorCode); + void ReportUpdateHap(AccessTokenIDEx fullTokenId, const HapTokenInfo& info, + const HapPolicy& policy, int64_t beginTime, int32_t errorCode); bool IsPermissionValid(int32_t hapApl, const PermissionBriefDef& data, const std::string& value, bool isAcl); void FilterInvalidData(const std::vector& results, const std::map& tokenIdAplMap, std::vector& validValueList); diff --git a/services/accesstokenmanager/main/cpp/src/permission/accesstoken_info_manager.cpp b/services/accesstokenmanager/main/cpp/src/permission/accesstoken_info_manager.cpp index 4890ca1c9..9ce57f9c8 100644 --- a/services/accesstokenmanager/main/cpp/src/permission/accesstoken_info_manager.cpp +++ b/services/accesstokenmanager/main/cpp/src/permission/accesstoken_info_manager.cpp @@ -191,14 +191,15 @@ int32_t AccessTokenInfoManager::AddHapInfoToCache(const GenericValues& tokenValu tokenIdEx.tokenIdExStruct.tokenID = tokenId; tokenIdEx.tokenIdExStruct.tokenAttr = hap->GetAttr(); - AccessTokenDfxInfo dfxInfo; + HapDfxInfo dfxInfo; dfxInfo.sceneCode = AddHapSceneCode::INIT; dfxInfo.tokenId = tokenId; + dfxInfo.oriTokenId = oriTokenId; dfxInfo.tokenIdEx = tokenIdEx; - dfxInfo.userId = hap->GetUserID(); + dfxInfo.userID = hap->GetUserID(); dfxInfo.bundleName = hap->GetBundleName(); dfxInfo.instIndex = hap->GetInstIndex(); - ReportSysEventAddHap(dfxInfo); + ReportSysEventAddHap(RET_SUCCESS, dfxInfo, false); LOGI(ATM_DOMAIN, ATM_TAG, " Restore hap token %{public}u bundle name %{public}s user %{public}d," @@ -215,11 +216,11 @@ void AccessTokenInfoManager::InitHapTokenInfos(uint32_t& hapSize, std::map permStateRes; std::vector extendedPermRes; int32_t ret = AccessTokenDbOperator::Find(AtmDataType::ACCESSTOKEN_HAP_INFO, conditionValue, hapTokenRes); - if (ret != RET_SUCCESS || hapTokenRes.empty()) { + if (ret != RET_SUCCESS) { ReportSysEventServiceStartError(INIT_HAP_TOKENINFO_ERROR, "Load hap from db fail.", ret); } ret = AccessTokenDbOperator::Find(AtmDataType::ACCESSTOKEN_PERMISSION_STATE, conditionValue, permStateRes); - if (ret != RET_SUCCESS || permStateRes.empty()) { + if (ret != RET_SUCCESS) { ReportSysEventServiceStartError(INIT_HAP_TOKENINFO_ERROR, "Load perm state from db fail.", ret); } ret = AccessTokenDbOperator::Find(AtmDataType::ACCESSTOKEN_PERMISSION_EXTEND_VALUE, conditionValue, @@ -535,14 +536,14 @@ int32_t AccessTokenInfoManager::CheckHapInfoParam(const HapInfoParams& info, con void AccessTokenInfoManager::ReportAddHapIdChange(const std::shared_ptr& hapInfo, AccessTokenID oriTokenId) { - AccessTokenDfxInfo dfxInfo; + HapDfxInfo dfxInfo; dfxInfo.sceneCode = AddHapSceneCode::TOKEN_ID_CHANGE; dfxInfo.tokenId = hapInfo->GetTokenID(); dfxInfo.oriTokenId = oriTokenId; - dfxInfo.userId = hapInfo->GetUserID(); + dfxInfo.userID = hapInfo->GetUserID(); dfxInfo.bundleName = hapInfo->GetBundleName(); dfxInfo.instIndex = hapInfo->GetInstIndex(); - ReportSysEventAddHap(dfxInfo); + ReportSysEventAddHap(RET_SUCCESS, dfxInfo, false); } int32_t AccessTokenInfoManager::RegisterTokenId(const HapInfoParams& info, AccessTokenID& tokenId) @@ -818,17 +819,18 @@ int AccessTokenInfoManager::CreateRemoteHapTokenInfo(AccessTokenID mapID, HapTok AccessTokenID oriTokenId = 0; int ret = AddHapTokenInfo(hap, oriTokenId); if (ret != RET_SUCCESS) { - LOGE(ATM_DOMAIN, ATM_TAG, "Add local token failed."); + LOGE(ATM_DOMAIN, ATM_TAG, "Add local token failed, err: %{public}d.", ret); return ret; } - AccessTokenDfxInfo dfxInfo; + HapDfxInfo dfxInfo; dfxInfo.sceneCode = AddHapSceneCode::MAP; dfxInfo.tokenId = hap->GetTokenID(); - dfxInfo.userId = hap->GetUserID(); + dfxInfo.oriTokenId = oriTokenId; + dfxInfo.userID = hap->GetUserID(); dfxInfo.bundleName = hap->GetBundleName(); dfxInfo.instIndex = hap->GetInstIndex(); - ReportSysEventAddHap(dfxInfo); + ReportSysEventAddHap(RET_SUCCESS, dfxInfo, false); return RET_SUCCESS; } 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..70aa7169e 100644 --- a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp +++ b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp @@ -680,76 +680,84 @@ static void TransferHapPolicy(const HapPolicy& policyIn, HapPolicy& policyOut) policyOut.aclExtendedMap = policyIn.aclExtendedMap; } -void AccessTokenManagerService::ReportAddHap(const HapInfoParcel& info, const HapPolicyParcel& policy) -{ - AccessTokenDfxInfo dfxInfo; - dfxInfo.sceneCode = AddHapSceneCode::INSTALL_START; - dfxInfo.tokenId = info.hapInfoParameter.tokenID; - dfxInfo.userId = info.hapInfoParameter.userID; - dfxInfo.bundleName = info.hapInfoParameter.bundleName; - dfxInfo.instIndex = info.hapInfoParameter.instIndex; - dfxInfo.dlpType = static_cast(info.hapInfoParameter.dlpType); - dfxInfo.isRestore = info.hapInfoParameter.isRestore; - - dfxInfo.permInfo = std::to_string(policy.hapPolicy.permStateList.size()) + " : ["; - for (const auto& permState : policy.hapPolicy.permStateList) { +static void DumpEventInfo(const HapPolicy& policy, HapDfxInfo& dfxInfo) +{ + dfxInfo.permInfo = std::to_string(policy.permStateList.size()) + " : ["; + for (const auto& permState : policy.permStateList) { dfxInfo.permInfo.append(permState.permissionName + ", "); } dfxInfo.permInfo.append("]"); - dfxInfo.aclInfo = std::to_string(policy.hapPolicy.aclRequestedList.size()) + " : ["; - for (const auto& perm : policy.hapPolicy.aclRequestedList) { + dfxInfo.aclInfo = std::to_string(policy.aclRequestedList.size()) + " : ["; + for (const auto& perm : policy.aclRequestedList) { dfxInfo.aclInfo.append(perm + ", "); } dfxInfo.aclInfo.append("]"); - dfxInfo.preauthInfo = std::to_string(policy.hapPolicy.preAuthorizationInfo.size()) + " : ["; - for (const auto& preAuthInfo : policy.hapPolicy.preAuthorizationInfo) { + dfxInfo.preauthInfo = std::to_string(policy.preAuthorizationInfo.size()) + " : ["; + for (const auto& preAuthInfo : policy.preAuthorizationInfo) { dfxInfo.preauthInfo.append(preAuthInfo.permissionName + ", "); } dfxInfo.preauthInfo.append("]"); - dfxInfo.extendInfo = std::to_string(policy.hapPolicy.aclExtendedMap.size()) + " : {"; - for (const auto& aclExtend : policy.hapPolicy.aclExtendedMap) { + dfxInfo.extendInfo = std::to_string(policy.aclExtendedMap.size()) + " : {"; + for (const auto& aclExtend : policy.aclExtendedMap) { dfxInfo.extendInfo.append(aclExtend.first + ": " + aclExtend.second + ", "); } dfxInfo.extendInfo.append("}"); +} + +void AccessTokenManagerService::ReportAddHap(AccessTokenIDEx fullTokenId, const HapInfoParams& info, + const HapPolicy& policy, int64_t beginTime, int32_t errorCode) +{ + HapDfxInfo dfxInfo; + dfxInfo.ipcCode = static_cast(IAccessTokenManagerIpcCode::COMMAND_INIT_HAP_TOKEN); + dfxInfo.tokenId = fullTokenId.tokenIdExStruct.tokenID; + dfxInfo.tokenIdEx = fullTokenId; + dfxInfo.userID = info.userID; + dfxInfo.bundleName = info.bundleName; + dfxInfo.instIndex = info.instIndex; + dfxInfo.duration = TimeUtil::GetCurrentTimestamp() - beginTime; + + // add + dfxInfo.sceneCode = static_cast(AddHapSceneCode::INSTALL_FINISH); + dfxInfo.dlpType = static_cast(info.dlpType); + dfxInfo.isRestore = info.isRestore; - ReportSysEventAddHap(dfxInfo); + DumpEventInfo(policy, dfxInfo); + ReportSysEventAddHap(errorCode, dfxInfo, true); } -void AccessTokenManagerService::ReportAddHapFinish(AccessTokenIDEx fullTokenId, const HapInfoParcel& info, - int64_t beginTime, int32_t errorCode) +void AccessTokenManagerService::ReportUpdateHap(AccessTokenIDEx fullTokenId, const HapTokenInfo& info, + const HapPolicy& policy, int64_t beginTime, int32_t errorCode) { - int64_t endTime = TimeUtil::GetCurrentTimestamp(); - AccessTokenDfxInfo dfxInfo; - dfxInfo.sceneCode = AddHapSceneCode::INSTALL_FINISH; + HapDfxInfo dfxInfo; + dfxInfo.ipcCode = static_cast(IAccessTokenManagerIpcCode::COMMAND_UPDATE_HAP_TOKEN); dfxInfo.tokenId = fullTokenId.tokenIdExStruct.tokenID; dfxInfo.tokenIdEx = fullTokenId; - dfxInfo.userId = info.hapInfoParameter.userID; - dfxInfo.bundleName = info.hapInfoParameter.bundleName; - dfxInfo.instIndex = info.hapInfoParameter.instIndex; - dfxInfo.duration = endTime - beginTime; - dfxInfo.errorCode = errorCode; - ReportSysEventAddHap(dfxInfo); + dfxInfo.userID = info.userID; + dfxInfo.bundleName = info.bundleName; + dfxInfo.instIndex = info.instIndex; + dfxInfo.duration = TimeUtil::GetCurrentTimestamp() - dfxInfo.duration; + + DumpEventInfo(policy, dfxInfo); + ReportSysEventUpdateHap(errorCode, dfxInfo); } int32_t AccessTokenManagerService::InitHapToken(const HapInfoParcel& info, const HapPolicyParcel& policy, uint64_t& fullTokenId, HapInfoCheckResultIdl& resultInfoIdl) { LOGI(ATM_DOMAIN, ATM_TAG, "Init hap %{public}s.", info.hapInfoParameter.bundleName.c_str()); - int64_t beginTime = TimeUtil::GetCurrentTimestamp(); - ReportAddHap(info, policy); - AccessTokenID tokenID = IPCSkeleton::GetCallingTokenID(); if (!IsPrivilegedCalling() && (VerifyAccessToken(tokenID, MANAGE_HAP_TOKENID_PERMISSION) == PERMISSION_DENIED)) { - LOGC(ATM_DOMAIN, ATM_TAG, "Permission denied(tokenID=%{public}d)", tokenID); + LOGE(ATM_DOMAIN, ATM_TAG, "Permission denied(tokenID=%{public}d)", tokenID); return AccessTokenError::ERR_PERMISSION_DENIED; } - HapPolicyParcel policyCopy; - TransferHapPolicy(policy.hapPolicy, policyCopy.hapPolicy); + int64_t beiginTime = TimeUtil::GetCurrentTimestamp(); + HapPolicy policyCopy; + TransferHapPolicy(policy.hapPolicy, policyCopy); resultInfoIdl.realResult = ERR_OK; std::vector initializedList; @@ -758,7 +766,7 @@ int32_t AccessTokenManagerService::InitHapToken(const HapInfoParcel& info, const HapInfoCheckResult permCheckResult; HapInitInfo initInfo; initInfo.installInfo = info.hapInfoParameter; - initInfo.policy = policyCopy.hapPolicy; + initInfo.policy = policyCopy; initInfo.bundleName = info.hapInfoParameter.bundleName; if (!PermissionManager::GetInstance().InitPermissionList(initInfo, initializedList, permCheckResult, undefValues)) { @@ -766,24 +774,23 @@ int32_t AccessTokenManagerService::InitHapToken(const HapInfoParcel& info, const resultInfoIdl.permissionName = permCheckResult.permCheckResult.permissionName; int32_t rule = permCheckResult.permCheckResult.rule; resultInfoIdl.rule = static_cast(rule); - ReportAddHapFinish({0}, info, beginTime, ERR_PERM_REQUEST_CFG_FAILED); + ReportAddHap({0}, info.hapInfoParameter, policyCopy, beiginTime, ERR_PERM_REQUEST_CFG_FAILED); return ERR_OK; } } else { if (!PermissionManager::GetInstance().InitDlpPermissionList( info.hapInfoParameter.bundleName, info.hapInfoParameter.userID, initializedList, undefValues)) { - ReportAddHapFinish({0}, info, beginTime, ERR_PERM_REQUEST_CFG_FAILED); + ReportAddHap({0}, info.hapInfoParameter, policyCopy, beiginTime, ERR_PERM_REQUEST_CFG_FAILED); return ERR_PERM_REQUEST_CFG_FAILED; } } - policyCopy.hapPolicy.permStateList = initializedList; + policyCopy.permStateList = initializedList; AccessTokenIDEx tokenIdEx; int32_t ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo( - info.hapInfoParameter, policyCopy.hapPolicy, tokenIdEx, undefValues); + info.hapInfoParameter, policyCopy, tokenIdEx, undefValues); fullTokenId = tokenIdEx.tokenIDEx; - ReportAddHapFinish(tokenIdEx, info, beginTime, ret); - + ReportAddHap(tokenIdEx, info.hapInfoParameter, policyCopy, beiginTime, ret); return ret; } @@ -797,27 +804,32 @@ int AccessTokenManagerService::DeleteToken(AccessTokenID tokenID) return AccessTokenError::ERR_PERMISSION_DENIED; } if (this->GetTokenType(tokenID) != TOKEN_HAP) { + LOGE(ATM_DOMAIN, ATM_TAG, "Token %{public}u is not hap.", tokenID); return AccessTokenError::ERR_PARAM_INVALID; } + HapDfxInfo dfxInfo; + dfxInfo.tokenId = tokenID; + dfxInfo.ipcCode = static_cast(IAccessTokenManagerIpcCode::COMMAND_DELETE_TOKEN); int64_t beginTime = TimeUtil::GetCurrentTimestamp(); - HapTokenInfo hapInfo; - (void)AccessTokenInfoManager::GetInstance().GetHapTokenInfo(tokenID, hapInfo); - ClearThreadErrorMsg(); - (void)HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "DEL_HAP", - HiviewDFX::HiSysEvent::EventType::STATISTIC, "SCENE_CODE", CommonSceneCode::AT_COMMON_START, - "TOKENID", tokenID, "USERID", hapInfo.userID, "BUNDLENAME", hapInfo.bundleName, "INSTINDEX", hapInfo.instIndex); + int32_t errorCode = AccessTokenInfoManager::GetInstance().GetHapTokenInfo(tokenID, hapInfo); + if (errorCode != ERR_OK) { + LOGC(ATM_DOMAIN, ATM_TAG, "GetHapTokenInfo failed, err=%{public}d.", errorCode); + dfxInfo.duration = TimeUtil::GetCurrentTimestamp() - beginTime; + ReportSysEventDelHap(errorCode, dfxInfo); + return errorCode; + } // only support hap token deletion - int32_t ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenID); + errorCode = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenID); - int64_t endTime = TimeUtil::GetCurrentTimestamp(); - (void)HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "DEL_HAP", - HiviewDFX::HiSysEvent::EventType::STATISTIC, "SCENE_CODE", CommonSceneCode::AT_COMMON_FINISH, - "TOKENID", tokenID, "DURATION", endTime - beginTime, "ERROR_CODE", ret); - ReportSysCommonEventError(static_cast(IAccessTokenManagerIpcCode::COMMAND_DELETE_TOKEN), ret); - return ret; + dfxInfo.userID = hapInfo.userID; + dfxInfo.bundleName = hapInfo.bundleName; + dfxInfo.instIndex = hapInfo.instIndex; + dfxInfo.duration = TimeUtil::GetCurrentTimestamp() - beginTime; + ReportSysEventDelHap(errorCode, dfxInfo); + return errorCode; } int AccessTokenManagerService::GetTokenType(AccessTokenID tokenID) @@ -865,62 +877,6 @@ int32_t AccessTokenManagerService::AllocLocalTokenID( return ERR_OK; } -int32_t AccessTokenManagerService::UpdateHapTokenCore(AccessTokenIDEx& tokenIdEx, const std::string& bundleName, - const UpdateHapInfoParams& info, const HapPolicyParcel& policyParcel, HapInfoCheckResultIdl& resultInfoIdl) -{ - std::vector InitializedList; - resultInfoIdl.realResult = ERR_OK; - HapInfoCheckResult permCheckResult; - std::vector undefValues; - HapInitInfo initInfo; - initInfo.updateInfo = info; - initInfo.policy = policyParcel.hapPolicy; - initInfo.isUpdate = true; - initInfo.bundleName = bundleName; - initInfo.tokenID = tokenIdEx.tokenIdExStruct.tokenID; - if (!PermissionManager::GetInstance().InitPermissionList(initInfo, InitializedList, permCheckResult, undefValues)) { - resultInfoIdl.realResult = ERROR; - resultInfoIdl.permissionName = permCheckResult.permCheckResult.permissionName; - int32_t rule = permCheckResult.permCheckResult.rule; - resultInfoIdl.rule = static_cast(rule); - LOGC(ATM_DOMAIN, ATM_TAG, "InitPermissionList failed, tokenId=%{public}u.", tokenIdEx.tokenIdExStruct.tokenID); - ReportSysCommonEventError(static_cast(IAccessTokenManagerIpcCode::COMMAND_UPDATE_HAP_TOKEN), - ERR_PERM_REQUEST_CFG_FAILED); - return ERR_OK; - } - - int32_t ret = AccessTokenInfoManager::GetInstance().UpdateHapToken(tokenIdEx, info, - InitializedList, policyParcel.hapPolicy, undefValues); - return ret; -} - -static void DumpEventInfo(const HapPolicy& policy, AccessTokenDfxInfo& dfxInfo) -{ - dfxInfo.permInfo = std::to_string(policy.permStateList.size()) + " : ["; - for (const auto& permState : policy.permStateList) { - dfxInfo.permInfo.append(permState.permissionName + ", "); - } - dfxInfo.permInfo.append("]"); - - dfxInfo.aclInfo = std::to_string(policy.aclRequestedList.size()) + " : ["; - for (const auto& perm : policy.aclRequestedList) { - dfxInfo.aclInfo.append(perm + ", "); - } - dfxInfo.aclInfo.append("]"); - - dfxInfo.preauthInfo = std::to_string(policy.preAuthorizationInfo.size()) + " : ["; - for (const auto& preAuthInfo : policy.preAuthorizationInfo) { - dfxInfo.preauthInfo.append(preAuthInfo.permissionName + ", "); - } - dfxInfo.preauthInfo.append("]"); - - dfxInfo.extendInfo = std::to_string(policy.aclExtendedMap.size()) + " : {"; - for (const auto& aclExtend : policy.aclExtendedMap) { - dfxInfo.extendInfo.append(aclExtend.first + ": " + aclExtend.second + ", "); - } - dfxInfo.extendInfo.append("}"); -} - int32_t AccessTokenManagerService::UpdateHapToken(uint64_t& fullTokenId, const UpdateHapInfoParamsIdl& infoIdl, const HapPolicyParcel& policyParcel, HapInfoCheckResultIdl& resultInfoIdl) { @@ -933,6 +889,15 @@ int32_t AccessTokenManagerService::UpdateHapToken(uint64_t& fullTokenId, const U LOGE(ATM_DOMAIN, ATM_TAG, "Permission denied(tokenID=%{public}d)", callingTokenID); return AccessTokenError::ERR_PERMISSION_DENIED; } + int64_t beginTime = TimeUtil::GetCurrentTimestamp(); + HapTokenInfo hapInfo; + int32_t error = AccessTokenInfoManager::GetInstance().GetHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID, hapInfo); + if (error != ERR_OK) { + LOGC(ATM_DOMAIN, ATM_TAG, "GetHapTokenInfo failed, err=%{public}d.", error); + ReportUpdateHap(tokenIdEx, hapInfo, policyParcel.hapPolicy, beginTime, error); + return error; + } + UpdateHapInfoParams info; info.appIDDesc = infoIdl.appIDDesc; info.apiVersion = infoIdl.apiVersion; @@ -941,30 +906,30 @@ int32_t AccessTokenManagerService::UpdateHapToken(uint64_t& fullTokenId, const U info.isAtomicService = infoIdl.isAtomicService; info.dataRefresh = infoIdl.dataRefresh; - int64_t beginTime = TimeUtil::GetCurrentTimestamp(); - HapTokenInfo hapInfo; - (void)AccessTokenInfoManager::GetInstance().GetHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID, hapInfo); - ClearThreadErrorMsg(); - - AccessTokenDfxInfo dfxInfo; - DumpEventInfo(policyParcel.hapPolicy, dfxInfo); - (void)HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "UPDATE_HAP", - HiviewDFX::HiSysEvent::EventType::STATISTIC, "SCENE_CODE", CommonSceneCode::AT_COMMON_START, - "TOKENID", tokenIdEx.tokenIdExStruct.tokenID, "TOKENIDEX", tokenIdEx.tokenIDEx, - "USERID", hapInfo.userID, "BUNDLENAME", hapInfo.bundleName, "INSTINDEX", hapInfo.instIndex, - "PERM_INFO", dfxInfo.permInfo, "ACL_INFO", dfxInfo.aclInfo, "PREAUTH_INFO", dfxInfo.preauthInfo, - "EXTEND_INFO", dfxInfo.extendInfo); + resultInfoIdl.realResult = ERR_OK; + HapInfoCheckResult permCheckResult; + std::vector undefValues; + std::vector initializedList; + HapInitInfo initInfo; + initInfo.updateInfo = info; + initInfo.policy = policyParcel.hapPolicy; + initInfo.isUpdate = true; + initInfo.bundleName = hapInfo.bundleName; + initInfo.tokenID = tokenIdEx.tokenIdExStruct.tokenID; + if (!PermissionManager::GetInstance().InitPermissionList(initInfo, initializedList, permCheckResult, undefValues)) { + resultInfoIdl.realResult = ERROR; + resultInfoIdl.permissionName = permCheckResult.permCheckResult.permissionName; + int32_t rule = permCheckResult.permCheckResult.rule; + resultInfoIdl.rule = static_cast(rule); + ReportUpdateHap(tokenIdEx, hapInfo, policyParcel.hapPolicy, beginTime, ERR_PERM_REQUEST_CFG_FAILED); + return ERR_OK; + } - int32_t ret = UpdateHapTokenCore(tokenIdEx, hapInfo.bundleName, info, policyParcel, resultInfoIdl); + error = AccessTokenInfoManager::GetInstance().UpdateHapToken(tokenIdEx, info, + initializedList, policyParcel.hapPolicy, undefValues); fullTokenId = tokenIdEx.tokenIDEx; - - int64_t endTime = TimeUtil::GetCurrentTimestamp(); - (void)HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "UPDATE_HAP", - HiviewDFX::HiSysEvent::EventType::STATISTIC, "SCENE_CODE", CommonSceneCode::AT_COMMON_FINISH, - "TOKENID", tokenIdEx.tokenIdExStruct.tokenID, "TOKENIDEX", tokenIdEx.tokenIDEx, - "DURATION", endTime - beginTime, "ERROR_CODE", ret); - ReportSysCommonEventError(static_cast(IAccessTokenManagerIpcCode::COMMAND_UPDATE_HAP_TOKEN), ret); - return ret; + ReportUpdateHap(tokenIdEx, hapInfo, policyParcel.hapPolicy, beginTime, error); + return error; } int32_t AccessTokenManagerService::GetTokenIDByUserID(int32_t userID, std::vector& tokenIds) @@ -1639,7 +1604,7 @@ bool AccessTokenManagerService::Initialize() TempPermissionObserver::GetInstance().InitEventHandler(); ShortGrantManager::GetInstance().InitEventHandler(); #endif - AccessTokenDfxInfo dfxInfo; + InitDfxInfo dfxInfo; dfxInfo.pid = getpid(); dfxInfo.hapSize = hapSize; dfxInfo.nativeSize = nativeSize; -- Gitee