summaryrefslogtreecommitdiff
path: root/httpd-2.4.53-r1878890.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-05 02:42:43 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-05 02:42:43 +0000
commit03f1098961e7cd0a5a3b7d93ca59f9176b7f63ac (patch)
tree4d0a57939694fecbd2850cf3f43e9aaa1ea60017 /httpd-2.4.53-r1878890.patch
parent707da8b4b72f9e9ec132f1a285b9ce28b6a2b667 (diff)
automatic import of httpdopeneuler24.03_LTS
Diffstat (limited to 'httpd-2.4.53-r1878890.patch')
-rw-r--r--httpd-2.4.53-r1878890.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/httpd-2.4.53-r1878890.patch b/httpd-2.4.53-r1878890.patch
new file mode 100644
index 0000000..945c498
--- /dev/null
+++ b/httpd-2.4.53-r1878890.patch
@@ -0,0 +1,116 @@
+diff --git a/include/util_ldap.h b/include/util_ldap.h
+index 28e0760..edb8a81 100644
+--- a/include/util_ldap.h
++++ b/include/util_ldap.h
+@@ -32,7 +32,6 @@
+ #if APR_MAJOR_VERSION < 2
+ /* The LDAP API is currently only present in APR 1.x */
+ #include "apr_ldap.h"
+-#include "apr_ldap_rebind.h"
+ #else
+ #define APR_HAS_LDAP 0
+ #endif
+diff --git a/modules/ldap/util_ldap.c b/modules/ldap/util_ldap.c
+index 4d92ec9..864bd62 100644
+--- a/modules/ldap/util_ldap.c
++++ b/modules/ldap/util_ldap.c
+@@ -154,6 +154,38 @@ static int util_ldap_handler(request_rec *r)
+ return OK;
+ }
+
++/* For OpenLDAP with the 3-arg version of ldap_set_rebind_proc(), use
++ * a simpler rebind callback than the implementation in APR-util.
++ * Testing for API version >= 3001 appears safe although OpenLDAP
++ * 2.1.x (API version = 2004) also has the 3-arg API. */
++#if APR_HAS_OPENLDAP_LDAPSDK && defined(LDAP_API_VERSION) && LDAP_API_VERSION >= 3001
++
++#define uldap_rebind_init(p) APR_SUCCESS /* noop */
++
++static int uldap_rebind_proc(LDAP *ld, const char *url, ber_tag_t request,
++ ber_int_t msgid, void *params)
++{
++ util_ldap_connection_t *ldc = params;
++
++ return ldap_bind_s(ld, ldc->binddn, ldc->bindpw, LDAP_AUTH_SIMPLE);
++}
++
++static apr_status_t uldap_rebind_add(util_ldap_connection_t *ldc)
++{
++ ldap_set_rebind_proc(ldc->ldap, uldap_rebind_proc, ldc);
++ return APR_SUCCESS;
++}
++
++#else /* !APR_HAS_OPENLDAP_LDAPSDK */
++
++#define USE_APR_LDAP_REBIND
++#include <apr_ldap_rebind.h>
++
++#define uldap_rebind_init(p) apr_ldap_rebind_init(p)
++#define uldap_rebind_add(ldc) apr_ldap_rebind_add((ldc)->rebind_pool, \
++ (ldc)->ldap, (ldc)->binddn, \
++ (ldc)->bindpw)
++#endif
+
+
+ /* ------------------------------------------------------------------ */
+@@ -195,6 +227,13 @@ static apr_status_t uldap_connection_unbind(void *param)
+ util_ldap_connection_t *ldc = param;
+
+ if (ldc) {
++#ifdef USE_APR_LDAP_REBIND
++ /* forget the rebind info for this conn */
++ if (ldc->ChaseReferrals == AP_LDAP_CHASEREFERRALS_ON) {
++ apr_pool_clear(ldc->rebind_pool);
++ }
++#endif
++
+ if (ldc->ldap) {
+ if (ldc->r) {
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE5, 0, ldc->r, "LDC %pp unbind", ldc);
+@@ -203,12 +242,6 @@ static apr_status_t uldap_connection_unbind(void *param)
+ ldc->ldap = NULL;
+ }
+ ldc->bound = 0;
+-
+- /* forget the rebind info for this conn */
+- if (ldc->ChaseReferrals == AP_LDAP_CHASEREFERRALS_ON) {
+- apr_ldap_rebind_remove(ldc->ldap);
+- apr_pool_clear(ldc->rebind_pool);
+- }
+ }
+
+ return APR_SUCCESS;
+@@ -344,7 +377,7 @@ static int uldap_connection_init(request_rec *r,
+
+ if (ldc->ChaseReferrals == AP_LDAP_CHASEREFERRALS_ON) {
+ /* Now that we have an ldap struct, add it to the referral list for rebinds. */
+- rc = apr_ldap_rebind_add(ldc->rebind_pool, ldc->ldap, ldc->binddn, ldc->bindpw);
++ rc = uldap_rebind_add(ldc);
+ if (rc != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, rc, r->server, APLOGNO(01277)
+ "LDAP: Unable to add rebind cross reference entry. Out of memory?");
+@@ -870,6 +903,7 @@ static util_ldap_connection_t *
+ /* whether or not to keep this connection in the pool when it's returned */
+ l->keep = (st->connection_pool_ttl == 0) ? 0 : 1;
+
++#ifdef USE_APR_LDAP_REBIND
+ if (l->ChaseReferrals == AP_LDAP_CHASEREFERRALS_ON) {
+ if (apr_pool_create(&(l->rebind_pool), l->pool) != APR_SUCCESS) {
+ ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r, APLOGNO(01286)
+@@ -881,6 +915,7 @@ static util_ldap_connection_t *
+ }
+ apr_pool_tag(l->rebind_pool, "util_ldap_rebind");
+ }
++#endif
+
+ if (p) {
+ p->next = l;
+@@ -3068,7 +3103,7 @@ static int util_ldap_post_config(apr_pool_t *p, apr_pool_t *plog,
+ }
+
+ /* Initialize the rebind callback's cross reference list. */
+- apr_ldap_rebind_init (p);
++ (void) uldap_rebind_init(p);
+
+ #ifdef AP_LDAP_OPT_DEBUG
+ if (st->debug_level > 0) {