]> granicus.if.org Git - apache/commitdiff
Extend mod_status output to include SSL session cache status
authorJoe Orton <jorton@apache.org>
Tue, 25 Nov 2003 16:59:10 +0000 (16:59 +0000)
committerJoe Orton <jorton@apache.org>
Tue, 25 Nov 2003 16:59:10 +0000 (16:59 +0000)
information:

* modules/ssl/mod_ssl.c (ssl_hook_pre_config): Call
ssl_scache_status_register.

* modules/ssl/ssl_scache.c (ssl_scache_status): Removed function.
(ssl_ext_status_hook): Renamed from ssl_ext_ms_display: switch to
2.1's mod_status "status_hook" API.
(ssl_scache_status_register): Register optional hook.

* modules/ssl/ssl_scache_dbm.c (ssl_scache_dbm_status): Adjust to use
new API.

* modules/ssl/ssl_scache_shmcb.c (ssl_scache_shmcb_status): Adjust
to use new API.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@101889 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/ssl/mod_ssl.c
modules/ssl/mod_ssl.h
modules/ssl/ssl_scache.c
modules/ssl/ssl_scache_dbm.c
modules/ssl/ssl_scache_shmcb.c

diff --git a/CHANGES b/CHANGES
index 9fa02c9a7e0d810c6fc61bd2e51fda4f0b46a6d7..a73f1f07c4f5c6d0f85e7f54381ef0c2a25e69fc 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@ Changes with Apache 2.1.0-dev
 
   [Remove entries to the current 2.0 section below, when backported]
 
+  *) mod_ssl/mod_status: Re-enable support for output of SSL session
+     cache information in server-status page.  [Joe Orton]
+
   *) mod_ssl: Remove the shmht session cache, shmcb should be used
      instead.  [Joe Orton]
 
index 361937e5ee3afdfd59d24f42fc387a0e6abb89d4..677cb9eb0a3718e9a83d4cb53bf5a54be8ca4c4e 100644 (file)
@@ -298,10 +298,9 @@ static int ssl_hook_pre_config(apr_pool_t *pconf,
 
     /* Register us to handle mod_log_config %c/%x variables */
     ssl_var_log_config_register(pconf);
-#if 0 /* XXX */
-    /* XXX: Register us to handle mod_status extensions that don't exist yet */
+
+    /* Register to handle mod_status status page generation */
     ssl_scache_status_register(pconf);
-#endif /* -0- */
 
     return OK;
 }
index 8d8519072fccea4be26d967221152e19c1625753..4aa926ac38c09efd919ba51ada656f8ac0d18cfc 100644 (file)
@@ -578,15 +578,13 @@ void         ssl_callback_LogTracingState(MODSSL_INFO_CB_ARG_TYPE, int, int);
 
 /*  Session Cache Support  */
 void         ssl_scache_init(server_rec *, apr_pool_t *);
-#if 0 /* XXX */
 void         ssl_scache_status_register(apr_pool_t *p);
-#endif
 void         ssl_scache_kill(server_rec *);
 BOOL         ssl_scache_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
 SSL_SESSION *ssl_scache_retrieve(server_rec *, UCHAR *, int);
 void         ssl_scache_remove(server_rec *, UCHAR *, int);
 void         ssl_scache_expire(server_rec *);
-void         ssl_scache_status(server_rec *, apr_pool_t *, void (*)(char *, void *), void *);
+
 char        *ssl_scache_id2sz(UCHAR *, int);
 void         ssl_scache_dbm_init(server_rec *, apr_pool_t *);
 void         ssl_scache_dbm_kill(server_rec *);
@@ -594,7 +592,7 @@ BOOL         ssl_scache_dbm_store(server_rec *, UCHAR *, int, time_t, SSL_SESSIO
 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 *);
+void         ssl_scache_dbm_status(request_rec *r, int flags, apr_pool_t *pool);
 
 void         ssl_scache_shmht_init(server_rec *, apr_pool_t *);
 void         ssl_scache_shmht_kill(server_rec *);
@@ -610,7 +608,7 @@ BOOL         ssl_scache_shmcb_store(server_rec *, UCHAR *, int, time_t, SSL_SESS
 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 *, apr_pool_t *, void (*)(char *, void *), void *);
+void         ssl_scache_shmcb_status(request_rec *r, int flags, apr_pool_t *pool);
 
 /*  Pass Phrase Support  */
 void         ssl_pphrase_Handle(server_rec *, apr_pool_t *);
index 61c4a2cc9a67d5951f79b73c399473ec5789789f..7dab001a41f389f03aaf3947d248c1c69ffe00fb 100644 (file)
@@ -62,6 +62,7 @@
                                   yourself in the foot for free.''
                                                  -- Unknown         */
 #include "mod_ssl.h"
