Here is the full patch. Note there are 2 missing defines for z/OS that are added to apr_ldap.h.in. As there is some intersection with the IBM Tivoli hits from Eric Covener's Jan 11th post in the m4 file, I have restricted the grep of ldap.h for the IBM string to only if host=os390. Tivoli does set the LDAP_VENDOR_NAME, but z/OS does not. As I'm checking the entire header not just the vendor name define I want to make sure I don't find the string unintentionally.
Index: apr-util/build/apu-conf.m4 =================================================================== --- apr-util/build/apu-conf.m4 (revision 516457) +++ apr-util/build/apu-conf.m4 (working copy) @@ -219,6 +219,7 @@ apu_has_ldap_microsoft="0" apu_has_ldap_netscape="0" apu_has_ldap_mozilla="0" +apu_has_ldap_zos="0" apu_has_ldap_other="0" AC_ARG_WITH(ldap-include,[ --with-ldap-include=path path to ldap include files with trailing slash]) @@ -320,6 +321,15 @@ apr_cv_ldap_toolkit="Mozilla"]) fi if test "x$apr_cv_ldap_toolkit" = "x"; then + case "$host" in + *-ibm-os390) + AC_EGREP_CPP([IBM], [$lber_h + $ldap_h], [apu_has_ldap_zos="1" + apr_cv_ldap_toolkit="zOS"]) + ;; + esac + fi + if test "x$apr_cv_ldap_toolkit" = "x"; then apu_has_ldap_other="1" apr_cv_ldap_toolkit="unknown" fi @@ -348,6 +358,7 @@ AC_SUBST(apu_has_ldap_microsoft) AC_SUBST(apu_has_ldap_netscape) AC_SUBST(apu_has_ldap_mozilla) +AC_SUBST(apu_has_ldap_zos) AC_SUBST(apu_has_ldap_other) ]) Index: apr-util/include/apr_ldap.h.in =================================================================== --- apr-util/include/apr_ldap.h.in (revision 516557) +++ apr-util/include/apr_ldap.h.in (working copy) @@ -40,6 +40,7 @@ #define APR_HAS_MOZILLA_LDAPSDK @apu_has_ldap_mozilla@ #define APR_HAS_OPENLDAP_LDAPSDK @apu_has_ldap_openldap@ #define APR_HAS_MICROSOFT_LDAPSDK @apu_has_ldap_microsoft@ +#define APR_HAS_ZOS_LDAPSDK @apu_has_ldap_zos@ #define APR_HAS_OTHER_LDAPSDK @apu_has_ldap_other@ @@ -93,7 +94,30 @@ #define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */ #endif +/* + * For ldap function calls that input a size limit on the number of returned elements + * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0) + */ +#if APR_HAS_ZOS_LDAPSDK +#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT +#else +#ifdef LDAP_DEFAULT_LIMIT +#define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT +#else +#define APR_LDAP_SIZELIMIT -1 /* equivalent to LDAP_DEFAULT_LIMIT */ +#endif +#endif +/* + * z/OS is missing some defines + */ +#ifndef LDAP_VERSION_MAX +#define LDAP_VERSION_MAX LDAP_VERSION +#endif +#ifdef APR_HAS_ZOS_LDAPSDK +#define LDAP_VENDOR_NAME "IBM z/OS" +#endif + /* Note: Macros defining const casting has been removed in APR v1.0, * pending real support for LDAP v2.0 toolkits. * Index: modules/ldap/util_ldap.c =================================================================== --- modules/ldap/util_ldap.c (revision 510991) +++ modules/ldap/util_ldap.c (working copy) @@ -52,8 +52,11 @@ #define LDAP_CA_TYPE_BASE64 2 #define LDAP_CA_TYPE_CERT7_DB 3 -#ifndef LDAP_NO_LIMIT -#define LDAP_NO_LIMIT -1 +/* Default define for ldap functions that need a SIZELIMIT but + * do not have the define + */ +#ifndef APR_LDAP_SIZELIMIT +#define APR_LDAP_SIZELIMIT -1 #endif module AP_MODULE_DECLARE_DATA ldap_module; @@ -660,7 +663,7 @@ /* search for reqdn */ if ((result = ldap_search_ext_s(ldc->ldap, (char *)reqdn, LDAP_SCOPE_BASE, "(objectclass=*)", NULL, 1, - NULL, NULL, NULL, LDAP_NO_LIMIT, &res)) + NULL, NULL, NULL, APR_LDAP_SIZELIMIT, &res)) == LDAP_SERVER_DOWN) { ldc->reason = "DN Comparison ldap_search_ext_s() " @@ -938,7 +941,7 @@ if ((result = ldap_search_ext_s(ldc->ldap, (char *)basedn, scope, (char *)filter, attrs, 0, - NULL, NULL, NULL, LDAP_NO_LIMIT, &res)) + NULL, NULL, NULL, APR_LDAP_SIZELIMIT, &res)) == LDAP_SERVER_DOWN) { ldc->reason = "ldap_search_ext_s() for user failed with server down"; @@ -1178,7 +1181,7 @@ if ((result = ldap_search_ext_s(ldc->ldap, (char *)basedn, scope, (char *)filter, attrs, 0, - NULL, NULL, NULL, LDAP_NO_LIMIT, &res)) + NULL, NULL, NULL, APR_LDAP_SIZELIMIT, &res)) == LDAP_SERVER_DOWN) { ldc->reason = "ldap_search_ext_s() for user failed with server down"; On 3/8/07, Brad Nicholes <[EMAIL PROTECTED]> wrote:
Please submit a complete patch against trunk for the apr-util code that includes the ZOS define. This should include the makefile magic that defines APR_HAS_ZOS_LDAPSDK as well. Also include a patch for util_ldap.c that will define APR_LDAP_SIZELIMIT if the version of apr-util does not include the #define. Brad >>> On Wed, Mar 7, 2007 at 8:36 AM, in message <[EMAIL PROTECTED]>, "David Jones" <[EMAIL PROTECTED]> wrote: > Patch to commit if no further comments. > Note that it does not have the ZOS define yet, and does not synch apr- util > with httpd. > to avoid synch problems i could add to util_ldap: > #ifndef APR_LDAP_SIZELIMIT > #define APR_LDAP_SIZELIMIT - 1 > #endif > > > > Index: modules/ldap/util_ldap.c > ============================== >> >> ===================================== >> --- modules/ldap/util_ldap.c (revision 510991) >> +++ modules/ldap/util_ldap.c (working copy) >> @@ - 52,9 +52,6 @@ >> #define LDAP_CA_TYPE_BASE64 2 >> #define LDAP_CA_TYPE_CERT7_DB 3 >> >> - #ifndef LDAP_NO_LIMIT >> - #define LDAP_NO_LIMIT - 1 >> - #endif >> >> module AP_MODULE_DECLARE_DATA ldap_module; >> >> @@ - 660,7 +657,7 @@ >> /* search for reqdn */ >> if ((result = ldap_search_ext_s(ldc- >ldap, (char *)reqdn, >> LDAP_SCOPE_BASE, >> "(objectclass=*)", NULL, 1, >> - NULL, NULL, NULL, LDAP_NO_LIMIT, >> &res)) >> + NULL, NULL, NULL, APR_LDAP_SIZELIMIT, >> &res)) >> == LDAP_SERVER_DOWN) >> { >> ldc- >reason = "DN Comparison ldap_search_ext_s() " >> @@ - 938,7 +935,7 @@ >> if ((result = ldap_search_ext_s(ldc- >ldap, >> (char *)basedn, scope, >> (char *)filter, attrs, 0, >> - NULL, NULL, NULL, LDAP_NO_LIMIT, >> &res)) >> + NULL, NULL, NULL, APR_LDAP_SIZELIMIT, >> &res)) >> == LDAP_SERVER_DOWN) >> { >> ldc- >reason = "ldap_search_ext_s() for user failed with server >> down"; >> @@ - 1178,7 +1175,7 @@ >> if ((result = ldap_search_ext_s(ldc- >ldap, >> (char *)basedn, scope, >> (char *)filter, attrs, 0, >> - NULL, NULL, NULL, LDAP_NO_LIMIT, >> &res)) >> + NULL, NULL, NULL, APR_LDAP_SIZELIMIT, >> &res)) >> == LDAP_SERVER_DOWN) >> { >> ldc- >reason = "ldap_search_ext_s() for user failed with server >> down"; >> Index: apr- util/include/apr_ldap.h.in >> =================================================================== >> --- apr- util/include/apr_ldap.h.in (revision 515593) >> +++ apr- util/include/apr_ldap.h.in (working copy) >> @@ - 93,6 +93,15 @@ >> #define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */ >> #endif >> >> +/* >> + * For ldap function calls that input a size limit on the number of >> returned entries. >> + * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (- 1) or >> LDAP_NO_LIMIT (0) >> + */ >> +#ifdef LDAP_DEFAULT_LIMIT >> +#define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT >> +#else >> +#define APR_LDAP_SIZELIMIT - 1 /* equivalent to LDAP_DEFAULT_LIMIT */ >> +#endif >> >> /* Note: Macros defining const casting has been removed in APR v1.0, >> * pending real support for LDAP v2.0 toolkits. > > > > On 3/2/07, Brad Nicholes <[EMAIL PROTECTED]> wrote: >> >> Looks good, I think I like your first suggestion better, putting the >> #ifdef in apr_ldap.h.in. This seems a little more straight forward rather >> than hiding the value in configure. >> >> Brad >> >> >>> On 3/1/2007 at 7:07 PM, in message >> <[EMAIL PROTECTED]>, "David >> Jones" >> <[EMAIL PROTECTED]> wrote: >> > How about: >> > changes to apr_ldap.h.in: >> > #define APR_HAS_ZOS_LDAPSDK @apu_has_ldap_zos@ >> > >> > #if APR_LDAP_HAS_ZOS_LDAPSDK >> > #define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT >> > #else >> > #ifdef LDAP_DEFAULT_LIMIT >> > #define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT >> > #else >> > #define APR_LDAP_SIZELIMIT - 1 /* equivalent to LDAP_DEFAULT_LIMIT */ >> > #endif >> > #endif >> > >> > >> > This part of the util_ldap.c patch at the bottom could allow >> util_ldap.c to >> > compile regardless of apr- util level, but would not typically commit it? >> > +#ifndef APR_LDAP_SIZELIMIT >> > +#define APR_LDAP_SIZELIMIT - 1 >> > #endif >> > >> > >> > >> > Or could add info to apu- conf.m4 for each SDK, eliminating the need for >> the >> > ZOS specific #if (would just need #define APR_LDAP_SIZELIMIT >> > @apu_ldap_sizelimit) >> > (If get any input from other SDKs then could replace its - 1 with >> > LDAP_DEFAULT_LIMIT or LDAP_NO_LIMIT as i did for z/OS) >> > >> > Index: apu- conf.m4 >> > =================================================================== >> > RCS file: /m0xa/cvs/phoenix/2.2.4/srclib/apr- util/build/apu- conf.m4 ,v >> > retrieving revision 1.2 >> > diff - u - d - b - r1.2 apu- conf.m4 >> > --- apu- conf.m4 12 Feb 2007 18:19:20 - 0000 1.2 >> > +++ apu- conf.m4 1 Mar 2007 20:07:26 - 0000 >> > >> > @@ - 267,10 +273,13 @@ >> > apu_has_ldap_sslinit="0" >> > apu_has_ldapssl_install_routines="0" >> > apu_has_ldap_openldap="0" >> > +apu_has_ldap_sizelimit="0" >> > @@ - 354,42 +363,57 @@ >> > AC_EGREP_CPP([OpenLDAP], [$lber_h >> > $ldap_h >> > LDAP_VENDOR_NAME], [apu_has_ldap_openldap="1" >> > + apu_ldap_sizelimit="- 1" >> > >> apr_cv_ldap_toolkit="OpenLDAP"]) >> > fi >> > if test "x$apr_cv_ldap_toolkit" = "x"; then >> > AC_EGREP_CPP([Sun Microsystems Inc.], [$lber_h >> > $ldap_h >> > LDAP_VENDOR_NAME], [apu_has_ldap_solaris="1" >> > + apu_ldap_sizelimit="- 1" >> > >> apr_cv_ldap_toolkit="Solaris"]) >> > fi >> > if test "x$apr_cv_ldap_toolkit" = "x"; then >> > AC_EGREP_CPP([Novell], [$lber_h >> > $ldap_h >> > LDAP_VENDOR_NAME], [apu_has_ldap_novell="1" >> > + apu_ldap_sizelimit="- 1" >> > >> apr_cv_ldap_toolkit="Novell"]) >> > fi >> > if test "x$apr_cv_ldap_toolkit" = "x"; then >> > AC_EGREP_CPP([Microsoft Corporation.], [$lber_h >> > $ldap_h >> > LDAP_VENDOR_NAME], [apu_has_ldap_microsoft="1" >> > + apu_ldap_sizelimit="- 1" >> > >> > apr_cv_ldap_toolkit="Microsoft"]) >> > fi >> > if test "x$apr_cv_ldap_toolkit" = "x"; then >> > AC_EGREP_CPP([Netscape Communications Corp.], [$lber_h >> > $ldap_h >> > LDAP_VENDOR_NAME], [apu_has_ldap_netscape="1" >> > + apu_ldap_sizelimit="- 1" >> > >> apr_cv_ldap_toolkit="Netscape"]) >> > fi >> > if test "x$apr_cv_ldap_toolkit" = "x"; then >> > AC_EGREP_CPP([mozilla.org], [$lber_h >> > $ldap_h >> > LDAP_VENDOR_NAME], [apu_has_ldap_mozilla="1" >> > + apu_ldap_sizelimit="- 1" >> > >> apr_cv_ldap_toolkit="Mozilla"]) >> > fi >> > if test "x$apr_cv_ldap_toolkit" = "x"; then >> > + AC_EGREP_CPP([IBM], [$lber_h >> > + $ldap_h >> > + LDAP_VENDOR_NAME], [apu_has_ldap_zos="1" >> > + >> > apu_ldap_sizelimit="LDAP_NO_LIMIT" >> > + apr_cv_ldap_toolkit="ZOS"]) >> > + fi >> > + if test "x$apr_cv_ldap_toolkit" = "x"; then >> > apu_has_ldap_other="1" >> > + apu_ldap_sizelimit="- 1" >> > apr_cv_ldap_toolkit="unknown" >> > fi >> > + >> > ]) >> > fi >> > >> > @@ - 398,15 +422,20 @@ >> > LIBS=$save_libs >> > ]) >> > >> > +AC_SUBST(apu_ldap_sizelimit) >> > AC_SUBST(ldap_h) >> > AC_SUBST(lber_h) >> > AC_SUBST(ldap_ssl_h) >> > >> > @@ - 415,6 +444,7 @@ >> > AC_SUBST(apu_has_ldap_microsoft) >> > AC_SUBST(apu_has_ldap_netscape) >> > AC_SUBST(apu_has_ldap_mozilla) >> > +AC_SUBST(apu_has_ldap_zos) >> > AC_SUBST(apu_has_ldap_other) >> > >> > ]) >> > >> > >> > >> > >> > And finally this same either way except for the question on #ifndef >> > APR_LDAP_SIZELIMIT >> > Index: util_ldap.c >> > =================================================================== >> > RCS file: /m0xa/cvs/phoenix/2.2.4/modules/ldap/util_ldap.c,v >> > retrieving revision 1.3 >> > diff - u - d - b - r1.3 util_ldap.c >> > --- util_ldap.c 15 Feb 2007 18:55:41 - 0000 1.3 >> > +++ util_ldap.c 1 Mar 2007 20:19:39 - 0000 >> > @@ - 45,15 +45,8 @@ >> > #include "unixd.h" >> > #endif >> > >> > - #ifndef LDAP_NO_LIMIT >> > - #define LDAP_NO_LIMIT - 1 >> > +#ifndef APR_LDAP_SIZELIMIT >> > +#define APR_LDAP_SIZELIMIT - 1 >> > #endif >> > >> > module AP_MODULE_DECLARE_DATA ldap_module; >> > @@ - 681,7 +681,7 @@ >> > /* search for reqdn */ >> > if ((result = ldap_search_ext_s(ldc- >ldap, (char *)reqdn, >> > LDAP_SCOPE_BASE, >> > "(objectclass=*)", NULL, 1, >> > - NULL, NULL, NULL, LDAP_NO_LIMIT, >> &res)) >> > + NULL, NULL, NULL, >> APR_LDAP_SIZELIMIT, >> > &res)) >> > == LDAP_SERVER_DOWN) >> > { >> > ldc- >reason = "DN Comparison ldap_search_ext_s() " >> > @@ - 960,13 +961,14 @@ >> > if ((result = ldap_search_ext_s(ldc- >ldap, >> > (char *)basedn, scope, >> > (char *)filter, attrs, 0, >> > - NULL, NULL, NULL, LDAP_NO_LIMIT, >> &res)) >> > + NULL, NULL, NULL, >> APR_LDAP_SIZELIMIT, >> > &res)) >> > == LDAP_SERVER_DOWN) >> > { >> > ldc- >reason = "ldap_search_ext_s() for user failed with server >> > down"; >> > >> > @@ - 1200,14 +1202,14 @@ >> > if ((result = ldap_search_ext_s(ldc- >ldap, >> > (char *)basedn, scope, >> > (char *)filter, attrs, 0, >> > - NULL, NULL, NULL, LDAP_NO_LIMIT, >> &res)) >> > + NULL, NULL, NULL, >> APR_LDAP_SIZELIMIT, >> > &res)) >> > == LDAP_SERVER_DOWN) >> > { >> > ldc- >reason = "ldap_search_ext_s() for user failed with server >> > down" >> >> >>