lurcher / unixODBC

The unixODBC Project goals are to develop and promote unixODBC to be the definitive standard for ODBC on non MS Windows platforms.
GNU Lesser General Public License v2.1
100 stars 52 forks source link

Load system libraries in case of custom library location #135

Closed GaneshKandu closed 1 year ago

GaneshKandu commented 1 year ago

Hi,

My PHP is build with custom OpenSSL and -rpath, when unixODBC trying to load libmsodbcsql its using php's -rpath that causing error.

Uncaught PDOException: SQLSTATE[01000]: [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1

LD_DEBUG=all php -r '$con=new PDO("sqlsrv:Server=domain.com,1433;Database=db", "user", "password");'

   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/bin/php [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libcrypt.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libresolv.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libstdc++.so.6 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/librt.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libm.so.6 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libdl.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libnsl.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libz.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libxml2.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/liblzma/lib/liblzma.so.5 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libiconv.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libc.so.6 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libgcc_s.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libpthread.so.0 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/ioncube_loader_lin_7.2.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/opcache.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/bcmath.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/bz2.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/calendar.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/ctype.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/curl.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/curl-7/lib/libcurl.so.4 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/openssl-30/lib/libssl.so.3 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/openssl-30/lib/libcrypto.so.3 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libldap-2.4.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/liblber-2.4.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libssl.so.1.0.0 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libcrypto.so.1.0.0 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/dba.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/exif.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/ftp.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/openssl-11/lib/libcrypto.so.1.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/openssl-11/lib/libssl.so.1.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/gd.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libjpeg.so.9 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libpng16.so.16 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libwebp.so.7 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libfreetype.so.6 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/gettext.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libintl.so.8 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/gmp.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libgmp.so.10 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/iconv.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/imap.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/intl.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libicui18n.so.58 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libicuuc.so.58 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libicudata.so.58 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libicuio.so.58 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/ldap.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/mailparse.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/mbstring.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/memcached.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/lib/libmemcached.so.11 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/lib/libmemcachedutil.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/mysqlnd.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/mysqli.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/openssl.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/pcntl.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/pdo.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/pdo_mysql.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/pdo_sqlite.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libsqlite3.so.0 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/shmop.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/soap.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sockets.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sodium.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libsodium.so.23 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sqlite3.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sysvsem.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sysvshm.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/tidy.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/tokenizer.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/wddx.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/xmlrpc.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/xsl.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libexslt.so.0 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libxslt.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/zip.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/zlib.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/redis.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/mcrypt.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libmcrypt.so.4 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libltdl.so.7 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sqlsrv.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libodbc.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libodbcinst.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/pdo_sqlsrv.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/imagick.so [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/imagemagick/lib/libMagickWand-7.Q16HDRI.so.5 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/imagemagick/lib/libMagickCore-7.Q16HDRI.so.5 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libgomp.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.2.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libk5crypto.so.3.webuzo [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libdl.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/librt.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libodbcinst.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libkrb5.so.3 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libgssapi_krb5.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libstdc++.so.6 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libm.so.6 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libgcc_s.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libpthread.so.0 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libc.so.6 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libkrb5support.so.0 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libkeyutils.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/openssl-11/lib/libcrypto.so.1.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libresolv.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libltdl.so.7 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libcom_err.so.2 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libselinux.so.1 [0]
   1770602: symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libpcre2-8.so.0 [0]
   1770602: /lib64/libk5crypto.so.3.webuzo: error: symbol lookup error: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b (fatal)
   1770602: 
   1770602: file=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.2.1 [0];  destroying link map
   1770602: 
   1770602: file=/lib64/libgssapi_krb5.so.2 [0];  destroying link map
   1770602: 
   1770602: file=/lib64/libkrb5.so.3 [0];  destroying link map
   1770602: 
   1770602: file=/lib64/libk5crypto.so.3.webuzo [0];  destroying link map
   1770602: 
   1770602: file=/lib64/libkrb5support.so.0 [0];  destroying link map
   1770602: 
   1770602: file=/lib64/libkeyutils.so.1 [0];  destroying link map
   1770602: 
   1770602: file=/lib64/libcom_err.so.2 [0];  destroying link map
   1770602: 
   1770602: file=/lib64/libselinux.so.1 [0];  destroying link map
   1770602: 
   1770602: file=/lib64/libpcre2-8.so.0 [0];  destroying link map

/lib64/libkrb5.so.3 NEEDED by libmsodbcsql, libcrypto.so.1.1 is NEEDED by /lib64/libkrb5.so.3

/lib64/libkrb5.so.3 is loading libcrypto.so.1.1 from /usr/local/apps/openssl-11/lib/libcrypto.so.1.1 insted of /lib64/libcrypto.so.1.1 and Setting LD_LIBRARY_PATH, PATH doesn't work

What could be solution of it ?

lurcher commented 1 year ago

On 19/02/2023 16:03, Ganesh Kandu ( गणेश कांदु ) wrote:

    Hi,

|/lib64/libkrb5.so.3| NEEDED by |libmsodbcsql|, |libcrypto.so.1.1| is NEEDED by |/lib64/libkrb5.so.3|

    |/lib64/libkrb5.so.3| is loading |libcrypto.so.1.1| from
    |/usr/local/apps/openssl-11/lib/libcrypto.so.1.1| insted of
    |/lib64/libcrypto.so.1.1| and Setting |LD_LIBRARY_PATH, PATH|
    doesn't work

    What could be solution of it ?

Not sure, but I am close to 100% certain its not a unixODBC problem. Maybe try using ldd to see what libs are needed. Not sure what is using /usr/local/apps, that's not a location I have seen before.

GaneshKandu commented 1 year ago

try using ldd to see what libs are needed.

ldd -v /opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.2.so.1.1
        linux-vdso.so.1 (0x00007ffceb3ec000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fd8704fe000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fd8702f6000)
        libodbcinst.so.2 => /lib64/libodbcinst.so.2 (0x00007fd8700e2000)
        libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fd86fdf8000)
        libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fd86fba3000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fd86f80e000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fd86f48c000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd86f274000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd86f054000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fd86ec8e000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd870b12000)
        libltdl.so.7 => /lib64/libltdl.so.7 (0x00007fd86ea84000)
        libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fd86e86d000)
        libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fd86e669000)
        libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fd86e458000)
        libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fd86e237000)
        libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007fd86dd4e000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fd86db36000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fd86d90b000)
        libz.so.1 => /lib64/libz.so.1 (0x00007fd86d6f3000)
        libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fd86d46f000)

        Version information:
        /opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.2.so.1.1:
                librt.so.1 (GLIBC_2.2.5) => /lib64/librt.so.1
                libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
                libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6
                libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
                libgssapi_krb5.so.2 (gssapi_krb5_2_MIT) => /lib64/libgssapi_krb5.so.2
                libkrb5.so.3 (krb5_3_MIT) => /lib64/libkrb5.so.3
                libpthread.so.0 (GLIBC_2.3.2) => /lib64/libpthread.so.0
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libstdc++.so.6 (CXXABI_1.3.3) => /lib64/libstdc++.so.6
                libstdc++.so.6 (CXXABI_1.3) => /lib64/libstdc++.so.6
                libstdc++.so.6 (GLIBCXX_3.4) => /lib64/libstdc++.so.6
        /lib64/libdl.so.2:
                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
                libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/librt.so.1:
                libpthread.so.0 (GLIBC_2.3.2) => /lib64/libpthread.so.0
                libpthread.so.0 (GLIBC_PRIVATE) => /lib64/libpthread.so.0
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
        /lib64/libodbcinst.so.2:
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libkrb5.so.3:
                libkeyutils.so.1 (KEYUTILS_1.0) => /lib64/libkeyutils.so.1
                libkeyutils.so.1 (KEYUTILS_1.5) => /lib64/libkeyutils.so.1
                libkeyutils.so.1 (KEYUTILS_0.3) => /lib64/libkeyutils.so.1
                libresolv.so.2 (GLIBC_2.2.5) => /lib64/libresolv.so.2
                libkrb5support.so.0 (krb5support_0_MIT) => /lib64/libkrb5support.so.0
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.16) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libk5crypto.so.3 (k5crypto_3_MIT) => /lib64/libk5crypto.so.3
        /lib64/libgssapi_krb5.so.2:
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.27) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libkrb5support.so.0 (krb5support_0_MIT) => /lib64/libkrb5support.so.0
                libk5crypto.so.3 (k5crypto_3_MIT) => /lib64/libk5crypto.so.3
                libkrb5.so.3 (krb5_3_MIT) => /lib64/libkrb5.so.3
        /lib64/libstdc++.so.6:
                libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                libgcc_s.so.1 (GCC_4.2.0) => /lib64/libgcc_s.so.1
                libgcc_s.so.1 (GCC_3.3) => /lib64/libgcc_s.so.1
                libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.18) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.16) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libm.so.6:
                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
        /lib64/libgcc_s.so.1:
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libpthread.so.0:
                ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2
                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
        /lib64/libc.so.6:
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
        /lib64/libltdl.so.7:
                libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libk5crypto.so.3:
                libkrb5support.so.0 (krb5support_0_MIT) => /lib64/libkrb5support.so.0
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libcrypto.so.1.1 (OPENSSL_1_1_1b) => /lib64/libcrypto.so.1.1
                libcrypto.so.1.1 (OPENSSL_1_1_0) => /lib64/libcrypto.so.1.1
        /lib64/libcom_err.so.2:
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libkrb5support.so.0:
                libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
                libc.so.6 (GLIBC_2.7) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libkeyutils.so.1:
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libcrypto.so.1.1:
                libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.16) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libresolv.so.2:
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
        /lib64/libselinux.so.1:
                libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
        /lib64/libz.so.1:
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
        /lib64/libpcre2-8.so.0:
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6

