Package: login
Version: 1:4.0.16-2youpi
Severity: normal
Tags: patch upstream

Hi,

When booting with init=/bin/login, tty controlling sequences like ^C
or ^Z don't work. The incurred unfortunate effect is that one can't
interrupt the programs one runs (like ping, e2fsck, badblocks, ...).

This is because login doesn't initialize a session, while it should.
The attached patch corrects that, please apply.

Regards,
Samuel

-- System Information:
Debian Release: testing/unstable
  APT prefers testing
  APT policy: (900, 'testing'), (500, 'unstable'), (500, 'stable'), (1, 
'experimental')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.17
Locale: [EMAIL PROTECTED], [EMAIL PROTECTED] (charmap=ISO-8859-15)

Versions of packages login depends on:
ii  libc6                         2.3.6-13   GNU C Library: Shared libraries
ii  libpam-modules                0.79-3.1   Pluggable Authentication Modules f
ii  libpam-runtime                0.79-3.1   Runtime support for the PAM librar
ii  libpam0g                      0.79-3.1   Pluggable Authentication Modules l

login recommends no packages.

-- no debconf information
diff -u shadow-4.0.16/src/login.c shadow-4.0.16youpi/src/login.c
--- shadow-4.0.16/src/login.c   2006-05-07 19:44:39.000000000 +0200
+++ shadow-4.0.16youpi/src/login.c      2006-06-19 23:45:48.000000000 +0200
@@ -41,6 +41,7 @@
 #include <signal.h>
 #include <stdio.h>
 #include <sys/stat.h>
+#include <sys/ioctl.h>
 #include "defines.h"
 #include "faillog.h"
 #include "failure.h"
@@ -1026,6 +1027,10 @@
        }
        /* child */
 #endif
+       /* start new session */
+       setsid();
+       if (ioctl(0, TIOCSCTTY, 1))
+               fprintf(stderr,_("TIOCSCTTY failed on %s"),tty);
 
        /* We call set_groups() above because this clobbers pam_groups.so */
 #ifndef USE_PAM
--- shadow-4.0.16/src/sulogin.c 2006-05-13 01:13:10.000000000 +0200
+++ shadow-4.0.16youpi/src/sulogin.c    2006-06-19 23:46:22.000000000 +0200
@@ -35,6 +35,7 @@
 #include <pwd.h>
 #include <signal.h>
 #include <stdio.h>
+#include <sys/ioctl.h>
 #include "defines.h"
 #include "getdef.h"
 #include "prototypes.h"
@@ -142,6 +143,10 @@
 #endif
                exit (1);       /* must be a terminal */
        }
+       /* start new session */
+       setsid();
+       if (ioctl(0, TIOCSCTTY, 1))
+               fprintf(stderr,_("TIOCSCTTY failed"));
        while (*envp)           /* add inherited environment, */
                addenv (*envp++, NULL); /* some variables change later */
 

Reply via email to