mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
Add the "PGPASSFILE" environment variable to specify to the password
file. Andrew Dunstan
This commit is contained in:
parent
3b167a4099
commit
453d74b99c
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.183 2005/06/09 19:08:28 tgl Exp $
|
||||
$PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.184 2005/06/10 03:02:01 momjian Exp $
|
||||
-->
|
||||
|
||||
<chapter id="libpq">
|
||||
@ -3712,6 +3712,17 @@ allow non-root users to see process environment variables via
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<indexterm>
|
||||
<primary><envar>PGPASSFILE</envar></primary>
|
||||
</indexterm>
|
||||
<envar>PGPASSFILE</envar>
|
||||
specifies the name of the password file to use for lookups.
|
||||
If not set, it defaults to <filename>~/.pgpass</>
|
||||
(see <xref linkend="libpq-pgpass">).
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<indexterm>
|
||||
<primary><envar>PGSERVICE</envar></primary>
|
||||
</indexterm>
|
||||
@ -3902,12 +3913,13 @@ internationalization.
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
The file <filename>.pgpass</filename> in a user's home directory is a file
|
||||
that can contain passwords to be used if the connection requires a
|
||||
password (and no password has been specified otherwise).
|
||||
On Microsoft Windows the file is named
|
||||
<filename>%APPDATA%\postgresql\pgpass.conf</> (where <filename>%APPDATA%</>
|
||||
refers to the Application Data subdirectory in the user's profile).
|
||||
The file <filename>.pgpass</filename> in a user's home directory or the
|
||||
file referenced by <envar>PGPASSFILE</envar> can contain passwords to
|
||||
be used if the connection requires a password (and no password has been
|
||||
specified otherwise). On Microsoft Windows the file is named
|
||||
<filename>%APPDATA%\postgresql\pgpass.conf</> (where
|
||||
<filename>%APPDATA%</> refers to the Application Data subdirectory in
|
||||
the user's profile).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.307 2005/06/04 20:42:43 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.308 2005/06/10 03:02:30 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -3217,9 +3217,9 @@ static char *
|
||||
PasswordFromFile(char *hostname, char *port, char *dbname, char *username)
|
||||
{
|
||||
FILE *fp;
|
||||
char homedir[MAXPGPATH];
|
||||
char pgpassfile[MAXPGPATH];
|
||||
struct stat stat_buf;
|
||||
char *passfile_env;
|
||||
|
||||
#define LINELEN NAMEDATALEN*5
|
||||
char buf[LINELEN];
|
||||
@ -3236,15 +3236,38 @@ PasswordFromFile(char *hostname, char *port, char *dbname, char *username)
|
||||
if (port == NULL)
|
||||
port = DEF_PGPORT_STR;
|
||||
|
||||
if (!pqGetHomeDirectory(homedir, sizeof(homedir)))
|
||||
return NULL;
|
||||
if ((passfile_env = getenv("PGPASSFILE")) != NULL)
|
||||
{
|
||||
/* use the literal path from the environment, if set */
|
||||
StrNCpy(pgpassfile, passfile_env, MAXPGPATH);
|
||||
if (!pgpassfile)
|
||||
{
|
||||
fprintf(stderr, libpq_gettext("out of memory\n"));
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char homedir[MAXPGPATH];
|
||||
|
||||
snprintf(pgpassfile, sizeof(pgpassfile), "%s/%s", homedir, PGPASSFILE);
|
||||
if (!pqGetHomeDirectory(homedir, sizeof(homedir)))
|
||||
return NULL;
|
||||
snprintf(pgpassfile, sizeof(pgpassfile), "%s/%s", homedir, PGPASSFILE);
|
||||
}
|
||||
|
||||
/* If password file cannot be opened, ignore it. */
|
||||
if (stat(pgpassfile, &stat_buf) == -1)
|
||||
return NULL;
|
||||
|
||||
if (!S_ISREG(stat_buf.st_mode))
|
||||
{
|
||||
fprintf(stderr,
|
||||
libpq_gettext("WARNING: Password file %s is not a plain file.\n"),
|
||||
pgpassfile);
|
||||
free(pgpassfile);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifndef WIN32
|
||||
/* If password file is insecure, alert the user and ignore it. */
|
||||
if (stat_buf.st_mode & (S_IRWXG | S_IRWXO))
|
||||
|
Loading…
Reference in New Issue
Block a user