Skip to content

Commit 5bc3774

Browse files
committed
Allow the ldap extension to be compiled with Oracle's LDAP
implementation, if desired. Note the implementations differ so you will see different ldap behavior. The patch allows configuration similar to: --with-ldap=$HOME/instantclient --with-oci8=instantclient,$HOME/instantclient The patch doesn't support configuration similar to: --with-ldap --with-oci8=instantclient,$HOME/instantclient since this would try and mix the default LDAP and Oracle LDAP implementations. This patch closes out bug #61450 and the associated github PR. Regardless of this patch, my recommended way to install both OCI8 and ldap extensions is to statically configure PHP with ldap, and then add OCI8 as a shared extension from PECL.
1 parent fb6f5d2 commit 5bc3774

File tree

2 files changed

+55
-24
lines changed

2 files changed

+55
-24
lines changed

ext/ldap/config.m4

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,28 @@ AC_DEFUN([PHP_LDAP_CHECKS], [
1515
LDAP_DIR=$1
1616
LDAP_INCDIR=$1/ldap/public
1717
LDAP_LIBDIR=$1/$PHP_LIBDIR
18+
else
19+
20+
dnl Find Oracle Instant Client RPM header location corresponding to the given lib path e.g. for --with-ldap=/usr/lib/oracle/12.1/client64/lib
21+
AC_CHECK_SIZEOF(long int, 4)
22+
if test "$ac_cv_sizeof_long_int" = "4"; then
23+
PHP_OCI8_IC_LIBDIR_SUFFIX=""
24+
else
25+
PHP_OCI8_IC_LIBDIR_SUFFIX=64
26+
fi
27+
OCISDKRPMINC=`echo "$1" | $SED -e 's!^/usr/lib/oracle/\(.*\)/client\('${PHP_OCI8_IC_LIBDIR_SUFFIX}'\)*/lib[/]*$!/usr/include/oracle/\1/client\2!'`
28+
29+
dnl Check for Oracle Instant Client RPM install
30+
if test -f $OCISDKRPMINC/ldap.h; then
31+
LDAP_DIR=$1
32+
LDAP_INCDIR=$OCISDKRPMINC
33+
LDAP_LIBDIR=$1
34+
dnl Check for Oracle Instant Client ZIP install
35+
elif test -f $1/sdk/include/ldap.h; then
36+
LDAP_DIR=$1
37+
LDAP_INCDIR=$1/sdk/include
38+
LDAP_LIBDIR=$1
39+
fi
1840
fi
1941
])
2042

