BUG #2459: psql 8.1.4 vs 8.0.x behaves differently with tty / con / stdin recent fixes

Started by Silvio Macedoalmost 20 years ago6 messagesbugs
Jump to latest
#1Silvio Macedo
smacedo@calmetric.pt

The following bug has been logged online:

Bug reference: 2459
Logged by: Silvio Macedo
Email address: smacedo@calmetric.pt
PostgreSQL version: 8.1.4
Operating system: Windows XP SP2
Description: psql 8.1.4 vs 8.0.x behaves differently with tty / con
/ stdin recent fixes
Details:

Hi,

I've been using stdin/stdout of psql on Windows to run a script, without
messing with "expect".

Before v8.1.4, one could include the password in the string fed to psql via
stdin to authenticate the connection.

With 8.1.4, it doesn't work.

All of this *seems* to be related to patch introduced by Bruce:
http://archives.postgresql.org/pgsql-patches/2006-03/msg00051.php
to avoid relying on /dev/con on Msys.

Is this a BUG or a design decision? If it's by design, people should be
warned about this different behaviour (getting a password on the stdin
doesn't work in 8.1.4)
If it's a bug, correction should be on file
\src\port\sprompt.c:69
This, together with what is in file port.h, seems to be wrong :
#ifdef WIN32
/* See DEVTTY comment for msys */
|| (getenv("OSTYPE") && strcmp(getenv("OSTYPE"), "msys") == 0)
#endif

Below, reference material with relevant excerpts of different versions of
\src\include\port.h and \src\port\sprompt.c

Thanks for any tip or feedback!
Silvio
calmetric.pt

\postgresql-8.0.7\src\include\port.h:81 to 85

#if defined(WIN32) && !defined(__CYGWIN__)
#define DEVNULL "nul"

#else
#define DEVNULL "/dev/null"

#endif

\postgresql-8.1.4\src\include\port.h:85 to 92

#if defined(WIN32) && !defined(__CYGWIN__)
#define DEVNULL "nul"
/* "con" does not work from the Msys 1.0.10 console (part of MinGW). */
#define DEVTTY "con"
#else
#define DEVNULL "/dev/null"
#define DEVTTY "/dev/tty"
#endif

\postgresql-8.0.7\src\port\sprompt.c:64 to 78

* Do not try to collapse these into one "w+" mode file. Doesn't work
* on some platforms (eg, HPUX 10.20).
*/
termin = fopen("/dev/tty", "r");
termout = fopen("/dev/tty", "w");
if (!termin || !termout)

{
if (termin)
fclose(termin);
if (termout)
fclose(termout);
termin = stdin;
termout = stderr;
}

\postgresql-8.1.4\src\port\sprompt.c:63 to 82
* Do not try to collapse these into one "w+" mode file. Doesn't work on
* some platforms (eg, HPUX 10.20).
*/
termin = fopen(DEVTTY, "r");
termout = fopen(DEVTTY, "w");
if (!termin || !termout
#ifdef WIN32
/* See DEVTTY comment for msys */
|| (getenv("OSTYPE") && strcmp(getenv("OSTYPE"), "msys") == 0)
#endif
)
{
if (termin)
fclose(termin);
if (termout)
fclose(termout);
termin = stdin;
termout = stderr;
}

#2Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Silvio Macedo (#1)
Re: BUG #2459: psql 8.1.4 vs 8.0.x behaves differently with tty / con / stdin recent fixes

Silvio Macedo wrote:

I've been using stdin/stdout of psql on Windows to run a script, without
messing with "expect".

Before v8.1.4, one could include the password in the string fed to psql via
stdin to authenticate the connection.

With 8.1.4, it doesn't work.

You can use PGPASSWORD or a pgpass.conf file instead.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Silvio Macedo (#1)
Re: BUG #2459: psql 8.1.4 vs 8.0.x behaves differently with tty / con / stdin recent fixes

"Silvio Macedo" <smacedo@calmetric.pt> writes:

I've been using stdin/stdout of psql on Windows to run a script, without
messing with "expect".
Before v8.1.4, one could include the password in the string fed to psql via
stdin to authenticate the connection.
With 8.1.4, it doesn't work.

That's how it's been on Unix for a long time (/dev/tty is not stdin),
so I'd say this is a bug fix not a bug.

regards, tom lane

#4Bruce Momjian
bruce@momjian.us
In reply to: Silvio Macedo (#1)
Re: BUG #2459: psql 8.1.4 vs 8.0.x behaves differently with

Unix always prompted from /dev/tty, but on Win32 we didn't have that
working until 8.1.4. It should be that way.

---------------------------------------------------------------------------

Silvio Macedo wrote:

The following bug has been logged online:

Bug reference: 2459
Logged by: Silvio Macedo
Email address: smacedo@calmetric.pt
PostgreSQL version: 8.1.4
Operating system: Windows XP SP2
Description: psql 8.1.4 vs 8.0.x behaves differently with tty / con
/ stdin recent fixes
Details:

Hi,

I've been using stdin/stdout of psql on Windows to run a script, without
messing with "expect".

Before v8.1.4, one could include the password in the string fed to psql via
stdin to authenticate the connection.

With 8.1.4, it doesn't work.

All of this *seems* to be related to patch introduced by Bruce:
http://archives.postgresql.org/pgsql-patches/2006-03/msg00051.php
to avoid relying on /dev/con on Msys.

Is this a BUG or a design decision? If it's by design, people should be
warned about this different behaviour (getting a password on the stdin
doesn't work in 8.1.4)
If it's a bug, correction should be on file
\src\port\sprompt.c:69
This, together with what is in file port.h, seems to be wrong :
#ifdef WIN32
/* See DEVTTY comment for msys */
|| (getenv("OSTYPE") && strcmp(getenv("OSTYPE"), "msys") == 0)
#endif

Below, reference material with relevant excerpts of different versions of
\src\include\port.h and \src\port\sprompt.c

Thanks for any tip or feedback!
Silvio
calmetric.pt

\postgresql-8.0.7\src\include\port.h:81 to 85

#if defined(WIN32) && !defined(__CYGWIN__)
#define DEVNULL "nul"

#else
#define DEVNULL "/dev/null"

#endif

\postgresql-8.1.4\src\include\port.h:85 to 92

#if defined(WIN32) && !defined(__CYGWIN__)
#define DEVNULL "nul"
/* "con" does not work from the Msys 1.0.10 console (part of MinGW). */
#define DEVTTY "con"
#else
#define DEVNULL "/dev/null"
#define DEVTTY "/dev/tty"
#endif

\postgresql-8.0.7\src\port\sprompt.c:64 to 78

* Do not try to collapse these into one "w+" mode file. Doesn't work
* on some platforms (eg, HPUX 10.20).
*/
termin = fopen("/dev/tty", "r");
termout = fopen("/dev/tty", "w");
if (!termin || !termout)

{
if (termin)
fclose(termin);
if (termout)
fclose(termout);
termin = stdin;
termout = stderr;
}

\postgresql-8.1.4\src\port\sprompt.c:63 to 82
* Do not try to collapse these into one "w+" mode file. Doesn't work on
* some platforms (eg, HPUX 10.20).
*/
termin = fopen(DEVTTY, "r");
termout = fopen(DEVTTY, "w");
if (!termin || !termout
#ifdef WIN32
/* See DEVTTY comment for msys */
|| (getenv("OSTYPE") && strcmp(getenv("OSTYPE"), "msys") == 0)
#endif
)
{
if (termin)
fclose(termin);
if (termout)
fclose(termout);
termin = stdin;
termout = stderr;
}

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

--
Bruce Momjian http://candle.pha.pa.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#5Silvio Macedo
smacedo@calmetric.pt
In reply to: Tom Lane (#3)
Re: BUG #2459: psql 8.1.4 vs 8.0.x behaves differently with tty / con / stdin recent fixes

From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: 29 May 2006 18:16
"Silvio Macedo" <smacedo@calmetric.pt> writes:

I've been using stdin/stdout of psql on Windows to run a

script, without

messing with "expect".
Before v8.1.4, one could include the password in the string

fed to psql via

stdin to authenticate the connection.
With 8.1.4, it doesn't work.

That's how it's been on Unix for a long time (/dev/tty is not

stdin),

so I'd say this is a bug fix not a bug.

regards, tom lane

Thanks Alvaro, Tom and Bruce for the quick replies. What an honour!
Regarding UNIX, I know - I helped a tiny bit the port of PGSql to
Linux Sparc64.;)

In this case, I think users upgrading from 8.0.x to 8.1. should be
warned.(think interfacing with old software, no source available,
"upgraded" to PGSql via messy console stub scripts)

Users uncomfortable with writing down the password on a PGPASSWORD
environment var or pgpass.conf, ___*on the machine running PSQL
client*___, seem to have no solution then... I know - something to ask
in pgsql-general.

Thanks again,

Silvio
calmetric.pt

#6Bruce Momjian
bruce@momjian.us
In reply to: Silvio Macedo (#5)
Re: BUG #2459: psql 8.1.4 vs 8.0.x behaves differently with tty

Silvio Macedo wrote:

In this case, I think users upgrading from 8.0.x to 8.1. should be
warned.(think interfacing with old software, no source available,
"upgraded" to PGSql via messy console stub scripts)

Users uncomfortable with writing down the password on a PGPASSWORD
environment var or pgpass.conf, ___*on the machine running PSQL
client*___, seem to have no solution then... I know - something to ask
in pgsql-general.

This change is actually new in 8.1.4. It was not in 8.1.3, and the
8.1.4 release notes mention it:

* Fix problem with password prompting on some Win32 systems (Robert
Kinberg)

Not sure what more we could do. Since you are the first person to
notice a problem, we probably had it at the right level of prominence.

--
Bruce Momjian http://candle.pha.pa.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +