svn commit: r1934932 - httpd/httpd/trunk/modules/ldap
| Newsgroups | gmane.comp.apache.cvs |
|---|---|
| Message-ID | <178050203061.2408468.2042004109523590339@svn03-he-fi> |
Author: jorton
Date: Wed Jun 3 15:53:50 2026
New Revision: 1934932
Log:
* modules/ldap/util_ldap.c (uldap_connection_find): Fix inheritance in
per-dir context.
Modified:
httpd/httpd/trunk/modules/ldap/util_ldap.c
Modified: httpd/httpd/trunk/modules/ldap/util_ldap.c
==============================================================================
--- httpd/httpd/trunk/modules/ldap/util_ldap.c Wed Jun 3 15:47:17 2026 (r1934931)
+++ httpd/httpd/trunk/modules/ldap/util_ldap.c Wed Jun 3 15:53:50 2026 (r1934932)
@@ -927,8 +927,23 @@ static util_ldap_connection_t *
*/
l->secure = secureflag;
- /* save away a copy of the client cert list that is presently valid */
- l->client_certs = apr_array_copy_hdr(l->pool, dc->client_certs);
+ /* Deep-copy the client cert list into the connection pool so that
+ * the cached connection does not retain pointers into the
+ * (potentially short-lived) per-directory config pool.
+ */
+ l->client_certs = apr_array_copy(l->pool, dc->client_certs);
+ if (!apr_is_empty_array(l->client_certs)) {
+ int i;
+ apr_ldap_opt_tls_cert_t *certs;
+
+ certs = (apr_ldap_opt_tls_cert_t *)l->client_certs->elts;
+ for (i = 0; i < l->client_certs->nelts; i++) {
+ if (certs[i].path)
+ certs[i].path = apr_pstrdup(l->pool, certs[i].path);
+ if (certs[i].password)
+ certs[i].password = apr_pstrdup(l->pool, certs[i].password);
+ }
+ }
/* whether or not to keep this connection in the pool when it's returned */
l->keep = (st->connection_pool_ttl == 0) ? 0 : 1;