From 41eac7028c9406f8d549c7bc4ec0599a443235eb Mon Sep 17 00:00:00 2001 From: niko_yhc Date: Mon, 11 Sep 2023 09:54:27 +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 (cherry picked from commit 015965560adc704d5ea171f3252c60b3e9eee9db) --- ...tication-service-fix-for-versions-ea.patch | 204 ++++++++++++++++++ kiran-authentication-service.spec | 7 +- 2 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 0012-fix-kiran-authentication-service-fix-for-versions-ea.patch diff --git a/0012-fix-kiran-authentication-service-fix-for-versions-ea.patch b/0012-fix-kiran-authentication-service-fix-for-versions-ea.patch new file mode 100644 index 0000000..fc3db2d --- /dev/null +++ b/0012-fix-kiran-authentication-service-fix-for-versions-ea.patch @@ -0,0 +1,204 @@ +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) +-- +2.27.0 + diff --git a/kiran-authentication-service.spec b/kiran-authentication-service.spec index b2bc779..a0f4c56 100644 --- a/kiran-authentication-service.spec +++ b/kiran-authentication-service.spec @@ -1,6 +1,6 @@ Name: kiran-authentication-service Version: 2.5.1 -Release: 6 +Release: 7 Summary: Kiran Desktop kiran authentication service License: MulanPSL-2.0 URL: http://www.kylinsec.com.cn @@ -18,6 +18,8 @@ Patch0008: 0008-fix-default-device-Update-the-logic-of-the-default-a.patch Patch0009: 0009-fix-multi-factor-multi-factor-no-jump-login.patch Patch0010: 0010-fix-multi-channel-auth-If-the-authentication-fails-t.patch Patch0011: 0011-feat-auth-error-Subdivide-the-cause-of-the-error-and.patch +Patch0012: 0012-fix-kiran-authentication-service-fix-for-versions-ea.patch + BuildRequires: systemd BuildRequires: systemd-devel @@ -93,6 +95,9 @@ systemctl enable kiran-authentication-daemon.service %{_includedir}/kiran-authentication-service/kas-authentication-i.h %changelog +* Mon Sep 11 2023 yinhongchang - 2.5.1-7 +- KYOS-F: fix for versions earlier than qt5.10 in kiranUI-2.5(#15019) + * Thu Jun 15 2023 liuxinhao - 2.5.1-6 - KYOS-B: Subdivide the cause of the error and determine whether to record the error according to the cause and mode(#I7DCKL) -- Gitee