Proposed patch to getaddrinfo.c to support IPv6 on Windows

Started by Chuck McDevittover 20 years ago25 messageshackers
Jump to latest
#1Chuck McDevitt
cmcdevitt@greenplum.com

I'm proposing this change to /src/port/getaddrinfo.c to support IPv6
under windows.

10a11,14

* Windows may or may not have these routines, so we handle Windows

special

* by dynamically checking for their existence. If they already

exist, we

* use the Windows native routines, but if not, we use our own.

*

31a36,121

#ifdef WIN32

#define WIN32_LEAN_AND_MEAN

/* Bring in windows.h for LoadLibrary, FreeLibrary, and GetProcAddress

routines */

#include <windows.h>

/*

* The native routines may or may not exist on the Windows platform we

are on,

* so we dynamically look up the routines, and call them via function

pointers.

* Here we need to declare what the function pointers look like

*/

typedef

int

(__stdcall * getaddrinfo_ptr_t)(const char * nodename, const char *

servname,

const struct addrinfo * hints, struct addrinfo ** res);

typedef

void

(__stdcall * freeaddrinfo_ptr_t)(struct addrinfo * ai);

typedef

int

(__stdcall * getnameinfo_ptr_t)(const struct sockaddr * sa, int salen,

char * host, int hostlen, char * serv, int servlen, int flags);

/* static pointers to the native Windows IPv6 routines, so we only do

the lookup once. */

static getaddrinfo_ptr_t getaddrinfo_ptr = NULL;

static freeaddrinfo_ptr_t freeaddrinfo_ptr = NULL;

static getnameinfo_ptr_t getnameinfo_ptr = NULL;

static

bool haveNativeWindowsIPv6routines(void)

{

void * hLibrary = NULL;

static bool alreadyLookedForIpv6routines = FALSE;

if (alreadyLookedForIpv6routines)

return (getaddrinfo_ptr != NULL);

/*

* For Windows XP and Windows 2003 (and longhorn/vista), the IPv6

* routines are present the WinSock 2 library (ws2_32.dll). Try

that first

*/

hLibrary = LoadLibraryA("ws2_32");

if (hLibrary == NULL || GetProcAddress(hLibrary, "getaddrinfo") ==

NULL)

{

/* Well, ws2_32 doesn't exist, or more likely doesn't have

getaddrinfo. */

if (hLibrary != NULL)

FreeLibrary(hLibrary);

/* In Windows 2000, there was only the IPv6 Technology

Preview

* look in the IPv6 WinSock library (wship6.dll).

*/

hLibrary = LoadLibraryA("wship6");

}

/* If hLibrary is null, we couldn't find a dll that supports the

functions */

if (hLibrary != NULL)

{

/* We found a dll, so now get the addresses of the routines

*/

getaddrinfo_ptr = GetProcAddress(hLibrary, "getaddrinfo");

freeaddrinfo_ptr = GetProcAddress(hLibrary, "freeaddrinfo");

getnameinfo_ptr = GetProcAddress(hLibrary, "getnameinfo");

/* If any one of the routines is missing, let's play it safe

and ignore them all */

if (getaddrinfo_ptr == NULL || freeaddrinfo_ptr == NULL ||

getnameinfo_ptr == NULL)

{

FreeLibrary(hLibrary);

hLibrary = NULL;

getaddrinfo_ptr = NULL;

freeaddrinfo_ptr = NULL;

getnameinfo_ptr = NULL;

}

}

alreadyLookedForIpv6routines = TRUE;

return (getaddrinfo_ptr != NULL);

}

#endif

49a140,148

#ifdef WIN32

/*

* If Windows has native IPv6 support, use the native Windows

routine.

* Otherwise, fall through and use our own code.

*/

if (haveNativeWindowsIPv6routines())

return (*getaddrinfo_ptr)(node,service,hintp,res);

#endif

162a262,272

#ifdef WIN32

/*

* If Windows has native IPv6 support, use the native

Windows routine.

* Otherwise, fall through and use our own code.

*/

if (haveNativeWindowsIPv6routines())

{

(*freeaddrinfo_ptr)(node,service,hintp,res);

return;

}

#endif

218a329,338

#ifdef WIN32

/*

* If Windows has native IPv6 support, use the native Windows

routine.

* Otherwise, fall through and use our own code.

*/

if (haveNativeWindowsIPv6routines())

return

(*getnameinfo_ptr)(sa,salen,node,nodelen,service,servicelen,flags);

Show quoted text

#endif

Attachments:

getaddrinfo.patchapplication/octet-stream; name=getaddrinfo.patchDownload+121-1
#2Bruce Momjian
bruce@momjian.us
In reply to: Chuck McDevitt (#1)
Re: Proposed patch to getaddrinfo.c to support IPv6 on Windows

Context diff, please, diff -c.

---------------------------------------------------------------------------

Chuck McDevitt wrote:

I'm proposing this change to /src/port/getaddrinfo.c to support IPv6
under windows.

10a11,14

* Windows may or may not have these routines, so we handle Windows

special

* by dynamically checking for their existence. If they already

exist, we

* use the Windows native routines, but if not, we use our own.

*

31a36,121

#ifdef WIN32

#define WIN32_LEAN_AND_MEAN

/* Bring in windows.h for LoadLibrary, FreeLibrary, and GetProcAddress

routines */

#include <windows.h>

/*

* The native routines may or may not exist on the Windows platform we

are on,

* so we dynamically look up the routines, and call them via function

pointers.

* Here we need to declare what the function pointers look like

*/

typedef

int

(__stdcall * getaddrinfo_ptr_t)(const char * nodename, const char *

servname,

const struct addrinfo * hints, struct addrinfo ** res);

typedef

void

(__stdcall * freeaddrinfo_ptr_t)(struct addrinfo * ai);

typedef

int

(__stdcall * getnameinfo_ptr_t)(const struct sockaddr * sa, int salen,

char * host, int hostlen, char * serv, int servlen, int flags);

/* static pointers to the native Windows IPv6 routines, so we only do

the lookup once. */

static getaddrinfo_ptr_t getaddrinfo_ptr = NULL;

static freeaddrinfo_ptr_t freeaddrinfo_ptr = NULL;

static getnameinfo_ptr_t getnameinfo_ptr = NULL;

static

bool haveNativeWindowsIPv6routines(void)

{

void * hLibrary = NULL;

static bool alreadyLookedForIpv6routines = FALSE;

if (alreadyLookedForIpv6routines)

return (getaddrinfo_ptr != NULL);

/*

* For Windows XP and Windows 2003 (and longhorn/vista), the IPv6

* routines are present the WinSock 2 library (ws2_32.dll). Try

that first

*/

hLibrary = LoadLibraryA("ws2_32");

if (hLibrary == NULL || GetProcAddress(hLibrary, "getaddrinfo") ==

NULL)

{

/* Well, ws2_32 doesn't exist, or more likely doesn't have

getaddrinfo. */

if (hLibrary != NULL)

FreeLibrary(hLibrary);

/* In Windows 2000, there was only the IPv6 Technology

Preview

* look in the IPv6 WinSock library (wship6.dll).

*/

hLibrary = LoadLibraryA("wship6");

}

/* If hLibrary is null, we couldn't find a dll that supports the

functions */

if (hLibrary != NULL)

{

/* We found a dll, so now get the addresses of the routines

*/

getaddrinfo_ptr = GetProcAddress(hLibrary, "getaddrinfo");

freeaddrinfo_ptr = GetProcAddress(hLibrary, "freeaddrinfo");

getnameinfo_ptr = GetProcAddress(hLibrary, "getnameinfo");

/* If any one of the routines is missing, let's play it safe

and ignore them all */

if (getaddrinfo_ptr == NULL || freeaddrinfo_ptr == NULL ||

getnameinfo_ptr == NULL)

{

FreeLibrary(hLibrary);

hLibrary = NULL;

getaddrinfo_ptr = NULL;

freeaddrinfo_ptr = NULL;

getnameinfo_ptr = NULL;

}

}

alreadyLookedForIpv6routines = TRUE;

return (getaddrinfo_ptr != NULL);

}

#endif

49a140,148

#ifdef WIN32

/*

* If Windows has native IPv6 support, use the native Windows

routine.

* Otherwise, fall through and use our own code.

*/

if (haveNativeWindowsIPv6routines())

return (*getaddrinfo_ptr)(node,service,hintp,res);

#endif

162a262,272

#ifdef WIN32

/*

* If Windows has native IPv6 support, use the native

Windows routine.

* Otherwise, fall through and use our own code.

*/

if (haveNativeWindowsIPv6routines())

{

(*freeaddrinfo_ptr)(node,service,hintp,res);

return;

}

#endif

218a329,338

#ifdef WIN32

/*

* If Windows has native IPv6 support, use the native Windows

routine.

* Otherwise, fall through and use our own code.

*/

if (haveNativeWindowsIPv6routines())

return

(*getnameinfo_ptr)(sa,salen,node,nodelen,service,servicelen,flags);

#endif

Content-Description: getaddrinfo.patch

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#3Andrew Dunstan
andrew@dunslane.net
In reply to: Bruce Momjian (#2)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Bruce Momjian wrote:

Context diff, please, diff -c.

It needed dos2unix and pgindent as well. Here's a cleaned patch.

Thanks to Chuck for doing this work.

cheers

andrew

Attachments:

getaddrinfo.patchtext/x-patch; name=getaddrinfo.patchDownload+128-1
#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#3)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Andrew Dunstan <andrew@dunslane.net> writes:

Context diff, please, diff -c.

It needed dos2unix and pgindent as well. Here's a cleaned patch.
Thanks to Chuck for doing this work.

Applied, thanks.

regards, tom lane

#5Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#4)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Does this fix IPv6 on Win32?

---------------------------------------------------------------------------

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Context diff, please, diff -c.

It needed dos2unix and pgindent as well. Here's a cleaned patch.
Thanks to Chuck for doing this work.

Applied, thanks.

regards, tom lane

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#6Andrew Dunstan
andrew@dunslane.net
In reply to: Bruce Momjian (#5)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

I believe so, yes, although I think that we should remove the
HAVE_GETADDRINFO compile time test that Tom built into initdb.c the other
day, so that it can fall through to this code.

cheers

andrew

Bruce Momjian said:

Show quoted text

Does this fix IPv6 on Win32?

---------------------------------------------------------------------------

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Context diff, please, diff -c.

It needed dos2unix and pgindent as well. Here's a cleaned patch.
Thanks to Chuck for doing this work.

Applied, thanks.

#7Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#6)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Bruce Momjian said:

OK, we need text for the release notes. What would it be?

How about this?:

. Support for connections over IPv6 on Windows platforms capable of it.
(Chuck McDevitt, Petr Jelinek, Magnus Hagander, Andrew Dunstan).

cheers

andrew

#8Bruce Momjian
bruce@momjian.us
In reply to: Andrew Dunstan (#6)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

OK, we need text for the release notes. What would it be?

---------------------------------------------------------------------------

Andrew Dunstan wrote:

I believe so, yes, although I think that we should remove the
HAVE_GETADDRINFO compile time test that Tom built into initdb.c the other
day, so that it can fall through to this code.

cheers

andrew

Bruce Momjian said:

Does this fix IPv6 on Win32?

---------------------------------------------------------------------------

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Context diff, please, diff -c.

It needed dos2unix and pgindent as well. Here's a cleaned patch.
Thanks to Chuck for doing this work.

Applied, thanks.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#9Bruce Momjian
bruce@momjian.us
In reply to: Andrew Dunstan (#7)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Thanks, added.

---------------------------------------------------------------------------

Andrew Dunstan wrote:

Bruce Momjian said:

OK, we need text for the release notes. What would it be?

How about this?:

. Support for connections over IPv6 on Windows platforms capable of it.
(Chuck McDevitt, Petr Jelinek, Magnus Hagander, Andrew Dunstan).

cheers

andrew

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#10Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#6)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

"Andrew Dunstan" <andrew@dunslane.net> writes:

I believe so, yes, although I think that we should remove the
HAVE_GETADDRINFO compile time test that Tom built into initdb.c the other
day, so that it can fall through to this code.

Will do. BTW, when we are using getaddrinfo.c, is the gai_strerror
routine therein sufficient for Windows?

regards, tom lane

#11Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#10)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

It, or some related patch appears to have broken the build on buildfarm member snake.

I haven't had time to investigate.

/D

-----Original Message-----
From: "Bruce Momjian"<pgman@candle.pha.pa.us>
Sent: 25/08/05 01:14:54
To: "Tom Lane"<tgl@sss.pgh.pa.us>
Cc: "Andrew Dunstan"<andrew@dunslane.net>, "Chuck McDevitt"<cmcdevitt@greenplum.com>, "pgsql-patches@postgresql.org"<pgsql-patches@postgresql.org>, "PostgreSQL-development"<pgsql-hackers@postgresql.org>
Subject: Re: [HACKERS] [PATCHES] Proposed patch to getaddrinfo.c to support

Does this fix IPv6 on Win32?

---------------------------------------------------------------------------

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Context diff, please, diff -c.

It needed dos2unix and pgindent as well. Here's a cleaned patch.
Thanks to Chuck for doing this work.

Applied, thanks.

regards, tom lane

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

-----Unmodified Original Message-----

Does this fix IPv6 on Win32?

---------------------------------------------------------------------------

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Context diff, please, diff -c.

It needed dos2unix and pgindent as well. Here's a cleaned patch.
Thanks to Chuck for doing this work.

Applied, thanks.

regards, tom lane

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

#12Petr Jelinek
petr@2ndquadrant.com
In reply to: Dave Page (#11)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Dave Page wrote:

It, or some related patch appears to have broken the build on buildfarm member snake.

I haven't had time to investigate.

/D

Atached patch fixes it and also adds proper gai_strerror for windows.
(It's patch against CVS *after* Chucks patch was aplied)

--
Regards
Petr Jelinek (PJMODOS)

Attachments:

getaddrinfo.patchtext/plain; name=getaddrinfo.patchDownload+33-9
#13Andrew Dunstan
andrew@dunslane.net
In reply to: Petr Jelinek (#12)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Petr Jelinek wrote:

Dave Page wrote:

It, or some related patch appears to have broken the build on
buildfarm member snake.

I haven't had time to investigate.

/D

Atached patch fixes it and also adds proper gai_strerror for windows.
(It's patch against CVS *after* Chucks patch was aplied)

I thought this had been tested. I should have tested it myself. Apologies.

Anyway, with Petr's extra patch I get a clean build, but "make check"
fails with a postmaster bind failure and a pgsql failure, both with and
without IPv6 installed, on my Xp-PRO SP1 box. When IPv6 is installed it
complains about an unknown family 23 (which is Windows-speak for AF_INET6).

So, not quite there yet.

I'm out of action for pretty much the rest of today and tomorrow, so
won't be doing more testing for a while.

cheers

andrew

#14Tom Lane
tgl@sss.pgh.pa.us
In reply to: Petr Jelinek (#12)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Petr Jelinek <pjmodos@seznam.cz> writes:

Dave Page wrote:

It, or some related patch appears to have broken the build on buildfarm member snake.

Atached patch fixes it and also adds proper gai_strerror for windows.

Applied. I had to #ifdef the gai_strerror additions to avoid breakage
on my own machine.

regards, tom lane

#15Petr Jelinek
petr@2ndquadrant.com
In reply to: Andrew Dunstan (#13)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Andrew Dunstan wrote:

I thought this had been tested. I should have tested it myself. Apologies.

Right, I thought I tested it, well maybe it was my version dunno but
surely it was my mistake.

Anyway, with Petr's extra patch I get a clean build, but "make check"
fails with a postmaster bind failure and a pgsql failure, both with and
without IPv6 installed, on my Xp-PRO SP1 box. When IPv6 is installed it
complains about an unknown family 23 (which is Windows-speak for AF_INET6).

So, not quite there yet.

[I did make check only in W2K because I don't have direct access to XP
machine now]
No thats not windows error thats postgres error (look at pqcomm.c),
which means HAVE_IPV6 is not defined. I think it should be made that
HAVE_IPV6 and HAVE_STRUCT_ADDRINFO is always defined under windows (and
also #include <ws2tcpip.h> in getaddrinfo.h otherwise it won't build)
but I am not familiar with build system so somebody else will have to do
it (I am not familiar with whole configure thingy at all).
With those changes it should finally work.

--
Regards
Petr Jelinek (PJMODOS)

#16Tom Lane
tgl@sss.pgh.pa.us
In reply to: Petr Jelinek (#15)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Petr Jelinek <pjmodos@seznam.cz> writes:

Andrew Dunstan wrote:

So, not quite there yet.

[I did make check only in W2K because I don't have direct access to XP
machine now]
No thats not windows error thats postgres error (look at pqcomm.c),
which means HAVE_IPV6 is not defined.

Possibly, but that's apparently not the only problem. I'm looking at
the first buildfarm result with this patch,
http://www.pgbuildfarm.org/cgi-bin/show_log.pl?nm=loris&amp;dt=2005-08-25%2018:56:02

The interesting part is the postmaster log at the bottom:

LOG: could not bind IPv4 socket: No error
HINT: Is another postmaster already running on port 55678? If not, wait a few seconds and retry.
WARNING: could not create listen socket for "localhost"
FATAL: could not create any TCP/IP sockets

Apparently, access to IPv4 sockets isn't working either (and the "No
error" isn't very helpful; would seem we're not reading the right
status value).

regards, tom lane

#17Petr Jelinek
petr@2ndquadrant.com
In reply to: Tom Lane (#16)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Tom Lane wrote:

Possibly, but that's apparently not the only problem. I'm looking at
the first buildfarm result with this patch,
http://www.pgbuildfarm.org/cgi-bin/show_log.pl?nm=loris&amp;dt=2005-08-25%2018:56:02

The interesting part is the postmaster log at the bottom:

LOG: could not bind IPv4 socket: No error
HINT: Is another postmaster already running on port 55678? If not, wait a few seconds and retry.
WARNING: could not create listen socket for "localhost"
FATAL: could not create any TCP/IP sockets

Apparently, access to IPv4 sockets isn't working either (and the "No
error" isn't very helpful; would seem we're not reading the right
status value).

/me kicks brother out of winXP machine to see whats going on

Yep those changes proposed in my previous email fixes IPv4 too.

LOG: database system was shut down at 2005-08-26 00:05:51 [removed
unreadable chars :)]
LOG: checkpoint record is at 0/390CE0
LOG: redo record is at 0/390CE0; undo record is at 0/0; shutdown TRUE
LOG: next transaction ID: 562; next OID: 10791
LOG: next MultiXactId: 1; next MultiXactOffset: 0
LOG: database system is ready
LOG: transaction ID wrap limit is 2147484144, limited by database
"postgres"

Looks ok, i don't know what IPv4 has to do with all of this though.

--
Regards
Petr Jelinek (PJMODOS)

#18Tom Lane
tgl@sss.pgh.pa.us
In reply to: Petr Jelinek (#17)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Petr Jelinek <pjmodos@seznam.cz> writes:

Yep those changes proposed in my previous email fixes IPv4 too.

Apparently not on loris (unless there was another patch that I missed).
Maybe something to do with a different version of Windows?

regards, tom lane

#19Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#18)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Tom Lane wrote:

Petr Jelinek <pjmodos@seznam.cz> writes:

Yep those changes proposed in my previous email fixes IPv4 too.

Apparently not on loris (unless there was another patch that I missed).
Maybe something to do with a different version of Windows?

I suspected we'd forgotten something.

The attached small patch appears to be what's required (at least on
loris). "make check" failed but not for any apparent ipv6 reason. More
importantly, we correctly set HAVE_IPV6 and HAVE_STRUCT_ADDRINFO.

cheers

andrew

Attachments:

winip6.patchtext/x-patch; name=winip6.patchDownload+8-0
#20Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#19)
Re: [HACKERS] Proposed patch to getaddrinfo.c to support

Andrew Dunstan <andrew@dunslane.net> writes:

I suspected we'd forgotten something.

The attached small patch appears to be what's required (at least on
loris). "make check" failed but not for any apparent ipv6 reason. More
importantly, we correctly set HAVE_IPV6 and HAVE_STRUCT_ADDRINFO.

Applied. One step at a time ;-)

regards, tom lane

#21Petr Jelinek
petr@2ndquadrant.com
In reply to: Andrew Dunstan (#19)
#22Andrew Dunstan
andrew@dunslane.net
In reply to: Petr Jelinek (#21)
#23Petr Jelinek
petr@2ndquadrant.com
In reply to: Andrew Dunstan (#22)
#24Andrew Dunstan
andrew@dunslane.net
In reply to: Petr Jelinek (#23)
#25Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#24)