Use DM library in tdmtsak instead of making command line calls

(cherry picked from commit 6d028f3b52)
pull/182/head
Timothy Pearson 9 years ago committed by Slávek Banko
parent ab88cb07af
commit 9698874290

@ -119,11 +119,11 @@ void SAKDlg::slotSAKProcessExited()
SAKDlg::~SAKDlg()
{
if ((mSAKProcess) && (mSAKProcess->isRunning())) {
mSAKProcess->kill(SIGTERM);
delete mSAKProcess;
}
hide();
if ((mSAKProcess) && (mSAKProcess->isRunning())) {
mSAKProcess->kill(SIGKILL);
delete mSAKProcess;
}
hide();
}
void SAKDlg::closeDialogForced()

@ -157,10 +157,10 @@ void SAKDlg::processInputPipeCommand(TQString command) {
SAKDlg::~SAKDlg()
{
if ((mSAKProcess) && (mSAKProcess->isRunning())) {
mSAKProcess->kill(SIGTERM);
delete mSAKProcess;
}
if ((mSAKProcess) && (mSAKProcess->isRunning())) {
mSAKProcess->kill(SIGKILL);
delete mSAKProcess;
}
mControlPipeHandlerThread->terminate();
mControlPipeHandlerThread->wait();

@ -77,7 +77,7 @@ endif( )
if( BUILD_TSAK )
tde_add_executable( tdmtsak
SOURCES tdmtsak.cpp
LINK ${TQT_LIBRARIES}
LINK ${TQT_LIBRARIES} tdecore-shared dmctl-static
DESTINATION ${BIN_INSTALL_DIR}
SETUID
DESCRIPTION "Secure Attention Key interface for TDM"

@ -1,6 +1,6 @@
/*
This file is part of the TDE project
Copyright (C) 2011 Timothy Pearson <kb9vqf@pearsoncomputing.net>
Copyright (C) 2011 - 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@ -18,10 +18,12 @@
Boston, MA 02110-1301, USA.
*/
#include "tdmtsak.h"
#include <tqstringlist.h>
#include "dmctl.h"
#include "tdmtsak.h"
#define FIFO_FILE "/tmp/tdesocket-global/tsak"
TQString exec(const char * cmd) {
@ -44,15 +46,17 @@ bool is_vt_local() {
return false;
}
else {
TQString cvtName = "";
TQString output = exec("tdmctl list");
TQStringList sessionList = TQStringList::split('\t', output, false);
// See if the current session is local
for ( TQStringList::Iterator it = sessionList.begin(); it != sessionList.end(); ++it ) {
TQStringList sessionInfoList = TQStringList::split(',', *it, true);
if ((*(sessionInfoList.at(0))).startsWith(":")) {
if (TQString(currentDisplay).startsWith(*(sessionInfoList.at(0)))) {
return true;
DM dm;
SessList sess;
if (dm.localSessions(sess)) {
TQString user, loc;
for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) {
DM::sess2Str2(*it, user, loc);
TQStringList sessionInfoList = TQStringList::split(',', loc, true);
if ((*(sessionInfoList.at(0))).startsWith(":")) {
if (TQString(currentDisplay).startsWith(*(sessionInfoList.at(0)))) {
return true;
}
}
}
}
@ -68,44 +72,54 @@ bool is_vt_active() {
return true;
}
else {
DM dm;
SessList sess;
TQString cvtName = "";
TQString output = exec("tdmctl list");
TQString curConsole = exec("fgconsole");
bool intFound;
int curConsoleNum = curConsole.toInt(&intFound);
if (intFound == false) {
TQString curConsole;
int curConsoleNum = dm.activeVT();
if (curConsoleNum < 0) {
return true;
}
curConsole = TQString("vt%1").arg(curConsoleNum);;
TQStringList sessionList = TQStringList::split('\t', output, false);
for ( TQStringList::Iterator it = sessionList.begin(); it != sessionList.end(); ++it ) {
TQStringList sessionInfoList = TQStringList::split(',', *it, true);
if ((*(sessionInfoList.at(0))).startsWith(":")) {
if ((*(sessionInfoList.at(1))) == TQString(curConsole)) {
cvtName = (*(sessionInfoList.at(0)));
curConsole = TQString("vt%1").arg(curConsoleNum);
if (dm.localSessions(sess)) {
TQString user, loc;
for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) {
DM::sess2Str2(*it, user, loc);
TQStringList sessionInfoList = TQStringList::split(',', loc, true);
if ((*(sessionInfoList.at(0))).startsWith(":")) {
if ((*(sessionInfoList.at(1))).stripWhiteSpace() == TQString(curConsole)) {
cvtName = (*(sessionInfoList.at(0)));
}
}
}
}
if (cvtName != "") {
if (TQString(currentDisplay).startsWith(cvtName)) {
return true;
if (cvtName != "") {
if (TQString(currentDisplay).startsWith(cvtName)) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
else {
// See if the current session is local
// If it is, then the VT is not currently active and the SAK must be requested later when it is active
for ( TQStringList::Iterator it = sessionList.begin(); it != sessionList.end(); ++it ) {
TQStringList sessionInfoList = TQStringList::split(',', *it, true);
if ((*(sessionInfoList.at(0))).startsWith(":")) {
if (TQString(currentDisplay).startsWith(*(sessionInfoList.at(0)))) {
return false;
// See if the current session is local
// If it is, then the VT is not currently active and the SAK must be requested later when it is active
for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) {
DM::sess2Str2(*it, user, loc);
if ((*it).self) {
TQStringList sessionInfoList = TQStringList::split(',', loc, true);
if ((*(sessionInfoList.at(1))).startsWith(" vt")) {
// Local and inactive
return false;
}
}
}
// Hmm, not local
// Do not reject the SAK
return true;
}
// Hmm, not local
}
else {
// Failure!
// Do not reject the SAK
return true;
}

Loading…
Cancel
Save