Magnus Hagander <magnus@hagander.net> writes:
> That code was originally "stolen" from psql, and then whacked around a
> number of times. The part about looping and passwords, for example, is in
> startup.c in psql as well. We probably want to fix it there as well (even
> if it doesn't have the same problem, it has the same general design). Or
> perhaps even put that function somewhere shared between the two?
> It's also in pg_dump/pg_backup_db.c, there's a version of it in
> pg_dumpall.c, etc. Which I think is a good argument for fixing them all by
> sharing the code somewhere? In fact, we already have some in
> script/common.c - but it's only used by the tools that are in script/.
Hm, maybe, but where? It's inappropriate for libpgcommon (we don't
want that calling libpq), so I'm not real sure what to do with it.
Also it's not clear to me that all these tools would have the same
requirements for the non-password parameters for the connection request.
BTW, I realized while fooling with this that although the code looks like
it's intended to iterate till a correct password is obtained, actually it
cannot prompt more than once, because of the way PQconnectionNeedsPassword
is coded. Therefore, the double free that clang is worried about can't
really happen. It's still worth fixing IMO.
regards, tom lane