diff --git a/access_token.gni b/access_token.gni index d62e2c4a4b363d44f82ee9dd9b40512174681eaa..a8bc0423cab0d6e82c76c12c1dbdec5f2f053a51 100644 --- a/access_token.gni +++ b/access_token.gni @@ -142,6 +142,7 @@ if (!defined(global_parts_info) || declare_args() { access_token_camera_float_window_enable = true + access_token_load_libs_optional_enable = false } if (!defined(global_parts_info) || diff --git a/bundle.json b/bundle.json index 9a569db586553ce268493299cd781be24b951201..c18ddc980ef8b5140c725474cbc9547c15fd8d86 100644 --- a/bundle.json +++ b/bundle.json @@ -21,7 +21,8 @@ ], "features": [ "access_token_feature_coverage", - "access_token_camera_float_window_enable" + "access_token_camera_float_window_enable", + "access_token_load_libs_optional_enable" ], "adapted_system_type": [ "standard" ], "rom": "10000KB", diff --git a/services/accesstokenmanager/BUILD.gn b/services/accesstokenmanager/BUILD.gn index a77405e664764bab2461563bbb2549123699cf5c..584090a05c4cd00649aa5308cc075cc8c28d0462 100644 --- a/services/accesstokenmanager/BUILD.gn +++ b/services/accesstokenmanager/BUILD.gn @@ -202,4 +202,7 @@ if (is_standard_system) { [ "main/cpp/src/seccomp/sec_comp_enhance_agent.cpp" ] } } + if (access_token_load_libs_optional_enable) { + cflags_cc += [ "-DLOAD_LIBS_OPTIONAL_ENABLE" ] + } } diff --git a/services/accesstokenmanager/main/cpp/include/permission/permission_manager.h b/services/accesstokenmanager/main/cpp/include/permission/permission_manager.h index 14cd8a00aa4e814b859d692a3833e5c01217747a..9f10b7a40418755ecab874dcbf01f6795ff4759e 100644 --- a/services/accesstokenmanager/main/cpp/include/permission/permission_manager.h +++ b/services/accesstokenmanager/main/cpp/include/permission/permission_manager.h @@ -116,7 +116,7 @@ private: bool GetLocationPermissionState(AccessTokenID tokenID, std::vector& reqPermList, std::vector& permsList, int32_t apiVersion, const LocationIndex& locationIndex); bool IsPermissionStateOrFlagMatched(const PermissionStatus& stata1, const PermissionStatus& stata2); - AbilityManagerAccessLoaderInterface* GetAbilityManager(); + std::shared_ptr GetAbilityManager(); PermissionGrantEvent grantEvent_; static std::recursive_mutex mutex_; @@ -129,7 +129,9 @@ private: DISALLOW_COPY_AND_MOVE(PermissionManager); std::mutex abilityManagerMutex_; +#ifndef LOAD_LIBS_OPTIONAL_ENABLE std::shared_ptr abilityManagerLoader_; +#endif }; } // namespace AccessToken } // namespace Security diff --git a/services/accesstokenmanager/main/cpp/src/permission/permission_manager.cpp b/services/accesstokenmanager/main/cpp/src/permission/permission_manager.cpp index e8f12d45707d1506aae607d55be9b55aa2c81d92..34d97e7372adbf46017401906a41c3db4bbc227d 100644 --- a/services/accesstokenmanager/main/cpp/src/permission/permission_manager.cpp +++ b/services/accesstokenmanager/main/cpp/src/permission/permission_manager.cpp @@ -263,16 +263,18 @@ int PermissionManager::GetPermissionFlag(AccessTokenID tokenID, const std::strin return ret; } -AbilityManagerAccessLoaderInterface* PermissionManager::GetAbilityManager() +std::shared_ptr PermissionManager::GetAbilityManager() { + +#ifdef LOAD_LIBS_OPTIONAL_ENABLE + std::shared_ptr loader = std::make_shared(ABILITY_MANAGER_LIBPATH); + return loader; +#else if (abilityManagerLoader_ == nullptr) { - std::lock_guard lock(abilityManagerMutex_); - if (abilityManagerLoader_ == nullptr) { - abilityManagerLoader_ = std::make_shared(ABILITY_MANAGER_LIBPATH); - } + abilityManagerLoader_ = std::make_shared(ABILITY_MANAGER_LIBPATH); } - - return abilityManagerLoader_->GetObject(); + return abilityManagerLoader_; +#endif } int32_t PermissionManager::RequestAppPermOnSetting(const HapTokenInfo& hapInfo, @@ -290,7 +292,9 @@ int32_t PermissionManager::RequestAppPermOnSetting(const HapTokenInfo& hapInfo, .callerTokenId = IPCSkeleton::GetCallingTokenID() }; - AbilityManagerAccessLoaderInterface* abilityManager = GetAbilityManager(); + std::shared_ptr abilityManagerLoader = GetAbilityManager(); + AbilityManagerAccessLoaderInterface* abilityManager = + abilityManagerLoader->GetObject(); if (abilityManager == nullptr) { LOGE(ATM_DOMAIN, ATM_TAG, "AbilityManager is nullptr!"); return AccessTokenError::ERR_SERVICE_ABNORMAL; @@ -372,7 +376,9 @@ int32_t PermissionManager::UpdateTokenPermissionState( // To notify kill process when perm is revoke if (needKill && (!isGranted && !isSecCompGrantedBefore)) { LOGI(ATM_DOMAIN, ATM_TAG, "(%{public}s) is revoked, kill process(%{public}u).", permission.c_str(), id); - AbilityManagerAccessLoaderInterface* abilityManager = GetAbilityManager(); + std::shared_ptr abilityManagerLoader = GetAbilityManager(); + AbilityManagerAccessLoaderInterface* abilityManager = + abilityManagerLoader->GetObject(); if (abilityManager == nullptr) { LOGE(ATM_DOMAIN, ATM_TAG, "AbilityManager is nullptr!"); } else if ((ret = abilityManager->KillProcessForPermissionUpdate(id)) != ERR_OK) { diff --git a/services/common/json_parse/BUILD.gn b/services/common/json_parse/BUILD.gn index 6b340009fac7c2125272bcdfe6f45adb6c420501..52a34088506a558a80403ce8e34364756c57565b 100644 --- a/services/common/json_parse/BUILD.gn +++ b/services/common/json_parse/BUILD.gn @@ -98,9 +98,5 @@ ohos_shared_library("accesstoken_cjson_utils") { "c_utils:utils", "hilog:libhilog", ] - if (customization_config_policy_enable) { - cflags_cc += [ "-DCUSTOMIZATION_CONFIG_POLICY_ENABLE" ] - external_deps += [ "config_policy:configpolicy_util" ] - } } }