author | kergoth <kergoth> | 2003-04-22 21:18:03 (UTC) |
---|---|---|
committer | kergoth <kergoth> | 2003-04-22 21:18:03 (UTC) |
commit | bb8965d31b06ec122a0916d8c5bc4c4b68873a14 (patch) (side-by-side diff) | |
tree | 63a70f536648757440ac38fd003ab10901d439a0 | |
parent | e3ef0f8587b10bf242d8077609988e06a37bcae5 (diff) | |
download | opie-bb8965d31b06ec122a0916d8c5bc4c4b68873a14.zip opie-bb8965d31b06ec122a0916d8c5bc4c4b68873a14.tar.gz opie-bb8965d31b06ec122a0916d8c5bc4c4b68873a14.tar.bz2 |
Alter embeddedkonsole to obey SHELL env var if set, otherwise use the user's default shell, falling back to /bin/sh.
-rw-r--r-- | core/apps/embeddedkonsole/main.cpp | 22 |
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 @@ -26,12 +26,15 @@ #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 @@ -45,19 +48,28 @@ int main(int argc, char* argv[]) 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 ); |