@@ -143,12 +165,21 @@ if test "$PHP_LDAP" != "no"; then
143165
PHP_ADD_LIBRARY_WITH_PATH(umich_lber, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
144166
PHP_ADD_LIBRARY_WITH_PATH(umich_ldap, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
145167

146-
elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME; then
168+
elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME.12.1; then
147169
PHP_ADD_LIBRARY_WITH_PATH(clntsh, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
148170
AC_DEFINE(HAVE_ORALDAP,1,[ ])
149-
if test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then
150-
AC_DEFINE(HAVE_ORALDAP_10,1,[ ])
151-
fi
171+
AC_DEFINE(HAVE_ORALDAP_12,1,[ ])
172+
173+
elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME.11.1; then
174+
PHP_ADD_LIBRARY_WITH_PATH(clntsh, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
175+
AC_DEFINE(HAVE_ORALDAP,1,[ ])
176+
AC_DEFINE(HAVE_ORALDAP_11,1,[ ])
177+
178+
elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME; then
179+
PHP_ADD_LIBRARY_WITH_PATH(clntsh, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
180+
AC_DEFINE(HAVE_ORALDAP,1,[ ])
181+
AC_DEFINE(HAVE_ORALDAP_10,1,[ ])
182+
152183
else
153184
AC_MSG_ERROR(Cannot find ldap libraries in $LDAP_LIBDIR.)
154185
fi

ext/ldap/ldap.c

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ PHP_MINIT_FUNCTION(ldap)
152152
REGISTER_LONG_CONSTANT("LDAP_DEREF_FINDING", LDAP_DEREF_FINDING, CONST_PERSISTENT | CONST_CS);
153153
REGISTER_LONG_CONSTANT("LDAP_DEREF_ALWAYS", LDAP_DEREF_ALWAYS, CONST_PERSISTENT | CONST_CS);
154154

155-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10
155+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP
156156
/* LDAP options */
157157
REGISTER_LONG_CONSTANT("LDAP_OPT_DEREF", LDAP_OPT_DEREF, CONST_PERSISTENT | CONST_CS);
158158
REGISTER_LONG_CONSTANT("LDAP_OPT_SIZELIMIT", LDAP_OPT_SIZELIMIT, CONST_PERSISTENT | CONST_CS);
@@ -361,7 +361,7 @@ PHP_FUNCTION(ldap_connect)
361361
static int _get_lderrno(LDAP *ldap)
362362
{
363363
#if !HAVE_NSLDAP
364-
#if LDAP_API_VERSION > 2000 || HAVE_ORALDAP_10
364+
#if LDAP_API_VERSION > 2000 || HAVE_ORALDAP
365365
int lderr;
366366

367367
/* New versions of OpenLDAP do it this way */
@@ -550,7 +550,7 @@ static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref, in
550550
{
551551
/* sizelimit */
552552
if (sizelimit > -1) {
553-
#if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP_10
553+
#if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP
554554
ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_sizelimit);
555555
ldap_set_option(ldap, LDAP_OPT_SIZELIMIT, &sizelimit);
556556
#else
@@ -561,7 +561,7 @@ static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref, in
561561

562562
/* timelimit */
563563
if (timelimit > -1) {
564-
#if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP_10
564+
#if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP
565565
ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_timelimit);
566566
ldap_set_option(ldap, LDAP_OPT_TIMELIMIT, &timelimit);
567567
#else
@@ -572,7 +572,7 @@ static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref, in
572572

573573
/* deref */
574574
if (deref > -1) {
575-
#if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP_10
575+
#if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP
576576
ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_deref);
577577
ldap_set_option(ldap, LDAP_OPT_DEREF, &deref);
578578
#else
@@ -975,12 +975,12 @@ PHP_FUNCTION(ldap_get_entries)
975975
add_index_string(tmp1, num_attrib, attribute, 1);
976976

977977
num_attrib++;
978-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 || WINDOWS
978+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS
979979
ldap_memfree(attribute);
980980
#endif
981981
attribute = ldap_next_attribute(ldap, ldap_result_entry, ber);
982982
}
983-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 || WINDOWS
983+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS
984984
if (ber != NULL) {
985985
ber_free(ber, 0);
986986
}
@@ -989,7 +989,7 @@ PHP_FUNCTION(ldap_get_entries)
989989
add_assoc_long(tmp1, "count", num_attrib);
990990
dn = ldap_get_dn(ldap, ldap_result_entry);
991991
add_assoc_string(tmp1, "dn", dn, 1);
992-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 || WINDOWS
992+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS
993993
ldap_memfree(dn);
994994
#else
995995
free(dn);
@@ -1027,7 +1027,7 @@ PHP_FUNCTION(ldap_first_attribute)
10271027
RETURN_FALSE;
10281028
} else {
10291029
RETVAL_STRING(attribute, 1);
1030-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 || WINDOWS
1030+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS
10311031
ldap_memfree(attribute);
10321032
#endif
10331033
}
@@ -1057,7 +1057,7 @@ PHP_FUNCTION(ldap_next_attribute)
10571057
}
10581058

10591059
if ((attribute = ldap_next_attribute(ld->link, resultentry->data, resultentry->ber)) == NULL) {
1060-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 || WINDOWS
1060+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS
10611061
if (resultentry->ber != NULL) {
10621062
ber_free(resultentry->ber, 0);
10631063
resultentry->ber = NULL;
@@ -1066,7 +1066,7 @@ PHP_FUNCTION(ldap_next_attribute)
10661066
RETURN_FALSE;
10671067
} else {
10681068
RETVAL_STRING(attribute, 1);
1069-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 || WINDOWS
1069+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS
10701070
ldap_memfree(attribute);
10711071
#endif
10721072
}
@@ -1113,12 +1113,12 @@ PHP_FUNCTION(ldap_get_attributes)
11131113
add_index_string(return_value, num_attrib, attribute, 1);
11141114

11151115
num_attrib++;
1116-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 || WINDOWS
1116+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS
11171117
ldap_memfree(attribute);
11181118
#endif
11191119
attribute = ldap_next_attribute(ld->link, resultentry->data, ber);
11201120
}
1121-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 || WINDOWS
1121+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS
11221122
if (ber != NULL) {
11231123
ber_free(ber, 0);
11241124
}
@@ -1183,7 +1183,7 @@ PHP_FUNCTION(ldap_get_dn)
11831183
text = ldap_get_dn(ld->link, resultentry->data);
11841184
if (text != NULL) {
11851185
RETVAL_STRING(text, 1);
1186-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 || WINDOWS
1186+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS
11871187
ldap_memfree(text);
11881188
#else
11891189
free(text);
@@ -1241,7 +1241,7 @@ PHP_FUNCTION(ldap_dn2ufn)
12411241

12421242
if (ufn != NULL) {
12431243
RETVAL_STRING(ufn, 1);
1244-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 || WINDOWS
1244+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS
12451245
ldap_memfree(ufn);
12461246
#endif
12471247
} else {
@@ -1546,7 +1546,7 @@ PHP_FUNCTION(ldap_sort)
15461546
}
15471547
/* }}} */
15481548

1549-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10
1549+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP
15501550
/* {{{ proto bool ldap_get_option(resource link, int option, mixed retval)
15511551
Get the current value of various session-wide parameters */
15521552
PHP_FUNCTION(ldap_get_option)
@@ -2003,7 +2003,7 @@ PHP_FUNCTION(ldap_rename)
20032003
newparent = NULL;
20042004
}
20052005

2006-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10
2006+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP
20072007
rc = ldap_rename_s(ld->link, dn, newrdn, newparent, deleteoldrdn, NULL, NULL);
20082008
#else
20092009
if (newparent_len != 0) {
@@ -2047,7 +2047,7 @@ PHP_FUNCTION(ldap_start_tls)
20472047
}
20482048
/* }}} */
20492049
#endif
2050-
#endif /* (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 */
2050+
#endif /* (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP */
20512051

20522052
#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
20532053
/* {{{ _ldap_rebind_proc()
@@ -2567,7 +2567,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_control_paged_result_response, 0, 0, 2)
25672567
ZEND_END_ARG_INFO();
25682568
#endif
25692569

2570-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10
2570+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP
25712571
ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_rename, 0, 0, 5)
25722572
ZEND_ARG_INFO(0, link_identifier)
25732573
ZEND_ARG_INFO(0, dn)
@@ -2683,7 +2683,7 @@ const zend_function_entry ldap_functions[] = {
26832683
PHP_FE(ldap_compare, arginfo_ldap_compare)
26842684
PHP_FE(ldap_sort, arginfo_ldap_sort)
26852685

2686-
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10
2686+
#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP
26872687
PHP_FE(ldap_rename, arginfo_ldap_rename)
26882688
PHP_FE(ldap_get_option, arginfo_ldap_get_option)
26892689
PHP_FE(ldap_set_option, arginfo_ldap_set_option)

0 commit comments

Comments
 (0)