Closed GaneshKandu closed 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.
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.
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
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.|
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.
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
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.
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
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.
Transitive dependencies are not something we have any control over.
Hi,
My PHP is build with custom OpenSSL and
-rpath
, when unixODBC trying to loadlibmsodbcsql
its usingphp
's -rpath
that causing error.LD_DEBUG=all php -r '$con=new PDO("sqlsrv:Server=domain.com,1433;Database=db", "user", "password");'
/lib64/libkrb5.so.3
NEEDED bylibmsodbcsql
,libcrypto.so.1.1
is NEEDED by/lib64/libkrb5.so.3
/lib64/libkrb5.so.3
is loadinglibcrypto.so.1.1
from/usr/local/apps/openssl-11/lib/libcrypto.so.1.1
insted of/lib64/libcrypto.so.1.1
and SettingLD_LIBRARY_PATH, PATH
doesn't workWhat could be solution of it ?