From 9ea67803526cec0439175b8dc2ee5f0e7b87bc89 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Fri, 18 Sep 2015 15:54:06 -0500 Subject: Stabilize cryptographic card login Fix some coding style issues --- tdm/kfrontend/kgapp.cpp | 21 +++++++++++++++++++++ tdm/kfrontend/kgreeter.cpp | 14 ++++++++++++++ tdm/kfrontend/kgreeter.h | 3 ++- tdm/kfrontend/kgverify.cpp | 9 +++++++++ tdm/kfrontend/kgverify.h | 1 + 5 files changed, 47 insertions(+), 1 deletion(-) (limited to 'tdm/kfrontend') diff --git a/tdm/kfrontend/kgapp.cpp b/tdm/kfrontend/kgapp.cpp index 65e6cf0d8..86a67cbad 100644 --- a/tdm/kfrontend/kgapp.cpp +++ b/tdm/kfrontend/kgapp.cpp @@ -34,6 +34,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #endif #include "sakdlg.h" +#include #include #include #include @@ -342,6 +343,7 @@ kg_main( const char *argv0 ) XSetIOErrorHandler( xIOErr ); TQString login_user; + TQString login_card_user; TQString login_session_wm; Display *dpy = tqt_xdisplay(); @@ -499,6 +501,7 @@ kg_main( const char *argv0 ) Debug( "left event loop\n" ); login_user = static_cast(dialog)->curUser; + login_card_user = static_cast(dialog)->cardLoginUser; login_session_wm = static_cast(dialog)->curWMSession; if (rslt != ex_greet) { @@ -522,6 +525,24 @@ kg_main( const char *argv0 ) KGVerify::done(); + KUser userinfo(login_user); + if (userinfo.isValid()) { + TQString fileName = userinfo.homeDir() + "/.tde_card_login_state"; + TQFile flagFile(fileName); + if ((login_card_user != TQString::null) && (login_user == login_card_user)) { + // Card was likely used to log in + if (flagFile.open(IO_WriteOnly)) { + flagFile.writeBlock("1\n", 2); + fchown(flagFile.handle(), userinfo.uid(), userinfo.gid()); + flagFile.close(); + } + } + else { + // Card was not used to log in + flagFile.remove(); + } + } + if (kbdl) { kbdl->closeStdin(); kbdl->detach(); diff --git a/tdm/kfrontend/kgreeter.cpp b/tdm/kfrontend/kgreeter.cpp index 945110de7..15b325898 100644 --- a/tdm/kfrontend/kgreeter.cpp +++ b/tdm/kfrontend/kgreeter.cpp @@ -192,6 +192,7 @@ KGreeter::KGreeter( bool framed ) , prevValid( true ) , needLoad( false ) , themed( framed ) + , showInfoMessages( true ) , closingDown( false ) { stsFile = new KSimpleConfig( _stsFile ); @@ -242,6 +243,8 @@ KGreeter::~KGreeter() } void KGreeter::cryptographicCardWatcherSetup() { + cardLoginUser = TQString::null; + // Initialize SmartCard readers TDEGenericDevice *hwdevice; TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); @@ -892,15 +895,24 @@ void KGreeter::cryptographicCardInserted(TDECryptographicCardDevice* cdevice) { verifySetUser(login_name); verify->lockUserEntry(true); + // FIXME + // pam_pkcs11 is extremely chatty with no apparent way to disable the unwanted messages + verify->setInfoMessageDisplay(false); + // Initiate login + cardLoginUser = login_name; verify->accept(); } } } void KGreeter::cryptographicCardRemoved(TDECryptographicCardDevice* cdevice) { + cardLoginUser = TQString::null; verify->lockUserEntry(false); verify->requestAbort(); + + // Restore information message display settings + verify->setInfoMessageDisplay(showInfoMessages); } KStdGreeter::KStdGreeter() @@ -1048,6 +1060,7 @@ KStdGreeter::KStdGreeter() pluginSetup(); + verify->setInfoMessageDisplay(showInfoMessages); verify->start(); TQTimer::singleShot(0, this, SLOT(cryptographicCardWatcherSetup())); @@ -1197,6 +1210,7 @@ KThemedGreeter::KThemedGreeter() pluginSetup(); + verify->setInfoMessageDisplay(showInfoMessages); verify->start(); TQTimer::singleShot(0, this, SLOT(cryptographicCardWatcherSetup())); diff --git a/tdm/kfrontend/kgreeter.h b/tdm/kfrontend/kgreeter.h index 793a034df..f715b3a8c 100644 --- a/tdm/kfrontend/kgreeter.h +++ b/tdm/kfrontend/kgreeter.h @@ -110,7 +110,7 @@ class KGreeter : public KGDialog, public KGVerifyHandler { void processInputPipeCommand(TQString command); public: - TQString curUser, curWMSession, dName; + TQString curUser, cardLoginUser, curWMSession, dName; protected slots: void cryptographicCardWatcherSetup(); @@ -137,6 +137,7 @@ class KGreeter : public KGDialog, public KGVerifyHandler { bool prevValid; bool needLoad; bool themed; + bool showInfoMessages; static int curPlugin; static PluginList pluginList; diff --git a/tdm/kfrontend/kgverify.cpp b/tdm/kfrontend/kgverify.cpp index a25fac8b8..cc20d54ed 100644 --- a/tdm/kfrontend/kgverify.cpp +++ b/tdm/kfrontend/kgverify.cpp @@ -286,6 +286,14 @@ KGVerify::setPassword( const TQString &pass ) gplugActivity(); } +void +KGVerify::setInfoMessageDisplay(bool on) +{ + // assert( fixedEntity.isEmpty() ); + Debug( "%s->setInfoMessageDisplay(%\"s)\n", pName.data(), on ); + greet->setInfoMessageDisplay(on); +} + void KGVerify::start() { @@ -383,6 +391,7 @@ KGVerify::doReject( bool initial ) void // not a slot - called manually by greeter KGVerify::reject() { + inGreeterPlugin = false; doReject( true ); } diff --git a/tdm/kfrontend/kgverify.h b/tdm/kfrontend/kgverify.h index 3cd22b6c9..278cc0dd3 100644 --- a/tdm/kfrontend/kgverify.h +++ b/tdm/kfrontend/kgverify.h @@ -102,6 +102,7 @@ class KGVerify : public TQObject, public KGreeterPluginHandler { void setUser( const TQString &user ); void lockUserEntry( const bool lock ); void setPassword( const TQString &pass ); + void setInfoMessageDisplay( bool on ); /* virtual */ void selectPlugin( int id ); bool entitiesLocal() const; bool entitiesFielded() const; -- cgit v1.2.3