• Tom Lane's avatar
    Teach libpq to handle arbitrary-length lines in .pgpass files. · b55b4dad
    Tom Lane authored
    Historically there's been a hard-wired assumption here that no line of
    a .pgpass file could be as long as NAMEDATALEN*5 bytes.  That's a bit
    shaky to start off with, because (a) there's no reason to suppose that
    host names fit in NAMEDATALEN, and (b) this figure fails to allow for
    backslash escape characters.  However, it fails completely if someone
    wants to use a very long password, and we're now hearing reports of
    people wanting to use "security tokens" that can run up to several
    hundred bytes.  Another angle is that the file is specified to allow
    comment lines, but there's no reason to assume that long comment lines
    aren't possible.
    
    Rather than guessing at what might be a more suitable limit, let's
    replace the fixed-size buffer with an expansible PQExpBuffer.  That
    adds one malloc/free cycle to the typical use-case, but that's surely
    pretty cheap relative to the I/O this code has to do.
    
    Also, add TAP test cases to exercise this code, because there was no
    test coverage before.
    
    This reverts most of commit 2eb3bc58, as there's no longer a need for
    a warning message about overlength .pgpass lines.  (I kept the explicit
    check for comment lines, though.)
    
    In HEAD and v13, this also fixes an oversight in 74a308cf: there's not
    much point in explicit_bzero'ing the line buffer if we only do so in two
    of the three exit paths.
    
    Back-patch to all supported branches, except that the test case only
    goes back to v10 where src/test/authentication/ was added.
    
    Discussion: https://postgr.es/m/4187382.1598909041@sss.pgh.pa.us
    b55b4dad
001_password.pl 3.94 KB