mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-18 18:44:06 +08:00
Allow DOS-style line endings in ~/.pgpass files.
On Windows, libc will mask \r\n line endings for us, since we read the password file in text mode. But that doesn't happen on Unix. People who share password files across both systems might have \r\n line endings in a file they use on Unix, so as a convenience, ignore trailing \r. Per gripe from Josh Berkus. In passing, put the existing check for empty line somewhere where it's actually useful, ie after stripping the newline not before. Vik Fearing, adjusted a bit by me Discussion: <0de37763-5843-b2cc-855e-5d0e5df25807@agliodbs.com>
This commit is contained in:
parent
2cd311d499
commit
46b6f3fff0
@ -5753,18 +5753,26 @@ PasswordFromFile(char *hostname, char *port, char *dbname, char *username)
|
||||
break;
|
||||
|
||||
len = strlen(buf);
|
||||
if (len == 0)
|
||||
continue;
|
||||
|
||||
/* Remove trailing newline */
|
||||
if (buf[len - 1] == '\n')
|
||||
buf[len - 1] = 0;
|
||||
if (len > 0 && buf[len - 1] == '\n')
|
||||
{
|
||||
buf[--len] = '\0';
|
||||
/* Handle DOS-style line endings, too, even when not on Windows */
|
||||
if (len > 0 && buf[len - 1] == '\r')
|
||||
buf[--len] = '\0';
|
||||
}
|
||||
|
||||
if (len == 0)
|
||||
continue;
|
||||
|
||||
if ((t = pwdfMatchesString(t, hostname)) == NULL ||
|
||||
(t = pwdfMatchesString(t, port)) == NULL ||
|
||||
(t = pwdfMatchesString(t, dbname)) == NULL ||
|
||||
(t = pwdfMatchesString(t, username)) == NULL)
|
||||
continue;
|
||||
|
||||
/* Found a match. */
|
||||
ret = strdup(t);
|
||||
fclose(fp);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user