Commit 471c8a2c authored by Doug MacEachern's avatar Doug MacEachern
Browse files

PR:

Obtained from:
Submitted by:   Madhusudan Mathihalli <madhusudan_mathihalli@hp.com>
Reviewed by:	dougm
implement SSLSessionCache shmht and shmcb based on apr_rmm and apr_shm


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk/modules/ssl@93942 13f79535-47bb-0310-9956-ffa450edef68
parent 60970dde
Loading
Loading
Loading
Loading
+11 −9
Changes for mod_ssl.h: 11 added lines, 9 removed lines.
Original line number Diff line number Diff line
@@ -108,6 +108,8 @@
#include "apr_fnmatch.h"
#include "apr_strings.h"
#include "apr_dbm.h"
#include "apr_rmm.h"
#include "apr_shm.h"
#include "apr_optional.h"

/* OpenSSL headers */
@@ -488,9 +490,8 @@ typedef struct {
    int             nSessionCacheMode;
    char           *szSessionCacheDataFile;
    int             nSessionCacheDataSize;
#if 0 /* XXX */
    AP_MM          *pSessionCacheDataMM;
#endif
    apr_shm_t      *pSessionCacheDataMM;
    apr_rmm_t      *pSessionCacheDataRMM;
    apr_table_t    *tSessionCacheDataTable;
    ssl_mutexmode_t nMutexMode;
    char           *szMutexFile;
@@ -679,22 +680,22 @@ SSL_SESSION *ssl_scache_dbm_retrieve(server_rec *, UCHAR *, int);
void         ssl_scache_dbm_remove(server_rec *, UCHAR *, int);
void         ssl_scache_dbm_expire(server_rec *);
void         ssl_scache_dbm_status(server_rec *, apr_pool_t *, void (*)(char *, void *), void *);
#if 0 /* XXX */
void         ssl_scache_shmht_init(server_rec *, pool *);

void         ssl_scache_shmht_init(server_rec *, apr_pool_t *);
void         ssl_scache_shmht_kill(server_rec *);
BOOL         ssl_scache_shmht_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
SSL_SESSION *ssl_scache_shmht_retrieve(server_rec *, UCHAR *, int);
void         ssl_scache_shmht_remove(server_rec *, UCHAR *, int);
void         ssl_scache_shmht_expire(server_rec *);
void         ssl_scache_shmht_status(server_rec *, pool *, void (*)(char *, void *), void *);
void         ssl_scache_shmcb_init(server_rec *, pool *);
void         ssl_scache_shmht_status(server_rec *, apr_pool_t *, void (*)(char *, void *), void *);

void         ssl_scache_shmcb_init(server_rec *, apr_pool_t *);
void         ssl_scache_shmcb_kill(server_rec *);
BOOL         ssl_scache_shmcb_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
SSL_SESSION *ssl_scache_shmcb_retrieve(server_rec *, UCHAR *, int);
void         ssl_scache_shmcb_remove(server_rec *, UCHAR *, int);
void         ssl_scache_shmcb_expire(server_rec *);
void         ssl_scache_shmcb_status(server_rec *, pool *, void (*)(char *, void *), void *);
#endif
void         ssl_scache_shmcb_status(server_rec *, apr_pool_t *, void (*)(char *, void *), void *);

/*  Pass Phrase Support  */
void         ssl_pphrase_Handle(server_rec *, apr_pool_t *);
@@ -768,4 +769,5 @@ char *ssl_util_algotypestr(ssl_algo_t);
char        *ssl_util_ptxtsub(apr_pool_t *, const char *, const char *, char *);
void         ssl_util_thread_setup(server_rec *, apr_pool_t *);

#define APR_SHM_MAXSIZE (64 * 1024 * 1024)
#endif /* __MOD_SSL_H__ */
+17 −33
Changes for ssl_engine_config.c: 17 added lines, 33 removed lines.
Original line number Diff line number Diff line
@@ -95,9 +95,8 @@ SSLModConfigRec *ssl_config_global_create(server_rec *s)
    mc->nSessionCacheMode      = SSL_SCMODE_UNSET;
    mc->szSessionCacheDataFile = NULL;
    mc->nSessionCacheDataSize  = 0;
#if 0 /* XXX */
    mc->pSessionCacheDataMM    = NULL;
#endif
    mc->pSessionCacheDataRMM   = NULL;
    mc->tSessionCacheDataTable = NULL;
    mc->nMutexMode             = SSL_MUTEXMODE_UNSET;
    mc->szMutexFile            = NULL;
@@ -803,6 +802,9 @@ const char *ssl_cmd_SSLVerifyDepth(cmd_parms *cmd, void *ctx,
    return NULL;
}

#define MODSSL_NO_SHARED_MEMORY_ERROR \
    "SSLSessionCache: shared memory cache not useable on this platform"

const char *ssl_cmd_SSLSessionCache(cmd_parms *cmd, void *ctx,
                                    const char *arg)
{
@@ -828,16 +830,10 @@ const char *ssl_cmd_SSLSessionCache(cmd_parms *cmd, void *ctx,
        mc->nSessionCacheMode      = SSL_SCMODE_DBM;
        mc->szSessionCacheDataFile = ap_server_root_relative(mc->pPool, arg+4);
    }
    else if (((arglen > 4) && strcEQn(arg, "shm:", 4)) ||
             ((arglen > 6) && strcEQn(arg, "shmht:", 6)))
    {
#if 0 /* XXX */
        if (!ap_mm_useable()) {
            return "SSLSessionCache: shared memory cache "
                   "not useable on this platform";
        }
    else if ((arglen > 6) && strcEQn(arg, "shmht:", 6)) {
#if !APR_HAS_SHARED_MEMORY
        return MODSSL_NO_SHARED_MEMORY_ERROR;
#endif

        mc->nSessionCacheMode = SSL_SCMODE_SHMHT;
        colon = ap_strchr_c(arg, ':');
        mc->szSessionCacheDataFile =
@@ -862,13 +858,7 @@ const char *ssl_cmd_SSLSessionCache(cmd_parms *cmd, void *ctx,
                       "size has to be >= 8192 bytes";
            }

#if 0 /* XXX */
            maxsize = ap_mm_core_maxsegsize();
#else
            maxsize = 1024 * 512;
#endif

            if (mc->nSessionCacheDataSize >= maxsize) {
            if (mc->nSessionCacheDataSize >= APR_SHM_MAXSIZE) {
                return apr_psprintf(cmd->pool,
                                    "SSLSessionCache: Invalid argument: "
                                    "size has to be < %d bytes on this "
@@ -876,22 +866,22 @@ const char *ssl_cmd_SSLSessionCache(cmd_parms *cmd, void *ctx,
            }
        }
    }
    else if ((arglen > 6) && strcEQn(arg, "shmcb:", 6)) {
#if 0 /* XXX */
        if (!ap_mm_useable()) {
            return "SSLSessionCache: shared memory cache "
                   "not useable on this platform";
        }
    else if (((arglen > 4) && strcEQn(arg, "shm:", 4)) ||
             ((arglen > 6) && strcEQn(arg, "shmcb:", 6))) {
#if !APR_HAS_SHARED_MEMORY
        return MODSSL_NO_SHARED_MEMORY_ERROR;
#endif
        mc->nSessionCacheMode      = SSL_SCMODE_SHMCB;
        mc->szSessionCacheDataFile = ap_server_root_relative(mc->pPool, arg+6);
        colon = ap_strchr_c(arg, ':');
        mc->szSessionCacheDataFile =
            ap_server_root_relative(mc->pPool, colon+1);
        mc->tSessionCacheDataTable = NULL;
        mc->nSessionCacheDataSize  = 1024*512; /* 512KB */

        if ((cp = strchr(mc->szSessionCacheDataFile, '('))) {
            *cp++ = NUL;

            if ((cp2 = strchr(cp, ')'))) {
            if (!(cp2 = strchr(cp, ')'))) {
                return "SSLSessionCache: Invalid argument: "
                       "no closing parenthesis";
            }
@@ -906,13 +896,7 @@ const char *ssl_cmd_SSLSessionCache(cmd_parms *cmd, void *ctx,

            }

#if 0 /* XXX */
            maxsize = ap_mm_core_maxsegsize();
#else
            maxsize = 1024 * 512;
#endif

            if (mc->nSessionCacheDataSize >= maxsize) {
            if (mc->nSessionCacheDataSize >= APR_SHM_MAXSIZE) {
                return apr_psprintf(cmd->pool,
                                    "SSLSessionCache: Invalid argument: "
                                    "size has to be < %d bytes on this "
+13 −15
Changes for ssl_scache.c: 13 added lines, 15 removed lines.
Original line number Diff line number Diff line
@@ -75,12 +75,22 @@ void ssl_scache_init(server_rec *s, apr_pool_t *p)

    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
        ssl_scache_dbm_init(s, p);
#if 0 /* XXX */
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
    else if ((mc->nSessionCacheMode == SSL_SCMODE_SHMHT) ||
             (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)) {
        void *data;
        const char *userdata_key = "ssl_scache_init";

        apr_pool_userdata_get(&data, userdata_key, s->process->pool);
        if (!data) {
            apr_pool_userdata_setn((const void *)1, userdata_key,
                                   apr_pool_cleanup_null, s->process->pool);
            return;
        }
        if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
            ssl_scache_shmht_init(s, p);
        else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
            ssl_scache_shmcb_init(s, p);
#endif
    }
    return;
}

@@ -90,12 +100,10 @@ void ssl_scache_kill(server_rec *s)

    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
        ssl_scache_dbm_kill(s);
#if 0 /* XXX */
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
        ssl_scache_shmht_kill(s);
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
        ssl_scache_shmcb_kill(s);
#endif
    return;
}

@@ -106,12 +114,10 @@ BOOL ssl_scache_store(server_rec *s, UCHAR *id, int idlen, time_t expiry, SSL_SE

    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
        rv = ssl_scache_dbm_store(s, id, idlen, expiry, sess);
#if 0 /* XXX */
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
        rv = ssl_scache_shmht_store(s, id, idlen, expiry, sess);
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
        rv = ssl_scache_shmcb_store(s, id, idlen, expiry, sess);
#endif
    return rv;
}

@@ -122,12 +128,10 @@ SSL_SESSION *ssl_scache_retrieve(server_rec *s, UCHAR *id, int idlen)

    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
        sess = ssl_scache_dbm_retrieve(s, id, idlen);
#if 0 /* XXX */
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
        sess = ssl_scache_shmht_retrieve(s, id, idlen);
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
        sess = ssl_scache_shmcb_retrieve(s, id, idlen);
#endif
    return sess;
}

@@ -137,12 +141,10 @@ void ssl_scache_remove(server_rec *s, UCHAR *id, int idlen)

    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
        ssl_scache_dbm_remove(s, id, idlen);
#if 0 /* XXX */
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
        ssl_scache_shmht_remove(s, id, idlen);
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
        ssl_scache_shmcb_remove(s, id, idlen);
#endif
    return;
}

@@ -152,12 +154,10 @@ void ssl_scache_status(server_rec *s, apr_pool_t *p, void (*func)(char *, void *

    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
        ssl_scache_dbm_status(s, p, func, arg);
#if 0 /* XXX */
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
        ssl_scache_shmht_status(s, p, func, arg);
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
        ssl_scache_shmcb_status(s, p, func, arg);
#endif
    return;
}

@@ -167,12 +167,10 @@ void ssl_scache_expire(server_rec *s)

    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
        ssl_scache_dbm_expire(s);
#if 0 /* XXX */
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
        ssl_scache_shmht_expire(s);
    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
        ssl_scache_shmcb_expire(s);
#endif
    return;
}

+90 −94
Changes for ssl_scache_shmcb.c: 90 added lines, 94 removed lines.
Original line number Diff line number Diff line
@@ -59,8 +59,6 @@

#include "mod_ssl.h"

#if 0 /* XXX */

/* 
 * This shared memory based SSL session cache implementation was
 * originally written by Geoff Thorpe <geoff@eu.c2.net> for C2Net Europe
@@ -178,24 +176,6 @@
 * so as to decrease "struct-bloat". sigh.
 */
typedef struct {
#if 0
    unsigned char division_mask;
    unsigned int division_offset;
    unsigned int division_size;
    unsigned int queue_size;
    unsigned int index_num;
    unsigned int index_offset;
    unsigned int index_size;
    unsigned int cache_data_offset;
    unsigned int cache_data_size;
    unsigned long num_stores;
    unsigned long num_expiries;
    unsigned long num_scrolled;
    unsigned long num_retrieves_hit;
    unsigned long num_retrieves_miss;
    unsigned long num_removes_hit;
    unsigned long num_removes_miss;
#else
    unsigned long num_stores;
    unsigned long num_expiries;
    unsigned long num_scrolled;
@@ -208,11 +188,10 @@ typedef struct {
    unsigned int queue_size;
    unsigned int cache_data_offset;
    unsigned int cache_data_size;
    unsigned char division_mask;
    unsigned int index_num;
    unsigned int index_offset;
    unsigned int index_size;
    unsigned char division_mask;
#endif
} SHMCBHeader;

/* 
@@ -262,13 +241,38 @@ typedef struct {
   memcpys can hardly make a dent on the massive memmove operations this
   cache technique avoids, nor the overheads of ASN en/decoding. */
static unsigned int shmcb_get_safe_uint(unsigned int *);
static void shmcb_set_safe_uint(unsigned int *, unsigned int);
static void shmcb_set_safe_uint_ex(unsigned char *, const unsigned char *);
#define shmcb_set_safe_uint(pdest, src) \
	do { \
		unsigned int tmp_uint = src; \
		shmcb_set_safe_uint_ex((unsigned char *)pdest, \
			(const unsigned char *)(&tmp_uint)); \
	} while(0)
#if 0 /* Unused so far */
static unsigned long shmcb_get_safe_ulong(unsigned long *);
static void shmcb_set_safe_ulong(unsigned long *, unsigned long);
static void shmcb_set_safe_ulong_ex(unsigned char *, const unsigned char *);
#define shmcb_set_safe_ulong(pdest, src) \
	do { \
		unsigned long tmp_ulong = src; \
		shmcb_set_safe_ulong_ex((unsigned char *)pdest, \
			(const unsigned char *)(&tmp_ulong)); \
	} while(0)
#endif
static time_t shmcb_get_safe_time(time_t *);
static void shmcb_set_safe_time(time_t *, time_t);
static void shmcb_set_safe_time_ex(unsigned char *, const unsigned char *);
#define shmcb_set_safe_time(pdest, src) \
	do { \
		time_t tmp_time = src; \
		shmcb_set_safe_time_ex((unsigned char *)pdest, \
			(const unsigned char *)(&tmp_time)); \
	} while(0)

/* This is necessary simply so that the size passed to memset() is not a
 * compile-time constant, preventing the compiler from optimising it. */
static void shmcb_safe_clear(void *ptr, size_t size)
{
	memset(ptr, 0, size);
}

/* Underlying functions for session-caching */
static BOOL shmcb_init_memory(server_rec *, void *, unsigned int);
@@ -306,81 +310,65 @@ static BOOL shmcb_remove_session_id(server_rec *, SHMCBQueue *, SHMCBCache *, UC

static unsigned int shmcb_get_safe_uint(unsigned int *ptr)
{
    unsigned char *from;
    unsigned int ret;

    from = (unsigned char *)ptr;
    memcpy(&ret, from, sizeof(unsigned int));
    shmcb_set_safe_uint_ex((unsigned char *)(&ret),
		    (const unsigned char *)ptr);
    return ret;
}

static void shmcb_set_safe_uint(unsigned int *ptr, unsigned int val)
static void shmcb_set_safe_uint_ex(unsigned char *dest,
				const unsigned char *src)
{
    unsigned char *to, *from;

    to = (unsigned char *)ptr;
    from = (unsigned char *)(&val);
    memcpy(to, from, sizeof(unsigned int));
    memcpy(dest, src, sizeof(unsigned int));
}

#if 0 /* Unused so far */
static unsigned long shmcb_get_safe_ulong(unsigned long *ptr)
{
    unsigned char *from;
    unsigned long ret;

    from = (unsigned char *)ptr;
    memcpy(&ret, from, sizeof(unsigned long));
    shmcb_set_safe_ulong_ex((unsigned char *)(&ret),
		    (const unsigned char *)ptr);
    return ret;
}

static void shmcb_set_safe_ulong(unsigned long *ptr, unsigned long val)
static void shmcb_set_safe_ulong_ex(unsigned char *dest,
				const unsigned char *src)
{
    unsigned char *to, *from;

    to = (unsigned char *)ptr;
    from = (unsigned char *)(&val);
    memcpy(to, from, sizeof(unsigned long));
    memcpy(dest, src, sizeof(unsigned long));
}
#endif

static time_t shmcb_get_safe_time(time_t * ptr)
{
    unsigned char *from;
    time_t ret;

    from = (unsigned char *)ptr;
    memcpy(&ret, from, sizeof(time_t));
    shmcb_set_safe_time_ex((unsigned char *)(&ret),
		    (const unsigned char *)ptr);
    return ret;
}

static void shmcb_set_safe_time(time_t * ptr, time_t val)
static void shmcb_set_safe_time_ex(unsigned char *dest,
				const unsigned char *src)
{
    unsigned char *to, *from;

    to = (unsigned char *)ptr;
    from = (unsigned char *)(&val);
    memcpy(to, from, sizeof(time_t));
    memcpy(dest, src, sizeof(time_t));
}

/*
**
** High-Level "handlers" as per ssl_scache.c
**
*/

static void *shmcb_malloc(size_t size)
static void *shmcb_malloc(SSLModConfigRec *mc, size_t size)
{
    SSLModConfigRec *mc = myModConfig();
    return ap_mm_malloc(mc->pSessionCacheDataMM, size);
    apr_rmm_off_t off = apr_rmm_malloc(mc->pSessionCacheDataRMM, size);
    return apr_rmm_addr_get(mc->pSessionCacheDataRMM, off);
}

void ssl_scache_shmcb_init(server_rec *s, pool *p)
void ssl_scache_shmcb_init(server_rec *s, apr_pool_t *p)
{
    SSLModConfigRec *mc = myModConfig();
    AP_MM *mm;
    SSLModConfigRec *mc = myModConfig(s);
    void *shm_segment = NULL;
    int avail, avail_orig;
    apr_status_t rv;

    /*
     * Create shared memory segment
@@ -389,23 +377,29 @@ void ssl_scache_shmcb_init(server_rec *s, pool *p)
        ssl_log(s, SSL_LOG_ERROR, "SSLSessionCache required");
        ssl_die();
    }
    if ((mm = ap_mm_create(mc->nSessionCacheDataSize,
                           mc->szSessionCacheDataFile)) == NULL) {

    if ((rv = apr_shm_create(&(mc->pSessionCacheDataMM), 
                             mc->nSessionCacheDataSize, 
                             mc->szSessionCacheDataFile,
                             mc->pPool)) != APR_SUCCESS) {
        ssl_log(s, SSL_LOG_ERROR,
                "Cannot allocate shared memory: %s", ap_mm_error());
                "Cannot allocate shared memory: %d", rv);
        ssl_die();
    }
    mc->pSessionCacheDataMM = mm;

    /*
     * Make sure the child processes have access to the underlying files
     */
    ap_mm_permission(mm, SSL_MM_FILE_MODE, ap_user_id, -1);
    if ((rv = apr_rmm_init(&(mc->pSessionCacheDataRMM), NULL,
                             apr_shm_baseaddr_get(mc->pSessionCacheDataMM),
                             mc->nSessionCacheDataSize,
                             mc->pPool)) != APR_SUCCESS) {
        ssl_log(s, SSL_LOG_ERROR,
                "Cannot initialize rmm: %d", rv);
        ssl_die();
    }

    /*
     * Create cache inside the shared memory segment
     */
    avail = avail_orig = ap_mm_available(mm);
    avail_orig = avail = mc->nSessionCacheDataSize - apr_rmm_overhead_get(0);
    ssl_log(s, SSL_LOG_TRACE, "Shared-memory segment has %u available",
            avail);

@@ -415,11 +409,11 @@ void ssl_scache_shmcb_init(server_rec *s, pool *p)
     * and error and output trace information.
     */
    while ((shm_segment == NULL) && ((avail_orig - avail) * 100 < avail_orig)) {
        shm_segment = shmcb_malloc(avail);
        shm_segment = shmcb_malloc(mc, avail);
        if (shm_segment == NULL) {
            ssl_log(s, SSL_LOG_TRACE,
                    "shmcb_malloc attempt for %u bytes failed", avail);
            avail -= 2;
            avail -= 4;
        }
    }
    if (shm_segment == NULL) {
@@ -447,10 +441,15 @@ void ssl_scache_shmcb_init(server_rec *s, pool *p)

void ssl_scache_shmcb_kill(server_rec *s)
{
    SSLModConfigRec *mc = myModConfig();
    SSLModConfigRec *mc = myModConfig(s);

    if (mc->pSessionCacheDataRMM != NULL) {
        apr_rmm_destroy(mc->pSessionCacheDataRMM);
        mc->pSessionCacheDataRMM = NULL;
    }

    if (mc->pSessionCacheDataMM != NULL) {
        ap_mm_destroy(mc->pSessionCacheDataMM);
        apr_shm_destroy(mc->pSessionCacheDataMM);
        mc->pSessionCacheDataMM = NULL;
    }
    return;
@@ -459,7 +458,7 @@ void ssl_scache_shmcb_kill(server_rec *s)
BOOL ssl_scache_shmcb_store(server_rec *s, UCHAR *id, int idlen,
                           time_t timeout, SSL_SESSION * pSession)
{
    SSLModConfigRec *mc = myModConfig();
    SSLModConfigRec *mc = myModConfig(s);
    void *shm_segment;
    BOOL to_return = FALSE;

@@ -480,7 +479,7 @@ BOOL ssl_scache_shmcb_store(server_rec *s, UCHAR *id, int idlen,

SSL_SESSION *ssl_scache_shmcb_retrieve(server_rec *s, UCHAR *id, int idlen)
{
    SSLModConfigRec *mc = myModConfig();
    SSLModConfigRec *mc = myModConfig(s);
    void *shm_segment;
    SSL_SESSION *pSession;

@@ -501,7 +500,7 @@ SSL_SESSION *ssl_scache_shmcb_retrieve(server_rec *s, UCHAR *id, int idlen)

void ssl_scache_shmcb_remove(server_rec *s, UCHAR *id, int idlen)
{
    SSLModConfigRec *mc = myModConfig();
    SSLModConfigRec *mc = myModConfig(s);
    void *shm_segment;

    /* We've kludged our pointer into the other cache's member variable. */
@@ -517,10 +516,10 @@ void ssl_scache_shmcb_expire(server_rec *s)
    return;
}

void ssl_scache_shmcb_status(server_rec *s, pool *p,
void ssl_scache_shmcb_status(server_rec *s, apr_pool_t *p,
                            void (*func) (char *, void *), void *arg)
{
    SSLModConfigRec *mc = myModConfig();
    SSLModConfigRec *mc = myModConfig(s);
    SHMCBHeader *header;
    SHMCBQueue queue;
    SHMCBCache cache;
@@ -569,36 +568,36 @@ void ssl_scache_shmcb_status(server_rec *s, pool *p,
    }
    index_pct = (100 * total) / (header->index_num * (header->division_mask + 1));
    cache_pct = (100 * cache_total) / (header->cache_data_size * (header->division_mask + 1));
    func(ap_psprintf(p, "cache type: <b>SHMCB</b>, shared memory: <b>%d</b> "
    func(apr_psprintf(p, "cache type: <b>SHMCB</b>, shared memory: <b>%d</b> "
                     "bytes, current sessions: <b>%d</b><br>",
                     mc->nSessionCacheDataSize, total), arg);
    func(ap_psprintf(p, "sub-caches: <b>%d</b>, indexes per sub-cache: "
    func(apr_psprintf(p, "sub-caches: <b>%d</b>, indexes per sub-cache: "
                     "<b>%d</b><br>", (int) header->division_mask + 1,
                     (int) header->index_num), arg);
    if (non_empty_divisions != 0) {
        average_expiry = (time_t)(expiry_total / (double)non_empty_divisions);
        func(ap_psprintf(p, "time left on oldest entries' SSL sessions: "), arg);
        func(apr_psprintf(p, "time left on oldest entries' SSL sessions: "), arg);
        if (now < average_expiry)
            func(ap_psprintf(p, "avg: <b>%d</b> seconds, (range: %d...%d)<br>",
            func(apr_psprintf(p, "avg: <b>%d</b> seconds, (range: %d...%d)<br>",
                            (int)(average_expiry - now), (int) (min_expiry - now),
                            (int)(max_expiry - now)), arg);
        else
            func(ap_psprintf(p, "expiry threshold: <b>Calculation Error!</b>" 
            func(apr_psprintf(p, "expiry threshold: <b>Calculation Error!</b>" 
                             "<br>"), arg);

    }
    func(ap_psprintf(p, "index usage: <b>%d%%</b>, cache usage: <b>%d%%</b>"
    func(apr_psprintf(p, "index usage: <b>%d%%</b>, cache usage: <b>%d%%</b>"
                     "<br>", index_pct, cache_pct), arg);
    func(ap_psprintf(p, "total sessions stored since starting: <b>%lu</b><br>",
    func(apr_psprintf(p, "total sessions stored since starting: <b>%lu</b><br>",
                     header->num_stores), arg);
    func(ap_psprintf(p, "total sessions expired since starting: <b>%lu</b><br>",
    func(apr_psprintf(p,"total sessions expired since starting: <b>%lu</b><br>",
                     header->num_expiries), arg);
    func(ap_psprintf(p, "total (pre-expiry) sessions scrolled out of the "
    func(apr_psprintf(p, "total (pre-expiry) sessions scrolled out of the "
                     "cache: <b>%lu</b><br>", header->num_scrolled), arg);
    func(ap_psprintf(p, "total retrieves since starting: <b>%lu</b> hit, "
    func(apr_psprintf(p, "total retrieves since starting: <b>%lu</b> hit, "
                     "<b>%lu</b> miss<br>", header->num_retrieves_hit,
                     header->num_retrieves_miss), arg);
    func(ap_psprintf(p, "total removes since starting: <b>%lu</b> hit, "
    func(apr_psprintf(p, "total removes since starting: <b>%lu</b> hit, "
                     "<b>%lu</b> miss<br>", header->num_removes_hit,
                     header->num_removes_miss), arg);
    ssl_log(s, SSL_LOG_TRACE, "leaving shmcb_status");
@@ -1342,6 +1341,3 @@ end:
    ssl_log(s, SSL_LOG_TRACE, "leaving shmcb_remove_session_id");
    return to_return;
}

#endif /* XXX */
+74 −43

File changed.

Preview size limit exceeded, changes collapsed.

Loading