Patch libpq to use ~/.pgpass for conninfo connections
От | ljb |
---|---|
Тема | Patch libpq to use ~/.pgpass for conninfo connections |
Дата | |
Msg-id | avame0$1sm2$1@news.hub.org обсуждение исходный текст |
Список | pgsql-patches |
Here is a suggested patch to libpq in PostgreSQL-7.3.1 to fix a problem whereby the new ~/.pgpass feature does not work with conninfo-based connections. Without this patch, ~/.pgpass is used for the deprecated PQsetdbLogin() connection method, but not for the recommended PQconnectdb() or PQconnectStart() connection methods. Applying this patch should let ~/.pgpass be used to supply a password for all connection methods. It also fixes libpgtcl's "pg_connect -conninfo {conninfo string}" and PHP's pg_connect("conninfo string") so they will now look in ~/.pgpass. Regarding my message of 2002-12-29, I was wrong in thinking the problem was that DefaultPassword was "" instead of NULL. There are in fact two separate code paths which process connection parameters, including applying defaults and environment variables, and the ~/.pgpass code was only in one of them. The patch below adds it to the other path, in PQconnectStart(). I'm unhappy with the duplication, but I can't see another way to do it without disturbing too much existing code. --- src/interfaces/libpq/fe-connect.c.bak 2002-10-24 19:35:55.000000000 -0400 +++ src/interfaces/libpq/fe-connect.c 2003-01-04 11:18:14.000000000 -0500 @@ -303,7 +303,15 @@ tmp = conninfo_getval(connOptions, "user"); conn->pguser = tmp ? strdup(tmp) : NULL; tmp = conninfo_getval(connOptions, "password"); - conn->pgpass = tmp ? strdup(tmp) : NULL; + /* + * Special handling for password. Note PasswordFromFile mallocs its + * result, so strdup is not necessary. + */ + if (tmp && *tmp) + conn->pgpass = strdup(tmp); + else + conn->pgpass = PasswordFromFile(conn->pghost, conn->pgport, + conn->dbName, conn->pguser); tmp = conninfo_getval(connOptions, "connect_timeout"); conn->connect_timeout = tmp ? strdup(tmp) : NULL; #ifdef USE_SSL
В списке pgsql-patches по дате отправления: