Remove line length restriction in passwordFromFile()

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-hackers@lists.postgresql.org
Cc: Fujii Masao <fujii@postgresql.org>
Date: 2020-08-31T21:24:01Z
Lists: pgsql-hackers

Attachments

Per the discussion at [1], we're now aware of actual use-cases for
password strings approaching a kilobyte in length.  I think this puts
the final nail in the coffin of the idea that passwordFromFile() can
use a fixed-length line buffer.  Therefore, commit 2eb3bc588 (which
added a warning for overlength lines) seems rather misguided in
hindsight.  What we should do instead is fix that code so it has no
hard upper bound on the line length.  Even if you want to say that
we'll set a particular limit on how long the password field can be,
there's no good upper bound for the length of the hostname field;
so ISTM that just getting out of the business of a fixed-size buffer
is the sanest way.

Hence, the attached proposed patch does that, and for good measure
adds some testing of this formerly untested code.

Since we now have an actual user complaint, I'm inclined to back-patch
this all the way.

As noted in the other thread, there may be some other changes needed
to support long passwords, but this is clearly required.

			regards, tom lane

[1] https://www.postgresql.org/message-id/flat/CAOhmDze1nqG2vfegpSsTFCgaiFRsqgjO6yLsbmhroz2zGmJHog%40mail.gmail.com

Commits

  1. Teach libpq to handle arbitrary-length lines in .pgpass files.

  2. Fix issues around .pgpass file.