Group :: Graphical desktop/KDE
RPM: sddm
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: alt-fix-unable-handle-request.patch
Download
Download
diff --git a/src/helper/backend/PamBackend.cpp b/src/helper/backend/PamBackend.cpp
index c7e48cd..f8bbcdc 100644
--- a/src/helper/backend/PamBackend.cpp
+++ b/src/helper/backend/PamBackend.cpp
@@ -32,20 +32,27 @@
namespace SDDM {
static Request loginRequest {
{ { AuthPrompt::LOGIN_USER, QStringLiteral("login:"), false },
- { AuthPrompt::LOGIN_PASSWORD, QStringLiteral("Password: "), true }
+ { AuthPrompt::LOGIN_PASSWORD, QStringLiteral("Password: "), true },
+ { AuthPrompt::LOGIN_USER, QStringLiteral("учетная запись:"), false },
+ { AuthPrompt::LOGIN_PASSWORD, QStringLiteral("Пароль: "), true }
}
};
static Request changePassRequest {
{ { AuthPrompt::CHANGE_CURRENT, QStringLiteral("(current) UNIX password: "), true },
{ AuthPrompt::CHANGE_NEW, QStringLiteral("New password: "), true },
- { AuthPrompt::CHANGE_REPEAT, QStringLiteral("Retype new password: "), true }
+ { AuthPrompt::CHANGE_REPEAT, QStringLiteral("Retype new password: "), true },
+ { AuthPrompt::CHANGE_CURRENT, QStringLiteral("(текущий) пароль UNIX: "), true },
+ { AuthPrompt::CHANGE_NEW, QStringLiteral("Новый пароль: "), true },
+ { AuthPrompt::CHANGE_REPEAT, QStringLiteral("Повторите ввод пароля: "), true }
}
};
static Request changePassNoOldRequest {
{ { AuthPrompt::CHANGE_NEW, QStringLiteral("New password: "), true },
- { AuthPrompt::CHANGE_REPEAT, QStringLiteral("Retype new password: "), true }
+ { AuthPrompt::CHANGE_REPEAT, QStringLiteral("Retype new password: "), true },
+ { AuthPrompt::CHANGE_NEW, QStringLiteral("Новый пароль: "), true },
+ { AuthPrompt::CHANGE_REPEAT, QStringLiteral("Повторите ввод пароля: "), true }
}
};
@@ -58,14 +65,16 @@ namespace SDDM {
AuthPrompt::Type PamData::detectPrompt(const struct pam_message* msg) const {
if (msg->msg_style == PAM_PROMPT_ECHO_OFF) {
QString message = QString::fromLocal8Bit(msg->msg);
- if (message.indexOf(QRegExp(QStringLiteral("\\bpassword\\b"), Qt::CaseInsensitive)) >= 0) {
- if (message.indexOf(QRegExp(QStringLiteral("\\b(re-?(enter|type)|again|confirm|repeat)\\b"), Qt::CaseInsensitive)) >= 0) {
+
+ //FIXME: avoid hardcoded PAM messages parsing
+ if (message.indexOf(QRegExp(QStringLiteral("\\bpassword\\b"), Qt::CaseInsensitive)) >= 0 || message.indexOf(QRegExp(QStringLiteral("\\b(пароль|пароля)\\b"), Qt::CaseInsensitive)) >= 0) {
+ if (message.indexOf(QRegExp(QStringLiteral("\\b(re-?(enter|type)|again|confirm|repeat)\\b"), Qt::CaseInsensitive)) >= 0 || message.indexOf(QRegExp(QStringLiteral("\\bповторите\\b"), Qt::CaseInsensitive)) >= 0) {
return AuthPrompt::CHANGE_REPEAT;
}
- else if (message.indexOf(QRegExp(QStringLiteral("\\bnew\\b"), Qt::CaseInsensitive)) >= 0) {
+ else if (message.indexOf(QRegExp(QStringLiteral("\\bnew\\b"), Qt::CaseInsensitive)) >= 0 || message.indexOf(QRegExp(QStringLiteral("\\bновый\\b"), Qt::CaseInsensitive)) >= 0) {
return AuthPrompt::CHANGE_NEW;
}
- else if (message.indexOf(QRegExp(QStringLiteral("\\b(old|current)\\b"), Qt::CaseInsensitive)) >= 0) {
+ else if (message.indexOf(QRegExp(QStringLiteral("\\b(old|current)\\b"), Qt::CaseInsensitive)) >= 0 || message.indexOf(QRegExp(QStringLiteral("\\b(текущий|старый)\\b"), Qt::CaseInsensitive)) >= 0) {
return AuthPrompt::CHANGE_CURRENT;
}
else {
@@ -162,7 +171,7 @@ namespace SDDM {
* just fires one signal for all info types). Just builds new request for "changing" keyword.
*/
Auth::Info PamData::handleInfo(const struct pam_message* msg, bool &newRequest, bool predict) {
- if (QString::fromLocal8Bit(msg->msg).indexOf(QRegExp(QStringLiteral("^Changing password for [^ ]+$"))) >= 0)
+ if (QString::fromLocal8Bit(msg->msg).indexOf(QRegExp(QStringLiteral("^Changing password for [^ ]+$"))) >= 0 || QString::fromLocal8Bit(msg->msg).indexOf(QRegExp(QStringLiteral("^Смена пароля для [^ ]+$"))) >= 0)
{
if (predict) {
m_currentRequest = Request(changePassRequest);
@@ -181,7 +190,7 @@ namespace SDDM {
*/
Auth::Error PamData::handleErr(const struct pam_message* msg, bool &newRequest, bool predict) {
// bad password during password renewal (for expired password)
- if (QString::fromLocal8Bit(msg->msg).startsWith(QStringLiteral("BAD PASSWORD:")))
+ if (QString::fromLocal8Bit(msg->msg).startsWith(QStringLiteral("BAD PASSWORD:")) || QString::fromLocal8Bit(msg->msg).startsWith(QStringLiteral("НЕУДАЧНЫЙ ПАРОЛЬ:")))
{
if (predict)
{
@@ -193,7 +202,7 @@ namespace SDDM {
return Auth::ERROR_NONE;
}
- if(QString::fromLocal8Bit(msg->msg).startsWith(QStringLiteral("Password change aborted."))) {
+ if(QString::fromLocal8Bit(msg->msg).startsWith(QStringLiteral("Password change aborted.")) || QString::fromLocal8Bit(msg->msg).startsWith(QStringLiteral("Изменение пароля отменено."))) {
return Auth::ERROR_AUTHENTICATION;
}