Fix cryptographic card login when SAK is enabled

pull/2/head
Timothy Pearson 9 years ago
parent ce47730301
commit 5b260a9627

@ -219,17 +219,6 @@ KGreeter::KGreeter( bool framed )
pluginList = KGVerify::init( _pluginsLogin ); pluginList = KGVerify::init( _pluginsLogin );
} }
// Initialize SmartCard readers
TDEGenericDevice *hwdevice;
TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices();
TDEGenericHardwareList cardReaderList = hwdevices->listByDeviceClass(TDEGenericDeviceType::CryptographicCard);
for (hwdevice = cardReaderList.first(); hwdevice; hwdevice = cardReaderList.next()) {
TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice);
connect(cdevice, TQT_SIGNAL(certificateListAvailable(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardInserted(TDECryptographicCardDevice*)));
connect(cdevice, TQT_SIGNAL(cardRemoved(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardRemoved(TDECryptographicCardDevice*)));
cdevice->enableCardMonitoring(true);
}
mControlPipeHandlerThread = new TQEventLoopThread(); mControlPipeHandlerThread = new TQEventLoopThread();
mControlPipeHandler = new ControlPipeHandlerObject(); mControlPipeHandler = new ControlPipeHandlerObject();
mControlPipeHandler->mKGreeterParent = this; mControlPipeHandler->mKGreeterParent = this;
@ -252,6 +241,19 @@ KGreeter::~KGreeter()
delete stsFile; delete stsFile;
} }
void KGreeter::cryptographicCardWatcherSetup() {
// Initialize SmartCard readers
TDEGenericDevice *hwdevice;
TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices();
TDEGenericHardwareList cardReaderList = hwdevices->listByDeviceClass(TDEGenericDeviceType::CryptographicCard);
for (hwdevice = cardReaderList.first(); hwdevice; hwdevice = cardReaderList.next()) {
TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice);
connect(cdevice, TQT_SIGNAL(certificateListAvailable(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardInserted(TDECryptographicCardDevice*)));
connect(cdevice, TQT_SIGNAL(cardRemoved(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardRemoved(TDECryptographicCardDevice*)));
cdevice->enableCardMonitoring(true);
}
}
void KGreeter::done(int r) { void KGreeter::done(int r) {
closingDown = true; closingDown = true;
inherited::done(r); inherited::done(r);
@ -1047,6 +1049,8 @@ KStdGreeter::KStdGreeter()
pluginSetup(); pluginSetup();
verify->start(); verify->start();
TQTimer::singleShot(0, this, SLOT(cryptographicCardWatcherSetup()));
} }
void void
@ -1194,6 +1198,8 @@ KThemedGreeter::KThemedGreeter()
pluginSetup(); pluginSetup();
verify->start(); verify->start();
TQTimer::singleShot(0, this, SLOT(cryptographicCardWatcherSetup()));
} }
bool bool