+#include "mod_status.h"
 
 /*  _________________________________________________________________
 **
@@ -147,17 +148,6 @@ void ssl_scache_remove(server_rec *s, UCHAR *id, int idlen)
     return;
 }
 
-void ssl_scache_status(server_rec *s, apr_pool_t *p, void (*func)(char *, void *), void *arg)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
-        ssl_scache_dbm_status(s, p, func, arg);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
-        ssl_scache_shmcb_status(s, p, func, arg);
-    return;
-}
-
 void ssl_scache_expire(server_rec *s)
 {
     SSLModConfigRec *mc = myModConfig(s);
@@ -174,43 +164,33 @@ void ssl_scache_expire(server_rec *s)
 **  SSL Extension to mod_status
 **  _________________________________________________________________
 */
-#if 0 /* NOT YET */
-static void ssl_ext_ms_display(request_rec *, int, int);
-
-void ssl_scache_status_register(apr_pool_t *p)
-{
-    /* XXX point mod_status to this update, when it grows the opt fn */
-#if 0
-    ap_hook_register("ap::mod_status::display", ssl_ext_ms_display, AP_HOOK_NOCTX);
-#endif
-    return;
-}
-
-static void ssl_ext_ms_display_cb(char *str, void *_r)
-{
-    request_rec *r = (request_rec *)_r;
-    if (str != NULL)
-        ap_rputs(str, r);
-    return;
-}
-
-static void ssl_ext_ms_display(request_rec *r, int no_table_report, int short_report)
+static int ssl_ext_status_hook(request_rec *r, int flags)
 {
     SSLSrvConfigRec *sc = mySrvConfig(r->server);
 
-    if (sc == NULL)
-        return;
-    if (short_report)
-        return;
+    if (sc == NULL || flags & AP_STATUS_SHORT)
+        return OK;
+
     ap_rputs("<hr>\n", r);
     ap_rputs("<table cellspacing=0 cellpadding=0>\n", r);
     ap_rputs("<tr><td bgcolor=\"#000000\">\n", r);
     ap_rputs("<b><font color=\"#ffffff\" face=\"Arial,Helvetica\">SSL/TLS Session Cache Status:</font></b>\r", r);
     ap_rputs("</td></tr>\n", r);
     ap_rputs("<tr><td bgcolor=\"#ffffff\">\n", r);
-    ssl_scache_status(r->server, r->pool, ssl_ext_ms_display_cb, r);
+
+    if (sc->mc->nSessionCacheMode == SSL_SCMODE_DBM)
+        ssl_scache_dbm_status(r, flags, r->pool);
+    else if (sc->mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
+        ssl_scache_shmcb_status(r, flags, r->pool);
+    
     ap_rputs("</td></tr>\n", r);
     ap_rputs("</table>\n", r);
-    return;
+    return OK;
 }
-#endif
+
+void ssl_scache_status_register(apr_pool_t *p)
+{
+    APR_OPTIONAL_HOOK(ap, status_hook, ssl_ext_status_hook, NULL, NULL,
+                      APR_HOOK_MIDDLE);
+}
+
index 6ec20037c20ab3bbf124988eca868104f7318aa2..126185a66a201e3e4e5a7af078d8698d8d92f6cf 100644 (file)
@@ -441,9 +441,9 @@ void ssl_scache_dbm_expire(server_rec *s)
     return;
 }
 
