• Tom Lane's avatar
    Fix libpq to not require user's home directory to exist. · db6986f4
    Tom Lane authored
    Some people like to run libpq-using applications in environments where
    there's no home directory.  We've broken that scenario before (cf commits
    5b406779 and bd58d9d8), and commit ba005f19 broke it again, by making
    it a hard error if we fail to get the home directory name while looking
    for ~/.pgpass.  The previous precedent is that if we can't get the home
    directory name, we should just silently act as though the file we hoped
    to find there doesn't exist.  Rearrange the new code to honor that.
    
    Looking around, the service-file code added by commit 41a4e459 had the
    same disease.  Apparently, that escaped notice because it only runs when
    a service name has been specified, which I guess the people who use this
    scenario don't do.  Nonetheless, it's wrong too, so fix that case as well.
    
    Add a comment about this policy to pqGetHomeDirectory, in the probably
    vain hope of forestalling the same error in future.  And upgrade the
    rather miserable commenting in parseServiceInfo, too.
    
    In passing, also back off parseServiceInfo's assumption that only ENOENT
    is an ignorable error from stat() when checking a service file.  We would
    need to ignore at least ENOTDIR as well (cf 5b406779), and seeing that
    the far-better-tested code for ~/.pgpass treats all stat() failures alike,
    I think this code ought to as well.
    
    Per bug #14872 from Dan Watson.  Back-patch the .pgpass change to v10
    where ba005f19 came in.  The service-file bugs are far older, so
    back-patch the other changes to all supported branches.
    
    Discussion: https://postgr.es/m/20171025200457.1471.34504@wrigleys.postgresql.org
    db6986f4
fe-connect.c 163 KB