Updated patch applied. I found a use of /dev/tty in psql for command
history that I changed to stderr for Win32.
Thanks for the legwork in finding the cause of this bug. Backpatched to
8.1.X and 8.0.X.
---------------------------------------------------------------------------
Robert Kinberg wrote:
> The current version of psql, pg_dump, ... do not properly prompt the
> user for a password, when the backend database is setup for password
> authentication on a Windows platform. In investigating the code, I
> noticed that the file '/dev/tty' is opened to interact with the console.
> It appears as if on a Windows platform, the actual file /dev/tty is
> opened, instead of the console. I am supplying a patch to address this
> issue on the Windows platform.
>
> *** ./src/port/sprompt.c.orig Wed Feb 22 13:07:43 2006
> --- ./src/port/sprompt.c Wed Feb 22 13:08:14 2006
> ***************
> *** 40,47 ****
> {
> int length;
> char *destination;
> ! FILE *termin,
> ! *termout;
>
> #ifdef HAVE_TERMIOS_H
> struct termios t_orig,
> --- 40,47 ----
> {
> int length;
> char *destination;
> ! FILE *termin = NULL,
> ! *termout = NULL;
>
> #ifdef HAVE_TERMIOS_H
> struct termios t_orig,
> ***************
> *** 63,70 ****
> --- 63,72 ----
> * Do not try to collapse these into one "w+" mode file. Doesn't work
> on
> * some platforms (eg, HPUX 10.20).
> */
> + #ifndef WIN32
> termin = fopen("/dev/tty", "r");
> termout = fopen("/dev/tty", "w");
> + #endif
> if (!termin || !termout)
> {
> if (termin)
>
>
> Let me know what you think.
>
> Robert Kinberg
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/docs/faq
>
--
Bruce Momjian http://candle.pha.pa.us
SRA OSS, Inc. http://www.sraoss.com
+ If your life is a hard drive, Christ can be your backup. +
Index: src/bin/psql/command.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/psql/command.c,v
retrieving revision 1.161
diff -c -c -r1.161 command.c
*** src/bin/psql/command.c 12 Feb 2006 04:04:32 -0000 1.161
--- src/bin/psql/command.c 3 Mar 2006 23:38:05 -0000
***************
*** 753,760 ****
expand_tilde(&fname);
/* This scrolls off the screen when using /dev/tty */
success = saveHistory(fname ? fname : "/dev/tty");
!
if (success && !quiet && fname)
printf(gettext("Wrote history to file \"%s/%s\".\n"),
pset.dirname ? pset.dirname : ".", fname);
--- 753,763 ----
expand_tilde(&fname);
/* This scrolls off the screen when using /dev/tty */
+ #ifndef WIN32
success = saveHistory(fname ? fname : "/dev/tty");
! #else
! success = saveHistory(fname ? fname : stderr);
! #endif
if (success && !quiet && fname)
printf(gettext("Wrote history to file \"%s/%s\".\n"),
pset.dirname ? pset.dirname : ".", fname);
Index: src/port/sprompt.c
===================================================================
RCS file: /cvsroot/pgsql/src/port/sprompt.c,v
retrieving revision 1.12
diff -c -c -r1.12 sprompt.c
*** src/port/sprompt.c 15 Oct 2005 02:49:51 -0000 1.12
--- src/port/sprompt.c 3 Mar 2006 23:38:06 -0000
***************
*** 40,47 ****
{
int length;
char *destination;
! FILE *termin,
! *termout;
#ifdef HAVE_TERMIOS_H
struct termios t_orig,
--- 40,47 ----
{
int length;
char *destination;
! FILE *termin = NULL,
! *termout = NULL;
#ifdef HAVE_TERMIOS_H
struct termios t_orig,
***************
*** 63,70 ****
--- 63,76 ----
* Do not try to collapse these into one "w+" mode file. Doesn't work on
* some platforms (eg, HPUX 10.20).
*/
+ #ifndef WIN32
+ /*
+ * Some win32 platforms actually have a /dev/tty file, but it isn't
+ * a device file, and it doesn't work as expected, so we avoid
trying.
+ */
termin = fopen("/dev/tty", "r");
termout = fopen("/dev/tty", "w");
+ #endif
if (!termin || !termout)
{
if (termin)
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster