b...@bsd.de (Christoph Badura) writes:

>And it hangs there.  ^C and ^T work, though.  It's just that nothing
>happens when pressing ENTER, ^M, ^J, or ^D.

>My GSoC student just reported that after "sudo pkgin install vim"
>it prints "proceed ? [Y/n]"  and after entering "y" and ENTER nothing
>happens.

>This doesn't happen when logging in via ssh.

>Does anyone else see this?


That is probably a sudo issue. By default sudo acts as a tty
emulator like:

 |-+= 01407 root login 
 | \-+= 00692 root -sh 
 |   \-+= 00975 root sudo -s 
 |     \-+= 00983 root sudo -s 
 |       \--= 00989 root /bin/sh 

Where the outer sudo reads raw tty input and should pass input
to the started command. However:

USER     CMD          PID   FD  MOUNT         INUM MODE         SZ|DV R/W
root     sudo         975    0  /           284552 crw-------  constty rw
root     sudo         975    1  /           284552 crw-------  constty rw
root     sudo         975    2  /           284552 crw-------  constty rw
root     sudo         975    9  /           284563 crw-rw-rw-     tty rw
root     sudo         975   11  /dev/pts         6 crw-rw-rw-   ptc,1  rw
root     sudo         975   14  /           284552 crw-------  constty rw
root     sudo         975   15  /           284552 crw-------  constty rw
root     sudo         975   16  /           284552 crw-------  constty rw

root     sudo         983    0  /           284552 crw-------  constty rw
root     sudo         983    1  /           284552 crw-------  constty rw
root     sudo         983    2  /           284552 crw-------  constty rw
root     sudo         983   12  /dev/pts         5 crw--w----   pts/1 rw

root     sh           989    0  /           284552 crw-------  constty rw
root     sh           989    1  /           284552 crw-------  constty rw
root     sh           989    2  /           284552 crw-------  constty rw
root     sh           989   12  /           284563 crw-rw-rw-     tty rw

The started command (sh) has only open file handles to the console.

The outer sudo process reads from constty and passes it to the pty,
it also reads back the echo and writes it back to constty.

Neither the innner sudo process nor the command see any input, except
for ctrl-c, where the command sees the signal, and prints the new
prompt directly to constty.

   989    989 sh       SIGINT caught handler=0x1c1c1df40 mask=0x0 code=0x0
   989    989 sh       __sigprocmask14(0x3, 0x7f7fffea3ff0, 0) = 0
   989    989 sh       emul(netbsd)
   989    989 sh       write(0x2, 0x715c5c94f000, 0x1) = 1
       "\n"
   989    989 sh       __wait450(0xffffffff, 0x7f7fffea449c, 0x13, 0) Err#10 
ECHILD
   989    989 sh       __stat50("/var/mail/root", 0x7f7fffea4450) Err#2 ENOENT
   989    989 sh       write(0x2, 0x715c5c94f000, 0x2) = 2
       "# "


In the ssh case:

-+= 00942 root -sh 
 \-+= 01631 root sudo -s 
   \-+= 01528 root sudo -s 
     \--= 00977 root /bin/sh 

USER     CMD          PID   FD  MOUNT         INUM MODE         SZ|DV R/W
root     sudo        1631    0  /dev/pts         7 crw--w----   pts/2 rw
root     sudo        1631    1  /dev/pts         7 crw--w----   pts/2 rw
root     sudo        1631    2  /dev/pts         7 crw--w----   pts/2 rw
root     sudo        1631    9  /           284563 crw-rw-rw-     tty rw
root     sudo        1631   11  /dev/pts        10 crw-rw-rw-   ptc,3  rw

root     sudo        1528    0  /dev/pts         7 crw--w----   pts/2 rw
root     sudo        1528    1  /dev/pts         7 crw--w----   pts/2 rw
root     sudo        1528    2  /dev/pts         7 crw--w----   pts/2 rw
root     sudo        1528   12  /dev/pts         9 crw--w----   pts/3 rw

root     sh           977    0  /dev/pts         9 crw--w----   pts/3 rw
root     sh           977    1  /dev/pts         9 crw--w----   pts/3 rw
root     sh           977    2  /dev/pts         9 crw--w----   pts/3 rw
root     sh           977   12  /           284563 crw-rw-rw-     tty rw

The started command is connected to the new pty opened by sudo and
receives the data that the outer sudo writes to it.


N.B. you could avoid this by disabling the pty mode in sudoers.


Reply via email to