OpenSSL Applink - Mailing list pgsql-patches

From Dave Page
Subject OpenSSL Applink
Date
Msg-id 46FD0F60.2050805@postgresql.org
Whole thread Raw
Responses Re: OpenSSL Applink
List pgsql-patches
On Windows the OpenSSL guys have included code with 0.9.8 and above to
allow OpenSSL to work correctly regardless of the MSVC runtime libraries
that have been used with the host application. This has become noticable
with the MSVC++ build in which any client apps that connect using libpq
with a client certificate will bail out with an error such as:

C:\pgsql-8.3>bin\psql -p 5433 postgres
OPENSSL_Uplink(00314010,05): no OPENSSL_Applink

The server doesn't seem to be affected, but the attached patch fixes the
problem for the client apps. Unfortunately it must be included in the
app itself, and not libpq.

I'm not sure what the OpenSSL guys were thinking here - apps like
pgAdmin which previously didn't use OpenSSL directly now need the source
code to build. I've also seen reports on the -odbc list that psqlODBC is
similarly affected, though how on earth we're meant to get the AppLink
code into apps such as MS Access or Crystal Reports is beyond me.

Regards, Dave
Index: bin/pg_dump/pg_dump.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v
retrieving revision 1.472
diff -u -r1.472 pg_dump.c
--- bin/pg_dump/pg_dump.c    3 Sep 2007 00:39:19 -0000    1.472
+++ bin/pg_dump/pg_dump.c    28 Sep 2007 14:09:59 -0000
@@ -197,6 +197,18 @@
 static void check_sql_result(PGresult *res, PGconn *conn, const char *query,
                  ExecStatusType expected);

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif

 int
 main(int argc, char **argv)
