Skip to content

Commit 5ec806e

Browse files
johnhe4John Harrison
and
John Harrison
authored
BoringSSL support (#814)
Improved support for either OpenSSL or BoringSSL Co-authored-by: John Harrison <johnh@quintar.ai>
1 parent cde3436 commit 5ec806e

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,14 @@ endif()
114114
option(ENABLE_SSL_SUPPORT "Enable SSL support" ON)
115115

116116
if (ENABLE_SSL_SUPPORT)
117+
# Manually check OpenSSL version because BoringSSL doesn't support version checking via find_package
117118
set(RMQ_OPENSSL_MIN_VERSION 1.1.1)
118-
find_package(OpenSSL "${RMQ_OPENSSL_MIN_VERSION}" REQUIRED)
119+
find_package(OpenSSL REQUIRED)
120+
if(OPENSSL_VERSION) # Will be empty for BoringSSL
121+
if(OPENSSL_VERSION VERSION_LESS RMQ_OPENSSL_MIN_VERSION)
122+
MESSAGE(FATAL_ERROR "Found OpenSSL version ${OPENSSL_VERSION} but ${RMQ_OPENSSL_MIN_VERSION} or later is required")
123+
endif()
124+
endif()
119125

120126
cmake_push_check_state()
121127
set(THREADS_PREFER_PTHREAD_FLAG ON)

cmake/rabbitmq-c-config.cmake.in

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ set(RMQ_USES_OPENSSL @ENABLE_SSL_SUPPORT@)
55
include(CMakeFindDependencyMacro)
66

77
if (RMQ_USES_OPENSSL)
8-
find_dependency(OpenSSL @RMQ_OPENSSL_MIN_VERSION@ REQUIRED)
8+
find_dependency(OpenSSL REQUIRED)
9+
if(OPENSSL_VERSION)
10+
if(OPENSSL_VERSION VERSION_LESS RMQ_OPENSSL_MIN_VERSION)
11+
MESSAGE(FATAL_ERROR "Found OpenSSL version @OPENSSL_VERSION@ but @RMQ_OPENSSL_MIN_VERSION@ or later is required")
12+
endif()
13+
endif()
914
endif ()
1015

1116
include(${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake)

librabbitmq/amqp_openssl_bio.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,15 @@ int amqp_openssl_bio_init(void) {
108108
if (!(amqp_bio_method = BIO_meth_new(BIO_TYPE_SOCKET, "amqp_bio_method"))) {
109109
return AMQP_STATUS_NO_MEMORY;
110110
}
111-
111+
#ifdef OPENSSL_IS_BORINGSSL
112+
BIO_meth_set_create(amqp_bio_method, BIO_s_socket()->create);
113+
BIO_meth_set_destroy(amqp_bio_method, BIO_s_socket()->destroy);
114+
BIO_meth_set_ctrl(amqp_bio_method, BIO_s_socket()->ctrl);
115+
BIO_meth_set_read(amqp_bio_method, BIO_s_socket()->bread);
116+
BIO_meth_set_write(amqp_bio_method, BIO_s_socket()->bwrite);
117+
BIO_meth_set_gets(amqp_bio_method, BIO_s_socket()->bgets);
118+
BIO_meth_set_puts(amqp_bio_method, BIO_s_socket()->bputs);
119+
#else
112120
BIO_meth_set_create(amqp_bio_method, BIO_meth_get_create(BIO_s_socket()));
113121
BIO_meth_set_destroy(amqp_bio_method, BIO_meth_get_destroy(BIO_s_socket()));
114122
BIO_meth_set_ctrl(amqp_bio_method, BIO_meth_get_ctrl(BIO_s_socket()));
@@ -118,6 +126,7 @@ int amqp_openssl_bio_init(void) {
118126
BIO_meth_set_write(amqp_bio_method, BIO_meth_get_write(BIO_s_socket()));
119127
BIO_meth_set_gets(amqp_bio_method, BIO_meth_get_gets(BIO_s_socket()));
120128
BIO_meth_set_puts(amqp_bio_method, BIO_meth_get_puts(BIO_s_socket()));
129+
#endif
121130

122131
BIO_meth_set_write(amqp_bio_method, amqp_openssl_bio_write);
123132
BIO_meth_set_read(amqp_bio_method, amqp_openssl_bio_read);

0 commit comments

Comments
 (0)