diff --git a/services/remote_connect/dynamic/src/device_manager_util.cpp b/services/remote_connect/dynamic/src/device_manager_util.cpp index 3ed71d44fd124d5e800c3b9fec79da999c706e11..d0d26efbf78d41c2bcf04fb2b05780b2158009cc 100644 --- a/services/remote_connect/dynamic/src/device_manager_util.cpp +++ b/services/remote_connect/dynamic/src/device_manager_util.cpp @@ -17,6 +17,8 @@ #include "iam_logger.h" #include "parameter.h" +#include +#include #define LOG_TAG "USER_AUTH_SA" @@ -41,12 +43,27 @@ bool DeviceManagerUtil::GetNetworkIdByUdid(const std::string &udid, std::string return false; } +#define RTLD_LAZY 1 +using PAclGetDevUdid = int (*)(char *, int); bool DeviceManagerUtil::GetLocalDeviceUdid(std::string &udid) { - constexpr int UDID_LENGTH = 65; + static const char *BEGET_PROXY_LIB = "libbeget_proxy.z.so"; + constexpr int UDID_LENGTH = 64; char udidDevice[UDID_LENGTH] = {0}; - int udidRes = AclGetDevUdid(udidDevice, UDID_LENGTH); - if (udidRes == 0 && strlen(udidDevice) == UDID_LENGTH - 1) { + void *handle = dlopen(BEGET_PROXY_LIB, RTLD_LAZY); + if (handle == nullptr) { + IAM_LOGI("load begetlib failed %{public}s", dlerror()); + return false; + } + PAclGetDevUdid fun = (PAclGetDevUdid)dlsym(handle, "AclGetDevUdid"); + if (fun == nullptr) { + IAM_LOGE("get symbol failed %{public}s", dlerror()); + dlclose(handle); + return false; + } + int udidRes = fun(udidDevice, UDID_LENGTH + 1); + dlclose(handle); + if (udidRes == 0 && strlen(udidDevice) == UDID_LENGTH) { IAM_LOGI("GetDeviceUdid udidRes == 0"); std::string udidString(udidDevice, strlen(udidDevice)); udid = udidString;