From 3294a92a61463abd8527eb1e3f83b1666b476204 Mon Sep 17 00:00:00 2001 From: fa08c <0xfa08c@gmail.com> Date: Sat, 10 Jan 2015 22:26:20 +0800 Subject: [PATCH] Search libcrypto.so in more locations Some linux distro may store .so in some alternative locations. Now we try harder to find them. --- shadowsocks/crypto/ctypes_openssl.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/shadowsocks/crypto/ctypes_openssl.py b/shadowsocks/crypto/ctypes_openssl.py index 5ddff15..6e80461 100644 --- a/shadowsocks/crypto/ctypes_openssl.py +++ b/shadowsocks/crypto/ctypes_openssl.py @@ -45,9 +45,29 @@ def load_openssl(): if libcrypto_path: break else: + # We may get here when find_library fails because, for example, + # the user does not have sufficient privileges to access those + # tools underlying find_library on linux. + import glob - for libcrypto_path in glob.glob('/usr/lib/libcrypto.*'): - pass + import sys + + patterns = ['/usr/lib/libcrypto.*'] + + # Some linux distros may store so in alternative locations + if sys.maxsize > 2 ** 32: + # Python is 64-bit + patterns.extend(['/usr/lib64/libcrypto.*']) + else: + # Python is 32-bit + patterns.extend(['/usr/lib32/libcrypto.*']) + + for pat in patterns: + files = glob.glob(pat) + if files: + libcrypto_path = files[0] + break + if libcrypto_path is None: raise Exception('libcrypto(OpenSSL) not found') logging.info('loading libcrypto from %s', libcrypto_path)