mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
Add the "PGPASSFILE" environment variable to specify to the password
file. Andrew Dunstan
This commit is contained in:
@ -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))
|
||||
|
Reference in New Issue
Block a user