Thread: EDB installer should check for valid %COMSPEC%

EDB installer should check for valid %COMSPEC%

From
Craig Ringer
Date:
Hi folks

Some recent discussion on Stack Overflow has revealed another exciting
way for Windows computers to be subtly broken.

For as yet unknown reasons - probably related to security/virus scanner
software, since everything else seems to be - some Windows machines have
an invalid COMSPEC environment variable.

Two variants have been sighted in the wild:

    %SystemRoot%\system32\cmd.exe;

(note the trailing semicolon), and:

    C:\Windows\System32

Both will produce the delightfully helpful initdb failure:

    initdb: could not execute command ""C:/Program
Files/PostgreSQL/9.2/bin/postgres.exe" --boot -x1 -F ": No error

while running:

    cscript //NoLogo "C:\Program
Files\PostgreSQL\9.2/installer/server/initcluster.vbs" "NT
AUTHORITY\NetworkService" "postgres" "****" "C:\Program
Files\PostgreSQL\9.2" "C:\Program Files\PostgreSQL\9.2\data" 5432 "DEFAULT"

which will exit with:

    Script exit code: 1

In the one I was looking into, fixing COMSPEC in the System control
panel's Environment Variables page by removing the trailing semicolon
corrected the issue. It can be verified as correct by opening a new
command prompt after you've changed the variable (not just re-using an
existing already-open one) and running:

    "%COMSPEC%" /C "echo test ok"

which should print:

    test ok

not something like:

    '"C:\Windows\System32\cmd.exe;"' is not recognized as an internal or
external command,
operable program or batch file."



Since I can find several reports of this spanning over a couple of
years, I'd love to see a test for this integrated into the EDB
installer. Just verify that popen() actually works before running the
initdb script, and if it doesn't, check %COMSPEC% to see if it really
points to cmd.exe .

--
 Craig Ringer                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services



Re: EDB installer should check for valid %COMSPEC%

From
Dave Page
Date:
Hi

On Mon, Nov 19, 2012 at 4:29 AM, Craig Ringer <craig@2ndquadrant.com> wrote:
> Hi folks
>
> Some recent discussion on Stack Overflow has revealed another exciting
> way for Windows computers to be subtly broken.
>
> For as yet unknown reasons - probably related to security/virus scanner
> software, since everything else seems to be - some Windows machines have
> an invalid COMSPEC environment variable.
>
> Two variants have been sighted in the wild:
>
>     %SystemRoot%\system32\cmd.exe;
>
> (note the trailing semicolon), and:
>
>     C:\Windows\System32
>
> Both will produce the delightfully helpful initdb failure:
>
>     initdb: could not execute command ""C:/Program
> Files/PostgreSQL/9.2/bin/postgres.exe" --boot -x1 -F ": No error
>
> while running:
>
>     cscript //NoLogo "C:\Program
> Files\PostgreSQL\9.2/installer/server/initcluster.vbs" "NT
> AUTHORITY\NetworkService" "postgres" "****" "C:\Program
> Files\PostgreSQL\9.2" "C:\Program Files\PostgreSQL\9.2\data" 5432 "DEFAULT"
>
> which will exit with:
>
>     Script exit code: 1
>
> In the one I was looking into, fixing COMSPEC in the System control
> panel's Environment Variables page by removing the trailing semicolon
> corrected the issue. It can be verified as correct by opening a new
> command prompt after you've changed the variable (not just re-using an
> existing already-open one) and running:
>
>     "%COMSPEC%" /C "echo test ok"
>
> which should print:
>
>     test ok
>
> not something like:
>
>     '"C:\Windows\System32\cmd.exe;"' is not recognized as an internal or
> external command,
> operable program or batch file."
>
>
>
> Since I can find several reports of this spanning over a couple of
> years, I'd love to see a test for this integrated into the EDB
> installer. Just verify that popen() actually works before running the
> initdb script, and if it doesn't, check %COMSPEC% to see if it really
> points to cmd.exe .

Interesting - thanks for the info Craig. Sandeep; can you please look
into adding such a check to the installer. We already test the
VBscript interpreter, so this should go in the same place.

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


Re: EDB installer should check for valid %COMSPEC%

From
Craig Ringer
Date:
On 11/19/2012 05:14 PM, Dave Page wrote:
check %COMSPEC% to see if it really
> points to cmd.exe .
Interesting - thanks for the info Craig. Sandeep; can you please look
into adding such a check to the installer. We already test the
VBscript interpreter, so this should go in the same place.
I've just seen a Stack Overflow report related to this that might be of interest. The user reports that the installer fails with:

" The environment variable COMPSPEC does not seem to point to the cmd.exe or there is a trailing semi colon present."

This appears to be a new message and they're using 9.2, so I'm guessing this was the test added. It doesn't appear to actually *mention the value of the COMSPEC environment variable* though. I've asked them for the installer log, but it'd be good to identify this in the message if possible.

The question of interest: http://stackoverflow.com/questions/15287207/problems-installing-postgresql-9-2
-- Craig Ringer                   http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training & Services

Re: EDB installer should check for valid %COMSPEC%

From
Sandeep Thakkar
Date:
We may make the changes in the installer so that it displays the COMSPEC value in the error message itself. Currently, we can get it's value from the installer log. 

But, I wonder why the installer threw the error when the manual run "%COMSPEC%" /c echo "test ok" returned fine. Let's see what the installer log says.

On Fri, Mar 8, 2013 at 11:28 AM, Craig Ringer <craig@2ndquadrant.com> wrote:
On 11/19/2012 05:14 PM, Dave Page wrote:
check %COMSPEC% to see if it really
> points to cmd.exe .
Interesting - thanks for the info Craig. Sandeep; can you please look
into adding such a check to the installer. We already test the
VBscript interpreter, so this should go in the same place.
I've just seen a Stack Overflow report related to this that might be of interest. The user reports that the installer fails with:

" The environment variable COMPSPEC does not seem to point to the cmd.exe or there is a trailing semi colon present."

This appears to be a new message and they're using 9.2, so I'm guessing this was the test added. It doesn't appear to actually *mention the value of the COMSPEC environment variable* though. I've asked them for the installer log, but it'd be good to identify this in the message if possible.

The question of interest: http://stackoverflow.com/questions/15287207/problems-installing-postgresql-9-2

-- Craig Ringer                   http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training & Services



--
Sandeep Thakkar
Senior Software Engineer
EnterpriseDB Corporation
The Enterprise Postgres Company
Phone: +91.20.30589523

Website: www.enterprisedb.com
EnterpriseDB Blog: http://blogs.enterprisedb.com/
Follow us on Twitter: http://www.twitter.com/enterprisedb

This e-mail message (and any attachment) is intended for the use of the individual or entity to whom it is addressed. This message contains information from EnterpriseDB Corporation that may be privileged, confidential, or exempt from disclosure under applicable law. If you are not the intended recipient or authorized to receive this for the intended recipient, any use, dissemination, distribution, retention, archiving, or copying of this communication is strictly prohibited. If you have received this e-mail in error, please notify the sender immediately by reply e-mail and delete this message.