[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdebase/workspace/kdm
From: Oswald Buddenhagen <ossi () kde ! org>
Date: 2009-10-17 14:59:44
Message-ID: 1255791584.699544.16489.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1036653 by ossi:
make input grabbing optional
it doesn't add any real security on most systems anyway, but
it breaks input aids running in separate x clients.
FEATURE: 164210
M +4 -0 ChangeLog
M +22 -0 config.def
M +5 -0 kfrontend/kdmconfig.cpp
M +2 -0 kfrontend/kdmconfig.h
M +14 -6 kfrontend/kfdialog.cpp
M +24 -20 kfrontend/kgapp.cpp
--- trunk/KDE/kdebase/workspace/kdm/ChangeLog #1036652:1036653
@@ -2,6 +2,10 @@
startup and packaging. Bug fixes are not listed, and feature changes only
if they affect the configuration.
+2009-10-17 Oswald Buddenhagen <ossi@kde.org>
+
+ * Made input grabbing optional. Option GrabInput.
+
2008-11-23 Oswald Buddenhagen <ossi@kde.org>
* Added setting of PAM_XDISPLAY and PAM_XAUTHDATA PAM items.
--- trunk/KDE/kdebase/workspace/kdm/config.def #1036652:1036653
@@ -2431,6 +2431,28 @@
<filename>kdesktoprc</filename> does. Its options are not described
herein; guess their meanings or use the control center.
+Key: GrabInput
+Type: enum
+ Never/GRAB_NEVER: never grab
+ IfNoAuth/GRAB_IFNOAUTH: grab if the display requires no X authorization
+ Always/GRAB_ALWAYS: always grab
+Default: IfNoAuth
+User: greeter-c(grabInputPre)
+Instance: #*/Always
+Comment:
+ Whether to grab keyboard and mouse while the greeter is visible. Grabs
+ may improve security, but make on-screen keyboards, etc. unusable.
+Description:
+ To improve security, the greeter may grab mouse and keyboard input so
+ no other X clients can eavesdrop it. However, the X authorization
+ mechanism will usually prevent malicious X clients from connecting
+ in the first place. Consequently, enabling grabs for local displays
+ is pointless and only marginally improves security for remote displays.
+ </para>
+ <note><para>The mouse grab will make on-screen keyboards unusable.
+ </para></note>
+ <para>
+
Key: GrabServer
Type: bool
Default: false
--- trunk/KDE/kdebase/workspace/kdm/kfrontend/kdmconfig.cpp #1036652:1036653
@@ -44,6 +44,7 @@
bool _isLocal;
bool _isReserve;
bool _authorized;
+int _grabInput;
static QString
getCfgQStr( int id )
@@ -87,6 +88,10 @@
_isReserve = _isLocal && getCfgInt( C_isReserve );
_hasConsole = _hasConsole && _isLocal && getCfgInt( C_hasConsole );
_authorized = getCfgInt( C_isAuthorized );
+ _grabInput =
+ (_grabInputPre == GRAB_NEVER) ? 0 :
+ (_grabInputPre == GRAB_ALWAYS) ? 1 :
+ !_authorized;
_stsFile = _dataDir + "/kdmsts";
--- trunk/KDE/kdebase/workspace/kdm/kfrontend/kdmconfig.h #1036652:1036653
@@ -49,6 +49,8 @@
#endif
void initConfig( void );
+extern int _grabInput;
+
CONF_GREET_C_DECLS
#endif /* KDMCONFIG_H */
--- trunk/KDE/kdebase/workspace/kdm/kfrontend/kfdialog.cpp #1036652:1036653
@@ -140,19 +140,27 @@
static QWidget *current;
adjustGeometry();
- if (!current)
+ if (_grabInput && !current)
secureInputs( QX11Info::display() );
show();
qApp->processEvents();
- fakeFocusIn( winId() );
+ if (_grabInput)
+ fakeFocusIn( winId() );
+ else
+ activateWindow();
QWidget *previous = current;
current = this;
inherited::exec();
current = previous;
- if (current)
- fakeFocusIn( current->winId() );
- else
- unsecureInputs( QX11Info::display() );
+ if (current) {
+ if (_grabInput)
+ fakeFocusIn( current->winId() );
+ else
+ current->activateWindow();
+ } else {
+ if (_grabInput)
+ unsecureInputs( QX11Info::display() );
+ }
return result();
}
--- trunk/KDE/kdebase/workspace/kdm/kfrontend/kgapp.cpp #1036652:1036653
@@ -121,27 +121,31 @@
{
KeySym sym;
+ if (_grabInput) {
+ switch (ev->type) {
+ case FocusIn:
+ case FocusOut:
+ if (ev->xfocus.mode == NotifyUngrab) {
+ if (!regrabKbd) {
+ secureKeyboard( QX11Info::display() );
+ regrabKbd = true;
+ }
+ } else
+ regrabKbd = false;
+ return false;
+ case EnterNotify:
+ case LeaveNotify:
+ if (ev->xcrossing.mode == NotifyUngrab) {
+ if (!regrabPtr) {
+ securePointer( QX11Info::display() );
+ regrabPtr = true;
+ }
+ } else
+ regrabPtr = false;
+ return false;
+ }
+ }
switch (ev->type) {
- case FocusIn:
- case FocusOut:
- if (ev->xfocus.mode == NotifyUngrab) {
- if (!regrabKbd) {
- secureKeyboard( QX11Info::display() );
- regrabKbd = true;
- }
- } else
- regrabKbd = false;
- break;
- case EnterNotify:
- case LeaveNotify:
- if (ev->xcrossing.mode == NotifyUngrab) {
- if (!regrabPtr) {
- securePointer( QX11Info::display() );
- regrabPtr = true;
- }
- } else
- regrabPtr = false;
- break;
case KeyPress:
sym = XLookupKeysym( &ev->xkey, 0 );
if (sym != XK_Return && !IsModifierKey( sym ))
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic