diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/BUILD.gn b/wifi/services/wifi_standard/wifi_framework/wifi_manage/BUILD.gn index d2d8ae1b19f6a0137c2db267cd38134599e5ec81..c69a191107c30d6b85abecd87142f72539fdf439 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/BUILD.gn +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/BUILD.gn @@ -189,6 +189,7 @@ if (defined(ohos_lite)) { "//base/security/access_token/interfaces/innerkits/accesstoken/include", "//foundation/communication/netmanager_base/frameworks/native/netmanagernative", "//foundation/communication/netmanager_base/interfaces/innerkits/netmanagernative/include", + "//base/account/os_account/interfaces/innerkits/osaccount/native/include", ] } @@ -253,7 +254,11 @@ if (defined(ohos_lite)) { defines += [ "FEATURE_AP_SUPPORT" ] } - deps = [ ":wifi_p2p_service_impl" ] + deps = [ + ":wifi_p2p_service_impl", + "//base/account/os_account/frameworks/osaccount/native:os_account_innerkits", + ] + external_deps = [ "ability_base:want", "bundle_framework:appexecfwk_base", diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/idl_client/idl_interface/i_wifi_sta_iface.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/idl_client/idl_interface/i_wifi_sta_iface.h index bee02f8dd5c200c63f0885d764de14b51c6778d5..2cb27acb69110c92bd14ca1812891f9e8d871e98 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/idl_client/idl_interface/i_wifi_sta_iface.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/idl_client/idl_interface/i_wifi_sta_iface.h @@ -21,7 +21,6 @@ #include "wifi_error_no.h" #include "i_wifi_event_callback.h" #include "i_wifi_struct.h" -#include "wifi_error_no.h" #ifdef __cplusplus extern "C" { diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.cpp index a8ff033c6721fa96b4dc8004d0163a901ae14166..20dabe65f4060ec5c05c374a451cb199aced13e4 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.cpp @@ -37,6 +37,9 @@ #include "wifi_dumper.h" #include "wifi_common_util.h" #include "wifi_protect_manager.h" +#ifndef OHOS_ARCH_LITE +#include "os_account_manager.h" +#endif DEFINE_WIFILOG_LABEL("WifiDeviceServiceImpl"); namespace OHOS { @@ -417,6 +420,11 @@ ErrCode WifiDeviceServiceImpl::AddCandidateConfig(const WifiDeviceConfig &config return WIFI_OPT_PERMISSION_DENIED; } + if (CheckOsAccountConstraint() != WIFI_OPT_SUCCESS) { + WIFI_LOGE("CheckOsAccountConstraint return fail!"); + return WIFI_OPT_PERMISSION_DENIED; + } + if (!CheckConfigPwd(config)) { WIFI_LOGE("CheckConfigPwd failed!"); return WIFI_OPT_INVALID_PARAM; @@ -476,6 +484,11 @@ ErrCode WifiDeviceServiceImpl::CheckRemoveCandidateConfig(void) return WIFI_OPT_PERMISSION_DENIED; } + if (CheckOsAccountConstraint() != WIFI_OPT_SUCCESS) { + WIFI_LOGE("CheckOsAccountConstraint return fail!"); + return WIFI_OPT_PERMISSION_DENIED; + } + if (!IsStaServiceRunning()) { WIFI_LOGE("CheckRemoveCandidateConfig:IsStaServiceRunning not running!"); return WIFI_OPT_STA_NOT_OPENED; @@ -571,6 +584,29 @@ ErrCode WifiDeviceServiceImpl::GetCandidateConfigs(std::vector return WIFI_OPT_SUCCESS; } +ErrCode WifiDeviceServiceImpl::CheckOsAccountConstraint(void) +{ +#ifndef OHOS_ARCH_LITE + int localId = 0; + bool isEnable = false; + int uid = GetCallingUid(); + if (AccountSA::OsAccountManager::GetOsAccountLocalIdFromUid(uid, localId) != ERR_OK) { + WIFI_LOGE("GetOsAccountLocalIdFromUid return fail!"); + return WIFI_OPT_FAILED; + } + + if (AccountSA::OsAccountManager::IsOsAccountConstraintEnable(localId, "constraint.wifi.set", isEnable) != + ERR_OK) { + WIFI_LOGE("IsOsAccountConstraintEnable return fail!"); + return WIFI_OPT_FAILED; + } + + return isEnable ? WIFI_OPT_SUCCESS : WIFI_OPT_PERMISSION_DENIED; +#else + return WIFI_OPT_SUCCESS; +#endif +} + ErrCode WifiDeviceServiceImpl::AddDeviceConfig(const WifiDeviceConfig &config, int &result) { if (WifiPermissionUtils::VerifySetWifiInfoPermission() == PERMISSION_DENIED) { @@ -583,6 +619,11 @@ ErrCode WifiDeviceServiceImpl::AddDeviceConfig(const WifiDeviceConfig &config, i return WIFI_OPT_PERMISSION_DENIED; } + if (CheckOsAccountConstraint() != WIFI_OPT_SUCCESS) { + WIFI_LOGE("CheckOsAccountConstraint return fail!"); + return WIFI_OPT_PERMISSION_DENIED; + } + if (!CheckConfigPwd(config)) { WIFI_LOGE("CheckConfigPwd failed!"); return WIFI_OPT_INVALID_PARAM; @@ -616,6 +657,11 @@ ErrCode WifiDeviceServiceImpl::UpdateDeviceConfig(const WifiDeviceConfig &config return WIFI_OPT_PERMISSION_DENIED; } + if (CheckOsAccountConstraint() != WIFI_OPT_SUCCESS) { + WIFI_LOGE("CheckOsAccountConstraint return fail!"); + return WIFI_OPT_PERMISSION_DENIED; + } + if (!IsStaServiceRunning()) { return WIFI_OPT_STA_NOT_OPENED; } @@ -645,6 +691,11 @@ ErrCode WifiDeviceServiceImpl::RemoveDevice(int networkId) return WIFI_OPT_PERMISSION_DENIED; } + if (CheckOsAccountConstraint() != WIFI_OPT_SUCCESS) { + WIFI_LOGE("CheckOsAccountConstraint return fail!"); + return WIFI_OPT_PERMISSION_DENIED; + } + if (!IsStaServiceRunning()) { return WIFI_OPT_STA_NOT_OPENED; } @@ -672,6 +723,11 @@ ErrCode WifiDeviceServiceImpl::RemoveAllDevice() return WIFI_OPT_PERMISSION_DENIED; } + if (CheckOsAccountConstraint() != WIFI_OPT_SUCCESS) { + WIFI_LOGE("CheckOsAccountConstraint return fail!"); + return WIFI_OPT_PERMISSION_DENIED; + } + if (!IsStaServiceRunning()) { return WIFI_OPT_STA_NOT_OPENED; } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.h index bcc0844102b4559b27a03c46ae23a3a4ea3fde12..c647ff7a479448495de1524ab5f1bb894879a7e9 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.h @@ -171,6 +171,7 @@ private: static void SigHandler(int sig); static bool IsProcessNeedToRestart(); ErrCode CheckRemoveCandidateConfig(void); + ErrCode CheckOsAccountConstraint(); #ifndef OHOS_ARCH_LITE void RegisterAppRemoved(); void UnRegisterAppRemoved();