diff --git a/bundle.json b/bundle.json index 837c90e5a7f0a43db721850d8eabb92e1fc30b20..41aeb7b4ef563e40ffe584ada4e3354b3bf55d62 100644 --- a/bundle.json +++ b/bundle.json @@ -58,6 +58,7 @@ "hicollie", "hisysevent", "hitrace", + "init", "ipc", "access_token", "safwk", diff --git a/frameworks/native/test/unittest/BUILD.gn b/frameworks/native/test/unittest/BUILD.gn index fa7994459ceca302419e4e8389fee01971b0ac6c..83763f692929b2e405ca5e7d2f21fd6417728068 100644 --- a/frameworks/native/test/unittest/BUILD.gn +++ b/frameworks/native/test/unittest/BUILD.gn @@ -69,6 +69,7 @@ ohos_unittest("common_event_subscribe_test") { "eventhandler:libeventhandler", "ffrt:libffrt", "hilog:libhilog", + "init:libbegetutil", "ipc:ipc_core", ] } @@ -96,6 +97,7 @@ ohos_unittest("common_event_unsubscribe_test") { "eventhandler:libeventhandler", "ffrt:libffrt", "hilog:libhilog", + "init:libbegetutil", "ipc:ipc_core", ] } diff --git a/services/BUILD.gn b/services/BUILD.gn index 69ca03541aeadcd6bb3fbe5d3f72c9c942872a53..f58964d869525b2a031588a5c6aeb9d278e7fb19 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn @@ -101,6 +101,7 @@ ohos_shared_library("cesfwk_services") { "ffrt:libffrt", "hicollie:libhicollie", "hilog:libhilog", + "init:libbegetutil", "ipc:ipc_core", "kv_store:distributeddata_inner", "safwk:system_ability_fwk", diff --git a/services/include/common_event_manager_service.h b/services/include/common_event_manager_service.h index 774521ed5cb80bb7abf9724d8395c676ddee35d9..fe229e62cc23ac39b12d26f6006a9d5e8526bc8c 100644 --- a/services/include/common_event_manager_service.h +++ b/services/include/common_event_manager_service.h @@ -166,6 +166,7 @@ private: std::shared_ptr runner_; std::shared_ptr handler_; std::shared_ptr commonEventSrvQueue_ = nullptr; + std::string supportCheckSaPermission_ = "false"; DISALLOW_COPY_AND_MOVE(CommonEventManagerService); }; diff --git a/services/include/inner_common_event_manager.h b/services/include/inner_common_event_manager.h index 549e9c9096c307b50c889a17d78fd7bfa2da281f..2d926f4a5ad2e7f465594b3816b6634017895ebd 100644 --- a/services/include/inner_common_event_manager.h +++ b/services/include/inner_common_event_manager.h @@ -172,6 +172,7 @@ private: std::shared_ptr staticSubscriberManager_; DISALLOW_COPY_AND_MOVE(InnerCommonEventManager); time_t sysEventTime = 0; + std::string supportCheckSaPermission_ = "false"; }; } // namespace EventFwk } // namespace OHOS diff --git a/services/src/common_event_manager_service.cpp b/services/src/common_event_manager_service.cpp index 03873620b43012afaf7d8a1640d60a7ee9e61796..4cf8766391d7037dcca7d08abae7b403ac8664f5 100644 --- a/services/src/common_event_manager_service.cpp +++ b/services/src/common_event_manager_service.cpp @@ -24,6 +24,7 @@ #include "event_log_wrapper.h" #include "hitrace_meter_adapter.h" #include "ipc_skeleton.h" +#include "parameters.h" #include "publish_manager.h" #include "system_ability_definition.h" #include "xcollie/watchdog.h" @@ -31,6 +32,10 @@ namespace OHOS { namespace EventFwk { +namespace { +const std::string NOTIFICATION_SUPPORT_CHECK_SA_PERMISSION = "notification.support.check.sa.permission"; +} // namespace + using namespace OHOS::Notification; CommonEventManagerService::CommonEventManagerService() @@ -38,6 +43,7 @@ CommonEventManagerService::CommonEventManagerService() runner_(nullptr), handler_(nullptr) { + supportCheckSaPermission_ = OHOS::system::GetParameter(NOTIFICATION_SUPPORT_CHECK_SA_PERMISSION, "false"); EVENT_LOGD("instance created"); } @@ -462,7 +468,7 @@ int32_t CommonEventManagerService::RemoveStickyCommonEvent(const std::string &ev const std::string permission = "ohos.permission.COMMONEVENT_STICKY"; bool ret = AccessTokenHelper::VerifyAccessToken(tokenId, permission); - if (!ret && !isSubsystem) { + if (!ret && (!isSubsystem || supportCheckSaPermission_.compare("true") == 0)) { EVENT_LOGE("No permission."); return ERR_NOTIFICATION_CES_COMMON_PERMISSION_DENIED; } diff --git a/services/src/inner_common_event_manager.cpp b/services/src/inner_common_event_manager.cpp index b8bd17867fd65fdae82fdef6c1bcd13fee62b88c..dc8f6b98224c5df9bb99e25bc1cc8a8b9d1892b7 100644 --- a/services/src/inner_common_event_manager.cpp +++ b/services/src/inner_common_event_manager.cpp @@ -28,16 +28,23 @@ #include "ipc_skeleton.h" #include "nlohmann/json.hpp" #include "os_account_manager_helper.h" +#include "parameters.h" #include "system_time.h" #include "want.h" namespace OHOS { namespace EventFwk { +namespace { +const std::string NOTIFICATION_SUPPORT_CHECK_SA_PERMISSION = "notification.support.check.sa.permission"; +} // namespace + static const int32_t PUBLISH_SYS_EVENT_INTERVAL = 10; // 10s InnerCommonEventManager::InnerCommonEventManager() : controlPtr_(std::make_shared()), staticSubscriberManager_(std::make_shared()) -{} +{ + supportCheckSaPermission_ = OHOS::system::GetParameter(NOTIFICATION_SUPPORT_CHECK_SA_PERMISSION, "false"); +} constexpr char HIDUMPER_HELP_MSG[] = "Usage:dump [options]\n" @@ -351,7 +358,8 @@ bool InnerCommonEventManager::CheckUserId(const pid_t &pid, const uid_t &uid, } comeFrom.isSubsystem = AccessTokenHelper::VerifyNativeToken(callerToken); - if (!comeFrom.isSubsystem) { + + if (!comeFrom.isSubsystem || supportCheckSaPermission_.compare("true") == 0) { if (AccessTokenHelper::VerifyShellToken(callerToken)) { const std::string permission = "ohos.permission.PUBLISH_SYSTEM_COMMON_EVENT"; comeFrom.isCemShell = AccessTokenHelper::VerifyAccessToken(callerToken, permission); diff --git a/services/test/moduletest/common_event_services_publish_ordered_module_test/BUILD.gn b/services/test/moduletest/common_event_services_publish_ordered_module_test/BUILD.gn index 279977518ba4d7f9db2d7487dced261759f578aa..606008a1e4ebbcbf524c5ab6d380b3abd234269e 100644 --- a/services/test/moduletest/common_event_services_publish_ordered_module_test/BUILD.gn +++ b/services/test/moduletest/common_event_services_publish_ordered_module_test/BUILD.gn @@ -61,6 +61,7 @@ ohos_moduletest("CesPublishOrderedEventModuleTest") { "ffrt:libffrt", "hilog:libhilog", "hitrace:hitrace_meter", + "init:libbegetutil", "ipc:ipc_core", "ipc:libdbinder", "samgr:samgr_proxy", diff --git a/services/test/unittest/BUILD.gn b/services/test/unittest/BUILD.gn index 75565a88fb77dbb25ed104de2d69c878f98ed2eb..59f7fe71853e8e2a3fc596e888a7a6024b99e9d3 100644 --- a/services/test/unittest/BUILD.gn +++ b/services/test/unittest/BUILD.gn @@ -852,6 +852,7 @@ ohos_unittest("inner_common_event_manager_test") { "c_utils:utils", "eventhandler:libeventhandler", "hilog:libhilog", + "init:libbegetutil", "ipc:ipc_core", ] } diff --git a/test/fuzztest/commoneventmanagerservice_fuzzer/BUILD.gn b/test/fuzztest/commoneventmanagerservice_fuzzer/BUILD.gn index 354870ac5a3f62fb8a539c6f60f955f77e4eeb21..a529398630dd3ceec07453c29195e5e0e367273c 100644 --- a/test/fuzztest/commoneventmanagerservice_fuzzer/BUILD.gn +++ b/test/fuzztest/commoneventmanagerservice_fuzzer/BUILD.gn @@ -48,6 +48,7 @@ ohos_fuzztest("CommonEventManagerServiceFuzzTest") { "ffrt:libffrt", "hilog:libhilog", "hitrace:hitrace_meter", + "init:libbegetutil", "ipc:ipc_core", "ipc:libdbinder", "samgr:samgr_proxy",