su password prompt to stdout instead of /dev/tty

Cyrille Lefevre cyrille.lefevre-lists at laposte.net
Fri Jan 29 00:16:50 UTC 2010


Cyrille Lefevre a écrit :
> 
> 
> sorry, repost to -standards w/ an s !
> 
> jhell a écrit :
>> On Sun, 24 Jan 2010 21:57, glen.j.barber@ wrote:
>>>
>>> Cyrille Lefevre wrote:
>>>>
>>>> su password prompt is displayed to *stdout* instead of */dev/tty*.
>>>>
>>>> # su user
>>>> $ su root -c date > /tmp/date 2>&1
>>>> (nothing displayed)
>>>> $ cat /tmp/date
>>>> Password:su: Sorry
>>>> $ uname -a
>>>> FreeBSD freebsd8.my.domain 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov
>>>> 21 15:48:17 UTC 2009
>>>> root at almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
>>>>
>>>> I suppose this is a getpass() problem ?
>>>>
>>
>> This is intended operation as su(1) may not always be affiliated with 
>> a TTY. This leaves it open for a script to chat with much like what 
>> samba does with its passwd chat mechanism.
> 
> just to feed the debate :
> 
> aix 5.2 : prompt to tty
> hp-ux : prompt to stderr
> netbsd : prompt to tty
> solaris 9 : prompt to stderr
> solaris 10 : prompt to tty
> openbsd : prompt to tty
> ubuntu : prompt to stderr
> 
> freebsd is the only one which prompt to stdout !
> IMHO, it should at least prompt to stderr if not tty...
> and report errors to stderr as usually.
> 
> CC -standards

found it, the guilty is prompt() in 
src/contrib/openpam/lib/openpam_ttyconv.c and not getpass() as usual...

=> fputs(msg, stdout);

which should be, IMHO, something like :

	FILE *ttyp;
	ttyp = fopen("/dev/tty", "w")
	if (!stdtty)
		ttyp = isatty(fileno(stderr)) ? stderr : stdout;
	fputs(msg, ttyp);

or, at least :

	fputs(msg, stderr);

Regards,

Cyrille Lefevre
-- 
mailto:Cyrille.Lefevre-lists at laposte.net




More information about the freebsd-stable mailing list