Re: [psqlODBC 08.02.0402] OpenSSL libraries - Mailing list pgsql-odbc

From Rainer Bauer
Subject Re: [psqlODBC 08.02.0402] OpenSSL libraries
Date
Msg-id 8k8d63tai4higfh38i6cvmruv42f7lq8bk@4ax.com
Whole thread Raw
In response to [psqlODBC 08.02.0402] OpenSSL libraries  (Rainer Bauer <usenet@munnin.com>)
Responses Re: [psqlODBC 08.02.0402] OpenSSL libraries
List pgsql-odbc
Hiroshi Inoue wrote:
>> According to the FAQ <http://www.openssl.org/support/faq.html#PROG2>, psqlODBC
>> should contain the code for OPENSSL_Applink() (see also
>
>Shouldn't it be added to the EXE project not to the DLL one ?

Seems so [see replay from Andy Polyakov]:
<http://groups.google.com/group/mailing.openssl.users/browse_thread/thread/2c53d4dbd7545255/875519825b7dea09>

"... in the [export] symbol table of the *application*. The applink.c
module has to be linked into *application,* not some other dll, even if
it's dll that links with openssl dll and not application itself."

>> Why is psqlODBC build with /MT and not /MD?
>
>Because it has been so without problems.
>
>I'm pretty confused. Is it realistic to expect all the relevant dlls
>and the exe itself are compiled with the same option settings and
>compiler ? For example, if we build it with /MD otpion using vc8.0,
>the driver would link msvcr(p)80.dll. OTOH ssleay32.dll downloaded
>from http://www.slproweb.com/products/Win32OpenSSL.html seems to
>be linking msvcr71.dll. Is there no problem with it ?

There shouldn't, as long as there is no memory allocated/freed across modules
compiled with different runtimes.

Time to test this:
I have activated SSL in my local Postgres 8.2.4 installation
[postgresql.conf]. After creating and installing the server certificate,
restarting Postgres and specifying "SSLmode=require" in the ODBC connection
string I was able to establish a SSL connection through ODBC.

So SSL is working, *but* then happened what I had expected: at program exit
the program core dumps while freeing memory. I can see that this happens in
libeay32.dll.

What I did next was adding the OPENSSL_Applink() code snippet to my
application code. It still crashed.

I tried linking the psqlODBC driver with all four different OpenSSL libs found
in the C:\OpenSSL\lib\VC folder. It still crashed.

Next I replaced the OpenSSL DLLs [0.9.8.4] in the psqlODBC installation with
the ones shipped with my OpenSSL installation [0.9.8.5]. It still crashed.

Before investigating this any further I must ask if anybody has ever used an
SSL connection with psqlODBC?

>> Why are SSL connections working at all (I assume they are, since I cannot test
>> it here), if the OpenSSL DLLs and psqlODBC are linked to different runtimes?
>
>It's not that easy to crash programs with the mixed options and
>I don't know definite problems to mix the options.
>OPENSSL_Applink() may be the hint.

Do you have a Win32 program that establishes a SSL connection and does NOT
crash? If so could you send me the source so that I can verify it here?

Rainer

PS: psqlODBC only calls SSL_read(), SSL_write() and SSL_get_error(). As I
understand it all the real SSL handling happens in libpq. So maybe I am
looking at the wrong place to find the error?

pgsql-odbc by date:

Previous
From: Hiroshi Inoue
Date:
Subject: Re: psqlodbc-07.03.0100
Next
From: Hiroshi Inoue
Date:
Subject: Re: [psqlODBC 08.02.0402] OpenSSL libraries