]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: civetweb/openssl: Load libssl.so and libcrypto.so by soname.
authorMarcus Watts <mwatts@redhat.com>
Mon, 11 Jul 2016 21:54:07 +0000 (17:54 -0400)
committerMarcus Watts <mwatts@redhat.com>
Fri, 13 Jan 2017 03:05:26 +0000 (22:05 -0500)
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>
(cherry picked from commit 7caa0bd002110b62514da83a37a2a3deb841267a)

CMakeLists.txt
src/CMakeLists.txt

index d6b3a268fba7633578edf18206a0223a02241e2f..aba29107d2cf98c374f8d021bc872c404debaaa7 100644 (file)
@@ -158,10 +158,10 @@ endif(${WITH_OPENLDAP})
 option(WITH_OPENSSL "OPENSSL is here" ON)
 if(${WITH_OPENSSL})
 find_package(OpenSSL REQUIRED)
-set(HAVE_OPENSSL ON)
+set(USE_OPENSSL ON)
 #message(STATUS "${OPENSSL_LIBRARIES}")
 else(${WITH_OPENSSL})
-set(HAVE_OPENSSL OFF)
+set(USE_OPENSSL OFF)
 set(OPENSSL_LIBRARIES)
 endif(${WITH_OPENSSL})
 
@@ -288,6 +288,47 @@ endif(WITH_XIO)
 #option for RGW
 option(WITH_RADOSGW "Rados Gateway is enabled" ON)
 
+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)
 
index f51ad8156837d9e6864b4a5685df36251246ef83..f5725e91153c2fa7af5d71b4e65fcd0892bad9b2 100644 (file)
@@ -1177,13 +1177,20 @@ 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_OPENSSL)
   set_property(TARGET civetweb_common_objs
-              APPEND PROPERTY COMPILE_DEFINITIONS NO_SSL_DL=1)
-  target_include_directories(civetweb_common_objs PUBLIC
-       "${OPENSSL_INCLUDE_DIR}")
-  else(HAVE_OPENSSL)
-  endif(HAVE_OPENSSL)
+    APPEND PROPERTY COMPILE_DEFINITIONS USE_IPV6=1)
+  if(USE_OPENSSL)
+    set_property(TARGET civetweb_common_objs
+      APPEND PROPERTY COMPILE_DEFINITIONS NO_SSL_DL=1)
+    target_include_directories(civetweb_common_objs PRIVATE
+      "${SSL_INCLUDE_DIR}")
+  endif(USE_OPENSSL)
+  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_library(rgw_a STATIC ${rgw_a_srcs})
   target_link_libraries(rgw_a librados cls_rgw_client cls_refcount_client