1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-28 18:48:04 +03:00
Files
postgres/src/port
Tom Lane fc752505a9 Fix assorted issues in client host name lookup.
The code for matching clients to pg_hba.conf lines that specify host names
(instead of IP address ranges) failed to complain if reverse DNS lookup
failed; instead it silently didn't match, so that you might end up getting
a surprising "no pg_hba.conf entry for ..." error, as seen in bug #9518
from Mike Blackwell.  Since we don't want to make this a fatal error in
situations where pg_hba.conf contains a mixture of host names and IP
addresses (clients matching one of the numeric entries should not have to
have rDNS data), remember the lookup failure and mention it as DETAIL if
we get to "no pg_hba.conf entry".  Apply the same approach to forward-DNS
lookup failures, too, rather than treating them as immediate hard errors.

Along the way, fix a couple of bugs that prevented us from detecting an
rDNS lookup error reliably, and make sure that we make only one rDNS lookup
attempt; formerly, if the lookup attempt failed, the code would try again
for each host name entry in pg_hba.conf.  Since more or less the whole
point of this design is to ensure there's only one lookup attempt not one
per entry, the latter point represents a performance bug that seems
sufficient justification for back-patching.

Also, adjust src/port/getaddrinfo.c so that it plays as well as it can
with this code.  Which is not all that well, since it does not have actual
support for rDNS lookup, but at least it should return the expected (and
required by spec) error codes so that the main code correctly perceives the
lack of functionality as a lookup failure.  It's unlikely that PG is still
being used in production on any machines that require our getaddrinfo.c,
so I'm not excited about working harder than this.

To keep the code in the various branches similar, this includes
back-patching commits c424d0d105 and
1997f34db4 into 9.2 and earlier.

Back-patch to 9.1 where the facility for hostnames in pg_hba.conf was
introduced.
2014-04-02 17:11:24 -04:00
..
2014-01-07 16:05:30 -05:00
2011-04-10 11:42:00 -04:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2011-06-09 14:32:50 -04:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2011-04-10 11:42:00 -04:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2012-02-15 12:13:32 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2010-09-20 22:08:53 +02:00
2010-09-20 22:08:53 +02:00
2014-01-07 16:05:30 -05:00
2010-09-20 22:08:53 +02:00
2010-09-20 22:08:53 +02:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00
2014-01-07 16:05:30 -05:00

src/port/README

libpgport
=========

libpgport must have special behavior.  It supplies functions to both
libraries and applications.  However, there are two complexities:

1)  Libraries need to use object files that are compiled with exactly
the same flags as the library.  libpgport might not use the same flags,
so it is necessary to recompile the object files for individual
libraries.  This is done by removing -lpgport from the link line:

        # Need to recompile any libpgport object files
        LIBS := $(filter-out -lpgport, $(LIBS))

and adding infrastructure to recompile the object files:

        OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \
                connect.o misc.o path.o exec.o \
                $(filter snprintf.o, $(LIBOBJS))

The problem is that there is no testing of which object files need to be
added, but missing functions usually show up when linking user
applications.

2) For applications, we use -lpgport before -lpq, so the static files
from libpgport are linked first.  This avoids having applications
dependent on symbols that are _used_ by libpq, but not intended to be
exported by libpq.  libpq's libpgport usage changes over time, so such a
dependency is a problem.  Win32, Linux, and Darwin use an export list to
control the symbols exported by libpq.