@ -112,6 +112,9 @@ class KGreeter : public KGDialog, public KGVerifyHandler {
public: public:
TQString curUser, curWMSession, dName; TQString curUser, curWMSession, dName;
protected slots:
void cryptographicCardWatcherSetup();
protected: protected:
void readFacesList(); void readFacesList();
void installUserList(); void installUserList();

@ -91,6 +91,7 @@ KGVerify::KGVerify(KGVerifyHandler *_handler, KdmThemer *_themer,
, suspended(false) , suspended(false)
, failed(false) , failed(false)
, isClear(true) , isClear(true)
, inGreeterPlugin(false)
, abortRequested(false) , abortRequested(false)
{ {
connect( &timer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()) ); connect( &timer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()) );
@ -360,21 +361,22 @@ KGVerify::doReject( bool initial )
{ {
// assert( !cont ); // assert( !cont );
if (running) { if (running) {
Debug( "%s->abort()\n", pName.data() ); Debug("%s->abort()\n", pName.data());
greet->abort(); greet->abort();
} }
handler->verifyClear(); handler->verifyClear();
Debug( "%s->clear()\n", pName.data() ); Debug("%s->clear()\n", pName.data());
greet->clear(); greet->clear();
curUser = TQString::null; curUser = TQString::null;
if (!scheduleAutoLogin( initial )) { if (!scheduleAutoLogin(initial)) {
isClear = !(isClear && applyPreset()); isClear = !(isClear && applyPreset());
if (running) { if (running) {
Debug( "%s->start()\n", pName.data() ); Debug( "%s->start()\n", pName.data() );
greet->start(); greet->start();
} }
if (!failed) if (!failed) {
timer.stop(); timer.stop();
}
} }
} }
@ -388,6 +390,9 @@ void // not a slot - called manually by greeter
KGVerify::requestAbort() KGVerify::requestAbort()
{ {
abortRequested = true; abortRequested = true;
if (inGreeterPlugin) {
greet->next();
}
} }
void void
@ -615,7 +620,9 @@ KGVerify::handleVerify()
ndelay = GRecvInt(); ndelay = GRecvInt();
Debug( " ndelay = %d\n%s->textPrompt(...)\n", ndelay, pName.data() ); Debug( " ndelay = %d\n%s->textPrompt(...)\n", ndelay, pName.data() );
if (abortRequested) { if (abortRequested) {
inGreeterPlugin = true;
greet->textPrompt("", echo, ndelay); greet->textPrompt("", echo, ndelay);
inGreeterPlugin = !ndelay;
abortRequested = false; abortRequested = false;
} }
else { else {
@ -623,10 +630,14 @@ KGVerify::handleVerify()
// Reset password entry and change text // Reset password entry and change text
setPassPromptText(msg); setPassPromptText(msg);
greet->start(); greet->start();
inGreeterPlugin = true;
greet->textPrompt(msg, echo, ndelay); greet->textPrompt(msg, echo, ndelay);
inGreeterPlugin = !ndelay;
} }
else { else {
inGreeterPlugin = true;
greet->textPrompt(msg, echo, ndelay); greet->textPrompt(msg, echo, ndelay);
inGreeterPlugin = !ndelay;
} }
} }
if (msg) { if (msg) {
@ -641,10 +652,11 @@ KGVerify::handleVerify()
Debug( " ndelay = %d\n%s->binaryPrompt(...)\n", ndelay, pName.data() ); Debug( " ndelay = %d\n%s->binaryPrompt(...)\n", ndelay, pName.data() );
if (abortRequested) { if (abortRequested) {
gplugReturnBinary(NULL); gplugReturnBinary(NULL);
abortRequested = false;
} }
else { else {
inGreeterPlugin = true;
greet->binaryPrompt( msg, ndelay ); greet->binaryPrompt( msg, ndelay );
inGreeterPlugin = !ndelay;
} }
if (msg) { if (msg) {
free(msg); free(msg);
@ -679,6 +691,7 @@ KGVerify::handleVerify()
Debug("%s->succeeded()\n", pName.data()); Debug("%s->succeeded()\n", pName.data());
greet->succeeded(); greet->succeeded();
abortRequested = false; abortRequested = false;
inGreeterPlugin = false;
continue; continue;
case V_CHTOK_AUTH: case V_CHTOK_AUTH:
Debug( " V_CHTOK_AUTH\n" ); Debug( " V_CHTOK_AUTH\n" );
@ -695,6 +708,7 @@ KGVerify::handleVerify()
Debug( "%s->succeeded()\n", pName.data() ); Debug( "%s->succeeded()\n", pName.data() );
greet->succeeded(); greet->succeeded();
abortRequested = false; abortRequested = false;
inGreeterPlugin = false;
KGChTok chtok( parent, user, pluginList, curPlugin, nfunc, KGreeterPlugin::Login ); KGChTok chtok( parent, user, pluginList, curPlugin, nfunc, KGreeterPlugin::Login );
if (!chtok.exec()) { if (!chtok.exec()) {
goto retry; goto retry;
@ -706,13 +720,16 @@ KGVerify::handleVerify()
Debug( " V_MSG_ERR\n" ); Debug( " V_MSG_ERR\n" );
msg = GRecvStr(); msg = GRecvStr();
Debug( " %s->textMessage(%\"s, true)\n", pName.data(), msg ); Debug( " %s->textMessage(%\"s, true)\n", pName.data(), msg );
inGreeterPlugin = true;
if (!greet->textMessage( msg, true )) { if (!greet->textMessage( msg, true )) {
inGreeterPlugin = false;
Debug( " message passed\n" ); Debug( " message passed\n" );
if (!abortRequested) { if (!abortRequested) {
VErrBox( parent, user, msg ); VErrBox( parent, user, msg );
} }
} }
else { else {
inGreeterPlugin = false;
Debug( " message swallowed\n" ); Debug( " message swallowed\n" );
} }
if (msg) { if (msg) {
@ -723,13 +740,16 @@ KGVerify::handleVerify()
Debug( " V_MSG_INFO\n" ); Debug( " V_MSG_INFO\n" );
msg = GRecvStr(); msg = GRecvStr();
Debug( " %s->textMessage(%\"s, false)\n", pName.data(), msg ); Debug( " %s->textMessage(%\"s, false)\n", pName.data(), msg );
inGreeterPlugin = true;
if (!greet->textMessage( msg, false )) { if (!greet->textMessage( msg, false )) {
inGreeterPlugin = false;
Debug( " message passed\n" ); Debug( " message passed\n" );
if (!abortRequested) { if (!abortRequested) {
VInfoBox(parent, user, msg); VInfoBox(parent, user, msg);
} }
} }
else { else {
inGreeterPlugin = false;
Debug(" message swallowed\n"); Debug(" message swallowed\n");
} }
free(msg); free(msg);
@ -751,6 +771,7 @@ KGVerify::handleVerify()
Debug( "%s->failed()\n", pName.data() ); Debug( "%s->failed()\n", pName.data() );
greet->failed(); greet->failed();
abortRequested = false; abortRequested = false;
inGreeterPlugin = false;
MsgBox( sorrybox, MsgBox( sorrybox,
i18n("Authenticated user (%1) does not match requested user (%2).\n") i18n("Authenticated user (%1) does not match requested user (%2).\n")
.arg( ent ).arg( fixedEntity ) ); .arg( ent ).arg( fixedEntity ) );
@ -760,6 +781,7 @@ KGVerify::handleVerify()
Debug( "%s->succeeded()\n", pName.data() ); Debug( "%s->succeeded()\n", pName.data() );
greet->succeeded(); greet->succeeded();
abortRequested = false; abortRequested = false;
inGreeterPlugin = false;
handler->verifyOk(); handler->verifyOk();
return; return;
} }
@ -767,6 +789,7 @@ KGVerify::handleVerify()
Debug( "%s->failed()\n", pName.data() ); Debug( "%s->failed()\n", pName.data() );
greet->failed(); greet->failed();
abortRequested = false; abortRequested = false;
inGreeterPlugin = false;
// Reset password prompt text // Reset password prompt text
setPassPromptText(TQString::null, true); setPassPromptText(TQString::null, true);
@ -788,8 +811,9 @@ KGVerify::handleVerify()
running = true; running = true;
Debug( "%s->start()\n", pName.data() ); Debug( "%s->start()\n", pName.data() );
greet->start(); greet->start();
if (!cont) if (!cont) {
return; return;
}
user = TQString::null; user = TQString::null;
} }
} }
@ -1043,8 +1067,9 @@ KGStdVerify::slotPluginSelected( int id )
delete greet; delete greet;
selectPlugin( id ); selectPlugin( id );
handler->verifyPluginChanged( id ); handler->verifyPluginChanged( id );
if (running) if (running) {
start(); start();
}
parent->setUpdatesEnabled( true ); parent->setUpdatesEnabled( true );
} }
} }
@ -1142,8 +1167,9 @@ KGThemedVerify::slotPluginSelected( int id )
delete greet; delete greet;
selectPlugin( id ); selectPlugin( id );
handler->verifyPluginChanged( id ); handler->verifyPluginChanged( id );
if (running) if (running) {
start(); start();
}
} }
} }

