From 3b847f53c73bf1695a9fe81420c7faa480fa3357 Mon Sep 17 00:00:00 2001 From: niko_yhc Date: Mon, 11 Sep 2023 08:50:19 +0800 Subject: [PATCH] fix(kiran-authentication-service):fix for versions earlier than qt5.10 in kiranUI-2.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在kiranUI-2.5中适配qt5.10以下的版本 Closes:#15019 --- CMakeLists.txt | 6 +++++- src/daemon/auth-manager.cpp | 5 +++++ src/daemon/auth-manager.h | 4 ++++ src/daemon/device/device-adaptor-factory.cpp | 10 +++++----- src/daemon/device/device-adaptor.cpp | 12 ++++++------ src/pam/authentication-graphical.cpp | 20 ++++++++++++++++++++ 6 files changed, 45 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 22e5ac2..a77f4b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,11 @@ find_package(Qt5 COMPONENTS Core DBus LinguistTools) pkg_search_module(KLOG_QT5 REQUIRED klog-qt5) pkg_search_module(SYSTEMD REQUIRED systemd) pkg_search_module(KIRAN_CC_DAEMON REQUIRED kiran-cc-daemon) -pkg_search_module(PAM REQUIRED pam) +pkg_search_module(PAM QUIET pam) +if(NOT DEFINED ${PAM_FOUND}) + set(PAM_INCLUDE_DIRS /usr/include/security) + set(PAM_LIBRARIES pam) +endif() pkg_search_module(LIBSYSTEMD REQUIRED libsystemd) configure_file(config.h.in ${PROJECT_BINARY_DIR}/config.h) diff --git a/src/daemon/auth-manager.cpp b/src/daemon/auth-manager.cpp index 3d7aaf0..a030897 100644 --- a/src/daemon/auth-manager.cpp +++ b/src/daemon/auth-manager.cpp @@ -276,7 +276,12 @@ int32_t AuthManager::generateSessionID() // 最多生成10次,超过次数则返回失败 for (int i = 0; i <= 10; ++i) { +#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) auto sessionID = this->m_randomGenerator.bounded(1, MAX_SESSION_ID); +#else + qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime())); + auto sessionID = qrand() % MAX_SESSION_ID + 1; +#endif auto session = this->m_sessions.value(sessionID, nullptr); // KLOG_DEBUG() << "session: " << session << ", sessionID: " << sessionID; RETURN_VAL_IF_TRUE(session == nullptr, sessionID); diff --git a/src/daemon/auth-manager.h b/src/daemon/auth-manager.h index e707e0b..b6f2446 100644 --- a/src/daemon/auth-manager.h +++ b/src/daemon/auth-manager.h @@ -16,7 +16,9 @@ #include #include #include +#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) #include +#endif #include "kas-authentication-i.h" class AuthManagerAdaptor; @@ -118,7 +120,9 @@ private: // <会话ID,会话> QMap m_sessions; +#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) QRandomGenerator m_randomGenerator; +#endif QDBusServiceWatcher *m_serviceWatcher; }; diff --git a/src/daemon/device/device-adaptor-factory.cpp b/src/daemon/device/device-adaptor-factory.cpp index 531e0d9..590214c 100644 --- a/src/daemon/device/device-adaptor-factory.cpp +++ b/src/daemon/device/device-adaptor-factory.cpp @@ -206,8 +206,8 @@ void DeviceAdaptorFactory::onAuthDeviceManagerLost(const QString &service) // 设备管理服务消失,认证设备无效,应清理所有无效的设备及其请求 for (auto iter = m_devices.begin(); iter != m_devices.end();) { - KLOG_DEBUG() << "auth device manager lost,remove device:" << iter->get()->getDeviceID(); - iter->get()->removeAllRequest(); + KLOG_DEBUG() << "auth device manager lost,remove device:" << iter.value().data()->getDeviceID(); + iter.value().data()->removeAllRequest(); iter = m_devices.erase(iter); } } @@ -217,10 +217,10 @@ void DeviceAdaptorFactory::onDeviceDeleted(int deviceType, const QString &device // 认证设备拔出,认证设备变成无效,清理该设备下请求,从缓存中删除该设备 for (auto iter = m_devices.begin(); iter != m_devices.end(); iter++) { - if (iter->get()->getDeviceID() == deviceID) + if (iter.value().data()->getDeviceID() == deviceID) { - KLOG_DEBUG() << "auth device deleted,remove device:" << iter->get()->getDeviceID(); - iter->get()->removeAllRequest(); + KLOG_DEBUG() << "auth device deleted,remove device:" << iter.value().data()->getDeviceID(); + iter.value().data()->removeAllRequest(); m_devices.erase(iter); break; } diff --git a/src/daemon/device/device-adaptor.cpp b/src/daemon/device/device-adaptor.cpp index 369554d..cef646f 100644 --- a/src/daemon/device/device-adaptor.cpp +++ b/src/daemon/device/device-adaptor.cpp @@ -41,7 +41,7 @@ DeviceAdaptor::DeviceAdaptor(QSharedPointer dbusDeviceProxy) connect(&m_deviceOccupyTimer,&QTimer::timeout,this,&DeviceAdaptor::onDeviceOccupyTimeout); auto defaultSeat = Login1SeatProxy::getDefault(); - connect(defaultSeat.get(), SIGNAL(activeSessionChanged(const Login1SessionItem &)), this, SLOT(onActiveSessionChanged(const Login1SessionItem &))); + connect(defaultSeat.data(), SIGNAL(activeSessionChanged(const Login1SessionItem &)), this, SLOT(onActiveSessionChanged(const Login1SessionItem &))); this->updateDBusDeviceProxy(dbusDeviceProxy); } @@ -76,8 +76,8 @@ void DeviceAdaptor::removeAllRequest() // 清空/结束所有认证,不再参与调度 for (auto iter = this->m_requests.begin(); iter != this->m_requests.end();) { - iter->get()->source->cancel(); - iter->get()->source->end(); + iter.value().data()->source->cancel(); + iter.value().data()->source->end(); iter = this->m_requests.erase(iter); } } @@ -107,8 +107,8 @@ void DeviceAdaptor::updateDBusDeviceProxy(QSharedPointer dbusDe this->interruptRequest(); - connect(this->m_dbusDeviceProxy.get(), &AuthDeviceProxy::EnrollStatus, this, &DeviceAdaptor::onEnrollStatus); - connect(this->m_dbusDeviceProxy.get(), &AuthDeviceProxy::IdentifyStatus, this, &DeviceAdaptor::onIdentifyStatus); + connect(this->m_dbusDeviceProxy.data(), &AuthDeviceProxy::EnrollStatus, this, &DeviceAdaptor::onEnrollStatus); + connect(this->m_dbusDeviceProxy.data(), &AuthDeviceProxy::IdentifyStatus, this, &DeviceAdaptor::onIdentifyStatus); DEVICE_DEBUG() << "update auth device finished"; this->schedule(); @@ -134,7 +134,7 @@ void DeviceAdaptor::wakeRequest(QSharedPointer request) { RETURN_IF_FALSE(request); // 请求未变化,直接返回 - RETURN_IF_TRUE(this->m_currentRequest && this->m_currentRequest.get() == request.get()); + RETURN_IF_TRUE(this->m_currentRequest && this->m_currentRequest.data() == request.data()); // 中断当前的请求 this->interruptRequest(); diff --git a/src/pam/authentication-graphical.cpp b/src/pam/authentication-graphical.cpp index 2f104ac..4a31b77 100644 --- a/src/pam/authentication-graphical.cpp +++ b/src/pam/authentication-graphical.cpp @@ -52,12 +52,22 @@ bool AuthenticationGraphical::requestLoginUserSwitchable() // 请求失败的情况下使用默认值 if (retval != PAM_SUCCESS) { +#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) auto errorMsg = jsonReqDoc[KAP_PJK_KEY_HEAD][KAP_PJK_KEY_ERROR].toString(); +#else + QJsonValue val = jsonReqDoc.object()[KAP_PJK_KEY_HEAD]; + auto errorMsg = val.toObject()[KAP_PJK_KEY_ERROR].toString(); +#endif this->m_pamHandle->syslog(LOG_WARNING, QString("Request login user switchable failed: %1").arg(errorMsg)); return false; } +#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) return jsonRspDoc[KAP_PJK_KEY_BODY][KAP_PJK_KEY_LOGIN_USER_SWITCHABLE].toBool(); +#else + QJsonValue val = jsonRspDoc.object()[KAP_PJK_KEY_BODY]; + return val.toObject()[KAP_PJK_KEY_LOGIN_USER_SWITCHABLE].toBool(); +#endif } void AuthenticationGraphical::notifySupportAuthType() @@ -90,11 +100,21 @@ int32_t AuthenticationGraphical::requestAuthType() // 请求失败的情况下使用默认认证类型 if (retval != PAM_SUCCESS) { +#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) auto errorMsg = jsonReqDoc[KAP_PJK_KEY_HEAD][KAP_PJK_KEY_ERROR].toString(); +#else + QJsonValue val = jsonReqDoc.object()[KAP_PJK_KEY_HEAD]; + auto errorMsg = val.toObject()[KAP_PJK_KEY_ERROR].toString(); +#endif this->m_pamHandle->syslog(LOG_WARNING, QString("Request auth type failed: %1").arg(errorMsg)); return KADAuthType::KAD_AUTH_TYPE_NONE; } +#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) return jsonRspDoc[KAP_PJK_KEY_BODY][KAP_PJK_KEY_AUTH_TYPE].toInt(); +#else + QJsonValue val = jsonRspDoc.object()[KAP_PJK_KEY_BODY]; + return val.toObject()[KAP_PJK_KEY_AUTH_TYPE].toInt(); +#endif } void AuthenticationGraphical::notifyAuthType(int authType) -- Gitee