Date: Fri, 29 Jan 2010 01:16:47 +0100 From: Cyrille Lefevre <cyrille.lefevre-lists@laposte.net> To: jhell <jhell@DataIX.net> Cc: freebsd-standards@freebsd.org, freebsd-stable@freebsd.org, Glen Barber <glen.j.barber@gmail.com> Subject: Re: su password prompt to stdout instead of /dev/tty Message-ID: <4B6228EF.5050400@laposte.net> In-Reply-To: <4B60B734.7060803@laposte.net> References: <4B5CEC53.3090402@laposte.net> <20100125025744.GA94378@orion.hsd1.pa.comcast.net> <alpine.BSF.2.00.1001242243460.72774@pragry.qngnvk.ybpny> <4B60B734.7060803@laposte.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Cyrille Lefevre a =E9crit : >=20 >=20 > sorry, repost to -standards w/ an s ! >=20 > jhell a =E9crit : >> 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 N= ov >>>> 21 15:48:17 UTC 2009 >>>> root@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=20 >> samba does with its passwd chat mechanism. >=20 > just to feed the debate : >=20 > 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 >=20 > 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. >=20 > CC -standards found it, the guilty is prompt() in=20 src/contrib/openpam/lib/openpam_ttyconv.c and not getpass() as usual... =3D> fputs(msg, stdout); which should be, IMHO, something like : FILE *ttyp; ttyp =3D fopen("/dev/tty", "w") if (!stdtty) ttyp =3D isatty(fileno(stderr)) ? stderr : stdout; fputs(msg, ttyp); or, at least : fputs(msg, stderr); Regards, Cyrille Lefevre --=20 mailto:Cyrille.Lefevre-lists@laposte.net
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4B6228EF.5050400>