diff --git a/sensor.gni b/sensor.gni index 0f548ad66c61beecf5874fd2033d21671fddba51..7012db5ec7ea7c1d3ba671c78d2bd71ab11276e3 100644 --- a/sensor.gni +++ b/sensor.gni @@ -44,6 +44,13 @@ if (!defined(global_parts_info) || sensor_memmgr_enable = false } +if (!defined(global_parts_info) || + defined(global_parts_info.security_access_token)) { + sensor_access_token_enable = true +} else { + sensor_access_token_enable = false +} + if (build_variant == "root") { sensor_default_defines += [ "BUILD_VARIANT_ENG" ] sensor_build_eng = true diff --git a/services/BUILD.gn b/services/BUILD.gn index 31681dd02c5090dc878a5515ff493f69f6d68b49..76ac52e87472510e4fdba90ac7b5c6ce0dd1fbf5 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn @@ -69,6 +69,10 @@ ohos_shared_library("libsensor_service") { external_deps += [ "memmgr:memmgrclient" ] } + if (sensor_access_token_enable) { + defines += [ "ACCESS_TOKEN_ENABLE" ] + } + if (hiviewdfx_hisysevent_enable) { external_deps += [ "hisysevent:libhisysevent" ] } @@ -164,6 +168,10 @@ ohos_static_library("libsensor_service_static") { external_deps += [ "memmgr:memmgrclient" ] } + if (sensor_access_token_enable) { + defines += [ "ACCESS_TOKEN_ENABLE" ] + } + if (hiviewdfx_hisysevent_enable) { external_deps += [ "hisysevent:libhisysevent" ] } diff --git a/services/include/sensor_manager.h b/services/include/sensor_manager.h index c5e8d031f588d63960960dbc413ed69b7accc7a4..acc8c879bbe969dc67d01fa67059b3471b53d869 100644 --- a/services/include/sensor_manager.h +++ b/services/include/sensor_manager.h @@ -47,7 +47,7 @@ public: SensorBasicInfo GetSensorInfo(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs); bool IsOtherClientUsingSensor(int32_t sensorId, int32_t clientPid); ErrCode AfterDisableSensor(int32_t sensorId); - void GetPackageName(AccessTokenID tokenId, std::string &packageName); + void GetPackageName(AccessTokenID tokenId, std::string &packageName, bool isAccessTokenServiceActive = false); private: #ifdef HDF_DRIVERS_INTERFACE_SENSOR diff --git a/services/include/sensor_service.h b/services/include/sensor_service.h index 5ff2a6c4dee73c8bb43c6ecee857559bbd12a6f9..8d6e509bc5b7952915ad3c040d6300d65a7af006 100644 --- a/services/include/sensor_service.h +++ b/services/include/sensor_service.h @@ -70,6 +70,7 @@ public: private: DISALLOW_COPY_AND_MOVE(SensorService); void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override; + void OnRemoveSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override; bool CheckParameter(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs); class PermStateChangeCb : public Security::AccessToken::PermStateChangeCallbackCustomize { @@ -116,6 +117,7 @@ private: std::shared_ptr permStateChangeCb_ = nullptr; ErrCode SaveSubscriber(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs); std::atomic_bool isReportActiveInfo_ = false; + static std::atomic_bool isAccessTokenServiceActive_; }; #define POWER_POLICY SensorPowerPolicy::GetInstance() diff --git a/services/src/sensor_manager.cpp b/services/src/sensor_manager.cpp index 523f25c2ebec5dfc4dee5a461664d574744a908c..50cb8580d1598322a87361d1af2ee8dd5b89ab34 100644 --- a/services/src/sensor_manager.cpp +++ b/services/src/sensor_manager.cpp @@ -187,9 +187,13 @@ ErrCode SensorManager::AfterDisableSensor(int32_t sensorId) return ERR_OK; } -void SensorManager::GetPackageName(AccessTokenID tokenId, std::string &packageName) +void SensorManager::GetPackageName(AccessTokenID tokenId, std::string &packageName, bool isAccessTokenServiceActive) { CALL_LOG_ENTER; + if (!isAccessTokenServiceActive) { + SEN_HILOGE("Access token service is inactive"); + return; + } int32_t tokenType = AccessTokenKit::GetTokenTypeFlag(tokenId); switch (tokenType) { case ATokenTypeEnum::TOKEN_HAP: { diff --git a/services/src/sensor_service.cpp b/services/src/sensor_service.cpp index 5aadddc10a5ee54851b6a4e6e3da221f01abd15c..2f86564c2d1555e5543109c667ee5447b51640cd 100644 --- a/services/src/sensor_service.cpp +++ b/services/src/sensor_service.cpp @@ -50,6 +50,8 @@ constexpr int64_t MAX_EVENT_COUNT = 1000; std::atomic_bool g_isRegister = false; } // namespace +std::atomic_bool SensorService::isAccessTokenServiceActive_ = false; + SensorService::SensorService() : SystemAbility(SENSOR_SERVICE_ABILITY_ID, true), state_(SensorServiceState::STATE_STOPPED) { @@ -72,6 +74,21 @@ void SensorService::OnAddSystemAbility(int32_t systemAbilityId, const std::strin PROCESS_TYPE_SA, PROCESS_STATUS_STARTED, SENSOR_SERVICE_ABILITY_ID); } #endif // MEMMGR_ENABLE +#ifdef ACCESS_TOKEN_ENABLE + if (systemAbilityId == ACCESS_TOKEN_MANAGER_SERVICE_ID) { + isAccessTokenServiceActive_ = true; + } +#endif // ACCESS_TOKEN_ENABLE +} + +void SensorService::OnRemoveSystemAbility(int32_t systemAbilityId, const std::string &deviceId) +{ + SEN_HILOGI("OnRemoveSystemAbility systemAbilityId:%{public}d", systemAbilityId); +#ifdef ACCESS_TOKEN_ENABLE + if (systemAbilityId == ACCESS_TOKEN_MANAGER_SERVICE_ID) { + isAccessTokenServiceActive_ = false; + } +#endif // ACCESS_TOKEN_ENABLE } void SensorService::OnStart() @@ -110,6 +127,9 @@ void SensorService::OnStart() #ifdef MEMMGR_ENABLE AddSystemAbilityListener(MEMORY_MANAGER_SA_ID); #endif // MEMMGR_ENABLE +#ifdef ACCESS_TOKEN_ENABLE + AddSystemAbilityListener(ACCESS_TOKEN_MANAGER_SERVICE_ID); +#endif // ACCESS_TOKEN_ENABLE } #ifdef HDF_DRIVERS_INTERFACE_SENSOR @@ -187,7 +207,7 @@ void SensorService::ReportSensorSysEvent(int32_t sensorId, bool enable, int32_t { std::string packageName(""); AccessTokenID tokenId = clientInfo_.GetTokenIdByPid(pid); - sensorManager_.GetPackageName(tokenId, packageName); + sensorManager_.GetPackageName(tokenId, packageName, isAccessTokenServiceActive_); #ifdef HIVIEWDFX_HISYSEVENT_ENABLE const int logLevel = 4; int32_t uid = clientInfo_.GetUidByPid(pid);