see but with PHP it load /usr/local/apps/openssl-11/lib/libcrypto.so.1.1 insted of /lib64/libcrypto.so.1.1 getting this error on almalinux only.

GaneshKandu commented 1 year ago

ldd -v msodbcsql i noticed libk5crypto.so.3 Need libcrypto.so.1.1 on Almalinux only

On CentOS and Ubuntu libk5crypto.so.3 doesn't load libcrypto.so.1.1

lurcher commented 1 year ago

On 19/02/2023 17:16, Ganesh Kandu ( गणेश कांदु ) wrote:

|ldd -v msodbcsql| i noticed |libk5crypto.so.3| Need |libcrypto.so.1.1| on Almalinux only

On CentOS and Ubuntu |libk5crypto.so.3| doesn't load |libcrypto.so.1.1|

|Again, everything about this looks like a not a unixODBC problem.|

kadler commented 1 year ago

I've seen this before with Microsoft's ODBC drivers. When loading in to Node.js on Red Hat, the OpenSSL libraries used by Node conflict with those that the driver wants to use. The problem is really with the driver (really with ELF, but you're not changing that). If the driver doesn't want conflicts, it needs to either a) use the system libraries or b) dlopen() its vendor libraries instead of directly linking to them.

lurcher commented 1 year ago

