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; }