Skip to content

Commit

Permalink
Raise an error when the specified OpenSSL library directory doesn't e…
Browse files Browse the repository at this point in the history
…xist.

OpenSSL built from the source creates the library directory to the
`/path/to/openssl_dir/lib64` as a default.
In the case, the `bundle exec rake compile -- --with-openssl-dir=<openssl_dir>`
cannot compile with the lib64 directory, and may compile with system OpenSSL's
libraries unintentionally. This commit is to check this case to avoid linking
with an unintentional library directory.
  • Loading branch information
junaruga committed Jul 25, 2023
1 parent ee03210 commit ca54087
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions ext/openssl/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,32 @@

require "mkmf"

ssl_dirs = nil
if defined?(::TruffleRuby)
# Always respect the openssl prefix chosen by truffle/openssl-prefix
require 'truffle/openssl-prefix'
dir_config_given = dir_config("openssl", ENV["OPENSSL_PREFIX"]).any?
ssl_dirs = dir_config("openssl", ENV["OPENSSL_PREFIX"])
else
dir_config_given = dir_config("openssl").any?
ssl_dirs = dir_config("openssl")
end
dir_config_given = ssl_dirs.any?

_, ssl_ldir = ssl_dirs
if ssl_ldir&.split(File::PATH_SEPARATOR)&.none? { |dir| File.directory?(dir) }
# According to the `mkmf.rb#dir_config`, the `--with-openssl-dir=<dir>` uses
# the value of the `File.basename(RbConfig::MAKEFILE_CONFIG["libdir"])` as a
# loaded library directory name.
ruby_ldir_name = File.basename(RbConfig::MAKEFILE_CONFIG["libdir"])

raise "OpenSSL library directory could not be found in '#{ssl_ldir}'. " \
"You might want to fix this error in one of the following ways.\n" \
" * Recompile OpenSSL by configuring it with --libdir=#{ruby_ldir_name} " \
" to specify the OpenSSL library directory.\n" \
" * Recompile Ruby by configuring it with --libdir=<dir> to specify the " \
"Ruby library directory.\n" \
" * Compile this openssl gem with --with-openssl-include=<dir> and " \
"--with-openssl-lib=<dir> options to specify the OpenSSL include and " \
"library directories."
end

dir_config("kerberos")
Expand Down

0 comments on commit ca54087

Please sign in to comment.