Index: bin/pg_dump/pg_dumpall.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/pg_dump/pg_dumpall.c,v
retrieving revision 1.92
diff -u -r1.92 pg_dumpall.c
--- bin/pg_dump/pg_dumpall.c    8 Jul 2007 19:07:38 -0000    1.92
+++ bin/pg_dump/pg_dumpall.c    28 Sep 2007 14:09:59 -0000
@@ -71,6 +71,19 @@
 static FILE    *OPF;
 static char    *filename = NULL;

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif
+
 int
 main(int argc, char *argv[])
 {
Index: bin/pg_dump/pg_restore.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/pg_dump/pg_restore.c,v
retrieving revision 1.84
diff -u -r1.84 pg_restore.c
--- bin/pg_dump/pg_restore.c    14 Oct 2006 23:07:22 -0000    1.84
+++ bin/pg_dump/pg_restore.c    28 Sep 2007 14:09:59 -0000
@@ -64,6 +64,19 @@

 typedef struct option optType;

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif
+
 int
 main(int argc, char **argv)
 {
Index: bin/psql/startup.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/psql/startup.c,v
retrieving revision 1.141
diff -u -r1.141 startup.c
--- bin/psql/startup.c    8 Jul 2007 19:07:38 -0000    1.141
+++ bin/psql/startup.c    28 Sep 2007 14:07:02 -0000
@@ -95,6 +95,18 @@
 #endif

 /*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif
+
+/*
  *
  * main
  *
Index: bin/scripts/clusterdb.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/scripts/clusterdb.c,v
retrieving revision 1.18
diff -u -r1.18 clusterdb.c
--- bin/scripts/clusterdb.c    4 Jun 2007 10:02:40 -0000    1.18
+++ bin/scripts/clusterdb.c    28 Sep 2007 14:11:03 -0000
@@ -24,6 +24,18 @@

 static void help(const char *progname);

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif

 int
 main(int argc, char *argv[])
Index: bin/scripts/createdb.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/scripts/createdb.c,v
retrieving revision 1.23
diff -u -r1.23 createdb.c
--- bin/scripts/createdb.c    4 Jun 2007 10:02:40 -0000    1.23
+++ bin/scripts/createdb.c    28 Sep 2007 14:11:03 -0000
@@ -19,6 +19,18 @@

 static void help(const char *progname);

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif

 int
 main(int argc, char *argv[])
Index: bin/scripts/createlang.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/scripts/createlang.c,v
retrieving revision 1.26
diff -u -r1.26 createlang.c
--- bin/scripts/createlang.c    10 Aug 2007 00:39:31 -0000    1.26
+++ bin/scripts/createlang.c    28 Sep 2007 14:11:03 -0000
@@ -16,6 +16,18 @@

 static void help(const char *progname);

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif

 int
 main(int argc, char *argv[])
Index: bin/scripts/createuser.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/scripts/createuser.c,v
retrieving revision 1.36
diff -u -r1.36 createuser.c
--- bin/scripts/createuser.c    4 Jun 2007 10:02:40 -0000    1.36
+++ bin/scripts/createuser.c    28 Sep 2007 14:11:03 -0000
@@ -24,6 +24,19 @@
     TRI_YES
 };

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif
+
 int
 main(int argc, char *argv[])
 {
Index: bin/scripts/dropdb.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/scripts/dropdb.c,v
retrieving revision 1.20
diff -u -r1.20 dropdb.c
--- bin/scripts/dropdb.c    4 Jun 2007 10:02:40 -0000    1.20
+++ bin/scripts/dropdb.c    28 Sep 2007 14:11:03 -0000
@@ -17,6 +17,18 @@

 static void help(const char *progname);

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif

 int
 main(int argc, char *argv[])
Index: bin/scripts/droplang.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/scripts/droplang.c,v
retrieving revision 1.23
diff -u -r1.23 droplang.c
--- bin/scripts/droplang.c    10 Aug 2007 00:39:31 -0000    1.23
+++ bin/scripts/droplang.c    28 Sep 2007 14:11:03 -0000
@@ -19,6 +19,18 @@

 static void help(const char *progname);

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif

 int
 main(int argc, char *argv[])
Index: bin/scripts/dropuser.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/scripts/dropuser.c,v
retrieving revision 1.21
diff -u -r1.21 dropuser.c
--- bin/scripts/dropuser.c    4 Jun 2007 10:02:40 -0000    1.21
+++ bin/scripts/dropuser.c    28 Sep 2007 14:11:03 -0000
@@ -17,6 +17,18 @@

 static void help(const char *progname);

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif

 int
 main(int argc, char *argv[])
Index: bin/scripts/reindexdb.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/scripts/reindexdb.c,v
retrieving revision 1.11
diff -u -r1.11 reindexdb.c
--- bin/scripts/reindexdb.c    4 Jun 2007 10:02:40 -0000    1.11
+++ bin/scripts/reindexdb.c    28 Sep 2007 14:11:03 -0000
@@ -29,6 +29,19 @@
                         const char *progname, bool echo);
 static void help(const char *progname);

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif
+
 int
 main(int argc, char *argv[])
 {
Index: bin/scripts/vacuumdb.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/scripts/vacuumdb.c,v
retrieving revision 1.18
diff -u -r1.18 vacuumdb.c
--- bin/scripts/vacuumdb.c    4 Jun 2007 10:02:40 -0000    1.18
+++ bin/scripts/vacuumdb.c    28 Sep 2007 14:11:03 -0000
@@ -26,6 +26,18 @@

 static void help(const char *progname);

+/*
+ * We need to include OpenSSL's applink code with OpenSSL 0.9.8+ on Windows
+ * It needs to be included in every .exe so we include it here.
+ */
+#ifdef WIN32
+#ifdef USE_SSL
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+#include <openssl/applink.c>
+#endif
+#endif
+#endif

 int
 main(int argc, char *argv[])

pgsql-patches by date:

Previous
From: Heikki Linnakangas
Date:
Subject: Re: too many variants of relation_open
Next
From: Tom Lane
Date:
Subject: Re: OpenSSL Applink