public inbox for [email protected]  
help / color / mirror / Atom feed
From: Marco Bambini <[email protected]>
To: ALBERTO CABELLO SÁNCHEZ <[email protected]>
Cc: [email protected] <[email protected]>
Subject: Re: Libpq linked statically linked to OpenSSL/LibreSSL
Date: Tue, 6 Dec 2022 11:05:49 +0100
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
	<PA4PR05MB8969E8C20AC8EC343149E0F8A7189@PA4PR05MB8969.eurprd05.prod.outlook.com>
	<PA4PR05MB896952E77CAFA3AD5CB188EBA7189@PA4PR05MB8969.eurprd05.prod.outlook.com>
	<[email protected]>

Hi,

I made some progresses, especially in understanding where the issue can be.

I started with a fresh postgresql-15.1 source code installation:
# ./configure --with-openssl --without-readline

I then modified the Makefile.global in the src directory by replacing the occurrences of -lssl and -lcrypto with:
/root/rothsoft/libressl-3.6.1/ssl/.libs/libssl.a /root/rothsoft/libressl-3.6.1/crypto/.libs/libcrypto.a
in the LIBS entry.

Then from src/interfaces/libpq I executed:
# make

libpq was successfully created but when I perform a:
# nm -D libpq.so

the output looks like:

000000000001f110 T appendBinaryPQExpBuffer
000000000001f000 T appendPQExpBuffer
000000000001f0d0 T appendPQExpBufferChar
000000000001f150 T appendPQExpBufferStr
                 U ASN1_STRING_data
                 U ASN1_STRING_length
                 U BIO_clear_flags
                 U BIO_int_ctrl
                 U BIO_new
                 U BIO_set_flags
                 U BIO_s_socket
                 U calloc
                 U close
                 U connect
000000000001ecd0 T createPQExpBuffer
                 U CRYPTO_get_id_callback
                 U CRYPTO_get_locking_callback
                 U CRYPTO_num_locks
                 U CRYPTO_set_id_callback
                 U CRYPTO_set_locking_callback
                 U __ctype_b_loc
                 U __ctype_tolower_loc
                 U __ctype_toupper_loc
                 w __cxa_finalize
000000000001ed30 T destroyPQExpBuffer
                 U ENGINE_by_id
                 U ENGINE_finish
                 U ENGINE_free
                 U ENGINE_init
                 U ENGINE_load_private_key
000000000001ed90 T enlargePQExpBuffer
                 U ERR_clear_error
                 U ERR_get_error
                 U __errno_location
                 U ERR_put_error
                 U ERR_reason_error_string
                 U EVP_DigestFinal_ex
                 U EVP_DigestInit_ex
...

Please notice all the U entries in the crypto/ssl functions, so it looks like that they are NOT statically linked inside the libpq.so shared library, even if I replaced the LIBS in the Makefile.

Anyone can help me with this issue?

Thanks,
Marco


> On 5 Dec 2022, at 17:47, Marco Bambini <[email protected]> wrote:
> 
> Thanks Alberto,
> 
> This is a very promising approach.
> 
> I tried to modify the Makefile in src/interfaces/libpq/Makefile and I replaced the occurrences of -lssl and -lcrypto with:
> /root/rothsoft/libressl-3.6.1/ssl/.libs/libssl.a
> /root/rothsoft/libressl-3.6.1/crypto/.libs/libcrypto.a
> 
> The compilation process is OK but when I tried to execute the test app I receive a link error:
> Error loading DLL: /root/rothsoft/engines/postgreSQL/Linux/postgresql/libpq.so: undefined symbol: GENERAL_NAME_free
> 
> GENERAL_NAME_free usually means that libcrypto is missed.
> 
> Any help would be really appreciated.
> 
> Please note that I also tried with:
> -l:/root/rothsoft/libressl-3.6.1/ssl/.libs/libssl.a
> -l:/root/rothsoft/libressl-3.6.1/crypto/.libs/libcrypto.a
> 
> Thanks,
> Marco
> 
> 
>> On 5 Dec 2022, at 14:10, ALBERTO CABELLO SÁNCHEZ <[email protected]> wrote:
>> 
>>>> Hi all,
>>>> 
>>>> After several attempts, I am asking for help with how to compile libpq with OpenSSL
>>>> statically linked.
>>>> I need to have libpq linked with LibreSSL, but if I could statically link OpenSSL, I think
>>>> I could switch the TLS libraries at compile time.
>>> 
>>> redo the step which creates libpq.so appending your libssl.a location
>>> (mine is /usr/lib/x86_64-linux-gnu/libssl.a) at the end.
>> 
>> Just wanted to correct: you also have to remove "-lssl". So I guess you can just
>> substitute "-lssl" for libssl.a location in src/interfaces/libpq/Makefile (two occurrences)
>> and build as usual.
>> 
> 
> 
> 






view thread (10+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: Libpq linked statically linked to OpenSSL/LibreSSL
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox