It's not safe to ask an SDK that doesn't define LDAP_DEFAULT_LIMIT to
use -1, because it might put it on the wire as an unsigned int.

We previously special-cased this for the MSSDK, but it needs to be more general.

PR23356



git-svn-id: https://svn.apache.org/repos/asf/apr/apr-util/trunk@751456 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES b/CHANGES
index 3c9cc78..b361a7a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,11 @@
 
 Changes with APR-util 1.4.0
 
+  *) APR_LDAP_SIZELIMIT should prefer LDAP_DEFAULT_LIMIT/-1 when the 
+     SDK supports it, but in the absence of LDAP_DEFAULT_LIMIT (and 
+     LDAP_NO_LIMIT/0) it is not safe to use a literal -1.
+     PR23356 [Eric Covener]
+
   *) Fix apr_memcache_multgetp memory corruption and incorrect error 
      handling. PR 46588 [Sami Tolvanen <sami.tolvanen mywot.com>]
 
diff --git a/include/apr_ldap.h.in b/include/apr_ldap.h.in
index c757e06..6087783 100644
--- a/include/apr_ldap.h.in
+++ b/include/apr_ldap.h.in
@@ -102,17 +102,21 @@
 /*
  * 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)
+ * LDAP_DEFAULT_LIMIT is preferred as it allows inheritance from whatever the SDK
+ * or process is configured for.
  */
-#if APR_HAS_ZOS_LDAPSDK || APR_HAS_MICROSOFT_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 */
+#ifdef LDAP_NO_LIMIT
+#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT
 #endif
 #endif
 
+#ifndef APR_LDAP_SIZELIMIT
+#define APR_LDAP_SIZELIMIT 0 /* equivalent to LDAP_NO_LIMIT, and what goes on the wire */
+#endif
+
 /*
  * z/OS is missing some defines
  */
diff --git a/include/apr_ldap.hw b/include/apr_ldap.hw
index a589376..c1bd0d4 100644
--- a/include/apr_ldap.hw
+++ b/include/apr_ldap.hw
@@ -102,17 +102,21 @@
 /*
  * 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)
+ * LDAP_DEFAULT_LIMIT is preferred as it allows inheritance from whatever the SDK
+ * or process is configured for.
  */
-#if APR_HAS_ZOS_LDAPSDK || APR_HAS_MICROSOFT_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 */
+#ifdef LDAP_NO_LIMIT
+#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT
 #endif
 #endif
 
+#ifndef APR_LDAP_SIZELIMIT
+#define APR_LDAP_SIZELIMIT 0 /* equivalent to LDAP_NO_LIMIT, and what goes on the wire */
+#endif
+
 /*
  * z/OS is missing some defines
  */