-void ssl_scache_dbm_status(server_rec *s, apr_pool_t *p, void (*func)(char *, void *), void *arg)
+void ssl_scache_dbm_status(request_rec *r, int flags, apr_pool_t *p)
 {
-    SSLModConfigRec *mc = myModConfig(s);
+    SSLModConfigRec *mc = myModConfig(r->server);
     apr_dbm_t *dbm;
     apr_datum_t dbmkey;
     apr_datum_t dbmval;
@@ -454,18 +454,18 @@ void ssl_scache_dbm_status(server_rec *s, apr_pool_t *p, void (*func)(char *, vo
 
     nElem = 0;
     nSize = 0;
-    ssl_mutex_on(s);
+    ssl_mutex_on(r->server);
     /*
      * XXX - Check what pool is to be used - TBD
      */
     if ((rv = apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
                               APR_DBM_RWCREATE, SSL_DBM_FILE_MODE,
                            mc->pPool)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
+        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
                      "Cannot open SSLSessionCache DBM file `%s' for status "
                      "retrival",
                      mc->szSessionCacheDataFile);
-        ssl_mutex_off(s);
+        ssl_mutex_off(r->server);
         return;
     }
     /*
@@ -480,14 +480,14 @@ void ssl_scache_dbm_status(server_rec *s, apr_pool_t *p, void (*func)(char *, vo
         nSize += dbmval.dsize;
     }
     apr_dbm_close(dbm);
-    ssl_mutex_off(s);
+    ssl_mutex_off(r->server);
     if (nSize > 0 && nElem > 0)
         nAverage = nSize / nElem;
     else
         nAverage = 0;
-    func(apr_psprintf(p, "cache type: <b>DBM</b>, maximum size: <b>unlimited</b><br>"), arg);
-    func(apr_psprintf(p, "current sessions: <b>%d</b>, current size: <b>%d</b> bytes<br>", nElem, nSize), arg);
-    func(apr_psprintf(p, "average session size: <b>%d</b> bytes<br>", nAverage), arg);
+    ap_rprintf(r, "cache type: <b>DBM</b>, maximum size: <b>unlimited</b><br>");
+    ap_rprintf(r, "current sessions: <b>%d</b>, current size: <b>%d</b> bytes<br>", nElem, nSize);
+    ap_rprintf(r, "average session size: <b>%d</b> bytes<br>", nAverage);
     return;
 }
 
index 8d058fea649ca376ae813b5e5fff6f694faed919..a17676cd29d3ff0c646a81ed16db1d8b59203c7b 100644 (file)
@@ -474,10 +474,9 @@ void ssl_scache_shmcb_expire(server_rec *s)
     return;
 }
 
-void ssl_scache_shmcb_status(server_rec *s, apr_pool_t *p,
-                            void (*func) (char *, void *), void *arg)
+void ssl_scache_shmcb_status(request_rec *r, int flags, apr_pool_t *p)
 {
-    SSLModConfigRec *mc = myModConfig(s);
+    SSLModConfigRec *mc = myModConfig(r->server);
     SHMCBHeader *header;
     SHMCBQueue queue;
     SHMCBCache cache;
@@ -487,8 +486,7 @@ void ssl_scache_shmcb_status(server_rec *s, apr_pool_t *p,
     double expiry_total;
     time_t average_expiry, now, max_expiry, min_expiry, idxexpiry;
 
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, 
-                 "inside ssl_scache_shmcb_status");
+    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "inside shmcb_status");
 
     /* Get the header structure. */
     shmcb_get_header(mc->tSessionCacheDataTable, &header);
@@ -502,7 +500,7 @@ void ssl_scache_shmcb_status(server_rec *s, apr_pool_t *p,
     now = time(NULL);
     for (loop = 0; loop <= header->division_mask; loop++) {
         if (shmcb_get_division(header, &queue, &cache, loop)) {
-            shmcb_expire_division(s, &queue, &cache);
+            shmcb_expire_division(r->server, &queue, &cache);
             total += shmcb_get_safe_uint(queue.pos_count);
             cache_total += shmcb_get_safe_uint(cache.pos_count);
             if (shmcb_get_safe_uint(queue.pos_count) > 0) {
@@ -523,40 +521,39 @@ void ssl_scache_shmcb_status(server_rec *s, apr_pool_t *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(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(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);
+    ap_rprintf(r, "cache type: <b>SHMCB</b>, shared memory: <b>%d</b> "
+               "bytes, current sessions: <b>%d</b><br>",
+               mc->nSessionCacheDataSize, total);
+    ap_rprintf(r, "sub-caches: <b>%d</b>, indexes per sub-cache: "
+               "<b>%d</b><br>", (int) header->division_mask + 1,
+               (int) header->index_num);
     if (non_empty_divisions != 0) {
         average_expiry = (time_t)(expiry_total / (double)non_empty_divisions);
-        func(apr_psprintf(p, "time left on oldest entries' SSL sessions: "), arg);
+        ap_rprintf(r, "time left on oldest entries' SSL sessions: ");
         if (now < average_expiry)
-            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);
+            ap_rprintf(r, "avg: <b>%d</b> seconds, (range: %d...%d)<br>",
+                       (int)(average_expiry - now), (int) (min_expiry - now),
+                       (int)(max_expiry - now));
         else
-            func(apr_psprintf(p, "expiry threshold: <b>Calculation Error!</b>" 
-                             "<br>"), arg);
-
+            ap_rprintf(r, "expiry threshold: <b>Calculation Error!</b>" 
+                       "<br>");
+        
     }
-    func(apr_psprintf(p, "index usage: <b>%d%%</b>, cache usage: <b>%d%%</b>"
-                     "<br>", index_pct, cache_pct), arg);
-    func(apr_psprintf(p, "total sessions stored since starting: <b>%lu</b><br>",
-                     header->num_stores), arg);
-    func(apr_psprintf(p,"total sessions expired since starting: <b>%lu</b><br>",
-                     header->num_expiries), arg);
-    func(apr_psprintf(p, "total (pre-expiry) sessions scrolled out of the "
-                     "cache: <b>%lu</b><br>", header->num_scrolled), arg);
-    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(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);
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, 
-                 "leaving shmcb_status");
+    ap_rprintf(r, "index usage: <b>%d%%</b>, cache usage: <b>%d%%</b>"
+               "<br>", index_pct, cache_pct);
+    ap_rprintf(r, "total sessions stored since starting: <b>%lu</b><br>",
+               header->num_stores);
+    ap_rprintf(r, "total sessions expired since starting: <b>%lu</b><br>",
+               header->num_expiries);
+    ap_rprintf(r, "total (pre-expiry) sessions scrolled out of the "
+               "cache: <b>%lu</b><br>", header->num_scrolled);
+    ap_rprintf(r, "total retrieves since starting: <b>%lu</b> hit, "
+               "<b>%lu</b> miss<br>", header->num_retrieves_hit,
+               header->num_retrieves_miss);
+    ap_rprintf(r, "total removes since starting: <b>%lu</b> hit, "
+               "<b>%lu</b> miss<br>", header->num_removes_hit,
+               header->num_removes_miss);
+    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "leaving shmcb_status");
     return;
 }