Skip to content
Snippets Groups Projects
Commit 33af0876 authored by Tom Lane's avatar Tom Lane
Browse files

Try to fix the AIX getaddrinfo mess in a way that works on all versions.

Going to wait for buildfarm results before backpatching, this time.
parent 0549ba82
No related branches found
No related tags found
No related merge requests found
......@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/libpq/ip.c,v 1.37 2006/10/19 17:26:32 tgl Exp $
* $PostgreSQL: pgsql/src/backend/libpq/ip.c,v 1.38 2006/10/19 23:17:39 tgl Exp $
*
* This file and the IPV6 implementation were initially provided by
* Nigel Kukard <nkukard@lbsd.net>, Linux Based Systems Design
......@@ -64,6 +64,8 @@ int
pg_getaddrinfo_all(const char *hostname, const char *servname,
const struct addrinfo * hintp, struct addrinfo ** result)
{
int rc;
/* not all versions of getaddrinfo() zero *result on failure */
*result = NULL;
......@@ -72,18 +74,37 @@ pg_getaddrinfo_all(const char *hostname, const char *servname,
return getaddrinfo_unix(servname, hintp, result);
#endif
/* NULL has special meaning to getaddrinfo(). */
rc = getaddrinfo((!hostname || hostname[0] == '\0') ? NULL : hostname,
servname, hintp, result);
#ifdef _AIX
/*
* It seems AIX's getaddrinfo doesn't reliably zero sin_port when servname
* is NULL, so force the issue.
* It seems some versions of AIX's getaddrinfo don't reliably zero
* sin_port when servname is NULL, so clean up after it.
*/
if (servname == NULL)
servname = "0";
if (servname == NULL && rc == 0)
{
struct addrinfo *addr;
for (addr = *result; addr; addr = addr->ai_next)
{
switch (addr->ai_family)
{
case AF_INET:
((struct sockaddr_in *) addr->ai_addr)->sin_port = htons(0);
break;
#ifdef HAVE_IPV6
case AF_INET6:
((struct sockaddr_in6 *) addr->ai_addr)->sin6_port = htons(0);
break;
#endif
}
}
}
#endif
/* NULL has special meaning to getaddrinfo(). */
return getaddrinfo((!hostname || hostname[0] == '\0') ? NULL : hostname,
servname, hintp, result);
return rc;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment