summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/main.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/core/apps/embeddedkonsole/main.cpp b/core/apps/embeddedkonsole/main.cpp
index 167b009..91199eb 100644
--- a/core/apps/embeddedkonsole/main.cpp
+++ b/core/apps/embeddedkonsole/main.cpp
@@ -8,60 +8,72 @@
/* */
/* This file is part of Konsole, an X terminal. */
/* */
/* The material contained in here more or less directly orginates from */
/* kvt, which is copyright (c) 1996 by Matthias Ettrich <ettrich@kde.org> */
/* */
/* ---------------------------------------------------------------------- */
/* */
/* Ported Konsole to Qt/Embedded */
/* */
/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
/* */
/* -------------------------------------------------------------------------- */
#include "konsole.h"
#include <qpe/qpeapplication.h>
#include <qfile.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
+#include <pwd.h>
+#include <sys/types.h>
+
/* --| main |------------------------------------------------------ */
int main(int argc, char* argv[])
{
if(setuid(getuid()) !=0) qDebug("setuid failed");
if(setgid(getgid()) != 0) qDebug("setgid failed"); // drop privileges
QPEApplication a( argc, argv );
// QPEApplication::grabKeyboard(); // for CTRL and ALT
qDebug("keyboard grabbed");
#ifdef FAKE_CTRL_AND_ALT
qDebug("Fake Ctrl and Alt defined");
QPEApplication::grabKeyboard(); // for CTRL and ALT
#endif
QStrList tmp;
const char* shell = getenv("SHELL");
- if (shell == NULL || *shell == '\0')
+
+ if (shell == NULL || *shell == '\0') {
+ struct passwd *ent = 0;
+ uid_t me = getuid();
shell = "/bin/sh";
+
+ while ( (ent = getpwent()) != 0 ) {
+ if (ent->pw_uid == me) {
+ if (ent->pw_shell != "")
+ shell = ent->pw_shell;
+ break;
+ }
+ }
+ endpwent();
+ }
- // sh is completely broken on familiar. Let's try to get something better
- if ( qstrcmp( shell, "/bin/shell" ) == 0 && QFile::exists( "/bin/bash" ) )
- shell = "/bin/bash";
-
if( putenv((char*)"COLORTERM=") !=0)
qDebug("putenv failed"); // to trigger mc's color detection
Konsole m( "test", shell, tmp, TRUE );
m.setCaption( Konsole::tr("Terminal") );
a.showMainWidget( &m );
return a.exec();
}