diff options
Diffstat (limited to 'tdm/kfrontend/kgapp.cpp')
| -rw-r--r-- | tdm/kfrontend/kgapp.cpp | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/tdm/kfrontend/kgapp.cpp b/tdm/kfrontend/kgapp.cpp index 2d630485e..c0000aef0 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 <kuser.h> #include <kprocess.h> #include <tdecmdlineargs.h> #include <kcrash.h> @@ -72,6 +73,7 @@ bool has_twin = false; bool is_themed = false; bool trinity_desktop_lock_use_sak = TRUE; bool trinity_desktop_synchronize_keyboard_lights = TRUE; +bool trinity_desktop_watch_cryptographic_cards = TRUE; TQPoint primaryScreenPosition; static int @@ -216,6 +218,7 @@ kg_main( const char *argv0 ) TDEProcess *tsak = 0; TDEProcess *kbdl = 0; + TDEProcess *ccsm = 0; TDEProcess *proc = 0; TDEProcess *comp = 0; TDEProcess *dcop = 0; @@ -252,6 +255,12 @@ kg_main( const char *argv0 ) kbdl->start(); } + if (trinity_desktop_watch_cryptographic_cards) { + ccsm = new TDEProcess; + *ccsm << TQCString( argv0, strrchr( argv0, '/' ) - argv0 + 2 ) + "tdecryptocardwatcher"; + ccsm->start(); + } + XSetErrorHandler( ignoreXError ); argb_visual_available = false; char *display = 0; @@ -334,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(); @@ -491,6 +501,7 @@ kg_main( const char *argv0 ) Debug( "left event loop\n" ); login_user = static_cast<KGreeter*>(dialog)->curUser; + login_card_user = static_cast<KGreeter*>(dialog)->cardLoginUser; login_session_wm = static_cast<KGreeter*>(dialog)->curWMSession; if (rslt != ex_greet) { @@ -514,13 +525,36 @@ 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(); } + if (ccsm) { + ccsm->closeStdin(); + ccsm->detach(); + } if (comp) { if (comp->isRunning()) { - if (_compositor == TDE_COMPOSITOR_BINARY) { + if (((login_session_wm == "tde") || (login_session_wm == "trinity") || (login_session_wm == "failsafe")) && + (_compositor == TDE_COMPOSITOR_BINARY)) { // Change process UID // Get user UID passwd* userinfo = getpwnam(login_user.ascii()); @@ -533,15 +567,18 @@ kg_main( const char *argv0 ) comp->writeStdin(newuid.ascii(), newuid.length()); usleep(50000); // Give the above function some time to execute. Note that on REALLY slow systems this could fail, leaving kompmgr running as root. TODO: Look into ways to make this more robust. } + comp->closeStdin(); + comp->detach(); + } + else { + comp->kill(); } - comp->closeStdin(); - comp->detach(); } delete comp; } if (twin) { if (twin->isRunning()) { - if (login_session_wm.endsWith("/starttde") || (login_session_wm == "failsafe")) { + if ((login_session_wm == "tde") || (login_session_wm == "trinity") || (login_session_wm == "failsafe")) { twin->closeStdin(); twin->detach(); dcop->detach(); |
