On Sat, Apr 22, 2006 at 04:30:21PM +0100, Dave Page wrote: > > Well, you need to be careful here. Just installing GnuTLS support as is > > will break the latest release of psqlODBC, because they do things with > > libpq that it wasn't really designed for. > > Err, what? It uses PQsocket & PQgetssl, both of which are official, > supported functions that may be being used by countless other apps > for all we know. If libpq wasn't designed to allow apps to use the > socket & SSL struct directly, why include and document the APIs?
AIUI, PQsocket was added back in 6.4 to allow users to do asyncronous operations. ([1] Tom Lane) int PQsocket (PGconn *conn); Returns the Unix file descriptor for the socket connection to the backend, or -1 if there is no open connection. This is a violation of modularity, of course, but there is no alternative: an application that needs asynchronous execution needs to be able to use select() to wait for input from either the backend or any other input streams it may have. To use select() the underlying socket must be made visible. PQgetssl was added in 2000 ([2] Magnus Hagander) with the comment: * I added accessor function "SSL *PQgetssl(void)" to libpq, to get the SSL structure. Any functions from OpenSSL can then be used on this returned structure to get information. * Made psql use this PQgetssl() function after initial connection to report SSL status (only if enabled, of course) It was added so users could "get information" about the connection, not to read/write to the connection. I don't disagree that this is proper use of the API, but I don't think the original creators of the functions really considered this use. And it makes it difficult to introduce an alternate SSL library. Don't worry, psqlODBC will still be able to do it's thing... [1] http://archives.postgresql.org/pgsql-hackers/1998-04/msg00611.php [2] http://archives.postgresql.org/pgsql-patches/2000-08/msg00019.php Have a nice day, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > From each according to his ability. To each according to his ability to > litigate.
signature.asc
Description: Digital signature