Subject: bug#56336: 28.1.90; [28.1] Emacs prompts for password when output from async command contains "password:"

From: Jan Synáček <[email-masked]>
Date: Sun, 3 Jul 2022 18:54:10 +0200

On Sat, Jul 2, 2022 at 2:28 PM Lars Ingebrigtsen <[email-masked]> wrote:
> The former problem is rather intractable.  That is, if you say
>
> ssh foo@host
>
> you'll get a password prompt as the final line in the buffer, and Emacs
> will ask you to enter a password.
>
> If you say
>
> echo -n "password: "; sleep 10; echo foo
>
> then there's no way for Emacs to distinguish that from the ssh
> situation: It sees a prompt as the last thing in the buffer, and Emacs
> can't possibly know that that's not a process asking for a password.
>
> Note that
>
> echo "password: "; echo foo; sleep 10
>
> won't ask for a password.
>
> So I don't know that there's any way to fix this -- Emacs uses a
> heuristic, and it will be wrong in some cases.
>
> Or does anybody have any ideas here?

Well, I know about one thing that might work well enough as an
additional heuristic just for this case.

It seems that if a command only outputs to stdout (and probably to
stderr as well) and doesn't really ask for input, lsof -p <that async
process> shows something like this:
$ lsof -p 145475
...
sleep   145475 jsynacek    0u   CHR  136,1      0t0        4 /dev/pts/1
sleep   145475 jsynacek    1u   CHR  136,1      0t0        4 /dev/pts/1
sleep   145475 jsynacek    2u   CHR  136,1      0t0        4 /dev/pts/1

Whereas if the command really wants input ('ssh jsynacek@localhost' in
this particular example), it looks like the following:
$ lsof -p 145512
...
ssh     145512 jsynacek    0u   CHR              136,1      0t0
4 /dev/pts/1
ssh     145512 jsynacek    1u   CHR              136,1      0t0
4 /dev/pts/1
ssh     145512 jsynacek    2u   CHR              136,1      0t0
4 /dev/pts/1
ssh     145512 jsynacek    3u  IPv6             203802      0t0
TCP localhost:32864->localhost:ssh (ESTABLISHED)
ssh     145512 jsynacek    4u  unix 0x000000006034f025      0t0
203803 type=STREAM (CONNECTED)
ssh     145512 jsynacek    5u   CHR                5,0      0t0
11 /dev/tty

Note the /dev/tty in the output. I'm not sure, but I think this might
be good enough.

-- 
Jan Synáček