summaryrefslogtreecommitdiffstatsabout
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--include/mod_gnutls.h.in1
-rw-r--r--src/gnutls_cache.c28
-rw-r--r--src/gnutls_config.c10
4 files changed, 29 insertions, 14 deletions
diff --git a/NEWS b/NEWS
index fe85119..ec3622d 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@
2- Corrected behavior in Keep-Alive connections (do not 2- Corrected behavior in Keep-Alive connections (do not
3 terminate the connection prematurely) 3 terminate the connection prematurely)
4 4
5- The GnuTLSCache variable now can be given the specific
6 option "sdbm" instead of "dbm". "dbm" will use the default
7 dbm type of libapr while sdbm will force sdbm to be used.
8
5** Version 0.5.8 (2010-08-18) 9** Version 0.5.8 (2010-08-18)
6- Session tickets are enabled by default. 10- Session tickets are enabled by default.
7 11
diff --git a/include/mod_gnutls.h.in b/include/mod_gnutls.h.in
index 5bb8514..a421617 100644
--- a/include/mod_gnutls.h.in
+++ b/include/mod_gnutls.h.in
@@ -63,6 +63,7 @@ typedef enum
63{ 63{
64 mgs_cache_none, 64 mgs_cache_none,
65 mgs_cache_dbm, 65 mgs_cache_dbm,
66 mgs_cache_sdbm,
66#if HAVE_APR_MEMCACHE 67#if HAVE_APR_MEMCACHE
67 mgs_cache_memcache 68 mgs_cache_memcache
68#endif 69#endif
diff --git a/src/gnutls_cache.c b/src/gnutls_cache.c
index 3ca8cb5..7bcb697 100644
--- a/src/gnutls_cache.c
+++ b/src/gnutls_cache.c
@@ -35,8 +35,6 @@
35 35
36/* it seems the default has some strange errors. Use SDBM 36/* it seems the default has some strange errors. Use SDBM
37 */ 37 */
38#define ODB "SDBM"
39
40#define MC_TAG "mod_gnutls:" 38#define MC_TAG "mod_gnutls:"
41#define MC_TAG_LEN sizeof(MC_TAG) 39#define MC_TAG_LEN sizeof(MC_TAG)
42#define STR_SESSION_LEN (GNUTLS_SESSION_ID_STRING_LEN + MC_TAG_LEN) 40#define STR_SESSION_LEN (GNUTLS_SESSION_ID_STRING_LEN + MC_TAG_LEN)
@@ -296,6 +294,14 @@ static int mc_cache_delete(void* baton, gnutls_datum_t key)
296 294
297#endif /* have_apr_memcache */ 295#endif /* have_apr_memcache */
298 296
297const char* db_type(mgs_srvconf_rec * sc)
298{
299 if (sc->cache_type == mgs_cache_sdbm)
300 return "sdbm";
301 else
302 return "default";
303}
304
299#define SSL_DBM_FILE_MODE ( APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD ) 305#define SSL_DBM_FILE_MODE ( APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD )
300 306
301static void dbm_cache_expire(mgs_handle_t *ctxt) 307static void dbm_cache_expire(mgs_handle_t *ctxt)
@@ -321,7 +327,7 @@ static void dbm_cache_expire(mgs_handle_t *ctxt)
321 total = 0; 327 total = 0;
322 deleted = 0; 328 deleted = 0;
323 329
324 rv = apr_dbm_open_ex(&dbm, ODB, ctxt->sc->cache_config, APR_DBM_RWCREATE, 330 rv = apr_dbm_open_ex(&dbm, db_type(ctxt->sc), ctxt->sc->cache_config, APR_DBM_RWCREATE,
325 SSL_DBM_FILE_MODE, spool); 331 SSL_DBM_FILE_MODE, spool);
326 if (rv != APR_SUCCESS) { 332 if (rv != APR_SUCCESS) {
327 ap_log_error(APLOG_MARK, APLOG_NOTICE, rv, 333 ap_log_error(APLOG_MARK, APLOG_NOTICE, rv,
@@ -374,7 +380,7 @@ static gnutls_datum_t dbm_cache_fetch(void* baton, gnutls_datum_t key)
374 if (mgs_session_id2dbm(ctxt->c, key.data, key.size, &dbmkey) < 0) 380 if (mgs_session_id2dbm(ctxt->c, key.data, key.size, &dbmkey) < 0)
375 return data; 381 return data;
376 382
377 rv = apr_dbm_open_ex(&dbm, ODB, ctxt->sc->cache_config, 383 rv = apr_dbm_open_ex(&dbm, db_type(ctxt->sc), ctxt->sc->cache_config,
378 APR_DBM_READONLY, SSL_DBM_FILE_MODE, ctxt->c->pool); 384 APR_DBM_READONLY, SSL_DBM_FILE_MODE, ctxt->c->pool);
379 if (rv != APR_SUCCESS) { 385 if (rv != APR_SUCCESS) {
380 ap_log_error(APLOG_MARK, APLOG_NOTICE, rv, 386 ap_log_error(APLOG_MARK, APLOG_NOTICE, rv,
@@ -444,7 +450,7 @@ static int dbm_cache_store(void* baton, gnutls_datum_t key,
444 memcpy((char *)dbmval.dptr+sizeof(apr_time_t), 450 memcpy((char *)dbmval.dptr+sizeof(apr_time_t),
445 data.data, data.size); 451 data.data, data.size);
446 452
447 rv = apr_dbm_open_ex(&dbm, ODB, ctxt->sc->cache_config, 453 rv = apr_dbm_open_ex(&dbm, db_type(ctxt->sc), ctxt->sc->cache_config,
448 APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, ctxt->c->pool); 454 APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, ctxt->c->pool);
449 if (rv != APR_SUCCESS) { 455 if (rv != APR_SUCCESS) {
450 ap_log_error(APLOG_MARK, APLOG_NOTICE, rv, 456 ap_log_error(APLOG_MARK, APLOG_NOTICE, rv,
@@ -484,7 +490,7 @@ static int dbm_cache_delete(void* baton, gnutls_datum_t key)
484 if (mgs_session_id2dbm(ctxt->c, key.data, key.size, &dbmkey) < 0) 490 if (mgs_session_id2dbm(ctxt->c, key.data, key.size, &dbmkey) < 0)
485 return -1; 491 return -1;
486 492
487 rv = apr_dbm_open_ex(&dbm, ODB, ctxt->sc->cache_config, 493 rv = apr_dbm_open_ex(&dbm, db_type(ctxt->sc), ctxt->sc->cache_config,
488 APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, ctxt->c->pool); 494 APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, ctxt->c->pool);
489 if (rv != APR_SUCCESS) { 495 if (rv != APR_SUCCESS) {
490 ap_log_error(APLOG_MARK, APLOG_NOTICE, rv, 496 ap_log_error(APLOG_MARK, APLOG_NOTICE, rv,
@@ -518,7 +524,7 @@ static int dbm_cache_post_config(apr_pool_t *p, server_rec *s,
518 const char* path1; 524 const char* path1;
519 const char* path2; 525 const char* path2;
520 526
521 rv = apr_dbm_open_ex(&dbm, ODB, sc->cache_config, APR_DBM_RWCREATE, 527 rv = apr_dbm_open_ex(&dbm, db_type(sc), sc->cache_config, APR_DBM_RWCREATE,
522 SSL_DBM_FILE_MODE, p); 528 SSL_DBM_FILE_MODE, p);
523 529
524 if (rv != APR_SUCCESS) { 530 if (rv != APR_SUCCESS) {
@@ -530,7 +536,7 @@ static int dbm_cache_post_config(apr_pool_t *p, server_rec *s,
530 536
531 apr_dbm_close(dbm); 537 apr_dbm_close(dbm);
532 538
533 apr_dbm_get_usednames_ex(p, ODB, sc->cache_config, &path1, &path2); 539 apr_dbm_get_usednames_ex(p, db_type(sc), sc->cache_config, &path1, &path2);
534 540
535 /* The Following Code takes logic directly from mod_ssl's DBM Cache */ 541 /* The Following Code takes logic directly from mod_ssl's DBM Cache */
536#if !defined(OS2) && !defined(WIN32) && !defined(BEOS) && !defined(NETWARE) 542#if !defined(OS2) && !defined(WIN32) && !defined(BEOS) && !defined(NETWARE)
@@ -549,7 +555,7 @@ static int dbm_cache_post_config(apr_pool_t *p, server_rec *s,
549int mgs_cache_post_config(apr_pool_t *p, server_rec *s, 555int mgs_cache_post_config(apr_pool_t *p, server_rec *s,
550 mgs_srvconf_rec *sc) 556 mgs_srvconf_rec *sc)
551{ 557{
552 if (sc->cache_type == mgs_cache_dbm) { 558 if (sc->cache_type == mgs_cache_dbm || sc->cache_type == mgs_cache_sdbm) {
553 return dbm_cache_post_config(p, s, sc); 559 return dbm_cache_post_config(p, s, sc);
554 } 560 }
555 return 0; 561 return 0;
@@ -558,7 +564,7 @@ int mgs_cache_post_config(apr_pool_t *p, server_rec *s,
558int mgs_cache_child_init(apr_pool_t *p, server_rec *s, 564int mgs_cache_child_init(apr_pool_t *p, server_rec *s,
559 mgs_srvconf_rec *sc) 565 mgs_srvconf_rec *sc)
560{ 566{
561 if (sc->cache_type == mgs_cache_dbm) { 567 if (sc->cache_type == mgs_cache_dbm || sc->cache_type == mgs_cache_sdbm) {
562 return 0; 568 return 0;
563 } 569 }
564#if HAVE_APR_MEMCACHE 570#if HAVE_APR_MEMCACHE
@@ -573,7 +579,7 @@ int mgs_cache_child_init(apr_pool_t *p, server_rec *s,
573 579
574int mgs_cache_session_init(mgs_handle_t *ctxt) 580int mgs_cache_session_init(mgs_handle_t *ctxt)
575{ 581{
576 if (ctxt->sc->cache_type == mgs_cache_dbm) { 582 if (ctxt->sc->cache_type == mgs_cache_dbm || ctxt->sc->cache_type == mgs_cache_sdbm) {
577 gnutls_db_set_retrieve_function(ctxt->session, dbm_cache_fetch); 583 gnutls_db_set_retrieve_function(ctxt->session, dbm_cache_fetch);
578 gnutls_db_set_remove_function(ctxt->session, dbm_cache_delete); 584 gnutls_db_set_remove_function(ctxt->session, dbm_cache_delete);
579 gnutls_db_set_store_function(ctxt->session, dbm_cache_store); 585 gnutls_db_set_store_function(ctxt->session, dbm_cache_store);
diff --git a/src/gnutls_config.c b/src/gnutls_config.c
index 6c8d427..4bb523f 100644
--- a/src/gnutls_config.c
+++ b/src/gnutls_config.c
@@ -343,10 +343,14 @@ const char *mgs_set_cache(cmd_parms * parms, void *dummy,
343 return err; 343 return err;
344 } 344 }
345 345
346 sc->cache_type = mgs_cache_none; 346 if (strcasecmp("none", type) == 0) {
347 if (strcasecmp("dbm", type) == 0) { 347 sc->cache_type = mgs_cache_none;
348 } else if (strcasecmp("dbm", type) == 0) {
348 sc->cache_type = mgs_cache_dbm; 349 sc->cache_type = mgs_cache_dbm;
349 } 350 }
351 else if (strcasecmp("sdbm", type) == 0) {
352 sc->cache_type = mgs_cache_sdbm;
353 }
350#if HAVE_APR_MEMCACHE 354#if HAVE_APR_MEMCACHE
351 else if (strcasecmp("memcache", type) == 0) { 355 else if (strcasecmp("memcache", type) == 0) {
352 sc->cache_type = mgs_cache_memcache; 356 sc->cache_type = mgs_cache_memcache;
@@ -356,7 +360,7 @@ const char *mgs_set_cache(cmd_parms * parms, void *dummy,
356 return "Invalid Type for GnuTLSCache!"; 360 return "Invalid Type for GnuTLSCache!";
357 } 361 }
358 362
359 if (sc->cache_type == mgs_cache_dbm) { 363 if (sc->cache_type == mgs_cache_dbm || sc->cache_type == mgs_cache_sdbm) {
360 sc->cache_config = ap_server_root_relative(parms->pool, arg); 364 sc->cache_config = ap_server_root_relative(parms->pool, arg);
361 } else { 365 } else {
362 sc->cache_config = apr_pstrdup(parms->pool, arg); 366 sc->cache_config = apr_pstrdup(parms->pool, arg);