stub.cpp
/* vi: ts=8 sts=4 sw=4
*
* $Id: stub.cpp 607134 2006-11-23 10:32:03Z mueller $
*
* This file is part of the KDE project, module kdesu.
* Copyright (C) 1999,2000 Geert Jansen <jansen@kde.org>
*
* This is free software; you can use this library under the GNU Library
* General Public License, version 2. See the file "COPYING.LIB" for the
* exact licensing terms.
*
* stub.cpp: Conversation with kdesu_stub.
*/
#include <config.h>
#include <stdlib.h>
#include <unistd.h>
#include <qglobal.h>
#include <qcstring.h>
#include <kdatastream.h>
#include <kapplication.h>
#include <kdebug.h>
#include <dcopclient.h>
#include "stub.h"
#include "kcookie.h"
StubProcess::StubProcess()
{
m_User = "root";
m_Scheduler = SchedNormal;
m_Priority = 50;
m_pCookie = new KCookie;
m_bXOnly = true;
m_bDCOPForwarding = false;
}
StubProcess::~StubProcess()
{
delete m_pCookie;
}
void StubProcess::setPriority(int prio)
{
if (prio > 100)
m_Priority = 100;
else if (prio < 0)
m_Priority = 0;
else
m_Priority = prio;
}
QCString StubProcess::commaSeparatedList(QCStringList lst)
{
if (lst.count() == 0)
return QCString("");
QCStringList::Iterator it = lst.begin();
QCString str = *it;
for (it++; it!=lst.end(); it++)
{
str += ',';
str += *it;
}
return str;
}
/*
* Conversation with kdesu_stub. This is how we pass the authentication
* tokens (X11, DCOP) and other stuff to kdesu_stub.
* return values: -1 = error, 0 = ok, 1 = kill me
*/
int StubProcess::ConverseStub(int check)
{
QCString line, tmp;
while (1)
{
line = readLine();
if (line.isNull())
return -1;
if (line == "kdesu_stub")
{
// This makes parsing a lot easier.
enableLocalEcho(false);
if (check) writeLine("stop");
else writeLine("ok");
} else if (line == "display") {
writeLine(display());
} else if (line == "display_auth") {
#ifdef Q_WS_X11
writeLine(displayAuth());
#else
writeLine("");
#endif
} else if (line == "dcopserver") {
if (m_bDCOPForwarding)
writeLine(dcopServer());
else
writeLine("no");
} else if (line == "dcop_auth") {
if (m_bDCOPForwarding)
writeLine(dcopAuth());
else
writeLine("no");
} else if (line == "ice_auth") {
if (m_bDCOPForwarding)
writeLine(iceAuth());
else
writeLine("no");
} else if (line == "command") {
writeLine(m_Command);
} else if (line == "path") {
QCString path = getenv("PATH");
if (!path.isEmpty() && path[0] == ':')
path = path.mid(1);
if (m_User == "root")
if (!path.isEmpty())
path = "/sbin:/bin:/usr/sbin:/usr/bin:" + path;
else
path = "/sbin:/bin:/usr/sbin:/usr/bin";
writeLine(path);
} else if (line == "user") {
writeLine(m_User);
} else if (line == "priority") {
tmp.setNum(m_Priority);
writeLine(tmp);
} else if (line == "scheduler") {
if (m_Scheduler == SchedRealtime) writeLine("realtime");
else writeLine("normal");
} else if (line == "xwindows_only") {
if (m_bXOnly) writeLine("no");
else writeLine("yes");
} else if (line == "app_startup_id") {
QCStringList env = environment();
QCString tmp;
for( QCStringList::ConstIterator it = env.begin();
it != env.end();
++it )
{
if( (*it).find( "DESKTOP_STARTUP_ID=" ) == 0 )
tmp = (*it).mid( strlen( "DESKTOP_STARTUP_ID=" ));
}
if( tmp.isEmpty())
tmp = "0";
writeLine(tmp);
} else if (line == "app_start_pid") { // obsolete
tmp.setNum(getpid());
writeLine(tmp);
} else if (line == "environment") { // additional env vars
QCStringList env = environment();
for( QCStringList::ConstIterator it = env.begin();
it != env.end();
++it )
writeLine( *it );
writeLine( "" );
} else if (line == "end") {
return 0;
} else
{
kdWarning(900) << k_lineinfo << "Unknown request: -->" << line
<< "<--\n";
return 1;
}
}
return 0;
}
void StubProcess::notifyTaskbar(const QString &)
{
kdWarning(900) << "Obsolete StubProcess::notifyTaskbar() called!" << endl;
}
void StubProcess::virtual_hook( int id, void* data )
{ PtyProcess::virtual_hook( id, data ); }
StubProcess::notifyTaskbar
void notifyTaskbar(const QString &suffix)
Notify the taskbar that a new application has been started.
Definition: stub.cpp:178
KCookie
Utility class to access the authentication tokens needed to run a KDE program (X11 and DCOP cookies)...
Definition: kcookie.h:27
StubProcess::dcopServer
virtual QCString dcopServer()
See display.
Definition: stub.h:110
StubProcess::dcopAuth
virtual QCString dcopAuth()
See display.
Definition: stub.h:114
PtyProcess::enableLocalEcho
int enableLocalEcho(bool enable=true)
Enables/disables local echo on the pseudo tty.
Definition: process.cpp:450
StubProcess::iceAuth
virtual QCString iceAuth()
See display.
Definition: stub.h:118
PtyProcess::writeLine
void writeLine(const QCString &line, bool addNewline=true)
Writes a line of text to the program's standard in.
Definition: process.cpp:302
StubProcess::setPriority
void setPriority(int prio)
Set the priority of the process.
Definition: stub.cpp:48
StubProcess::ConverseStub
int ConverseStub(int check)
Exchange all parameters with kdesu_stub.
Definition: stub.cpp:80
StubProcess::display
virtual QCString display()
This virtual function can be overloaded when special behavior is desired.
Definition: stub.h:100
PtyProcess::readLine
QCString readLine(bool block=true)
Reads a line from the program's standard out.
Definition: process.cpp:175

KDE Home | KDE Accessibility Home | Description of Access Keys