30 lines
866 B
Text
30 lines
866 B
Text
|
Use the address family from the address, not from the netmask,
|
||
|
since the latter is unreliable. Fixes "samenet"/"samehost".
|
||
|
|
||
|
Index: src/backend/libpq/ifaddr.c
|
||
|
--- src/backend/libpq/ifaddr.c.orig
|
||
|
+++ src/backend/libpq/ifaddr.c
|
||
|
@@ -200,17 +200,16 @@ run_ifaddr_callback(PgIfAddrCallback callback, void *c
|
||
|
/* Check that the mask is valid */
|
||
|
if (mask)
|
||
|
{
|
||
|
- if (mask->sa_family != addr->sa_family)
|
||
|
+
|
||
|
+ /* mask->sa_family can be different from addr->sa_family. */
|
||
|
+
|
||
|
+ if (addr->sa_family == AF_INET)
|
||
|
{
|
||
|
- mask = NULL;
|
||
|
- }
|
||
|
- else if (mask->sa_family == AF_INET)
|
||
|
- {
|
||
|
if (((struct sockaddr_in *) mask)->sin_addr.s_addr == INADDR_ANY)
|
||
|
mask = NULL;
|
||
|
}
|
||
|
#ifdef HAVE_IPV6
|
||
|
- else if (mask->sa_family == AF_INET6)
|
||
|
+ else if (addr->sa_family == AF_INET6)
|
||
|
{
|
||
|
if (IN6_IS_ADDR_UNSPECIFIED(&((struct sockaddr_in6 *) mask)->sin6_addr))
|
||
|
mask = NULL;
|