Dann Corbit wrote:
-----Original Message-----
From: Andrew Dunstan [mailto:and...@dunslane.net]
Sent: Tuesday, April 28, 2009 2:27 PM
To: Dann Corbit
Cc: pgsql-hackers@postgresql.org
Subject: Re: [HACKERS] Building Postgresql under Windows question



Dann Corbit wrote:
In this function:
static bool
test_postmaster_connection(bool do_checkpoint)

This code will never succeed:
        snprintf(connstr, sizeof(connstr),
                         "dbname=postgres port=%s connect_timeout=5",
portstr);

        for (i = 0; i < wait_seconds; i++)
        {
                if ((conn = PQconnectdb(connstr)) != NULL &&
                        (PQstatus(conn) == CONNECTION_OK ||
                         PQconnectionNeedsPassword(conn)))
                {
                        PQfinish(conn);
                        success = true;
                        break;
                }


Because pg_hba.conf has this:
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust

to allow connections from the local machine.

(A password is not needed to connect, so the code always fails).


Why won't

        PQstatus(conn) == CONNECTION_OK

be true and thus the code will succeed without requiring a password?

It returns the value CONNECTION_STARTED

I have found a work-around for now.

If I set the method to password in pg_hba.conf, the service starts and
runs correctly.

It is only when the method is set to trust that we get 100% failures.



Then that looks like a libpq bug :-( According to the docs:

"The status can be one of a number of values. However, only two of these are seen outside of an asynchronous connection procedure: CONNECTION_OK and CONNECTION_BAD."

cheers

andrew

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to