author | llornkcor <llornkcor> | 2002-10-10 19:56:29 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-10-10 19:56:29 (UTC) |
commit | 4aa326251d797d12e5228a7a1ea6d45518e64ba5 (patch) (unidiff) | |
tree | 4cc63e5bb3e9aa520a90780de261979ffc3dfd21 | |
parent | 946708623722041624b0435acfb2fa678959adba (diff) | |
download | opie-4aa326251d797d12e5228a7a1ea6d45518e64ba5.zip opie-4aa326251d797d12e5228a7a1ea6d45518e64ba5.tar.gz opie-4aa326251d797d12e5228a7a1ea6d45518e64ba5.tar.bz2 |
bastard standard login shell
-rw-r--r-- | core/apps/embeddedkonsole/MyPty.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/core/apps/embeddedkonsole/MyPty.cpp b/core/apps/embeddedkonsole/MyPty.cpp index 6421ab0..9adc248 100644 --- a/core/apps/embeddedkonsole/MyPty.cpp +++ b/core/apps/embeddedkonsole/MyPty.cpp | |||
@@ -55,24 +55,25 @@ | |||
55 | linked by a null-modem cable. Being based on devices the number of | 55 | linked by a null-modem cable. Being based on devices the number of |
56 | simultanous instances of this class is (globally) limited by the number of | 56 | simultanous instances of this class is (globally) limited by the number of |
57 | those device pairs, which is 256. | 57 | those device pairs, which is 256. |
58 | 58 | ||
59 | Another technic are UNIX 98 PTY's. These are supported also, and prefered | 59 | Another technic are UNIX 98 PTY's. These are supported also, and prefered |
60 | over the (obsolete) predecessor. | 60 | over the (obsolete) predecessor. |
61 | 61 | ||
62 | There's a sinister ioctl(2), signal(2) and job control stuff | 62 | There's a sinister ioctl(2), signal(2) and job control stuff |
63 | nessesary to make everything work as it should. | 63 | nessesary to make everything work as it should. |
64 | */ | 64 | */ |
65 | 65 | ||
66 | 66 | ||
67 | #include <qfileinfo.h> | ||
67 | #include <qapplication.h> | 68 | #include <qapplication.h> |
68 | #include <qsocketnotifier.h> | 69 | #include <qsocketnotifier.h> |
69 | #include <qstring.h> | 70 | #include <qstring.h> |
70 | 71 | ||
71 | #include <stdlib.h> | 72 | #include <stdlib.h> |
72 | #include <stdio.h> | 73 | #include <stdio.h> |
73 | #include <signal.h> | 74 | #include <signal.h> |
74 | #include <fcntl.h> | 75 | #include <fcntl.h> |
75 | #include <unistd.h> | 76 | #include <unistd.h> |
76 | #include <termios.h> | 77 | #include <termios.h> |
77 | #include <sys/types.h> | 78 | #include <sys/types.h> |
78 | #include <sys/ioctl.h> | 79 | #include <sys/ioctl.h> |
@@ -160,26 +161,28 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int) | |||
160 | #endif | 161 | #endif |
161 | tcgetattr( STDIN_FILENO, &ttmode ); | 162 | tcgetattr( STDIN_FILENO, &ttmode ); |
162 | ttmode.c_cc[VINTR] = 3; | 163 | ttmode.c_cc[VINTR] = 3; |
163 | ttmode.c_cc[VERASE] = 8; | 164 | ttmode.c_cc[VERASE] = 8; |
164 | tcsetattr( STDIN_FILENO, TCSANOW, &ttmode ); | 165 | tcsetattr( STDIN_FILENO, TCSANOW, &ttmode ); |
165 | setenv("TERM","vt100",1); | 166 | setenv("TERM","vt100",1); |
166 | setenv("COLORTERM","0",1); | 167 | setenv("COLORTERM","0",1); |
167 | 168 | ||
168 | if (getuid() == 0) { | 169 | if (getuid() == 0) { |
169 | char msg[] = "WARNING: You are running this shell as root!\n"; | 170 | char msg[] = "WARNING: You are running this shell as root!\n"; |
170 | write(ttyfd, msg, sizeof(msg)); | 171 | write(ttyfd, msg, sizeof(msg)); |
171 | } | 172 | } |
172 | ; //creates a login shell | 173 | |
173 | execl(cmd, cmd, "--login", 0); | 174 | QString ccmd = "-"+QFileInfo(cmd).fileName(); //creates a login shell |
175 | |||
176 | execl(cmd, ccmd.latin1(), 0); | ||
174 | 177 | ||
175 | donePty(); | 178 | donePty(); |
176 | exit(-1); | 179 | exit(-1); |
177 | } | 180 | } |
178 | 181 | ||
179 | // parent - continue as a widget | 182 | // parent - continue as a widget |
180 | QSocketNotifier* sn_r = new QSocketNotifier(fd,QSocketNotifier::Read,this); | 183 | QSocketNotifier* sn_r = new QSocketNotifier(fd,QSocketNotifier::Read,this); |
181 | QSocketNotifier* sn_e = new QSocketNotifier(fd,QSocketNotifier::Exception,this); | 184 | QSocketNotifier* sn_e = new QSocketNotifier(fd,QSocketNotifier::Exception,this); |
182 | connect(sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); | 185 | connect(sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); |
183 | connect(sn_e,SIGNAL(activated(int)),this,SLOT(error())); | 186 | connect(sn_e,SIGNAL(activated(int)),this,SLOT(error())); |
184 | 187 | ||
185 | return 0; | 188 | return 0; |