@ -148,6 +148,7 @@ class KGVerify : public TQObject, public KGreeterPluginHandler {
bool capsLocked; bool capsLocked;
bool enabled, running, suspended, failed, delayed, cont; bool enabled, running, suspended, failed, delayed, cont;
bool authTok, isClear, timeable; bool authTok, isClear, timeable;
bool inGreeterPlugin;
bool abortRequested; bool abortRequested;
static void VMsgBox( TQWidget *parent, const TQString &user, TQMessageBox::Icon type, const TQString &mesg ); static void VMsgBox( TQWidget *parent, const TQString &user, TQMessageBox::Icon type, const TQString &mesg );

@ -10,6 +10,11 @@
#include <dmctl.h> #include <dmctl.h>
#include <ksslcertificate.h>
#include <tdehardwaredevices.h>
#include <tdecryptographiccarddevice.h>
#include <tdeapplication.h> #include <tdeapplication.h>
#include <tdelocale.h> #include <tdelocale.h>
#include <kpushbutton.h> #include <kpushbutton.h>
@ -87,64 +92,75 @@ extern bool trinity_desktop_lock_use_sak;
// //
SAKDlg::SAKDlg(TQWidget *parent) SAKDlg::SAKDlg(TQWidget *parent)
: TQDialog(parent, "information dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))), : TQDialog(parent, "information dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))),
mUnlockingFailed(false), closingDown(false) closingDown(false), mUnlockingFailed(false)
{ {
if (trinity_desktop_lock_use_system_modal_dialogs) { if (trinity_desktop_lock_use_system_modal_dialogs) {
// Signal that we do not want any window controls to be shown at all // Signal that we do not want any window controls to be shown at all
Atom kde_wm_system_modal_notification; Atom kde_wm_system_modal_notification;
kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False); kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False);
XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L);
} }
setCaption(TDM_LOGIN_SCREEN_BASE_TITLE); setCaption(TDM_LOGIN_SCREEN_BASE_TITLE);
frame = new TQFrame( this ); frame = new TQFrame( this );
if (trinity_desktop_lock_use_system_modal_dialogs) if (trinity_desktop_lock_use_system_modal_dialogs)
frame->setFrameStyle( TQFrame::NoFrame ); frame->setFrameStyle( TQFrame::NoFrame );
else else
frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised ); frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised );
frame->setLineWidth( 2 ); frame->setLineWidth( 2 );
KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame ); KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame );
KUser user; KUser user;
mStatusLabel = new TQLabel( "<b> </b>", frame ); mStatusLabel = new TQLabel( "<b> </b>", frame );
mStatusLabel->setAlignment( TQLabel::AlignVCenter ); mStatusLabel->setAlignment( TQLabel::AlignVCenter );
TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this );
unlockDialogLayout->addWidget( frame ); unlockDialogLayout->addWidget( frame );
TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint());
layStatus->addWidget( mStatusLabel ); layStatus->addWidget( mStatusLabel );
frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() );
frameLayout->addMultiCellWidget( theader, 0, 0, 0, 1, AlignTop | AlignLeft ); frameLayout->addMultiCellWidget( theader, 0, 0, 0, 1, AlignTop | AlignLeft );
frameLayout->addMultiCellLayout( layStatus, 1, 1, 0, 1, AlignLeft | AlignVCenter); frameLayout->addMultiCellLayout( layStatus, 1, 1, 0, 1, AlignLeft | AlignVCenter);
mStatusLabel->setText("<b>" + i18n("Press Ctrl+Alt+Del to begin.") + "</b><p>" + i18n("This process helps keep your password secure.") + "<br>" + i18n("It prevents unauthorized users from emulating the login screen.")); mStatusLabel->setText("<b>" + i18n("Press Ctrl+Alt+Del to begin.") + "</b><p>" + i18n("This process helps keep your password secure.") + "<br>" + i18n("It prevents unauthorized users from emulating the login screen."));
installEventFilter(this); installEventFilter(this);
mSAKProcess = new TDEProcess; mSAKProcess = new TDEProcess;
*mSAKProcess << "tdmtsak" << "dm"; *mSAKProcess << "tdmtsak" << "dm";
connect(mSAKProcess, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotSAKProcessExited())); connect(mSAKProcess, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotSAKProcessExited()));
mSAKProcess->start(); mSAKProcess->start();
mControlPipeHandlerThread = new TQEventLoopThread(); // Initialize SmartCard readers
mControlPipeHandler = new ControlPipeHandlerObject(); TDEGenericDevice *hwdevice;
mControlPipeHandler->mSAKDlgParent = this; TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices();
mControlPipeHandler->moveToThread(mControlPipeHandlerThread); TDEGenericHardwareList cardReaderList = hwdevices->listByDeviceClass(TDEGenericDeviceType::CryptographicCard);
TQObject::connect(mControlPipeHandler, SIGNAL(processCommand(TQString)), this, SLOT(processInputPipeCommand(TQString))); for (hwdevice = cardReaderList.first(); hwdevice; hwdevice = cardReaderList.next()) {
TQTimer::singleShot(0, mControlPipeHandler, SLOT(run())); TDECryptographicCardDevice* cdevice = static_cast<TDECryptographicCardDevice*>(hwdevice);
mControlPipeHandlerThread->start(); connect(cdevice, TQT_SIGNAL(certificateListAvailable(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardInserted(TDECryptographicCardDevice*)));
connect(cdevice, TQT_SIGNAL(cardRemoved(TDECryptographicCardDevice*)), this, TQT_SLOT(cryptographicCardRemoved(TDECryptographicCardDevice*)));
cdevice->enableCardMonitoring(true);
}
mControlPipeHandlerThread = new TQEventLoopThread();
mControlPipeHandler = new ControlPipeHandlerObject();
mControlPipeHandler->mSAKDlgParent = this;
mControlPipeHandler->moveToThread(mControlPipeHandlerThread);
TQObject::connect(mControlPipeHandler, SIGNAL(processCommand(TQString)), this, SLOT(processInputPipeCommand(TQString)));
TQTimer::singleShot(0, mControlPipeHandler, SLOT(run()));
mControlPipeHandlerThread->start();
} }
void SAKDlg::slotSAKProcessExited() void SAKDlg::slotSAKProcessExited()
{ {
int retcode = mSAKProcess->exitStatus(); int retcode = mSAKProcess->exitStatus();
if (retcode != 0) trinity_desktop_lock_use_sak = false; if (retcode != 0) trinity_desktop_lock_use_sak = false;
closingDown = true; closingDown = true;
hide(); hide();
} }
void SAKDlg::processInputPipeCommand(TQString command) { void SAKDlg::processInputPipeCommand(TQString command) {
@ -155,41 +171,89 @@ void SAKDlg::processInputPipeCommand(TQString command) {
} }
} }
void SAKDlg::cryptographicCardInserted(TDECryptographicCardDevice* cdevice) {
TQString login_name = TQString::null;
X509CertificatePtrList certList = cdevice->cardX509Certificates();
if (certList.count() > 0) {
KSSLCertificate* card_cert = NULL;
card_cert = KSSLCertificate::fromX509(certList[0]);
TQStringList cert_subject_parts = TQStringList::split("/", card_cert->getSubject(), false);
for (TQStringList::Iterator it = cert_subject_parts.begin(); it != cert_subject_parts.end(); ++it ) {
TQString lcpart = (*it).lower();
if (lcpart.startsWith("cn=")) {
login_name = lcpart.right(lcpart.length() - strlen("cn="));
}
}
delete card_cert;
}
if (login_name != "") {
DM dm;
SessList sess;
bool vt_active = false;
bool user_active = false;
if (dm.localSessions(sess)) {
TQString user, loc;
for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) {
DM::sess2Str2(*it, user, loc);
if (user.startsWith(login_name + ": ")) {
// Found active session
user_active = true;
}
if ((*it).self) {
if ((*it).vt == dm.activeVT()) {
vt_active = true;
}
}
}
}
if (!user_active && vt_active) {
// Terminate SAK dialog
closeDialogForced();
}
}
}
void SAKDlg::cryptographicCardRemoved(TDECryptographicCardDevice* cdevice) {
//
}
SAKDlg::~SAKDlg() SAKDlg::~SAKDlg()
{ {
if ((mSAKProcess) && (mSAKProcess->isRunning())) { if ((mSAKProcess) && (mSAKProcess->isRunning())) {
mSAKProcess->kill(SIGTERM); mSAKProcess->kill(SIGTERM);
delete mSAKProcess; delete mSAKProcess;
} }
mControlPipeHandlerThread->terminate(); mControlPipeHandlerThread->terminate();
mControlPipeHandlerThread->wait(); mControlPipeHandlerThread->wait();
delete mControlPipeHandler; delete mControlPipeHandler;
// delete mControlPipeHandlerThread; // delete mControlPipeHandlerThread;
hide(); hide();
} }
void SAKDlg::closeDialogForced() void SAKDlg::closeDialogForced()
{ {
TQDialog::reject(); TQDialog::reject();
} }
void SAKDlg::reject() void SAKDlg::reject()
{ {
//
} }
void SAKDlg::updateLabel(TQString &txt) void SAKDlg::updateLabel(TQString &txt)
{ {
mStatusLabel->setPaletteForegroundColor(Qt::black); mStatusLabel->setPaletteForegroundColor(Qt::black);
mStatusLabel->setText("<b>" + txt + "</b>"); mStatusLabel->setText("<b>" + txt + "</b>");
} }
void SAKDlg::show() void SAKDlg::show()
{ {
TQDialog::show(); TQDialog::show();
TQApplication::flushX(); TQApplication::flushX();
} }
#include "sakdlg.moc" #include "sakdlg.moc"

