[ 
https://issues.apache.org/jira/browse/THRIFT-6185?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jens Geyer resolved THRIFT-6185.
--------------------------------
    Fix Version/s: 0.25.0
         Assignee: Jens Geyer
       Resolution: Fixed

> lib/d does not build against OpenSSL 3.x
> ----------------------------------------
>
>                 Key: THRIFT-6185
>                 URL: https://issues.apache.org/jira/browse/THRIFT-6185
>             Project: Thrift
>          Issue Type: Bug
>          Components: Build Process, D - Library
>            Reporter: Jens Geyer
>            Assignee: Jens Geyer
>            Priority: Major
>             Fix For: 0.25.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> The OpenSSL-dependent modules in lib/d do not link against OpenSSL 3.x. On 
> Ubuntu 24.04 (OpenSSL 3.0.13) the first SSL unittest binary fails at link:
> {code}
> dmd -g -ofunittest/debug/thrift/async/ssl -unittest -w -wi -I../../lib/d/src  
>    -version=use_openssl_1_0_x -L-fuse-ld=gold -L-levent -L-lssl -L-lcrypto    
>  src/thrift/async/ssl.d libthriftd-event.a libthriftd-ssl.a libthriftd.a 
> unittest/emptymain.d
> libthriftd-ssl.a(ssl_347_3db.o):src/thrift/internal/ssl.d:
>   error: undefined reference to 'SSL_get_peer_certificate'
> libthriftd-ssl.a(ssl_bio_34b_356.o):src/thrift/internal/ssl_bio.d:
>   error: undefined reference to 'ERR_put_error'
> Error: linker exited with status 1
> {code}
> Two separate OpenSSL 3.0 changes:
> * {{ERR_put_error}} was removed in 3.0. The replacement is {{ERR_new}} plus 
> {{ERR_set_debug}} and {{ERR_set_error}}, or {{ERR_raise}}.
> * {{SSL_get_peer_certificate}} was renamed to {{SSL_get1_peer_certificate}}. 
> The old name survives only as a compatibility macro in the C header, so it is 
> not an exported symbol a D binding can reach.
> Three things line up behind this:
> # lib/d/Makefile.am compiles with {{-version=use_openssl_1_0_x}} 
> unconditionally, in both {{d_lib_flags}} and {{d_test_flags}}. There is no 
> 1.1 or 3.x variant of that version identifier anywhere in the tree.
> # build/docker/ubuntu-*/Dockerfile pin the deimos OpenSSL bindings at 
> {{v2.0.0+1.1.0h}}, which describe the 1.1.0 API.
> # Of the three images, only ubuntu-focal ships an OpenSSL these two symbols 
> still exist in (1.1.1f). jammy has 3.0.2 and noble has 3.0.13, so {{make -C 
> lib/d check}} cannot pass in the project's own current images.
> Affects five modules: thrift/async/ssl, thrift/internal/ssl, 
> thrift/internal/ssl_bio, thrift/transport/ssl and 
> thrift/server/transport/ssl. It is a link-time failure, so it is equally a 
> problem for anyone using the D binding with TLS on a current distribution, 
> not only for the build.
> The CI job added in THRIFT-6170 works around it by not installing the deimos 
> OpenSSL headers at all: configure then reports "Building D SSL tests ...... : 
> no" and drops those five modules from both the library and the test set. The 
> workflow step carries a comment pointing here. Once this is fixed, the 
> headers should be installed in that job so the SSL modules are covered too.
> Compare THRIFT-6168, which was the last lib/d change that had to be verified 
> by hand.
> ----
> Investigated and written with AI assistance (Claude Opus 5). The build 
> failures quoted above were reproduced by hand in clean containers.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to