|
|
868f7a8 |
diff -up mgetty-1.1.36/login.c.167830 mgetty-1.1.36/login.c
|
|
|
868f7a8 |
--- mgetty-1.1.36/login.c.167830 2008-10-09 22:57:23.000000000 +0200
|
|
|
868f7a8 |
+++ mgetty-1.1.36/login.c 2008-10-09 22:57:23.000000000 +0200
|
|
|
868f7a8 |
@@ -18,7 +18,7 @@
|
|
|
868f7a8 |
#include <sys/types.h>
|
|
|
868f7a8 |
#include <sys/stat.h>
|
|
|
868f7a8 |
#include <fcntl.h>
|
|
|
868f7a8 |
-
|
|
|
868f7a8 |
+#include <sys/ioctl.h>
|
|
|
868f7a8 |
/* NeXTStep/86 has some byte order problems (Christian Starkjohann) */
|
|
|
868f7a8 |
#if defined(NeXT) && defined(__LITTLE_ENDIAN__) && !defined(NEXTSGTTY)
|
|
|
868f7a8 |
# define pw_uid pw_short_pad1
|
|
|
868f7a8 |
@@ -372,6 +372,8 @@ fallthrough:
|
|
|
868f7a8 |
if ( fcntl(0, F_GETFD, 0 ) & 1 )
|
|
|
868f7a8 |
lprintf( L_WARN, "WARNING: close-on-exec bit set on FD 0 - OS BUG?" );
|
|
|
868f7a8 |
|
|
|
868f7a8 |
+ ioctl(0, TIOCSCTTY, (void*)1);
|
|
|
868f7a8 |
+
|
|
|
868f7a8 |
/* execute login */
|
|
|
868f7a8 |
execv( cmd, argv );
|
|
|
868f7a8 |
|
|
|
868f7a8 |
diff -up mgetty-1.1.36/mgetty.c.167830 mgetty-1.1.36/mgetty.c
|
|
|
868f7a8 |
--- mgetty-1.1.36/mgetty.c.167830 2008-10-09 22:57:23.000000000 +0200
|
|
|
868f7a8 |
+++ mgetty-1.1.36/mgetty.c 2008-10-09 22:57:23.000000000 +0200
|
|
|
868f7a8 |
@@ -1034,7 +1034,15 @@ Ring_got_action:
|
|
jvdias |
6909da9 |
}
|
|
jvdias |
6909da9 |
|
|
jvdias |
6909da9 |
/* set permissions to "rw-------" for login */
|
|
jvdias |
6909da9 |
- (void) chmod(devname, 0600);
|
|
jvdias |
6909da9 |
+
|
|
jvdias |
6909da9 |
+ /* JVD, 2005-09-16, : see Red Hat BZ 167830!
|
|
jvdias |
6909da9 |
+ * If devname is owned by 'uucp', and we run login as a non-root userid,
|
|
jvdias |
6909da9 |
+ * then login gets a terminal it has no RW perms for ... bad idea!
|
|
jvdias |
6909da9 |
+ *
|
|
jvdias |
6909da9 |
+ * Let users control the tty device access mode with with 'port-mode'!
|
|
jvdias |
6909da9 |
+ */
|
|
jvdias |
6909da9 |
+ if( ! c_isset(port_mode) )
|
|
jvdias |
6909da9 |
+ (void) chmod(devname, 0600);
|
|
jvdias |
6909da9 |
|
|
jvdias |
6909da9 |
/* set ttystate for login ("after"),
|
|
jvdias |
6909da9 |
* cr-nl mapping flags are set by getlogname()!
|
|
|
868f7a8 |
@@ -1079,7 +1087,15 @@ Ring_got_action:
|
|
jvdias |
6909da9 |
{
|
|
jvdias |
6909da9 |
lprintf( L_WARN, "WARNING: starting login while DCD is low!" );
|
|
jvdias |
6909da9 |
}
|
|
jvdias |
6909da9 |
-
|
|
jvdias |
6909da9 |
+
|
|
jvdias |
6909da9 |
+ /* try to ensure the terminal buffers are clear when we hand over terminal to login:*/
|
|
jvdias |
6909da9 |
+
|
|
jvdias |
6909da9 |
+ tcflush(0, TCIOFLUSH);
|
|
jvdias |
6909da9 |
+ tcgetattr(0,&tio;;
|
|
jvdias |
6909da9 |
+ tio.c_lflag &= ~TOSTOP;
|
|
jvdias |
6909da9 |
+ tcsetattr(0,TCSANOW,&tio;;
|
|
jvdias |
6909da9 |
+ tcsetpgrp(0,getpid());
|
|
jvdias |
6909da9 |
+
|
|
jvdias |
6909da9 |
/* hand off to login dispatcher (which will call /bin/login) */
|
|
jvdias |
6909da9 |
login_dispatch( buf, mgetty_state == St_callback_login? TRUE: FALSE,
|
|
jvdias |
6909da9 |
c_string(login_config) );
|