9ea67803 | 2015-09-18 15:54:06 | Timothy Pearson |
Stabilize cryptographic card login Fix some coding style issues |
||
M kdesktop/lock/lockdlg.cc M kdesktop/lock/lockdlg.h M kdesktop/lockeng.cc M kdesktop/lockeng.h M tdm/backend/dpylist.c M tdm/backend/server.c M tdm/backend/util.c M tdm/kfrontend/kgapp.cpp M tdm/kfrontend/kgreeter.cpp M tdm/kfrontend/kgreeter.h M tdm/kfrontend/kgverify.cpp M tdm/kfrontend/kgverify.h M tdmlib/dmctl.h M tdmlib/kgreet_classic.cpp M tdmlib/kgreet_classic.h M tdmlib/kgreet_pam.cpp M tdmlib/kgreet_pam.h M tdmlib/kgreet_winbind.cpp M tdmlib/kgreet_winbind.h M tdmlib/kgreeterplugin.h |
||
diff --git a/kdesktop/lock/lockdlg.cc b/kdesktop/lock/lockdlg.cc index 827495c..59ad23f 100644 --- a/kdesktop/lock/lockdlg.cc +++ b/kdesktop/lock/lockdlg.cc @@ -43,6 +43,7 @@ #include <tqlistview.h> #include <tqheader.h> #include <tqcheckbox.h> +#include <tqfile.h> #include <ctype.h> #include <unistd.h> @@ -79,7 +80,9 @@ : TQDialog(parent, "password dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), mPlugin( plugin ), mCapsLocked(-1), - mUnlockingFailed(false) + mUnlockingFailed(false), + validUserCardInserted(false), + showInfoMessages(true) { init(plugin); } @@ -92,7 +95,8 @@ : TQDialog(parent, "password dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), mPlugin( plugin ), mCapsLocked(-1), - mUnlockingFailed(false) + mUnlockingFailed(false), + showInfoMessages(true) { m_lockStartDT = lockStartDateTime; init(plugin); @@ -243,6 +247,7 @@ mTimeoutTimerId = startTimer(PASSDLG_HIDE_TIMEOUT); connect(tqApp, TQT_SIGNAL(activity()), TQT_SLOT(slotActivity()) ); + greet->setInfoMessageDisplay(showInfoMessages); greet->start(); DCOPRef kxkb("kxkb", "kxkb"); @@ -463,9 +468,27 @@ if (WIFEXITED(status)) { switch (WEXITSTATUS(status)) { case AuthOk: - greet->succeeded(); - accept(); - return; + { + KUser userinfo; + TQString fileName = userinfo.homeDir() + "/.tde_card_login_state"; + TQFile flagFile(fileName); + if (validUserCardInserted) { + // Card was likely used to log in + if (flagFile.open(IO_WriteOnly)) { + flagFile.writeBlock("1\n", 2); + flagFile.close(); + } + } + else { + // Card was not used to log in + flagFile.remove(); + } + + // Signal success + greet->succeeded(); + accept(); + return; + } case AuthBad: greet->failed(); mUnlockingFailed = true; @@ -926,13 +949,22 @@ } void PasswordDlg::attemptCardLogin() { + // FIXME + // pam_pkcs11 is extremely chatty with no apparent way to disable the unwanted messages + greet->setInfoMessageDisplay(false); + + validUserCardInserted = true; greet->start(); greet->next(); } void PasswordDlg::resetCardLogin() { + validUserCardInserted = false; greet->abort(); greet->start(); + + // Restore information message display settings + greet->setInfoMessageDisplay(showInfoMessages); } #include "lockdlg.moc" diff --git a/kdesktop/lock/lockdlg.h b/kdesktop/lock/lockdlg.h index 1bcb756..fb28d53 100644 --- a/kdesktop/lock/lockdlg.h +++ b/kdesktop/lock/lockdlg.h @@ -94,6 +94,8 @@ int mTimeoutTimerId; int mCapsLocked; bool mUnlockingFailed; + bool validUserCardInserted; + bool showInfoMessages; TQStringList layoutsList; TQStringList::iterator currLayout; int sPid, sFd; diff --git a/kdesktop/lockeng.cc b/kdesktop/lockeng.cc index ceffd73..5173916 100644 --- a/kdesktop/lockeng.cc +++ b/kdesktop/lockeng.cc @@ -176,6 +176,19 @@ cdevice->enableCardMonitoring(true); } + // Check card login status + KUser userinfo; + TQString fileName = userinfo.homeDir() + "/.tde_card_login_state"; + TQFile flagFile(fileName); + if (flagFile.open(IO_ReadOnly)) { + TQTextStream stream(&flagFile); + if (stream.readLine().startsWith("1")) { + // Card was likely used to log in + TQTimer::singleShot(5000, this, SLOT(cardStartupTimeout())); + } + flagFile.close(); + } + dBusConnect(); } @@ -204,6 +217,16 @@ delete m_helperThread; } +void SaverEngine::cardStartupTimeout() { + if (!mValidCryptoCardInserted) { + // Restore saver timeout + configure(); + + // Force lock + lockScreen(); + } +} + void SaverEngine::cryptographicCardInserted(TDECryptographicCardDevice* cdevice) { TQString login_name = TQString::null; X509CertificatePtrList certList = cdevice->cardX509Certificates(); @@ -224,7 +247,7 @@ KUser user; if (login_name == user.loginName()) { mValidCryptoCardInserted = true; - // Disable saver + // Disable saver startup enable(false); } } diff --git a/kdesktop/lockeng.h b/kdesktop/lockeng.h index 5eebaa4..11f751d 100644 --- a/kdesktop/lockeng.h +++ b/kdesktop/lockeng.h @@ -143,6 +143,7 @@ */ void enableExports(); void recoverFromHackingAttempt(); + void cardStartupTimeout(); bool dBusReconnect(); diff --git a/tdm/backend/dpylist.c b/tdm/backend/dpylist.c index b512293..0119c12 100644 --- a/tdm/backend/dpylist.c +++ b/tdm/backend/dpylist.c @@ -64,12 +64,12 @@ for (d = displays; d; d = d->next) switch (d->status) { - case notRunning: - case textMode: - case reserve: - break; - default: - return 1; + case notRunning: + case textMode: + case reserve: + break; + default: + return 1; } return 0; } @@ -79,9 +79,11 @@ { struct display *d; - for (d = displays; d; d = d->next) - if ((d->displayType & d_lifetime) == dReserve) + for (d = displays; d; d = d->next) { + if ((d->displayType & d_lifetime) == dReserve) { return 1; + } + } return 0; } @@ -91,9 +93,11 @@ struct display *d; int cnt = 0; - for (d = displays; d; d = d->next) - if (d->status == reserve) + for (d = displays; d; d = d->next) { + if (d->status == reserve) { cnt++; + } + } return cnt; } @@ -102,9 +106,11 @@ { struct display *d, *rd; - for (rd = 0, d = displays; d; d = d->next) - if (d->status == reserve) + for (rd = 0, d = displays; d; d = d->next) { + if (d->status == reserve) { rd = d; + } + } if (rd) { rd->idleTimeout = lt; rd->status = notRunning; @@ -129,8 +135,9 @@ _forEachDisplayRev( struct display *d, void (*f)( struct display * ) ) { if (d) { - if (d->next) - _forEachDisplayRev( d->next, f ); + if (d->next) { + _forEachDisplayRev(d->next, f); + } (*f)( d ); } } @@ -147,9 +154,11 @@ { struct display *d; ** Diff limit reached (max: 250 lines) ** |