From 9de739f9dd87b6c765f0d280e4864a7e6308c54a Mon Sep 17 00:00:00 2001 From: "Gareth J. Greenaway" Date: Fri, 28 Jul 2023 14:39:10 -0700 Subject: [PATCH] Look in location salt is running from, this accounts for running from an unpacked onedir file that has not been installed. --- salt/utils/rsax931.py | 6 ++++++ tests/unit/utils/test_rsax931.py | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/salt/utils/rsax931.py b/salt/utils/rsax931.py index 0eebf999446..535e7f6d3e6 100644 --- a/salt/utils/rsax931.py +++ b/salt/utils/rsax931.py @@ -37,6 +37,12 @@ def _find_libcrypto(): # system. # look in salts pkg install location. lib = glob.glob("/opt/salt/lib/libcrypto.dylib") + + # look in location salt is running from + # this accounts for running from an unpacked + # onedir file + lib = lib or glob.glob(os.path.join("lib/libcrypto.dylib")) + # Find library symlinks in Homebrew locations. brew_prefix = os.getenv("HOMEBREW_PREFIX", "/usr/local") lib = lib or glob.glob( diff --git a/tests/unit/utils/test_rsax931.py b/tests/unit/utils/test_rsax931.py index 67946d4bf5b..7fed394dcee 100644 --- a/tests/unit/utils/test_rsax931.py +++ b/tests/unit/utils/test_rsax931.py @@ -276,3 +276,30 @@ class RSAX931Test(TestCase): or hasattr(lib, "OPENSSL_init_crypto") or hasattr(lib, "OPENSSL_no_config") ) + + @patch.object(salt.utils.platform, "is_darwin", lambda: True) + @patch.object(platform, "mac_ver", lambda: ("10.15.2", (), "")) + @patch.object(sys, "platform", "macosx") + def test_find_libcrypto_darwin_onedir(self): + """ + Test _find_libcrypto on a macOS + libcryptos and defaulting to the versioned system libraries. + """ + available = [ + "/usr/lib/libcrypto.0.9.7.dylib", + "/usr/lib/libcrypto.0.9.8.dylib", + "/usr/lib/libcrypto.35.dylib", + "/usr/lib/libcrypto.41.dylib", + "/usr/lib/libcrypto.42.dylib", + "/usr/lib/libcrypto.44.dylib", + "/test/homebrew/prefix/opt/openssl/lib/libcrypto.dylib", + "/opt/local/lib/libcrypto.dylib", + "lib/libcrypto.dylib", + ] + + def test_glob(pattern): + return [lib for lib in available if fnmatch.fnmatch(lib, pattern)] + + with patch.object(glob, "glob", test_glob): + lib_path = _find_libcrypto() + self.assertEqual("lib/libcrypto.dylib", lib_path)