From: Joe Orton Date: Fri, 5 Aug 2005 14:06:46 +0000 (+0000) Subject: Merge r225753 from trunk: X-Git-Tag: 2.0.55~104 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=99f67d424f2f11045d029d5aa1e8371f3e9e456a;p=thirdparty%2Fapache%2Fhttpd.git Merge r225753 from trunk: * modules/ldap/util_ldap_cache.c (util_ldap_cache_init): Use the actual available size of the shm segment not the requested size. Ensure the requested size is aligned. Check errors from apr_rmm_init. Reviewed by: jorton, minfrin, bnicholes git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.0.x@230474 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index e66414ec985..6cf4d938602 100644 --- a/CHANGES +++ b/CHANGES @@ -4,7 +4,7 @@ Changes with Apache 2.0.55 *) mod_proxy: Fix over-eager handling of '%' for reverse proxies. PR 15207. [Jim Jagielski] - *) mod_ldap: Fix a possible crash in shared memory cache handling. + *) mod_ldap: Fix various shared memory cache handling bugs. PR 34209. [Joe Orton] *) Fix a file descriptor leak when starting piped loggers. PR 33748. diff --git a/STATUS b/STATUS index 3339e9cce86..407082c2c68 100644 --- a/STATUS +++ b/STATUS @@ -370,11 +370,6 @@ PATCHES PROPOSED TO BACKPORT FROM TRUNK: http://svn.apache.org/viewcvs.cgi?rev=209539&view=rev +1: pquerna - *) mod_ldap: Use the correct shm segment size, fail on - apr_rmm_init errors. - http://svn.apache.org/viewcvs?rev=225753&view=rev - +1: jorton, minfrin, bnicholes - *) mod_ldap: Initialize mutex permissions properly so that locking actually works. http://svn.apache.org/viewcvs?rev=105412&view=rev diff --git a/modules/experimental/util_ldap_cache.c b/modules/experimental/util_ldap_cache.c index 012c2927d94..ca856890772 100644 --- a/modules/experimental/util_ldap_cache.c +++ b/modules/experimental/util_ldap_cache.c @@ -397,8 +397,11 @@ apr_status_t util_ldap_cache_init(apr_pool_t *pool, util_ldap_state_t *st) { #if APR_HAS_SHARED_MEMORY apr_status_t result; + apr_size_t size; - result = apr_shm_create(&st->cache_shm, st->cache_bytes, st->cache_file, st->pool); + size = APR_ALIGN_DEFAULT(st->cache_bytes); + + result = apr_shm_create(&st->cache_shm, size, st->cache_file, st->pool); if (result == APR_EEXIST) { /* * The cache could have already been created (i.e. we may be a child process). See @@ -410,8 +413,17 @@ apr_status_t util_ldap_cache_init(apr_pool_t *pool, util_ldap_state_t *st) return result; } + /* Determine the usable size of the shm segment. */ + size = apr_shm_size_get(st->cache_shm); + /* This will create a rmm "handler" to get into the shared memory area */ - apr_rmm_init(&st->cache_rmm, NULL, (void *)apr_shm_baseaddr_get(st->cache_shm), st->cache_bytes, st->pool); + result = apr_rmm_init(&st->cache_rmm, NULL, + apr_shm_baseaddr_get(st->cache_shm), size, + st->pool); + if (result != APR_SUCCESS) { + return result; + } + #endif apr_pool_cleanup_register(st->pool, st , util_ldap_cache_module_kill, apr_pool_cleanup_null);