On 20/02/2023 16:25, Kevin Adler wrote:

I've seen this before with Microsoft's ODBC drivers. When loading in to Node.js on Red Hat, the OpenSSL libraries used by Node conflict with those that the driver wants to use. The problem is really with the driver (really with ELF, but you're not changing that). If the driver doesn't want conflicts, it needs to either a) use the system libraries or b) dlopen() its vendor libraries instead of directly linking to them.

Yep, I have seen similar in the past, but in this case I don't think its the drivers fault as I think the MS drivers are built with their own ssl libs instead of linking to a shared lib(s), the problem here is with the krb5 lib that is looking for a different build of openssl. Looks like php has committed to loading both openssl 3.0 and 1.1 from its own location which is then colliding with the krb5 requirements.

Looks like I would guess a build problem in the krb5 lib.

https://bugzilla.redhat.com/show_bug.cgi?id=1829790

Having a quick grep in my tree of openssl versions, I can find some EVPKDF* entry points in openssl 3.0 but still no EVP_KDF_ctrl. Maybe the solution is to rebuild or use a different libkrb5

kadler commented 1 year ago

Well usually distro packages are built against the same version of OpenSSL, so they should work cohesively but I see now that PHP is coming from /usr/local/apps, so presumably not a distro package. It's pulling in OpenSSL 3 libraries, but trying to use Kerberos libraries from the system which are linked to OpenSSL 1.1.

Yep, this is the equivalent of "DLL Hell" on Linux and other ELF platforms. Whichever symbol gets loaded first wins, so you can't really load libraries that link to different versions of OpenSSL in the same process. The only real way to get around this that I know of is to dlopen it and dlsym the functions you need, which was why I suggest this for the driver.

@lurcher I think your suggestion is correct. Likely need to either rebuild Kerberos to use OpenSSL 3 (likely still issues once the driver gets loaded and wants its own OpenSSL 1.1 libraries) or rebuild PHP, etc with OpenSSL 1.1. And yes, this is definitely a packager issue not a unixODBC issue.

v-chojas commented 1 year ago

Later versions of the msodbcsql17 and msodbcsql18 are flexible and will use the latest OpenSSL available on the system, precisely to avoid this problem, but it looks like in this case it's the other libs it depends on which have conflicting OpenSSL versions.

https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/programming-guidelines#bkmk-openssl

GaneshKandu commented 1 year ago

Later versions of the msodbcsql17 and msodbcsql18 are flexible and will use the latest OpenSSL available on the system, precisely to avoid this problem, but it looks like in this case it's the other libs it depends on which have conflicting OpenSSL versions.

https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/programming-guidelines#bkmk-openssl

Its system's libk5crypto.so.3 who is loading libcrypto.so.1.1 from custom path php build with, whereas it should be load from system's libcrypto.so.1.1

dlopen passes program's env setting's to loaded libraries that's why libmsodbcsql-18.2.so.1.1 is using that env and loading libcrypto.so.1.1 from php is build to load.

I think libmsodbcsql-18.2.so.1.1 is not open source, we can not build it our own andlibmsodbcsql-18.2.so.1.1 should handle it by setting its env blank.

v-chojas commented 1 year ago

Transitive dependencies are not something we have any control over.