@ -22,6 +22,7 @@ class TQLabel;
class KPushButton; class KPushButton;
class TQListView; class TQListView;
class SAKDlg; class SAKDlg;
class TDECryptographicCardDevice;
//=========================================================================== //===========================================================================
// //
@ -30,40 +31,44 @@ class SAKDlg;
// //
class SAKDlg : public TQDialog class SAKDlg : public TQDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
SAKDlg(TQWidget *parent); SAKDlg(TQWidget *parent);
~SAKDlg(); ~SAKDlg();
virtual void show(); virtual void show();
void updateLabel( TQString &txt ); void updateLabel( TQString &txt );
void closeDialogForced(); void closeDialogForced();
private slots: private slots:
void slotSAKProcessExited(); void slotSAKProcessExited();
void processInputPipeCommand(TQString command); void processInputPipeCommand(TQString command);
protected slots: protected slots:
virtual void reject(); virtual void reject();
private: private slots:
TQFrame *frame; void cryptographicCardInserted(TDECryptographicCardDevice*);
TQGridLayout *frameLayout; void cryptographicCardRemoved(TDECryptographicCardDevice*);
TQLabel *mStatusLabel;
int mCapsLocked; protected:
bool mUnlockingFailed; bool closingDown;
TQStringList layoutsList;
TQStringList::iterator currLayout; private:
int sPid, sFd; TQFrame *frame;
TDEProcess* mSAKProcess; TQGridLayout *frameLayout;
ControlPipeHandlerObject* mControlPipeHandler; TQLabel *mStatusLabel;
TQEventLoopThread* mControlPipeHandlerThread; int mCapsLocked;
bool mUnlockingFailed;
protected: TQStringList layoutsList;
bool closingDown; TQStringList::iterator currLayout;
int sPid, sFd;
friend class ControlPipeHandlerObject; TDEProcess* mSAKProcess;
ControlPipeHandlerObject* mControlPipeHandler;
TQEventLoopThread* mControlPipeHandlerThread;
friend class ControlPipeHandlerObject;
}; };
#endif #endif

Loading…
Cancel
Save