Somehow it never found its way into cooker list.

> -----Original Message-----
> From: Andrej Borsenkow [mailto:[EMAIL PROTECTED]]
> Sent: Sunday, May 27, 2001 6:08 PM
> To: [EMAIL PROTECTED]; ZSH Workers Mailing List
> Subject: Re: [Cooker] /bin/login from util-linux-2.11c-2mdk 
> breaks zsh ctty hadling
> 
> 
> Chmouel Boudjnah wrote:
> 
>  > Andrej Borsenkow <[EMAIL PROTECTED]> writes:
>  >
>  >
>  >>After I upgraded to the latest util-linux all login zsh's are running
>  >>without controlling tty. bash seems to run normally (attached to
>  >>tty). consoletype fails with EPERM that results in returning "serial"
>  >>instead "vt" and russian charset not activated. I had to copy
>  >>/bin/login from Mdk8 to be able to work.
>  >>
>  >>It is also 2.4.4-3mdk kernel
>  >>
>  >>Chmoul?
>  >>
>  >
>  > ????? really couldn't reproduce the problem, here...
>  >
>  >
> 
> O.K., I have found why it happens. Here goes.
> 
> Here is what happens around a fork in /bin/login for a "good" login
> (1188 is login process):
> 
> 1188  fork()                            = 1200
> 1188  wait4(-1,  <unfinished ...>
> 1200  rt_sigaction(SIGINT, {SIG_DFL}, {SIG_IGN}, 8) = 0
> 1200  msgget(501, 0x2|02)               = 0
> 1200  chdir("/home/bor")                = 0
> 1200  execve("/bin/zsh", ["-zsh"], [/* 6 vars */]) = 0
> 
> Here is what happens at the same place for a "bad" login (1175 is
> login). I marked offending call:
> 
> 1175  fork()                            = 1178
> 1175  ioctl(0, TIOCNOTTY)               = 0
> 1175  --- SIGHUP (Hangup) ---
> 1175  --- SIGCONT (Continued) ---
> 1175  rt_sigaction(SIGHUP, {SIG_DFL}, {SIG_IGN}, 8) = 0
> 1175  wait4(-1,  <unfinished ...>
> 1178  --- SIGCONT (Continued) ---
>   >>> 1178  setsid()                           = 1178
> 1178  rt_sigaction(SIGHUP, {SIG_DFL}, {SIG_IGN}, 8) = 0
> 1178  rt_sigaction(SIGINT, {SIG_DFL}, {SIG_IGN}, 8) = 0
> 1178  msgget(501, 0x2|02)               = 0
> 1178  chdir("/home/bor")                = 0
> 1178  execve("/bin/zsh", ["-zsh"], [/* 6 vars */]) = 0
> 
> 
> As you see, new login now does setsid(). Unfortunately, this call has a
> side effect of resetting process' ctty, so anything exec'ed next runs
> without controlling tty.
> 
> The reason bash still works is that it checks if /dev/tty is available,
> and if not it reopens it:
> 
> 2916  open("/dev/tty", O_RDWR|O_NONBLOCK|O_LARGEFILE) = -1 ENXIO (No
> such device or address)
> 2916  ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0
> 2916  brk(0)                            = 0x80c008c
> 2916  brk(0x80c1000)                    = 0x80c1000
> 2916  brk(0x80c3000)                    = 0x80c3000
> 2916  readlink("/proc/self/fd/0", "/dev/tty3", 4095) = 9
> 2916  open("/dev/tty3", O_RDWR|O_NONBLOCK|O_LARGEFILE) = 3
> 2916  close(3)                          = 0
> 
> the last two open/close pair makes current stdin to controlling tty. Zsh
> does not do it - it inherits std{in,out,err} and opens its SHIN with
> O_NOCTTY.
> 
> I still claim it is a /bin/login bug. It should make sure porgram is
> exec'ed with correct environment that includes ctty.
> 
> -andrej
> 
> P.S. The problem is not limited to zsh - any program that expects
> /dev/tty fails.
> 
> 

Reply via email to