Fix cryptographic card login process

pull/2/head
Timothy Pearson 9 years ago
parent 48cf3058c5
commit 37b6d0d80f

@ -546,9 +546,24 @@ void PasswordDlg::handleVerify()
// Reset password entry and change text
greet->start();
greet->textPrompt( arr, false, false );
// Force relayout
setFixedSize( sizeHint().width(), sizeHint().height() + 1 );
setFixedSize( sizeHint() );
// Check if cryptographic card login is being used
if (mCardLoginInProgress) {
// Attempt authentication if configured
TDECryptographicCardDevice* cdevice = static_cast<LockProcess*>(parent())->cryptographicCardDevice();
if (cdevice) {
TQString autoPIN = cdevice->autoPIN();
if (autoPIN != TQString::null) {
greet->setPassword(autoPIN);
TQTimer::singleShot(0, this, SLOT(slotOK()));
}
}
mCardLoginInProgress = false;
}
}
else {
greet->textPrompt( arr, false, false );
@ -971,21 +986,17 @@ void PasswordDlg::attemptCardLogin() {
setFixedSize(sizeHint().width(), sizeHint().height() + 1);
setFixedSize(sizeHint());
// Attempt authentication if configured
TDECryptographicCardDevice* cdevice = static_cast<LockProcess*>(parent())->cryptographicCardDevice();
if (cdevice) {
TQString autoPIN = cdevice->autoPIN();
if (autoPIN != TQString::null) {
greet->start();
greet->setPassword(autoPIN);
TQTimer::singleShot(0, this, SLOT(slotOK()));
}
}
// Bypass initial password prompt
greet->start();
greet->setPassword("");
TQTimer::singleShot(0, this, SLOT(slotOK()));
}
void PasswordDlg::resetCardLogin() {
validUserCardInserted = false;
greet->abort();
greet->clear();
greet->revive();
greet->start();
greet->setPasswordPrompt(TQString::null);

@ -869,6 +869,12 @@ void KGreeter::cryptographicCardInserted(TDECryptographicCardDevice* cdevice) {
}
if (login_name != "") {
if (verify->cardLoginInProgress) {
return;
}
verify->cardLoginInProgress = true;
verify->cardLoginDevice = cdevice;
DM dm;
SessList sess;
bool vt_active = false;
@ -903,12 +909,10 @@ void KGreeter::cryptographicCardInserted(TDECryptographicCardDevice* cdevice) {
cardLoginUser = login_name;
verify->setPasswordPrompt(i18n("PIN:"));
TQString autoPIN = cdevice->autoPIN();
if (autoPIN != TQString::null) {
// Initiate login
verify->setPassword(autoPIN);
verify->accept();
}
// Bypass initial password prompt
verify->start();
verify->setPassword("");
verify->accept();
}
}
}
@ -921,6 +925,9 @@ void KGreeter::cryptographicCardRemoved(TDECryptographicCardDevice* cdevice) {
// Restore information message display settings
verify->setInfoMessageDisplay(showInfoMessages);
verify->cardLoginInProgress = false;
verify->cardLoginDevice = NULL;
}
KStdGreeter::KStdGreeter()

@ -32,6 +32,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "themer/tdmitem.h"
#include "themer/tdmlabel.h"
#include <ksslcertificate.h>
#include <tdehardwaredevices.h>
#include <tdecryptographiccarddevice.h>
#include <tdeapplication.h>
#include <tdelocale.h>
#include <klibloader.h>
@ -93,6 +98,8 @@ KGVerify::KGVerify(KGVerifyHandler *_handler, KdmThemer *_themer,
, isClear(true)
, inGreeterPlugin(false)
, abortRequested(false)
, cardLoginInProgress(false)
, cardLoginDevice(NULL)
{
connect( &timer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()) );
connect( kapp, TQT_SIGNAL(activity()), TQT_SLOT(slotActivity()) );
@ -654,6 +661,16 @@ KGVerify::handleVerify()
inGreeterPlugin = true;
greet->textPrompt(msg, echo, ndelay);
inGreeterPlugin = !ndelay;
if (cardLoginInProgress) {
TQString autoPIN = cardLoginDevice->autoPIN();
if (autoPIN != TQString::null) {
// Initiate login
setPassword(autoPIN);
accept();
}
cardLoginInProgress = false;
}
}
else {
inGreeterPlugin = true;

@ -77,6 +77,7 @@ class TQPopupMenu;
class TQTimer;
class KPushButton;
class KLibrary;
class TDECryptographicCardDevice;
struct GreeterPluginHandle {
KLibrary *library;
@ -180,6 +181,9 @@ class KGVerify : public TQObject, public KGreeterPluginHandler {
virtual void gplugMsgBox( TQMessageBox::Icon type, const TQString &text );
static TQVariant getConf( void *ctx, const char *key, const TQVariant &dflt );
bool cardLoginInProgress;
TDECryptographicCardDevice* cardLoginDevice;
};
class KGStdVerify : public KGVerify {

@ -307,7 +307,7 @@ KClassicGreeter::textMessage( const char *text, bool err )
return true;
}
if ((!err && ((TQString(text).lower().find("smartcard") >= 0) || (TQString(text).lower().find("smart card") >= 0)))
||(err && (TQString(text).lower().find(" 2306:") >= 0))) {
|| (err && (TQString(text).lower().find(" 2306:") >= 0)) || (err && (TQString(text).lower().find("PKINIT") >= 0))) {
// FIXME
// pam_pkcs11 is extremely chatty, even with no card inserted,
// and there is no apparent way to disable the unwanted messages!

Loading…
Cancel
Save