[openssl-commits] [openssl] master update
Richard Levitte
levitte at openssl.org
Tue Nov 13 23:42:04 UTC 2018
The branch master has been updated
via 45cdae1c7c93fe7ef2a981da4c36c3b8cb09e855 (commit)
via 18289399743da6c3db462f37fc8797738e8acf7c (commit)
from 6e624a645300d784eaa97ddda29364081ede36d7 (commit)
- Log -----------------------------------------------------------------
commit 45cdae1c7c93fe7ef2a981da4c36c3b8cb09e855
Author: Richard Levitte <levitte at 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 <viktor at openssl.org>
(Merged from https://github.com/openssl/openssl/pull/7626)
commit 18289399743da6c3db462f37fc8797738e8acf7c
Author: Richard Levitte <levitte at openssl.org>
Date: Tue Nov 13 00:16:55 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 <viktor at openssl.org>
(Merged from https://github.com/openssl/openssl/pull/7626)
-----------------------------------------------------------------------
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 dd0649d..8555ba1 100644
--- a/Configurations/00-base-templates.conf
+++ b/Configurations/00-base-templates.conf
@@ -102,6 +102,8 @@ my %targets=(
? "ranlib" : "" },
RC => "windres",
+ shared_extension => ".so",
+
build_scheme => [ "unified", "unix" ],
build_file => "Makefile",
},
@@ -142,6 +144,8 @@ my %targets=(
mtinflag => "-manifest ",
mtoutflag => "-outputresource:",
+ shared_extension => ".dll",
+
build_file => "makefile",
build_scheme => [ "unified", "windows" ],
},
@@ -160,6 +164,8 @@ my %targets=(
return [ @incs ];
}),
+ 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 368dea3..2761d58 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
@@ -23,12 +22,13 @@ plan skip_all => "Test is disabled on AIX" if config('target') =~ m|^aix|;
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");
@@ -39,3 +39,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_VERSION_NUMBER\)
+ |.$config{shlib_version_number}|x;
+ return $lib;
+}
diff --git a/util/shlib_wrap.sh.in b/util/shlib_wrap.sh.in
index 9199d12..eac70ed 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_VERSION_NUMBER\)
+ |.$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
More information about the openssl-commits
mailing list