Skip to content

Commit

Permalink
Load libssl.so and libcrypto.so by soname.
Browse files Browse the repository at this point in the history
If building with radosgw, always look for openssl library (even when
building with nss).  Then, use objdump to fetch SONAME from the copies
of libssl and libcrypto that were found.  When building civetweb; pass
the library soname values in as the libraries to load with "dlopen".

This is a problem that went away for a bit, but came back with some
changes for
http://tracker.ceph.com/issues/16535

Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1341775
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1258961

Fixes: http://tracker.ceph.com/issues/11239

Signed-off-by: Marcus Watts <mwatts@redhat.com>
  • Loading branch information
mdw-at-linuxbox committed Nov 4, 2016
1 parent f5f8c99 commit 5380caf
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 3 deletions.
43 changes: 42 additions & 1 deletion CMakeLists.txt
Expand Up @@ -311,7 +311,7 @@ if(USE_NSS)
else(USE_NSS)
#openssl
find_package(OpenSSL REQUIRED)
set(HAVE_OPENSSL ON)
set(USE_OPENSSL ON)
set(SSL_LIBRARIES ${OPENSSL_LIBRARIES})
message(STATUS "SSL with OpenSSL selected (Libs: ${SSL_LIBRARIES})")
endif(USE_NSS)
Expand All @@ -331,6 +331,47 @@ endif(WITH_RADOSGW)

option(WITH_RADOSGW_ASIO_FRONTEND "Rados Gateway's ASIO frontend is enabled" OFF)

if (WITH_RADOSGW)
if (NOT DEFINED OPENSSL_FOUND)
message(STATUS "Looking for openssl anyways, because radosgw selected")
find_package(OpenSSL)
endif()
if (OPENSSL_FOUND)
execute_process(
COMMAND
"sh" "-c"
"objdump -p ${OPENSSL_SSL_LIBRARY} | sed -n 's/^ SONAME *//p'"
OUTPUT_VARIABLE LIBSSL_SONAME
ERROR_VARIABLE OBJDUMP_ERRORS
RESULT_VARIABLE OBJDUMP_RESULTS
OUTPUT_STRIP_TRAILING_WHITESPACE)
if (OBJDUMP_RESULTS)
message(FATAL_ERROR "can't run objdump: ${OBJDUMP_RESULTS}")
endif()
if (NOT OBJDUMP_ERRORS STREQUAL "")
message(WARNING "message from objdump: ${OBJDUMP_ERRORS}")
endif()
execute_process(
COMMAND
"sh" "-c"
"objdump -p ${OPENSSL_CRYPTO_LIBRARY} | sed -n 's/^ SONAME *//p'"
OUTPUT_VARIABLE LIBCRYPTO_SONAME
ERROR_VARIABLE OBJDUMP_ERRORS
RESULT_VARIABLE OBJDUMP_RESULTS
OUTPUT_STRIP_TRAILING_WHITESPACE)
if (OBJDUMP_RESULTS)
message(FATAL_ERROR "can't run objdump: ${OBJDUMP_RESULTS}")
endif()
if (NOT OBJDUMP_ERRORS STREQUAL "")
message(WARNING "message from objdump: ${OBJDUMP_ERRORS}")
endif()
message(STATUS "ssl soname: ${LIBSSL_SONAME}")
message(STATUS "crypto soname: ${LIBCRYPTO_SONAME}")
else()
message(WARNING "ssl not found: rgw civetweb may fail to dlopen libssl libcrypto")
endif()
endif (WITH_RADOSGW)

#option for CephFS
option(WITH_CEPHFS "CephFS is enabled" ON)

Expand Down
14 changes: 12 additions & 2 deletions src/CMakeLists.txt
Expand Up @@ -855,13 +855,23 @@ if(WITH_RADOSGW)
add_library(civetweb_common_objs OBJECT ${civetweb_common_files})
target_include_directories(civetweb_common_objs PRIVATE
"${CMAKE_SOURCE_DIR}/src/civetweb/include")
if(HAVE_SSL)
if(USE_OPENSSL)
set_property(TARGET civetweb_common_objs
APPEND PROPERTY COMPILE_DEFINITIONS NO_SSL_DL=1)
target_include_directories(civetweb_common_objs PUBLIC
"${SSL_INCLUDE_DIR}")
endif(HAVE_SSL)
endif(USE_OPENSSL)
set_property(TARGET civetweb_common_objs
APPEND PROPERTY COMPILE_DEFINITIONS USE_IPV6=1)
if (LIBSSL_SONAME)
set_property(TARGET civetweb_common_objs
APPEND PROPERTY COMPILE_DEFINITIONS SSL_LIB="${LIBSSL_SONAME}")
set_property(TARGET civetweb_common_objs
APPEND PROPERTY COMPILE_DEFINITIONS CRYPTO_LIB="${LIBCRYPTO_SONAME}")
endif()

add_subdirectory(rgw)

endif(WITH_RADOSGW)

install(FILES
Expand Down

0 comments on commit 5380caf

Please sign in to comment.