The branch OpenSSL_1_1_0-stable has been updated via 841303dad2d0bb28db2317d36ef430e73d137d3d (commit) via 75711510f08c33f55c40b89b21cb71d1a1679abf (commit) from 013aefc5f03c95f5366cc854ffb02b0df49af90d (commit)
- Log ----------------------------------------------------------------- commit 841303dad2d0bb28db2317d36ef430e73d137d3d Author: Richard Levitte <levi...@openssl.org> Date: Tue Nov 13 18:28:41 2018 +0100 test/recipes/90-test_shlibload.t needs $target{shared_extension} We therefore must add defaults. Reviewed-by: Viktor Dukhovni <vik...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/7631) commit 75711510f08c33f55c40b89b21cb71d1a1679abf Author: Richard Levitte <levi...@openssl.org> Date: Tue Nov 13 15:57:34 2018 +0100 Fix rpath-related Linux "test_shlibload" failure. When libssl and libcrypto are compiled on Linux with "-rpath", but not "--enable-new-dtags", the RPATH takes precedence over LD_LIBRARY_PATH, and we end up running with the wrong libraries. This is resolved by using full (or at least relative, rather than just the filename to be found on LD_LIBRARY_PATH) paths to the shared objects. Reviewed-by: Viktor Dukhovni <vik...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/7631) ----------------------------------------------------------------------- Summary of changes: Configurations/00-base-templates.conf | 6 ++++++ test/recipes/90-test_shlibload.t | 27 +++++++++++++++++++-------- util/shlib_wrap.sh.in | 28 +++++++++++++++++++--------- 3 files changed, 44 insertions(+), 17 deletions(-) diff --git a/Configurations/00-base-templates.conf b/Configurations/00-base-templates.conf index 3455b3a..8503c2f 100644 --- a/Configurations/00-base-templates.conf +++ b/Configurations/00-base-templates.conf @@ -68,6 +68,8 @@ } return (); }, + shared_extension => ".so", + build_scheme => [ "unified", "unix" ], build_file => "Makefile", }, @@ -99,6 +101,8 @@ mtinflag => "-manifest ", mtoutflag => "-outputresource:", + shared_extension => ".dll", + build_file => "makefile", build_scheme => [ "unified", "windows" ], }, @@ -107,6 +111,8 @@ inherit_from => [ "BASE_common" ], template => 1, + shared_extension => ".exe", + build_file => "descrip.mms", build_scheme => [ "unified", "VMS" ], }, diff --git a/test/recipes/90-test_shlibload.t b/test/recipes/90-test_shlibload.t index 04d5265..78899f6 100644 --- a/test/recipes/90-test_shlibload.t +++ b/test/recipes/90-test_shlibload.t @@ -6,8 +6,7 @@ # in the file LICENSE in the source distribution or at # https://www.openssl.org/source/license.html - -use OpenSSL::Test qw/:DEFAULT bldtop_dir/; +use OpenSSL::Test qw/:DEFAULT bldtop_dir bldtop_file/; use OpenSSL::Test::Utils; #Load configdata.pm @@ -22,12 +21,13 @@ plan skip_all => "Test only supported in a shared build" if disabled("shared"); plan tests => 4; -my $libcrypto_idx = $unified_info{rename}->{libcrypto} // "libcrypto"; -my $libssl_idx = $unified_info{rename}->{libssl} // "libssl"; -my $libcrypto = - $unified_info{sharednames}->{$libcrypto_idx}.$target{shared_extension_simple}; -my $libssl = - $unified_info{sharednames}->{$libssl_idx}.$target{shared_extension_simple}; +# When libssl and libcrypto are compiled on Linux with "-rpath", but not +# "--enable-new-dtags", the RPATH takes precedence over LD_LIBRARY_PATH, +# and we end up running with the wrong libraries. This is resolved by +# using paths to the shared objects, not just the names. + +my $libcrypto = bldtop_file(shlib('libcrypto')); +my $libssl = bldtop_file(shlib('libssl')); ok(run(test(["shlibloadtest", "-crypto_first", $libcrypto, $libssl])), "running shlibloadtest -crypto_first"); @@ -38,3 +38,14 @@ ok(run(test(["shlibloadtest", "-just_crypto", $libcrypto, $libssl])), ok(run(test(["shlibloadtest", "-dso_ref", $libcrypto, $libssl])), "running shlibloadtest -dso_ref"); +sub shlib { + my $lib = shift; + $lib = $unified_info{rename}->{$lib} + if defined $unified_info{rename}->{$lib}; + $lib = $unified_info{sharednames}->{$lib} + . ($target{shlib_variant} || "") + . ($target{shared_extension} || ".so"); + $lib =~ s|\.\$\(SHLIB_MAJOR\)\.\$\(SHLIB_MINOR\) + |.$config{shlib_version_number}|x; + return $lib; +} diff --git a/util/shlib_wrap.sh.in b/util/shlib_wrap.sh.in index 6c115ba..d030d33 100755 --- a/util/shlib_wrap.sh.in +++ b/util/shlib_wrap.sh.in @@ -1,5 +1,22 @@ #!/bin/sh +{- + use lib '.'; + use configdata; + sub shlib { + my $lib = shift; + return "" if $disabled{shared}; + $lib = $unified_info{rename}->{$lib} + if defined $unified_info{rename}->{$lib}; + $lib = $unified_info{sharednames}->{$lib} + . ($target{shlib_variant} || "") + . ($target{shared_extension} || ".so"); + $lib =~ s|\.\$\(SHLIB_MAJOR\)\.\$\(SHLIB_MINOR\) + |.$config{shlib_version_number}|x; + return $lib; + } + ""; # Make sure no left over string sneaks its way into the script +-} # To test this OpenSSL version's applications against another version's # shared libraries, simply set # @@ -25,15 +42,8 @@ fi THERE="`echo $0 | sed -e 's|[^/]*$||' 2>/dev/null`.." [ -d "${THERE}" ] || exec "$@" # should never happen... -# Alternative to this is to parse ${THERE}/Makefile... -LIBCRYPTOSO="${THERE}/libcrypto.so" -if [ -f "$LIBCRYPTOSO" ]; then - while [ -h "$LIBCRYPTOSO" ]; do - LIBCRYPTOSO="${THERE}/`ls -l "$LIBCRYPTOSO" | sed -e 's|.*\-> ||'`" - done - SOSUFFIX=`echo ${LIBCRYPTOSO} | sed -e 's|.*\.so||' 2>/dev/null` - LIBSSLSO="${THERE}/libssl.so${SOSUFFIX}" -fi +LIBCRYPTOSO="${THERE}/{- shlib('libcrypto') -}" +LIBSSLSO="${THERE}/{- shlib('libssl') -}" SYSNAME=`(uname -s) 2>/dev/null`; case "$SYSNAME" in _____ openssl-commits mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-commits