-rw-r--r-- | core/apps/embeddedkonsole/konsole.cpp | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/core/apps/embeddedkonsole/konsole.cpp b/core/apps/embeddedkonsole/konsole.cpp index eafc12e..084c39d 100644 --- a/core/apps/embeddedkonsole/konsole.cpp +++ b/core/apps/embeddedkonsole/konsole.cpp | |||
@@ -20,12 +20,15 @@ | |||
20 | /* */ | 20 | /* */ |
21 | /* -------------------------------------------------------------------------- */ | 21 | /* -------------------------------------------------------------------------- */ |
22 | // enhancements added by L.J. Potter <ljp@llornkcor.com> | 22 | // enhancements added by L.J. Potter <ljp@llornkcor.com> |
23 | // enhancements added by Phillip Kuhn | 23 | // enhancements added by Phillip Kuhn |
24 | 24 | ||
25 | #include <stdlib.h> | 25 | #include <stdlib.h> |
26 | #include <sys/types.h> | ||
27 | #include <pwd.h> | ||
28 | #include <unistd.h> | ||
26 | 29 | ||
27 | #ifdef QT_QWS_OPIE | 30 | #ifdef QT_QWS_OPIE |
28 | #include <opie2/ocolorpopupmenu.h> | 31 | #include <opie2/ocolorpopupmenu.h> |
29 | #endif | 32 | #endif |
30 | 33 | ||
31 | #include <qpe/resource.h> | 34 | #include <qpe/resource.h> |
@@ -217,17 +220,55 @@ static const char *commonCmds[] = | |||
217 | 220 | ||
218 | "exit", | 221 | "exit", |
219 | NULL | 222 | NULL |
220 | }; | 223 | }; |
221 | 224 | ||
222 | 225 | ||
226 | static void konsoleInit(const char** shell) { | ||
227 | if(setuid(getuid()) !=0) qDebug("setuid failed"); | ||
228 | if(setgid(getgid()) != 0) qDebug("setgid failed"); // drop privileges | ||
229 | |||
230 | |||
231 | // QPEApplication::grabKeyboard(); // for CTRL and ALT | ||
232 | |||
233 | qDebug("keyboard grabbed"); | ||
234 | #ifdef FAKE_CTRL_AND_ALT | ||
235 | qDebug("Fake Ctrl and Alt defined"); | ||
236 | QPEApplication::grabKeyboard(); // for CTRL and ALT | ||
237 | #endif | ||
238 | |||
239 | *shell = getenv("SHELL"); | ||
240 | qWarning("SHell initially is %s", *shell ); | ||
241 | |||
242 | if (shell == NULL || *shell == '\0') { | ||
243 | struct passwd *ent = 0; | ||
244 | uid_t me = getuid(); | ||
245 | *shell = "/bin/sh"; | ||
246 | |||
247 | while ( (ent = getpwent()) != 0 ) { | ||
248 | if (ent->pw_uid == me) { | ||
249 | if (ent->pw_shell != "") | ||
250 | *shell = ent->pw_shell; | ||
251 | break; | ||
252 | } | ||
253 | } | ||
254 | endpwent(); | ||
255 | } | ||
256 | |||
257 | if( putenv((char*)"COLORTERM=") !=0) | ||
258 | qDebug("putenv failed"); // to trigger mc's color detection | ||
259 | } | ||
260 | |||
261 | |||
223 | Konsole::Konsole(QWidget* parent, const char* name, WFlags fl) : | 262 | Konsole::Konsole(QWidget* parent, const char* name, WFlags fl) : |
224 | QMainWindow(parent, name, fl) | 263 | QMainWindow(parent, name, fl) |
225 | { | 264 | { |
226 | QStrList args; | 265 | QStrList tmp; const char* shell; |
227 | init("/bin/bash",args); | 266 | |
267 | konsoleInit( &shell); | ||
268 | init(shell,tmp); | ||
228 | } | 269 | } |
229 | 270 | ||
230 | Konsole::Konsole(const char* name, const char* _pgm, QStrList & _args, int) | 271 | Konsole::Konsole(const char* name, const char* _pgm, QStrList & _args, int) |
231 | : QMainWindow(0, name) | 272 | : QMainWindow(0, name) |
232 | { | 273 | { |
233 | init(_pgm,_args); | 274 | init(_pgm,_args); |