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

Reply via email to