Add very preliminary SAK support

Don't worry, if your system is not configured for SAK usability you won't notice anything different


git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1253698 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 13 years ago
parent 2bc823a7c1
commit f6af340515

@ -311,6 +311,13 @@
<!-- /home/paco/cvsroot/kdebase/kdesktop/lock/lockprocess.cc:336 -->
<!-- mSaver = config.readEntry("UseUnmanagedLockWindows"); -->
</entry>
<entry key="UseTDESAK" type="Bool">
<default>true</default>
<label></label>
<whatsthis>Set to true to enable usage of the Trinity SAK anti-spoofing system</whatsthis>
<!-- /home/paco/cvsroot/kdebase/kdesktop/lock/lockprocess.cc:336 -->
<!-- mSaver = config.readEntry("UseTDESAK"); -->
</entry>
<entry key="DelaySaverStart" type="Bool">
<default>true</default>
<label></label>

@ -29,7 +29,7 @@ link_directories(
set( target kdesktop_lock )
set( ${target}_SRCS
lockprocess.cc lockdlg.cc infodlg.cc querydlg.cc
lockprocess.cc lockdlg.cc infodlg.cc querydlg.cc sakdlg.cc
autologout.cc main.cc
)

@ -65,6 +65,7 @@
extern bool trinity_desktop_lock_autohide_lockdlg;
extern bool trinity_desktop_lock_delay_screensaver_start;
extern bool trinity_desktop_lock_use_system_modal_dialogs;
extern bool trinity_desktop_lock_use_sak;
int dialogHideTimeout = 10*1000;
@ -114,7 +115,7 @@ PasswordDlg::PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin)
mNewSessButton = new KPushButton( KGuiItem(i18n("Sw&itch User..."), "fork"), frame );
ok = new KPushButton( i18n("Unl&ock"), frame );
cancel = new KPushButton( KStdGuiItem::cancel(), frame );
if (!trinity_desktop_lock_autohide_lockdlg) cancel->setEnabled(false);
if (!trinity_desktop_lock_autohide_lockdlg && !trinity_desktop_lock_use_sak) cancel->setEnabled(false);
greet = plugin->info->create( this, 0, this, mLayoutButton, TQString::null,
KGreeterPlugin::Authenticate, KGreeterPlugin::ExUnlock );
@ -188,7 +189,7 @@ PasswordDlg::~PasswordDlg()
void PasswordDlg::reject()
{
if (trinity_desktop_lock_autohide_lockdlg)
if (trinity_desktop_lock_autohide_lockdlg || trinity_desktop_lock_use_sak)
TQDialog::reject();
}
@ -253,7 +254,7 @@ void PasswordDlg::timerEvent(TQTimerEvent *ev)
mUnlockingFailed = false;
updateLabel();
ok->setEnabled(true);
if (trinity_desktop_lock_autohide_lockdlg) cancel->setEnabled(true);
if (trinity_desktop_lock_autohide_lockdlg || trinity_desktop_lock_use_sak) cancel->setEnabled(true);
mNewSessButton->setEnabled( true );
greet->revive();
greet->start();

@ -4,6 +4,7 @@
//
// Copyright (c) 1999 Martin R. Jones <mjones@kde.org>
// Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org>
// Copyright (c) 2010-2011 Timothy Pearson <kb9vqf@pearsoncomputing.net>
//
//kdesktop keeps running and checks user inactivity
@ -21,6 +22,7 @@
#include "lockdlg.h"
#include "infodlg.h"
#include "querydlg.h"
#include "sakdlg.h"
#include "autologout.h"
#include "kdesktopsettings.h"
@ -128,6 +130,7 @@ static void segv_handler(int)
extern Atom qt_wm_state;
extern bool trinity_desktop_lock_use_system_modal_dialogs;
extern bool trinity_desktop_lock_delay_screensaver_start;
extern bool trinity_desktop_lock_use_sak;
extern bool trinity_desktop_lock_forced;
bool trinity_desktop_lock_autohide_lockdlg = TRUE;
@ -1359,6 +1362,9 @@ void LockProcess::suspend()
void LockProcess::resume( bool force )
{
if (trinity_desktop_lock_use_sak && mHackDelayStartupTimer->isActive()) {
return;
}
if( !force && (!mDialogs.isEmpty() || !mVisibility )) {
// no resuming with dialog visible or when not visible
if (backingPixmap.isNull())
@ -1392,6 +1398,12 @@ bool LockProcess::checkPass()
if (mAutoLogout)
killTimer(mAutoLogoutTimerId);
if (trinity_desktop_lock_use_sak) {
// Wait for SAK press before continuing...
SAKDlg inDlg( this );
int ret = execDialog( &inDlg );
}
showVkbd();
PasswordDlg passDlg( this, &greetPlugin);
int ret = execDialog( &passDlg );

@ -34,9 +34,10 @@
#include <X11/Xlib.h>
#include <fixx11h.h>
// [FIXME] Add GUI configuration checkboxes for these two settings (see kdesktoprc [ScreenSaver] UseUnmanagedLockWindows and DelaySaverStart)
// [FIXME] Add GUI configuration checkboxes for these three settings (see kdesktoprc [ScreenSaver] UseUnmanagedLockWindows, DelaySaverStart, and UseTDESAK)
bool trinity_desktop_lock_use_system_modal_dialogs = FALSE;
bool trinity_desktop_lock_delay_screensaver_start = FALSE;
bool trinity_desktop_lock_use_sak = FALSE;
bool trinity_desktop_lock_forced = FALSE;
@ -153,6 +154,7 @@ int main( int argc, char **argv )
trinity_desktop_lock_use_system_modal_dialogs = !KDesktopSettings::useUnmanagedLockWindows();
trinity_desktop_lock_delay_screensaver_start = KDesktopSettings::delaySaverStart();
trinity_desktop_lock_use_sak = KDesktopSettings::useTDESAK();
LockProcess process(child, args->isSet( "blank" ));
if (!child)

@ -0,0 +1,171 @@
//===========================================================================
//
// This file is part of the KDE project
//
// Copyright (c) 2010-2011 Timothy Pearson <kb9vqf@pearsoncomputing.net>
#include <config.h>
#include "sakdlg.h"
#include <dmctl.h>
#include <kapplication.h>
#include <klocale.h>
#include <kpushbutton.h>
#include <kseparator.h>
#include <kstandarddirs.h>
#include <kglobalsettings.h>
#include <kconfig.h>
#include <kiconloader.h>
#include <kdesu/defaults.h>
#include <kpassdlg.h>
#include <kdebug.h>
#include <kuser.h>
#include <dcopref.h>
#include <kmessagebox.h>
#include <tqlayout.h>
#include <tqpushbutton.h>
#include <tqmessagebox.h>
#include <tqsimplerichtext.h>
#include <tqlabel.h>
#include <tqstringlist.h>
#include <tqfontmetrics.h>
#include <tqstyle.h>
#include <tqapplication.h>
#include <tqlistview.h>
#include <tqheader.h>
#include <tqcheckbox.h>
#include <ctype.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <pwd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/Xatom.h>
#include <fixx11h.h>
#ifndef AF_LOCAL
# define AF_LOCAL AF_UNIX
#endif
extern bool trinity_desktop_lock_use_system_modal_dialogs;
extern bool trinity_desktop_lock_use_sak;
//===========================================================================
//
// Simple dialog for displaying an unlock status or recurring error message
//
SAKDlg::SAKDlg(LockProcess *parent)
: TQDialog(parent, "information dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))),
mUnlockingFailed(false)
{
if (trinity_desktop_lock_use_system_modal_dialogs) {
// Signal that we do not want any window controls to be shown at all
Atom kde_wm_system_modal_notification;
kde_wm_system_modal_notification = XInternAtom(qt_xdisplay(), "_KDE_WM_MODAL_SYS_NOTIFICATION", False);
XChangeProperty(qt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L);
}
setCaption(i18n("Desktop Session Locked"));
frame = new TQFrame( this );
if (trinity_desktop_lock_use_system_modal_dialogs)
frame->setFrameStyle( TQFrame::NoFrame );
else
frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised );
frame->setLineWidth( 2 );
mpixLabel = new TQLabel( frame, "pixlabel" );
mpixLabel->setPixmap(DesktopIcon("unlock"));
KUser user;
mStatusLabel = new TQLabel( "<b> </b>", frame );
mStatusLabel->tqsetAlignment( TQLabel::AlignCenter );
TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this );
unlockDialogLayout->addWidget( frame );
TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint());
layStatus->addWidget( mStatusLabel );
frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() );
frameLayout->addMultiCellWidget( mpixLabel, 0, 2, 0, 0, Qt::AlignTop );
frameLayout->addLayout( layStatus, 1, 1 );
setKDEIcon();
mStatusLabel->setText("<b>" + i18n("Press Ctrl+Alt+Del to begin.") + "</b>");
installEventFilter(this);
mSAKProcess = new KProcess;
*mSAKProcess << "kdmtsak";
connect(mSAKProcess, TQT_SIGNAL(processExited(KProcess*)), this, TQT_SLOT(slotSAKProcessExited()));
mSAKProcess->start();
}
void SAKDlg::slotSAKProcessExited()
{
int retcode = mSAKProcess->exitStatus();
if (retcode != 0) trinity_desktop_lock_use_sak = false;
hide();
}
SAKDlg::~SAKDlg()
{
if ((mSAKProcess) && (mSAKProcess->isRunning())) {
mSAKProcess->kill(SIGTERM);
delete mSAKProcess;
}
hide();
}
void SAKDlg::reject()
{
}
void SAKDlg::updateLabel(TQString &txt)
{
mStatusLabel->setPaletteForegroundColor(Qt::black);
mStatusLabel->setText("<b>" + txt + "</b>");
}
void SAKDlg::setUnlockIcon()
{
mpixLabel->setPixmap(DesktopIcon("unlock"));
}
void SAKDlg::setKDEIcon()
{
mpixLabel->setPixmap(DesktopIcon("about_kde"));
}
void SAKDlg::setInfoIcon()
{
mpixLabel->setPixmap(DesktopIcon("messagebox_info"));
}
void SAKDlg::setWarningIcon()
{
mpixLabel->setPixmap(DesktopIcon("messagebox_warning"));
}
void SAKDlg::setErrorIcon()
{
mpixLabel->setPixmap(DesktopIcon("messagebox_critical"));
}
void SAKDlg::show()
{
TQDialog::show();
TQApplication::flushX();
}
#include "sakdlg.moc"

@ -0,0 +1,63 @@
//===========================================================================
//
// This file is part of the KDE project
//
// Copyright (c) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net>
//
#ifndef __SAKDLG_H__
#define __SAKDLG_H__
#include <tqdialog.h>
#include <tqstringlist.h>
#include "lockprocess.h"
class TQFrame;
class TQGridLayout;
class TQLabel;
class KPushButton;
class TQListView;
//===========================================================================
//
// Simple dialog for displaying an info message.
// It does not handle password validation.
//
class SAKDlg : public TQDialog
{
Q_OBJECT
public:
SAKDlg(LockProcess *parent);
~SAKDlg();
virtual void show();
void updateLabel( TQString &txt );
void setUnlockIcon();
void setKDEIcon();
void setInfoIcon();
void setWarningIcon();
void setErrorIcon();
private slots:
void slotSAKProcessExited();
protected slots:
virtual void reject();
private:
TQFrame *frame;
TQGridLayout *frameLayout;
TQLabel *mStatusLabel;
TQLabel *mpixLabel;
int mCapsLocked;
bool mUnlockingFailed;
TQStringList layoutsList;
TQStringList::iterator currLayout;
int sPid, sFd;
KProcess* mSAKProcess;
};
#endif
Loading…
Cancel
Save