diff --git a/frameworks/ddk/hid/BUILD.gn b/frameworks/ddk/hid/BUILD.gn index cfa618689974389014310f19c3567479ddfc044a..693e93d09bf5e09c4cc4010631186a7f61c6f96f 100644 --- a/frameworks/ddk/hid/BUILD.gn +++ b/frameworks/ddk/hid/BUILD.gn @@ -21,8 +21,6 @@ ohos_shared_library("hid") { sources = [ "input_emit_event.cpp" ] - deps = [ "${ext_mgr_path}/services/native/driver_extension_manager/src/driver_permission:driver_permission_manager" ] - external_deps = [ "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", diff --git a/frameworks/ddk/hid/input_emit_event.cpp b/frameworks/ddk/hid/input_emit_event.cpp index fd97f3a09139ed1a56df607ce7ba6d91160e7d26..f0544753ac4adff32a2a82366a608dff73c694d2 100644 --- a/frameworks/ddk/hid/input_emit_event.cpp +++ b/frameworks/ddk/hid/input_emit_event.cpp @@ -20,8 +20,8 @@ #include "v1_0/ihid_ddk.h" #include "hilog_wrapper.h" #include -#include "ext_permission_manager.h" +using namespace OHOS; using namespace OHOS::ExternalDeviceManager; namespace { static OHOS::sptr g_ddk = nullptr; @@ -38,7 +38,6 @@ constexpr uint32_t MAX_HID_MISC_EVENT_LEN = 6; #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -static const std::string PERMISSION_NAME = "ohos.permission.ACCESS_DDK_HID"; static std::unordered_map> g_deviceMap; struct TempDevice { @@ -173,11 +172,6 @@ static int32_t CacheDeviceInfor(OHOS::HDI::Input::Ddk::V1_0::Hid_Device tempDevi int32_t OH_Hid_CreateDevice(Hid_Device *hidDevice, Hid_EventProperties *hidEventProperties) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_HID_DDK, "no permission"); - return HID_DDK_FAILURE; - } - if (Connect() != HID_DDK_SUCCESS) { return HID_DDK_INVALID_OPERATION; } @@ -236,11 +230,6 @@ int32_t OH_Hid_CreateDevice(Hid_Device *hidDevice, Hid_EventProperties *hidEvent int32_t OH_Hid_EmitEvent(int32_t deviceId, const Hid_EmitItem items[], uint16_t length) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_HID_DDK, "no permission"); - return HID_DDK_FAILURE; - } - if (Connect() != HID_DDK_SUCCESS) { return HID_DDK_INVALID_OPERATION; } @@ -276,11 +265,6 @@ int32_t OH_Hid_EmitEvent(int32_t deviceId, const Hid_EmitItem items[], uint16_t int32_t OH_Hid_DestroyDevice(int32_t deviceId) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_HID_DDK, "no permission"); - return HID_DDK_FAILURE; - } - if (Connect() != HID_DDK_SUCCESS) { return HID_DDK_INVALID_OPERATION; } diff --git a/frameworks/ddk/usb/BUILD.gn b/frameworks/ddk/usb/BUILD.gn index 6ec2dfa5258734a5fcc43bd4cf23e7c59fd65d55..d398b6412fedeed38658efd59ff74a79191a2d15 100644 --- a/frameworks/ddk/usb/BUILD.gn +++ b/frameworks/ddk/usb/BUILD.gn @@ -28,10 +28,7 @@ ohos_shared_library("usb_ndk") { "usb_ddk_api.cpp", ] - deps = [ - "${ext_mgr_path}/interfaces/innerkits:driver_ext_mgr_client", - "${ext_mgr_path}/services/native/driver_extension_manager/src/driver_permission:driver_permission_manager", - ] + deps = [ "${ext_mgr_path}/interfaces/innerkits:driver_ext_mgr_client" ] external_deps = [ "bundle_framework:appexecfwk_base", diff --git a/frameworks/ddk/usb/usb_ddk_api.cpp b/frameworks/ddk/usb/usb_ddk_api.cpp index 81204e5eebd05355bfdd8f6b04fa3a3f28ea3535..3a55a6106d0cc3bd4cb8286a37f36ceac736588d 100644 --- a/frameworks/ddk/usb/usb_ddk_api.cpp +++ b/frameworks/ddk/usb/usb_ddk_api.cpp @@ -26,18 +26,14 @@ #include "usb_config_desc_parser.h" #include "usb_ddk_types.h" #include "v1_0/usb_ddk_service.h" -#include "ext_permission_manager.h" + using namespace OHOS::ExternalDeviceManager; namespace { OHOS::sptr g_ddk = nullptr; } // namespace -static const std::string PERMISSION_NAME = "ohos.permission.ACCESS_DDK_USB"; + int32_t OH_Usb_Init() { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } g_ddk = OHOS::HDI::Usb::Ddk::V1_0::IUsbDdk::Get(); if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "get ddk failed"); @@ -49,10 +45,6 @@ int32_t OH_Usb_Init() void OH_Usb_Release() { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return; - } if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "ddk is null"); return; @@ -63,10 +55,6 @@ void OH_Usb_Release() int32_t OH_Usb_GetDeviceDescriptor(uint64_t deviceId, UsbDeviceDescriptor *desc) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid obj"); return USB_DDK_INVALID_OPERATION; @@ -88,10 +76,6 @@ int32_t OH_Usb_GetDeviceDescriptor(uint64_t deviceId, UsbDeviceDescriptor *desc) int32_t OH_Usb_GetConfigDescriptor( uint64_t deviceId, uint8_t configIndex, struct UsbDdkConfigDescriptor ** const config) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid obj"); return USB_DDK_INVALID_OPERATION; @@ -112,19 +96,11 @@ int32_t OH_Usb_GetConfigDescriptor( void OH_Usb_FreeConfigDescriptor(UsbDdkConfigDescriptor * const config) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return; - } return FreeUsbConfigDescriptor(config); } int32_t OH_Usb_ClaimInterface(uint64_t deviceId, uint8_t interfaceIndex, uint64_t *interfaceHandle) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid obj"); return USB_DDK_INVALID_OPERATION; @@ -139,10 +115,6 @@ int32_t OH_Usb_ClaimInterface(uint64_t deviceId, uint8_t interfaceIndex, uint64_ int32_t OH_Usb_ReleaseInterface(uint64_t interfaceHandle) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid obj"); return USB_DDK_INVALID_OPERATION; @@ -153,10 +125,6 @@ int32_t OH_Usb_ReleaseInterface(uint64_t interfaceHandle) int32_t OH_Usb_SelectInterfaceSetting(uint64_t interfaceHandle, uint8_t settingIndex) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid obj"); return USB_DDK_INVALID_OPERATION; @@ -167,10 +135,6 @@ int32_t OH_Usb_SelectInterfaceSetting(uint64_t interfaceHandle, uint8_t settingI int32_t OH_Usb_GetCurrentInterfaceSetting(uint64_t interfaceHandle, uint8_t *settingIndex) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid obj"); return USB_DDK_INVALID_OPERATION; @@ -187,10 +151,6 @@ int32_t OH_Usb_GetCurrentInterfaceSetting(uint64_t interfaceHandle, uint8_t *set int32_t OH_Usb_SendControlReadRequest( uint64_t interfaceHandle, const UsbControlRequestSetup *setup, uint32_t timeout, uint8_t *data, uint32_t *dataLen) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid obj"); return USB_DDK_INVALID_OPERATION; @@ -225,10 +185,6 @@ int32_t OH_Usb_SendControlReadRequest( int32_t OH_Usb_SendControlWriteRequest(uint64_t interfaceHandle, const UsbControlRequestSetup *setup, uint32_t timeout, const uint8_t *data, uint32_t dataLen) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid obj"); return USB_DDK_INVALID_OPERATION; @@ -246,10 +202,6 @@ int32_t OH_Usb_SendControlWriteRequest(uint64_t interfaceHandle, const UsbContro int32_t OH_Usb_SendPipeRequest(const UsbRequestPipe *pipe, UsbDeviceMemMap *devMmap) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid obj"); return USB_DDK_INVALID_OPERATION; @@ -267,11 +219,6 @@ int32_t OH_Usb_SendPipeRequest(const UsbRequestPipe *pipe, UsbDeviceMemMap *devM int32_t OH_Usb_SendPipeRequestWithAshmem(const UsbRequestPipe *pipe, DDK_Ashmem *ashmem) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } - if (g_ddk == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid obj"); return USB_DDK_INVALID_OPERATION; @@ -290,10 +237,6 @@ int32_t OH_Usb_SendPipeRequestWithAshmem(const UsbRequestPipe *pipe, DDK_Ashmem int32_t OH_Usb_CreateDeviceMemMap(uint64_t deviceId, size_t size, UsbDeviceMemMap **devMmap) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return USB_DDK_FAILED; - } if (devMmap == nullptr) { EDM_LOGE(MODULE_USB_DDK, "invalid param"); return USB_DDK_INVALID_PARAMETER; @@ -325,10 +268,6 @@ int32_t OH_Usb_CreateDeviceMemMap(uint64_t deviceId, size_t size, UsbDeviceMemMa void OH_Usb_DestroyDeviceMemMap(UsbDeviceMemMap *devMmap) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - EDM_LOGE(MODULE_USB_DDK, "no permission"); - return; - } if (devMmap == nullptr) { EDM_LOGE(MODULE_USB_DDK, "devMmap is nullptr"); return; diff --git a/frameworks/js/napi/device_manager/BUILD.gn b/frameworks/js/napi/device_manager/BUILD.gn index cffdce20f8e6c7f75a2e74f0d7201cdbd7d2c861..3c212d9fe25bfbf2f51f62efe1e15ada11a633a4 100644 --- a/frameworks/js/napi/device_manager/BUILD.gn +++ b/frameworks/js/napi/device_manager/BUILD.gn @@ -23,10 +23,7 @@ ohos_shared_library("devicemanager_napi") { "${ext_mgr_path}/interfaces/ddk/hid/", ] - deps = [ - "${ext_mgr_path}/interfaces/innerkits:driver_ext_mgr_client", - "${ext_mgr_path}/services/native/driver_extension_manager/src/driver_permission:driver_permission_manager", - ] + deps = [ "${ext_mgr_path}/interfaces/innerkits:driver_ext_mgr_client" ] external_deps = [ "bundle_framework:appexecfwk_base", diff --git a/frameworks/js/napi/device_manager/device_manager_middle.cpp b/frameworks/js/napi/device_manager/device_manager_middle.cpp index 8ef5835007f94f092e846930282f4ef25476df63..ee7ab9f2df23ba172529e7b972567bfec80c2d45 100644 --- a/frameworks/js/napi/device_manager/device_manager_middle.cpp +++ b/frameworks/js/napi/device_manager/device_manager_middle.cpp @@ -24,7 +24,6 @@ #include #include "napi_remote_object.h" -#include "ext_permission_manager.h" #include "device_manager_middle.h" namespace OHOS { @@ -47,7 +46,6 @@ static std::mutex mapMutex; static std::map> g_callbackMap = {}; static DriverExtMgrClient &g_edmClient = DriverExtMgrClient::GetInstance(); static sptr g_edmCallback = new (std::nothrow) DeviceManagerCallback {}; -static const std::string PERMISSION_NAME = "ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER"; static napi_value ConvertToBusinessError(const napi_env &env, const ErrMsg &errMsg); static napi_value ConvertToJsDeviceId(const napi_env &env, uint64_t deviceId); @@ -483,10 +481,6 @@ static napi_value ConvertToJsDriverInfo(napi_env& env, std::shared_ptr> devices; - if (g_edmClient.QueryDevice(busType, devices) != UsbErrCode::EDM_OK) { - ThrowErr(env, SERVICE_EXCEPTION, "Query device service fail"); + UsbErrCode retCode = g_edmClient.QueryDevice(busType, devices); + if (retCode != UsbErrCode::EDM_OK) { + if (retCode == UsbErrCode::EDM_ERR_NO_PERM) { + ThrowErr(env, PERMISSION_DENIED, "queryDevice: no permission"); + } else { + ThrowErr(env, SERVICE_EXCEPTION, "Query device service fail"); + } return nullptr; } @@ -534,10 +533,6 @@ static bool ParseDeviceId(const napi_env& env, const napi_value& value, uint64_t static napi_value BindDevice(napi_env env, napi_callback_info info) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - ThrowErr(env, PERMISSION_DENIED, "bindDevice: no permission"); - return nullptr; - } size_t argc = PARAM_COUNT_3; napi_value argv[PARAM_COUNT_3] = {nullptr}; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr)); @@ -559,8 +554,13 @@ static napi_value BindDevice(napi_env env, napi_callback_info info) } std::lock_guard mapLock(mapMutex); - if (g_edmClient.BindDevice(deviceId, g_edmCallback) != UsbErrCode::EDM_OK) { - ThrowErr(env, SERVICE_EXCEPTION, "bindDevice service failed"); + UsbErrCode retCode = g_edmClient.BindDevice(deviceId, g_edmCallback); + if (retCode != UsbErrCode::EDM_OK) { + if (retCode == UsbErrCode::EDM_ERR_NO_PERM) { + ThrowErr(env, PERMISSION_DENIED, "bindDevice: no permission"); + } else { + ThrowErr(env, SERVICE_EXCEPTION, "bindDevice service failed"); + } return nullptr; } @@ -585,10 +585,6 @@ static napi_value BindDevice(napi_env env, napi_callback_info info) static napi_value UnbindDevice(napi_env env, napi_callback_info info) { - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - ThrowErr(env, PERMISSION_DENIED, "unbindDevice: no permission"); - return nullptr; - } size_t argc = PARAM_COUNT_2; napi_value argv[PARAM_COUNT_2] = {nullptr}; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr)); @@ -609,9 +605,13 @@ static napi_value UnbindDevice(napi_env env, napi_callback_info info) ThrowErr(env, SERVICE_EXCEPTION, "unbind map is null"); return nullptr; } - - if (g_edmClient.UnBindDevice(deviceId) != UsbErrCode::EDM_OK) { - ThrowErr(env, SERVICE_EXCEPTION, "unbindDevice service failed"); + UsbErrCode retCode = g_edmClient.UnBindDevice(deviceId); + if (retCode != UsbErrCode::EDM_OK) { + if (retCode == UsbErrCode::EDM_ERR_NO_PERM) { + ThrowErr(env, PERMISSION_DENIED, "unbindDevice: no permission"); + } else { + ThrowErr(env, SERVICE_EXCEPTION, "unbindDevice service failed"); + } return nullptr; } auto data = g_callbackMap[deviceId]; @@ -627,16 +627,6 @@ static napi_value UnbindDevice(napi_env env, napi_callback_info info) static napi_value QueryDeviceInfo(napi_env env, napi_callback_info info) { - if (!ExtPermissionManager::IsSystemApp()) { - ThrowErr(env, PERMISSION_NOT_SYSTEM_APP, "queryDeviceInfo: none system app"); - return nullptr; - } - - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - ThrowErr(env, PERMISSION_DENIED, "queryDeviceInfo: no permission"); - return nullptr; - } - size_t argc = PARAM_COUNT_1; napi_value argv[PARAM_COUNT_1] = {nullptr}; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr)); @@ -654,7 +644,13 @@ static napi_value QueryDeviceInfo(napi_env env, napi_callback_info info) ret = g_edmClient.QueryDeviceInfo(deviceInfos); } if (ret != UsbErrCode::EDM_OK) { - ThrowErr(env, SERVICE_EXCEPTION_NEW, "Query device info service fail"); + if (ret == UsbErrCode::EDM_ERR_NOT_SYSTEM_APP) { + ThrowErr(env, PERMISSION_NOT_SYSTEM_APP, "queryDeviceInfo: none system app"); + } else if (ret == UsbErrCode::EDM_ERR_NO_PERM) { + ThrowErr(env, PERMISSION_DENIED, "queryDeviceInfo: no permission"); + } else { + ThrowErr(env, SERVICE_EXCEPTION_NEW, "Query device info service fail"); + } return nullptr; } @@ -670,16 +666,6 @@ static napi_value QueryDeviceInfo(napi_env env, napi_callback_info info) static napi_value QueryDriverInfo(napi_env env, napi_callback_info info) { - if (!ExtPermissionManager::IsSystemApp()) { - ThrowErr(env, PERMISSION_NOT_SYSTEM_APP, "queryDriverInfo: none system app"); - return nullptr; - } - - if (!ExtPermissionManager::GetInstance().HasPermission(PERMISSION_NAME)) { - ThrowErr(env, PERMISSION_DENIED, "queryDriverInfo: no permission"); - return nullptr; - } - size_t argc = PARAM_COUNT_1; napi_value argv[PARAM_COUNT_1] = {nullptr}; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr)); @@ -702,7 +688,13 @@ static napi_value QueryDriverInfo(napi_env env, napi_callback_info info) } if (ret != UsbErrCode::EDM_OK) { - ThrowErr(env, SERVICE_EXCEPTION_NEW, "Query driver info service fail"); + if (ret == UsbErrCode::EDM_ERR_NOT_SYSTEM_APP) { + ThrowErr(env, PERMISSION_NOT_SYSTEM_APP, "queryDriverInfo: none system app"); + } else if (ret == UsbErrCode::EDM_ERR_NO_PERM) { + ThrowErr(env, PERMISSION_DENIED, "queryDriverInfo: no permission"); + } else { + ThrowErr(env, SERVICE_EXCEPTION_NEW, "Query driver info service fail"); + } return nullptr; } diff --git a/sa_profile/hdf_ext_devmgr.cfg b/sa_profile/hdf_ext_devmgr.cfg index 77f815fd9eea13e1ee96b09a92707278c62efcd4..a90f384473667c0a54e56b240c89593810fb06d5 100644 --- a/sa_profile/hdf_ext_devmgr.cfg +++ b/sa_profile/hdf_ext_devmgr.cfg @@ -26,7 +26,8 @@ "ohos.permission.ACCESS_CERT_MANAGER_INTERNAL", "ohos.permission.ACCESS_CERT_MANAGER", "ohos.permission.NETSYS_INTERNAL", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "ohos.permission.ACCESS_DDK_USB" ], "jobs" : { "on-start" : "services:hdf_ext_devmgr" diff --git a/services/BUILD.gn b/services/BUILD.gn index 92c02ea84ab3f933dc81ba6b4aff5b1fee2aa7e4..5916e6df7c64eb2ecc9f0bb807ab1ff014863906 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn @@ -29,6 +29,7 @@ ohos_shared_library("driver_extension_manager") { "${ext_mgr_path}/interfaces/innerkits/", "${ext_mgr_path}/services/zidl/include/", "${ext_mgr_path}/services/native/driver_extension_manager/include/drivers_pkg_manager", + "${ext_mgr_path}/services/native/driver_extension_manager/include/driver_permission", "${ext_mgr_path}/services/native/driver_extension_manager/include/device_manager", "${ext_mgr_path}/services/native/driver_extension_manager/include/bus_extension/core", "${ext_mgr_path}/services/native/driver_extension_manager/include/bus_extension/usb", @@ -40,6 +41,7 @@ ohos_shared_library("driver_extension_manager") { "${ext_mgr_path}/services/native/driver_extension_manager/src/device_manager:driver_extension_dev_callback", "${ext_mgr_path}/services/native/driver_extension_manager/src/device_manager:driver_extension_device_manager", "${ext_mgr_path}/services/native/driver_extension_manager/src/driver_controller:driver_extension_controller", + "${ext_mgr_path}/services/native/driver_extension_manager/src/driver_permission:driver_permission_manager", "${ext_mgr_path}/services/native/driver_extension_manager/src/drivers_pkg_manager:drivers_pkg_manager", ] external_deps = [ @@ -94,6 +96,7 @@ ohos_static_library("driver_extension_manager_test") { "${ext_mgr_path}/services/native/driver_extension_manager/src/device_manager:driver_extension_dev_callback", "${ext_mgr_path}/services/native/driver_extension_manager/src/device_manager:driver_extension_device_manager", "${ext_mgr_path}/services/native/driver_extension_manager/src/driver_controller:driver_extension_controller", + "${ext_mgr_path}/services/native/driver_extension_manager/src/driver_permission:driver_permission_manager", "${ext_mgr_path}/services/native/driver_extension_manager/src/drivers_pkg_manager:drivers_pkg_manager", ] external_deps = [ diff --git a/services/native/driver_extension_manager/include/driver_permission/ext_permission_manager.h b/services/native/driver_extension_manager/include/driver_permission/ext_permission_manager.h index 211d9164b8cf0afaa1166e5dace4abeec241ca52..3be847f6b3817f21ef2b1b2c23b51f8dd64a303e 100644 --- a/services/native/driver_extension_manager/include/driver_permission/ext_permission_manager.h +++ b/services/native/driver_extension_manager/include/driver_permission/ext_permission_manager.h @@ -13,48 +13,19 @@ * limitations under the License. */ -#ifndef DRIVER_PKG_MANAGER_H -#define DRIVER_PKG_MANAGER_H +#ifndef DRIVER_PERMISSION_MANAGER_H +#define DRIVER_PERMISSION_MANAGER_H #include -#include - -#include "bundle_info.h" -#include "bundle_mgr_proxy.h" -#include "single_instance.h" namespace OHOS { namespace ExternalDeviceManager { -using namespace std; -using namespace OHOS; -using namespace OHOS::AAFwk; -using namespace OHOS::AppExecFwk; -using namespace OHOS::ExternalDeviceManager; - -enum DDK_PERMISSION { - ERROR, - CHECK, - NOT_CHECK -}; - class ExtPermissionManager { - DECLARE_SINGLE_INSTANCE_BASE(ExtPermissionManager); - public: - bool HasPermission(std::string permissionName); + static bool VerifyPermission(std::string permissionName); static bool IsSystemApp(); - - ~ExtPermissionManager(); -private: - sptr bundleMgr_ = nullptr; - std::mutex bundleMgrMutex_; - DDK_PERMISSION NeedCheckPermission(); - sptr GetBundleMgrProxy(); - int32_t GetCurrentActiveUserId(); - ExtPermissionManager(); - std::map rightsMap_; }; } // namespace ExternalDeviceManager } // namespace OHOS -#endif // DRIVER_PKG_MANAGER_H \ No newline at end of file +#endif // DRIVER_PERMISSION_MANAGER_H \ No newline at end of file diff --git a/services/native/driver_extension_manager/src/driver_ext_mgr.cpp b/services/native/driver_extension_manager/src/driver_ext_mgr.cpp index eadf0b93b5d9befc821b7b9aea87a59d354d422c..2ec6750ea90ffe21c6f692b88aa7b8e7177a2cad 100644 --- a/services/native/driver_extension_manager/src/driver_ext_mgr.cpp +++ b/services/native/driver_extension_manager/src/driver_ext_mgr.cpp @@ -21,6 +21,7 @@ #include "driver_pkg_manager.h" #include "edm_errors.h" #include "etx_device_mgr.h" +#include "ext_permission_manager.h" #include "hilog_wrapper.h" #include "iservice_registry.h" #include "system_ability_definition.h" @@ -31,6 +32,7 @@ namespace OHOS { namespace ExternalDeviceManager { const bool G_REGISTER_RESULT = SystemAbility::MakeAndRegisterAbility(DelayedSingleton::GetInstance().get()); +static const std::string PERMISSION_NAME = "ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER"; DriverExtMgr::DriverExtMgr() : SystemAbility(HDF_EXTERNAL_DEVICE_MANAGER_SA_ID, true) {} DriverExtMgr::~DriverExtMgr() {} @@ -75,6 +77,11 @@ int DriverExtMgr::Dump(int fd, const std::vector &args) UsbErrCode DriverExtMgr::QueryDevice(uint32_t busType, std::vector> &devices) { + if (!ExtPermissionManager::VerifyPermission(PERMISSION_NAME)) { + EDM_LOGE(MODULE_DEV_MGR, "%{public}s no permission", __func__); + return UsbErrCode::EDM_ERR_NO_PERM; + } + if (busType == BusType::BUS_TYPE_INVALID) { EDM_LOGE(MODULE_DEV_MGR, "invalid busType:%{public}d", static_cast(busType)); return UsbErrCode::EDM_ERR_INVALID_PARAM; @@ -107,12 +114,22 @@ UsbErrCode DriverExtMgr::QueryDevice(uint32_t busType, std::vector &connectCallback) { EDM_LOGI(MODULE_DEV_MGR, "%{public}s enter", __func__); + if (!ExtPermissionManager::VerifyPermission(PERMISSION_NAME)) { + EDM_LOGE(MODULE_DEV_MGR, "%{public}s no permission", __func__); + return UsbErrCode::EDM_ERR_NO_PERM; + } + return static_cast(ExtDeviceManager::GetInstance().ConnectDevice(deviceId, connectCallback)); } UsbErrCode DriverExtMgr::UnBindDevice(uint64_t deviceId) { EDM_LOGD(MODULE_DEV_MGR, "%{public}s enter", __func__); + if (!ExtPermissionManager::VerifyPermission(PERMISSION_NAME)) { + EDM_LOGE(MODULE_DEV_MGR, "%{public}s no permission", __func__); + return UsbErrCode::EDM_ERR_NO_PERM; + } + return static_cast(ExtDeviceManager::GetInstance().DisConnectDevice(deviceId)); } @@ -206,6 +223,16 @@ UsbErrCode DriverExtMgr::QueryDeviceInfo(std::vector> devices; if (isByDeviceId) { devices = ExtDeviceManager::GetInstance().QueryDevicesById(deviceId); @@ -225,6 +252,16 @@ UsbErrCode DriverExtMgr::QueryDeviceInfo(std::vector> &driverInfos, bool isByDriverUid, const std::string &driverUid) { + if (!ExtPermissionManager::IsSystemApp()) { + EDM_LOGE(MODULE_DEV_MGR, "%{public}s none system app", __func__); + return UsbErrCode::EDM_ERR_NOT_SYSTEM_APP; + } + + if (!ExtPermissionManager::VerifyPermission(PERMISSION_NAME)) { + EDM_LOGE(MODULE_DEV_MGR, "%{public}s no permission", __func__); + return UsbErrCode::EDM_ERR_NO_PERM; + } + vector> tempDriverInfos; int32_t ret = DriverPkgManager::GetInstance().QueryDriverInfo(tempDriverInfos, isByDriverUid, driverUid); if (ret != UsbErrCode::EDM_OK) { diff --git a/services/native/driver_extension_manager/src/driver_permission/ext_permission_manager.cpp b/services/native/driver_extension_manager/src/driver_permission/ext_permission_manager.cpp index 829195e24a9b85b8ee2e4bbebaf2c8a71caa2143..8c54fda20351addff85c6edf151c817aeafebf9b 100644 --- a/services/native/driver_extension_manager/src/driver_permission/ext_permission_manager.cpp +++ b/services/native/driver_extension_manager/src/driver_permission/ext_permission_manager.cpp @@ -14,75 +14,24 @@ */ #include "ext_permission_manager.h" -#include "os_account_manager.h" +#include "accesstoken_kit.h" #include "hilog_wrapper.h" #include "ipc_skeleton.h" -#include "iservice_registry.h" -#include "accesstoken_kit.h" #include "tokenid_kit.h" -#include "system_ability_definition.h" namespace OHOS { namespace ExternalDeviceManager { -using namespace std; -using namespace OHOS; -using namespace OHOS::AAFwk; -using namespace OHOS::AppExecFwk; -using namespace OHOS::ExternalDeviceManager; using namespace OHOS::Security::AccessToken; -const uint32_t MIN_TARGET_VERSION = 10; - -IMPLEMENT_SINGLE_INSTANCE(ExtPermissionManager); - -ExtPermissionManager::ExtPermissionManager() -{ -}; - -ExtPermissionManager::~ExtPermissionManager() -{ -}; - -DDK_PERMISSION ExtPermissionManager::NeedCheckPermission() -{ - auto iBundleMgr = GetBundleMgrProxy(); - if (iBundleMgr == nullptr) { - EDM_LOGE(MODULE_DEV_MGR, "Can not get iBundleMgr"); - return DDK_PERMISSION::ERROR; - } - BundleInfo bundleInfo; - if (iBundleMgr->GetBundleInfoForSelf(BundleFlag::GET_BUNDLE_DEFAULT, bundleInfo) != ERR_OK) { - EDM_LOGE(MODULE_DEV_MGR, "GetBundleInfoForSelf err"); - return DDK_PERMISSION::ERROR; - } - EDM_LOGD(MODULE_DEV_MGR, "GetBundleInfo bundleInfo targetVersion:%{public}d", bundleInfo.targetVersion); - if (bundleInfo.targetVersion > MIN_TARGET_VERSION) { - return DDK_PERMISSION::CHECK; - } - return DDK_PERMISSION::NOT_CHECK; -} - -bool ExtPermissionManager::HasPermission(std::string permissionName) +bool ExtPermissionManager::VerifyPermission(std::string permissionName) { AccessTokenID callerToken = IPCSkeleton::GetCallingTokenID(); - std::string rightTag = std::to_string(callerToken) + "#" + permissionName; - if (rightsMap_.find(rightTag) != rightsMap_.end()) { - EDM_LOGI(MODULE_DEV_MGR, "find right from rightsMap isPass: %{public}d", rightsMap_[rightTag]); - return rightsMap_[rightTag]; - } - DDK_PERMISSION needCheck = NeedCheckPermission(); - bool ret = false; - if (needCheck != DDK_PERMISSION::CHECK) { - ret = (needCheck != DDK_PERMISSION::ERROR); - rightsMap_[rightTag] = ret; - return ret; - } - int result = AccessTokenKit::VerifyAccessToken(callerToken, permissionName); - - ret = (result == PERMISSION_GRANTED); - rightsMap_[rightTag] = ret; - return ret; + if (result == PERMISSION_GRANTED) { + EDM_LOGI(MODULE_DEV_MGR, "%{public}s VerifyAccessToken: %{public}d", __func__, result); + return true; + } + return false; } bool ExtPermissionManager::IsSystemApp() @@ -95,46 +44,5 @@ bool ExtPermissionManager::IsSystemApp() ATokenTypeEnum tokenType = AccessTokenKit::GetTokenTypeFlag(callerToken); return tokenType != ATokenTypeEnum::TOKEN_HAP; } - -sptr ExtPermissionManager::GetBundleMgrProxy() -{ - if (bundleMgr_ != nullptr) { - return bundleMgr_; - } - std::lock_guard lock(bundleMgrMutex_); - if (bundleMgr_ == nullptr) { - auto systemAbilityManager = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - if (systemAbilityManager == nullptr) { - EDM_LOGE(MODULE_PKG_MGR, "GetBundleMgr GetSystemAbilityManager is null"); - return nullptr; - } - auto bundleMgrSa = systemAbilityManager->GetSystemAbility(OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); - if (bundleMgrSa == nullptr) { - EDM_LOGE(MODULE_PKG_MGR, "GetBundleMgr GetSystemAbility is null"); - return nullptr; - } - auto bundleMgr = OHOS::iface_cast(bundleMgrSa); - if (bundleMgr == nullptr) { - EDM_LOGE(MODULE_PKG_MGR, "GetBundleMgr iface_cast get null"); - } - bundleMgr_ = bundleMgr; - } - return bundleMgr_; -} - -int32_t ExtPermissionManager::GetCurrentActiveUserId() -{ - std::vector activeIds; - int ret = AccountSA::OsAccountManager::QueryActiveOsAccountIds(activeIds); - if (ret != 0) { - EDM_LOGE(MODULE_PKG_MGR, "QueryActiveOsAccountIds failed ret:%{public}d", ret); - return Constants::INVALID_USERID; - } - if (activeIds.empty()) { - EDM_LOGE(MODULE_PKG_MGR, "QueryActiveOsAccountIds activeIds empty"); - return Constants::ALL_USERID; - } - return activeIds[0]; -} } // namespace ExternalDeviceManager } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/BUILD.gn b/test/unittest/BUILD.gn index 7738a5f752349de4127b59e6bb74d4c9da577401..09425265ed08e81ad67fa75b1f550322bc39b3a5 100644 --- a/test/unittest/BUILD.gn +++ b/test/unittest/BUILD.gn @@ -123,6 +123,9 @@ ohos_unittest("driver_extension_manager_client_test") { deps = [ "${ext_mgr_path}/interfaces/innerkits:driver_ext_mgr_client" ] external_deps = [ + "access_token:libaccesstoken_sdk", + "access_token:libnativetoken", + "access_token:libtoken_setproc", "c_utils:utils", "hilog:libhilog", "ipc:ipc_single", @@ -148,12 +151,12 @@ ohos_unittest("ddk_permission_test") { "${utils_path}/include/", ] - deps = [ - "${ext_mgr_path}/services/native/driver_extension_manager/src/driver_permission:driver_permission_manager", - "//third_party/googletest:gtest_main", - ] + deps = [ "//third_party/googletest:gtest_main" ] external_deps = [ + "access_token:libaccesstoken_sdk", + "access_token:libnativetoken", + "access_token:libtoken_setproc", "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", "c_utils:utils", diff --git a/test/unittest/ddk_permission_test/ddk_permission_test.cpp b/test/unittest/ddk_permission_test/ddk_permission_test.cpp index cd38e6680424cfb4a9a78d64b372c38346052233..0bf6a63b88d440b7eb631c3c19aba83d393d59be 100644 --- a/test/unittest/ddk_permission_test/ddk_permission_test.cpp +++ b/test/unittest/ddk_permission_test/ddk_permission_test.cpp @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSEDDK_ERR_NOPERM.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -14,195 +14,233 @@ */ #include +#include "accesstoken_kit.h" +#include "nativetoken_kit.h" +#include "token_setproc.h" #include "usb_config_desc_parser.h" #include "usb_ddk_api.h" #include "usb_ddk_types.h" using namespace testing::ext; +/** No permission */ +constexpr int32_t DDK_ERR_NOPERM = -19; + namespace { -bool g_state = false; -void GrantPermission(void) +class DdkNoPermissionTest : public testing::Test { +public: + void SetUp(); + void TearDown(); +}; + +void DdkNoPermissionTest::SetUp() { - g_state = true; } -void RevokePermission(void) + +void DdkNoPermissionTest::TearDown() { - g_state = false; } -class DdkPermissionTest : public testing::Test { -public: - void SetUp() override; - void TearDown() override; -}; -} // namespace +HWTEST_F(DdkNoPermissionTest, OH_Usb_Init_001, TestSize.Level1) +{ + int32_t ret = OH_Usb_Init(); + EXPECT_EQ(ret, DDK_ERR_NOPERM); +} -namespace OHOS { -namespace ExternalDeviceManager { -class ExtPermissionManager { - static ExtPermissionManager& GetInstance(); - bool HasPermission(std::string permissionName); -}; -ExtPermissionManager& ExtPermissionManager::GetInstance() +HWTEST_F(DdkNoPermissionTest, OH_Usb_GetDeviceDescriptor_001, TestSize.Level1) { - static auto instance = new ExtPermissionManager(); - return *instance; + struct UsbDeviceDescriptor desc; + int32_t ret = OH_Usb_GetDeviceDescriptor(0, &desc); + EXPECT_EQ(ret, DDK_ERR_NOPERM); } -// required permissions are not yet implemented, mock this method so that the tests may pass. -bool ExtPermissionManager::HasPermission(std::string permissionName) + +HWTEST_F(DdkNoPermissionTest, OH_Usb_GetConfigDescriptor_001, TestSize.Level1) { - return g_state; + struct UsbDdkConfigDescriptor *config = nullptr; + int32_t ret = OH_Usb_GetConfigDescriptor(0, 1, &config); + EXPECT_EQ(ret, DDK_ERR_NOPERM); } -} // namespace Security -} // namespace OHOS -void DdkPermissionTest::SetUp() +HWTEST_F(DdkNoPermissionTest, OH_Usb_ClaimInterface_001, TestSize.Level1) { - RevokePermission(); - int32_t ret = OH_Usb_Init(); - EXPECT_NE(ret, 0); - GrantPermission(); - ret = OH_Usb_Init(); - EXPECT_EQ(ret, 0); + uint64_t g_interfaceHandle = 0; + int32_t ret = OH_Usb_ClaimInterface(0, 0, &g_interfaceHandle); + EXPECT_EQ(ret, DDK_ERR_NOPERM); } -void DdkPermissionTest::TearDown() +HWTEST_F(DdkNoPermissionTest, OH_Usb_ReleaseInterface_001, TestSize.Level1) { - RevokePermission(); - OH_Usb_Release(); - GrantPermission(); - int32_t ret = OH_Usb_GetDeviceDescriptor(0, nullptr); - EXPECT_EQ(ret, USB_DDK_INVALID_PARAMETER); - OH_Usb_Release(); - ret = OH_Usb_GetDeviceDescriptor(0, nullptr); - EXPECT_EQ(ret, USB_DDK_INVALID_OPERATION); + int32_t ret = OH_Usb_ReleaseInterface(0); + EXPECT_EQ(ret, DDK_ERR_NOPERM); } -namespace { -HWTEST_F(DdkPermissionTest, OH_Usb_GetDeviceDescriptor_001, TestSize.Level1) +HWTEST_F(DdkNoPermissionTest, OH_Usb_SelectInterfaceSetting_001, TestSize.Level1) { - int32_t ret = OH_Usb_GetDeviceDescriptor(0, nullptr); - EXPECT_EQ(ret, USB_DDK_INVALID_PARAMETER); + int32_t ret = OH_Usb_SelectInterfaceSetting(0, 0); + EXPECT_EQ(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_GetDeviceDescriptor_002, TestSize.Level1) +HWTEST_F(DdkNoPermissionTest, OH_Usb_GetCurrentInterfaceSetting_001, TestSize.Level1) { - RevokePermission(); - int32_t ret = OH_Usb_GetDeviceDescriptor(0, nullptr); - EXPECT_EQ(ret, USB_DDK_FAILED); + uint8_t settingIndex = 0; + int32_t ret = OH_Usb_GetCurrentInterfaceSetting(0, &settingIndex); + EXPECT_EQ(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_GetConfigDescriptor_001, TestSize.Level1) +HWTEST_F(DdkNoPermissionTest, OH_Usb_SendControlReadRequest_001, TestSize.Level1) { - int32_t ret = OH_Usb_GetConfigDescriptor(0, 1, nullptr); - EXPECT_EQ(ret, USB_DDK_INVALID_PARAMETER); + struct UsbControlRequestSetup setup; + uint8_t strDesc[2] = {0}; + uint32_t len = 100; + int32_t ret = OH_Usb_SendControlReadRequest(0, &setup, 0, strDesc, &len); + EXPECT_EQ(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_GetConfigDescriptor_002, TestSize.Level1) +HWTEST_F(DdkNoPermissionTest, OH_Usb_SendControlWriteRequest_001, TestSize.Level1) { - RevokePermission(); - int32_t ret = OH_Usb_GetConfigDescriptor(0, 1, nullptr); - EXPECT_EQ(ret, USB_DDK_FAILED); + struct UsbControlRequestSetup strDescSetup; + uint8_t data[2] = {0x02, 0x02}; + int32_t ret = OH_Usb_SendControlWriteRequest(0, &strDescSetup, 0, data, 2); + EXPECT_EQ(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_ClaimInterface_001, TestSize.Level1) +HWTEST_F(DdkNoPermissionTest, OH_Usb_SendPipeRequest_001, TestSize.Level1) { - int32_t ret = OH_Usb_ClaimInterface(0, 0, nullptr); - EXPECT_EQ(ret, USB_DDK_INVALID_PARAMETER); + struct UsbRequestPipe pipe; + uint8_t address = 0; + struct UsbDeviceMemMap devMmap = {.address = &address}; + int32_t ret = OH_Usb_SendPipeRequest(&pipe, &devMmap); + EXPECT_EQ(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_ClaimInterface_002, TestSize.Level1) +HWTEST_F(DdkNoPermissionTest, OH_Usb_CreateDeviceMemMap_001, TestSize.Level1) { - RevokePermission(); - int32_t ret = OH_Usb_ClaimInterface(0, 0, nullptr); - EXPECT_EQ(ret, USB_DDK_FAILED); + UsbDeviceMemMap *devMmap = nullptr; + int32_t ret = OH_Usb_CreateDeviceMemMap(0, 100, &devMmap); + EXPECT_EQ(ret, DDK_ERR_NOPERM); } +} // namespace -HWTEST_F(DdkPermissionTest, OH_Usb_ReleaseInterface_001, TestSize.Level1) +namespace { +class DdkPermissionTest : public testing::Test { +public: + static void SetUpTestCase(void); + static void TearDownTestCase(void); + void SetUp(); + void TearDown(); +}; + +void GetNativeToken() { - RevokePermission(); - int32_t ret = OH_Usb_ReleaseInterface(1); - EXPECT_EQ(ret, USB_DDK_FAILED); + uint64_t tokenId; + const char **perms = new const char *[1]; + perms[0] = "ohos.permission.ACCESS_DDK_USB"; + + NativeTokenInfoParams infoInstance = { + .dcapsNum = 0, + .permsNum = 1, + .aclsNum = 0, + .dcaps = nullptr, + .perms = perms, + .acls = nullptr, + .aplStr = "system_core", + }; + + infoInstance.processName = "TestCase"; + tokenId = GetAccessTokenId(&infoInstance); + EXPECT_EQ(0, SetSelfTokenID(tokenId)); + OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); + delete[] perms; } -HWTEST_F(DdkPermissionTest, OH_Usb_SelectInterfaceSetting_001, TestSize.Level1) +void DdkPermissionTest::SetUpTestCase(void) +{ + GetNativeToken(); +} + +void DdkPermissionTest::TearDownTestCase(void) { OH_Usb_Release(); - int32_t ret = OH_Usb_SelectInterfaceSetting(0, 0); - EXPECT_EQ(ret, USB_DDK_INVALID_OPERATION); - OH_Usb_Init(); } -HWTEST_F(DdkPermissionTest, OH_Usb_SelectInterfaceSetting_002, TestSize.Level1) +void DdkPermissionTest::SetUp(void) { - RevokePermission(); - int32_t ret = OH_Usb_SelectInterfaceSetting(0, 0); - EXPECT_EQ(ret, USB_DDK_FAILED); } -HWTEST_F(DdkPermissionTest, OH_Usb_GetCurrentInterfaceSetting_001, TestSize.Level1) +void DdkPermissionTest::TearDown(void) { - int32_t ret = OH_Usb_GetCurrentInterfaceSetting(0, nullptr); - EXPECT_EQ(ret, USB_DDK_INVALID_PARAMETER); } -HWTEST_F(DdkPermissionTest, OH_Usb_GetCurrentInterfaceSetting_002, TestSize.Level1) +HWTEST_F(DdkPermissionTest, OH_Usb_Init_002, TestSize.Level1) { - RevokePermission(); - int32_t ret = OH_Usb_GetCurrentInterfaceSetting(0, nullptr); - EXPECT_EQ(ret, USB_DDK_FAILED); + int32_t ret = OH_Usb_Init(); + EXPECT_EQ(ret, 0); } -HWTEST_F(DdkPermissionTest, OH_Usb_SendControlReadRequest_001, TestSize.Level1) +HWTEST_F(DdkPermissionTest, OH_Usb_GetDeviceDescriptor_002, TestSize.Level1) { - int32_t ret = OH_Usb_SendControlReadRequest(0, nullptr, 0, nullptr, nullptr); - EXPECT_EQ(ret, USB_DDK_INVALID_PARAMETER); + struct UsbDeviceDescriptor desc; + int32_t ret = OH_Usb_GetDeviceDescriptor(0, &desc); + EXPECT_NE(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_SendControlReadRequest_002, TestSize.Level1) +HWTEST_F(DdkPermissionTest, OH_Usb_GetConfigDescriptor_002, TestSize.Level1) { - RevokePermission(); - int32_t ret = OH_Usb_SendControlReadRequest(0, nullptr, 0, nullptr, nullptr); - EXPECT_EQ(ret, USB_DDK_FAILED); + struct UsbDdkConfigDescriptor *config = nullptr; + int32_t ret = OH_Usb_GetConfigDescriptor(0, 1, &config); + EXPECT_NE(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_SendControlWriteRequest_001, TestSize.Level1) +HWTEST_F(DdkPermissionTest, OH_Usb_ClaimInterface_002, TestSize.Level1) { - int32_t ret = OH_Usb_SendControlWriteRequest(0, nullptr, 0, nullptr, 0); - EXPECT_EQ(ret, USB_DDK_INVALID_PARAMETER); + uint64_t g_interfaceHandle = 0; + int32_t ret = OH_Usb_ClaimInterface(0, 0, &g_interfaceHandle); + EXPECT_NE(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_SendControlWriteRequest_002, TestSize.Level1) +HWTEST_F(DdkPermissionTest, OH_Usb_SelectInterfaceSetting_002, TestSize.Level1) { - RevokePermission(); - int32_t ret = OH_Usb_SendControlWriteRequest(0, nullptr, 0, nullptr, 0); - EXPECT_EQ(ret, USB_DDK_FAILED); + int32_t ret = OH_Usb_SelectInterfaceSetting(0, 0); + EXPECT_NE(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_SendPipeRequest_001, TestSize.Level1) +HWTEST_F(DdkPermissionTest, OH_Usb_GetCurrentInterfaceSetting_002, TestSize.Level1) { - int32_t ret = OH_Usb_SendPipeRequest(nullptr, nullptr); - EXPECT_EQ(ret, USB_DDK_INVALID_PARAMETER); + uint8_t settingIndex = 0; + int32_t ret = OH_Usb_GetCurrentInterfaceSetting(0, &settingIndex); + EXPECT_NE(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_SendPipeRequest_002, TestSize.Level1) +HWTEST_F(DdkPermissionTest, OH_Usb_SendControlReadRequest_002, TestSize.Level1) +{ + struct UsbControlRequestSetup setup; + uint8_t strDesc[2] = {0}; + uint32_t len = 100; + int32_t ret = OH_Usb_SendControlReadRequest(0, &setup, 0, strDesc, &len); + EXPECT_NE(ret, DDK_ERR_NOPERM); +} + +HWTEST_F(DdkPermissionTest, OH_Usb_SendControlWriteRequest_002, TestSize.Level1) { - RevokePermission(); - int32_t ret = OH_Usb_SendPipeRequest(nullptr, nullptr); - EXPECT_EQ(ret, USB_DDK_FAILED); + struct UsbControlRequestSetup strDescSetup; + uint8_t data[2] = {0x02, 0x02}; + int32_t ret = OH_Usb_SendControlWriteRequest(0, &strDescSetup, 0, data, 2); + EXPECT_NE(ret, DDK_ERR_NOPERM); } -HWTEST_F(DdkPermissionTest, OH_Usb_CreateDeviceMemMap_001, TestSize.Level1) +HWTEST_F(DdkPermissionTest, OH_Usb_SendPipeRequest_002, TestSize.Level1) { - int32_t ret = OH_Usb_CreateDeviceMemMap(0, 100, nullptr); - EXPECT_EQ(ret, USB_DDK_INVALID_PARAMETER); + struct UsbRequestPipe pipe; + uint8_t address = 0; + struct UsbDeviceMemMap devMmap = {.address = &address}; + int32_t ret = OH_Usb_SendPipeRequest(&pipe, &devMmap); + EXPECT_NE(ret, DDK_ERR_NOPERM); } HWTEST_F(DdkPermissionTest, OH_Usb_CreateDeviceMemMap_002, TestSize.Level1) { - RevokePermission(); - int32_t ret = OH_Usb_CreateDeviceMemMap(0, 100, nullptr); - EXPECT_EQ(ret, USB_DDK_FAILED); + UsbDeviceMemMap *devMmap = nullptr; + int32_t ret = OH_Usb_CreateDeviceMemMap(0, 100, &devMmap); + EXPECT_NE(ret, DDK_ERR_NOPERM); } } // namespace \ No newline at end of file diff --git a/test/unittest/driver_extension_manager_client_test/driver_extension_manager_client_test.cpp b/test/unittest/driver_extension_manager_client_test/driver_extension_manager_client_test.cpp index 06055fadffbcc23521e8bc007645efbd15f1bff9..5219872d35e7854d4c7ce1a6de02257eae4668b3 100644 --- a/test/unittest/driver_extension_manager_client_test/driver_extension_manager_client_test.cpp +++ b/test/unittest/driver_extension_manager_client_test/driver_extension_manager_client_test.cpp @@ -18,6 +18,9 @@ #include #include #include +#include "accesstoken_kit.h" +#include "nativetoken_kit.h" +#include "token_setproc.h" #include "driver_ext_mgr_callback_stub.h" #include "driver_ext_mgr_client.h" #include "edm_errors.h" @@ -58,8 +61,32 @@ static sptr g_saObject = nullptr; static constexpr int32_t ERROR_CODE_WITH_INVALID_CODE = 305; static constexpr uint64_t START_SA_SERVICE_WAIT_TIME = 3; +void GetNativeToken() +{ + uint64_t tokenId; + const char **perms = new const char *[1]; + perms[0] = "ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER"; + + NativeTokenInfoParams infoInstance = { + .dcapsNum = 0, + .permsNum = 1, + .aclsNum = 0, + .dcaps = nullptr, + .perms = perms, + .acls = nullptr, + .aplStr = "system_core", + }; + + infoInstance.processName = "TestCase"; + tokenId = GetAccessTokenId(&infoInstance); + EXPECT_EQ(0, SetSelfTokenID(tokenId)); + OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); + delete[] perms; +} + void DrvExtMgrClientTest::SetUpTestCase() { + GetNativeToken(); sptr samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (samgr == nullptr) { EDM_LOGE(EDM_MODULE_TEST, "%{public}s get samgr failed", __func__); diff --git a/test/unittest/ndk_stage_js_test/entry/src/main/module.json b/test/unittest/ndk_stage_js_test/entry/src/main/module.json index c6ac9c02aa8d5bf2bde294e7a31021d00e19141a..47e46cbaf192ebcba36f17d437f19a0483e8ef46 100644 --- a/test/unittest/ndk_stage_js_test/entry/src/main/module.json +++ b/test/unittest/ndk_stage_js_test/entry/src/main/module.json @@ -54,7 +54,17 @@ } }, { - "name": "ohos.permission.ACCESS_DDK_USB,ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER", + "name": "ohos.permission.ACCESS_DDK_USB", + "reason": "$string:reason_hid_ddk", + "usedScene": { + "abilities": [ + "EntryAbility" + ], + "when": "inuse" + } + }, + { + "name": "ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER", "reason": "$string:reason_usb_ddk", "usedScene": { "abilities": [ diff --git a/utils/include/edm_errors.h b/utils/include/edm_errors.h index 592b1d468159e3a147d40e95056302970291d797..5c45f5cc5691740458d8e9957bfdbe482399f1c3 100644 --- a/utils/include/edm_errors.h +++ b/utils/include/edm_errors.h @@ -42,6 +42,7 @@ enum UsbErrCode : int32_t { EDM_ERR_JSON_PARSE_FAIL, EDM_ERR_JSON_OBJ_ERR, EDM_ERR_USB_ERR, + EDM_ERR_NOT_SYSTEM_APP, }; } // namespace ExternalDeviceManager } // namespace OHOS