author | llornkcor <llornkcor> | 2002-10-10 19:31:03 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-10-10 19:31:03 (UTC) |
commit | 946708623722041624b0435acfb2fa678959adba (patch) (side-by-side diff) | |
tree | cc5e249b7798145a82ca03cd52b7a7dcb3973082 /core/apps/embeddedkonsole/MyPty.cpp | |
parent | 3f838aec8ec65ff0820c92095b9948413ad895aa (diff) | |
download | opie-946708623722041624b0435acfb2fa678959adba.zip opie-946708623722041624b0435acfb2fa678959adba.tar.gz opie-946708623722041624b0435acfb2fa678959adba.tar.bz2 |
execute /bin/bash --login now
Diffstat (limited to 'core/apps/embeddedkonsole/MyPty.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | core/apps/embeddedkonsole/MyPty.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/core/apps/embeddedkonsole/MyPty.cpp b/core/apps/embeddedkonsole/MyPty.cpp index 3622d48..6421ab0 100644 --- a/core/apps/embeddedkonsole/MyPty.cpp +++ b/core/apps/embeddedkonsole/MyPty.cpp @@ -124,97 +124,98 @@ void MyPty::donePty() const char* MyPty::deviceName() { return ttynam; } void MyPty::error() { // This is code from the Qt DumbTerminal example donePty(); } /*! start the client program. */ int MyPty::run(const char* cmd, QStrList &, const char*, int) { // This is code from the Qt DumbTerminal example cpid = fork(); if ( !cpid ) { // child - exec shell on tty for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL); int ttyfd = open(ttynam, O_RDWR); dup2(ttyfd, STDIN_FILENO); dup2(ttyfd, STDOUT_FILENO); dup2(ttyfd, STDERR_FILENO); // should be done with tty, so close it close(ttyfd); static struct termios ttmode; if ( setsid() < 0 ) perror( "failed to set process group" ); #if defined (TIOCSCTTY) // grabbed from APUE by Stevens ioctl(STDIN_FILENO, TIOCSCTTY, 0); #endif tcgetattr( STDIN_FILENO, &ttmode ); ttmode.c_cc[VINTR] = 3; ttmode.c_cc[VERASE] = 8; tcsetattr( STDIN_FILENO, TCSANOW, &ttmode ); setenv("TERM","vt100",1); setenv("COLORTERM","0",1); if (getuid() == 0) { char msg[] = "WARNING: You are running this shell as root!\n"; write(ttyfd, msg, sizeof(msg)); } - execl(cmd, cmd, 0); +; //creates a login shell + execl(cmd, cmd, "--login", 0); donePty(); exit(-1); } // parent - continue as a widget QSocketNotifier* sn_r = new QSocketNotifier(fd,QSocketNotifier::Read,this); QSocketNotifier* sn_e = new QSocketNotifier(fd,QSocketNotifier::Exception,this); connect(sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); connect(sn_e,SIGNAL(activated(int)),this,SLOT(error())); return 0; } int MyPty::openPty() { // This is code from the Qt DumbTerminal example int ptyfd = -1; #ifdef HAVE_OPENPTY int ttyfd; if ( openpty(&ptyfd,&ttyfd,ttynam,0,0) ) ptyfd = -1; else close(ttyfd); // we open the ttynam ourselves. #else for (const char* c0 = "pqrstuvwxyzabcde"; ptyfd < 0 && *c0 != 0; c0++) { for (const char* c1 = "0123456789abcdef"; ptyfd < 0 && *c1 != 0; c1++) { sprintf(ptynam,"/dev/pty%c%c",*c0,*c1); sprintf(ttynam,"/dev/tty%c%c",*c0,*c1); if ((ptyfd = ::open(ptynam,O_RDWR)) >= 0) { if (geteuid() != 0 && !access(ttynam,R_OK|W_OK) == 0) { ::close(ptyfd); ptyfd = -1; } } } } #endif if ( ptyfd < 0 ) { qApp->exit(1); return -1; } return ptyfd; } |