summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2022-05-10 22:42:02 +0000
committerTom Lane2022-05-10 22:42:02 +0000
commitc61f36d9960664a044269f4dcb1a6ad42470a078 (patch)
tree71ea7eaa0a23996d7c8ff826ede7c9baf4c1e3af
parent6979736b4bcdc57e4699eadcca44b699fd1afd29 (diff)
configure: don't probe for libldap_r if libldap is 2.5 or newer.
In OpenLDAP 2.5 and later, libldap itself is always thread-safe and there's never a libldap_r. Our existing coding dealt with that by assuming it wouldn't find libldap_r if libldap is thread-safe. But that rule fails to cope if there are multiple OpenLDAP versions visible, as is likely to be the case on macOS in particular. We'd end up using shiny new libldap in the backend and a hoary libldap_r in libpq. Instead, once we've found libldap, check if it's >= 2.5 (by probing for a function introduced then) and don't bother looking for libldap_r if so. While one can imagine library setups that this'd still give the wrong answer for, they seem unlikely to occur in practice. Per report from Peter Eisentraut. Back-patch to all supported branches. Discussion: https://postgr.es/m/[email protected]
-rwxr-xr-xconfigure13
-rw-r--r--configure.in9
2 files changed, 20 insertions, 2 deletions
diff --git a/configure b/configure
index 547d05c4c4e..2420030cfba 100755
--- a/configure
+++ b/configure
@@ -10696,7 +10696,18 @@ else
fi
LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS"
- if test "$enable_thread_safety" = yes; then
+ # The separate ldap_r library only exists in OpenLDAP < 2.5, and if we
+ # have 2.5 or later, we shouldn't even probe for ldap_r (we might find a
+ # library from a separate OpenLDAP installation). The most reliable
+ # way to check that is to check for a function introduced in 2.5.
+ ac_fn_c_check_func "$LINENO" "ldap_verify_credentials" "ac_cv_func_ldap_verify_credentials"
+if test "x$ac_cv_func_ldap_verify_credentials" = xyes; then :
+ thread_safe_libldap=yes
+else
+ thread_safe_libldap=no
+fi
+
+ if test "$enable_thread_safety" = yes -a "$thread_safe_libldap" = no; then
# Use ldap_r for FE if available, else assume ldap is thread-safe.
# On some platforms ldap_r fails to link without PTHREAD_LIBS.
LIBS="$_LIBS"
diff --git a/configure.in b/configure.in
index 086669126fd..112611d8a6c 100644
--- a/configure.in
+++ b/configure.in
@@ -1202,7 +1202,14 @@ if test "$with_ldap" = yes ; then
[AC_MSG_ERROR([library 'ldap' is required for LDAP])],
[$EXTRA_LDAP_LIBS])
LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS"
- if test "$enable_thread_safety" = yes; then
+ # The separate ldap_r library only exists in OpenLDAP < 2.5, and if we
+ # have 2.5 or later, we shouldn't even probe for ldap_r (we might find a
+ # library from a separate OpenLDAP installation). The most reliable
+ # way to check that is to check for a function introduced in 2.5.
+ AC_CHECK_FUNC([ldap_verify_credentials],
+ [thread_safe_libldap=yes],
+ [thread_safe_libldap=no])
+ if test "$enable_thread_safety" = yes -a "$thread_safe_libldap" = no; then
# Use ldap_r for FE if available, else assume ldap is thread-safe.
# On some platforms ldap_r fails to link without PTHREAD_LIBS.
LIBS="$_LIBS"