From f848c924e9b595f0d55216e1cbc79283961f2188 Mon Sep 17 00:00:00 2001 From: xia-bubai Date: Mon, 11 Aug 2025 14:48:26 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E8=A7=A3=E5=86=B3=E8=B6=85=E5=A4=A7?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E9=97=AE=E9=A2=98=202=E3=80=81=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=97=A0=E7=AC=A6=E5=8F=B7=E6=9C=89=E7=AC=A6=E5=8F=B7?= =?UTF-8?q?=E6=95=B4=E6=95=B0=E6=B7=B7=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xia-bubai Change-Id: I325ba4d0a97cbab2c863564b53f36913bf3b536e --- .../src/ani_ability_access_ctrl.cpp | 75 +++++++++++-------- .../nativetoken/include/nativetoken.h | 4 +- .../innerkits/nativetoken/src/nativetoken.c | 20 ++--- .../unittest/mock/nativetoken_oper_test.cpp | 16 ++-- .../unittest/src/nativetoken_kit_test.cpp | 8 +- 5 files changed, 69 insertions(+), 54 deletions(-) diff --git a/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp b/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp index 870f6c7e0..127851283 100644 --- a/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp +++ b/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp @@ -810,32 +810,9 @@ static void UnregisterPermStateChangeCallback([[maybe_unused]] ani_env* env, [[m return; } -void InitAbilityCtrlFunction(ani_env *env) +static ani_status AtManagerBindNativeFunction(ani_env *env, ani_class& cls) { - if (env == nullptr) { - LOGE(ATM_DOMAIN, ATM_TAG, "Env is null."); - return; - } - const char* spaceName = "L@ohos/abilityAccessCtrl/abilityAccessCtrl;"; - ani_namespace spc; - if (ANI_OK != env->FindNamespace(spaceName, &spc)) { - LOGE(ATM_DOMAIN, ATM_TAG, "Not found %{public}s.", spaceName); - return; - } - std::array methods = { - ani_native_function { "createAtManager", nullptr, reinterpret_cast(CreateAtManager) }, - }; - if (ANI_OK != env->Namespace_BindNativeFunctions(spc, methods.data(), methods.size())) { - LOGE(ATM_DOMAIN, ATM_TAG, "Cannot bind native methods to %{public}s.", spaceName); - return; - }; - const char* className = "L@ohos/abilityAccessCtrl/abilityAccessCtrl/AtManagerInner;"; - ani_class cls; - if (ANI_OK != env->FindClass(className, &cls)) { - LOGE(ATM_DOMAIN, ATM_TAG, "Not found %{public}s.", className); - return; - } - std::array claMethods = { + std::array clsMethods = { ani_native_function { "checkAccessTokenExecute", nullptr, reinterpret_cast(CheckAccessTokenExecute) }, ani_native_function { "requestPermissionsFromUserExecute", nullptr, reinterpret_cast(RequestPermissionsFromUserExecute) }, @@ -861,10 +838,45 @@ void InitAbilityCtrlFunction(ani_env *env) ani_native_function { "onExcute", nullptr, reinterpret_cast(RegisterPermStateChangeCallback) }, ani_native_function { "offExcute", nullptr, reinterpret_cast(UnregisterPermStateChangeCallback) }, }; - if (ANI_OK != env->Class_BindNativeMethods(cls, claMethods.data(), claMethods.size())) { - LOGE(ATM_DOMAIN, ATM_TAG, "Cannot bind native methods to %{public}s", className); - return; + return env->Class_BindNativeMethods(cls, clsMethods.data(), clsMethods.size()); +} + +ani_status InitAbilityCtrlFunction(ani_env *env) +{ + if (env == nullptr) { + LOGE(ATM_DOMAIN, ATM_TAG, "Env is null."); + return ANI_OUT_OF_MEMORY; + } + + ani_status retStatus = ANI_OK; + ani_namespace aniAtNamespace; + const char* atNamespace = "L@ohos/abilityAccessCtrl/abilityAccessCtrl;"; + retStatus = env->FindNamespace(atNamespace, &aniAtNamespace); + if (retStatus != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Not found %{public}s.", atNamespace); + return retStatus; + } + std::array methods = { + ani_native_function { "createAtManager", nullptr, reinterpret_cast(CreateAtManager) }, }; + retStatus = env->Namespace_BindNativeFunctions(aniAtNamespace, methods.data(), methods.size()); + if (retStatus != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Cannot bind native methods to %{public}s.", atNamespace); + return retStatus; + }; + const char* atManagerClassName = "L@ohos/abilityAccessCtrl/abilityAccessCtrl/AtManagerInner;"; + ani_class aniAtManagerClassName; + retStatus = env->FindClass(atManagerClassName, &aniAtManagerClassName); + if (retStatus != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Not found %{public}s.", atManagerClassName); + return retStatus; + } + retStatus = AtManagerBindNativeFunction(env, aniAtManagerClassName); + if (retStatus != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Cannot bind native methods to %{public}s", atManagerClassName); + return retStatus; + }; + return retStatus; } extern "C" { ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) @@ -878,9 +890,12 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) LOGE(ATM_DOMAIN, ATM_TAG, "Unsupported ANI_VERSION_1."); return ANI_OUT_OF_MEMORY; } - InitAbilityCtrlFunction(env); + ani_status ret = InitAbilityCtrlFunction(env); *result = ANI_VERSION_1; - return ANI_OK; + if (ret != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to init atmanger function."); + } + return ret; } } } // namespace AccessToken diff --git a/interfaces/innerkits/nativetoken/include/nativetoken.h b/interfaces/innerkits/nativetoken/include/nativetoken.h index 78ec21af5..c377af91d 100644 --- a/interfaces/innerkits/nativetoken/include/nativetoken.h +++ b/interfaces/innerkits/nativetoken/include/nativetoken.h @@ -96,8 +96,8 @@ typedef struct StrArrayAttribute { const char *strKey; } StrArrayAttr; -extern int32_t GetFileBuff(const char *cfg, char **retBuff); -extern int32_t AtlibInit(void); +extern uint32_t GetFileBuff(const char *cfg, char **retBuff); +extern uint32_t AtlibInit(void); #ifdef __cplusplus } #endif diff --git a/interfaces/innerkits/nativetoken/src/nativetoken.c b/interfaces/innerkits/nativetoken/src/nativetoken.c index cd7ac4304..a949e538b 100644 --- a/interfaces/innerkits/nativetoken/src/nativetoken.c +++ b/interfaces/innerkits/nativetoken/src/nativetoken.c @@ -41,7 +41,7 @@ const uint64_t g_nativeFdTag = 0xD005A01; break; \ } -int32_t GetFileBuff(const char *cfg, char **retBuff) +uint32_t GetFileBuff(const char *cfg, char **retBuff) { struct stat fileStat; @@ -107,7 +107,7 @@ static void StrAttrSet(StrArrayAttr *attr, uint32_t maxStrLen, int32_t maxStrNum attr->strKey = strKey; } -static int32_t GetNativeTokenFromJson(cJSON *cjsonItem, NativeTokenList *tokenNode) +static uint32_t GetNativeTokenFromJson(cJSON *cjsonItem, NativeTokenList *tokenNode) { uint32_t ret; StrArrayAttr attr; @@ -196,7 +196,7 @@ static void FreeTokenList(void) g_tokenListHead->next = NULL; } -static int32_t GetTokenList(const cJSON *object) +static uint32_t GetTokenList(const cJSON *object) { NativeTokenList *tmp = NULL; @@ -237,11 +237,11 @@ static int32_t GetTokenList(const cJSON *object) return ATRET_SUCCESS; } -static int32_t ParseTokenInfo(void) +static uint32_t ParseTokenInfo(void) { char *fileBuff = NULL; cJSON *record = NULL; - int32_t ret; + uint32_t ret; ret = GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff); if (ret != ATRET_SUCCESS) { @@ -261,7 +261,7 @@ static int32_t ParseTokenInfo(void) return ret; } -static int32_t ClearOrCreateCfgFile(void) +static uint32_t ClearOrCreateCfgFile(void) { int32_t fd = open(TOKEN_ID_CFG_FILE_PATH, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP); if (fd < 0) { @@ -290,7 +290,7 @@ static int32_t ClearOrCreateCfgFile(void) return ATRET_SUCCESS; } -int32_t AtlibInit(void) +uint32_t AtlibInit(void) { g_tokenListHead = (NativeTokenList *)malloc(sizeof(NativeTokenList)); if (g_tokenListHead == NULL) { @@ -333,7 +333,7 @@ int32_t AtlibInit(void) return ATRET_SUCCESS; } -static int32_t GetRandomTokenId(uint32_t *randNum) +static uint32_t GetRandomTokenId(uint32_t *randNum) { uint32_t random; ssize_t len; @@ -460,7 +460,7 @@ static uint32_t SaveTokenIdToCfg(const NativeTokenList *curr) { char *fileBuff = NULL; cJSON *record = NULL; - int32_t ret; + uint32_t ret; ret = GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff); if (ret != ATRET_SUCCESS) { @@ -869,7 +869,7 @@ uint64_t GetAccessTokenId(NativeTokenInfoParams *tokenInfo) BREAK_IF_TRUE(ret != ATRET_SUCCESS); if (g_isNativeTokenInited == 0) { - ret = (uint32_t)AtlibInit(); + ret = AtlibInit(); sceneCode = NATIVE_TOKEN_INIT; BREAK_IF_TRUE(ret != ATRET_SUCCESS); } diff --git a/interfaces/innerkits/nativetoken/test/unittest/mock/nativetoken_oper_test.cpp b/interfaces/innerkits/nativetoken/test/unittest/mock/nativetoken_oper_test.cpp index f495d2691..f27440c00 100644 --- a/interfaces/innerkits/nativetoken/test/unittest/mock/nativetoken_oper_test.cpp +++ b/interfaces/innerkits/nativetoken/test/unittest/mock/nativetoken_oper_test.cpp @@ -441,27 +441,27 @@ HWTEST_F(TokenOperTest, GetNativeTokenFromJson001, TestSize.Level0) CopyNativeTokenJson(TOKEN_ID_CFG_FILE_PATH, TOKEN_ID_CFG_FILE_COPY_PATH); g_parse = DEFAULT_TIME; - AtlibInit(); + (void)AtlibInit(); EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), true); CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH); g_getArrayItemTime = DEFAULT_TIME; - AtlibInit(); + (void)AtlibInit(); EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), true); CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH); g_getArraySize = DEFAULT_TIME; - AtlibInit(); + (void)AtlibInit(); EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), true); CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH); g_getArraySize = 8; // 8 times - AtlibInit(); + (void)AtlibInit(); EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), true); CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH); g_getArraySize = 17; // 17 times - AtlibInit(); + (void)AtlibInit(); EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), true); CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH); @@ -524,7 +524,7 @@ HWTEST_F(TokenOperTest, GetInfoArrFromJson001, TestSize.Level0) EXPECT_EQ(GetAccessTokenId(&tokenInfo), 0); CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH); g_parse = VALID_TIME; - AtlibInit(); + (void)AtlibInit(); EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), false); // UpdateInfoInCfgFile failed for SaveTokenIdToCfg @@ -554,7 +554,7 @@ HWTEST_F(TokenOperTest, RemoveNodeFromList001, TestSize.Level0) { SetTimes(); CopyNativeTokenJson(TOKEN_ID_CFG_FILE_PATH, TOKEN_ID_CFG_FILE_COPY_PATH); - AtlibInit(); + (void)AtlibInit(); EXPECT_NE(g_tokenListHead, nullptr); g_strcpyTime = 0; EXPECT_EQ(Start("foundation"), 0); @@ -583,7 +583,7 @@ HWTEST_F(TokenOperTest, RemoveNodeFromList002, TestSize.Level0) { SetTimes(); CopyNativeTokenJson(TOKEN_ID_CFG_FILE_PATH, TOKEN_ID_CFG_FILE_COPY_PATH); - AtlibInit(); + (void)AtlibInit(); EXPECT_NE(g_tokenListHead, nullptr); // add the node EXPECT_NE(Start("process3"), 0); diff --git a/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp b/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp index 931819f74..6d28988c0 100644 --- a/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp +++ b/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp @@ -27,7 +27,7 @@ using namespace OHOS::Security; extern NativeTokenList *g_tokenListHead; extern int32_t g_isNativeTokenInited; -extern int32_t GetFileBuff(const char *cfg, char **retBuff); +extern uint32_t GetFileBuff(const char *cfg, char **retBuff); void TokenLibKitTest::SetUpTestCase() {} @@ -425,7 +425,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId006, TestSize.Level0) ASSERT_NE(tokenID, 0); char *fileBuff = nullptr; - int32_t ret = GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff); + uint32_t ret = GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff); ASSERT_EQ(ret, ATRET_SUCCESS); string s = "GetAccessTokenId006"; char *pos = strstr(fileBuff, s.c_str()); @@ -611,7 +611,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId010, TestSize.Level0) ASSERT_NE(tokenId, 0); } char *fileBuff = nullptr; - int32_t ret = GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff); + uint32_t ret = GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff); ASSERT_EQ(ret, 0); for (int32_t i = 0; i < 200; i++) { char *pos = strstr(fileBuff, processName[i]); @@ -635,7 +635,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId011, TestSize.Level0) Start("process2"); char *fileBuff = nullptr; - int32_t ret = GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff); + uint32_t ret = GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff); ASSERT_EQ(ret, 0); char *pos = strstr(fileBuff, "process1"); ASSERT_NE(pos, nullptr); -- Gitee