diff options
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | include/mod_gnutls.h.in | 1 | ||||
-rw-r--r-- | src/gnutls_cache.c | 28 | ||||
-rw-r--r-- | src/gnutls_config.c | 10 |
4 files changed, 29 insertions, 14 deletions
@@ -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 | ||
297 | const 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 | ||
301 | static void dbm_cache_expire(mgs_handle_t *ctxt) | 307 | static 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, | |||
549 | int mgs_cache_post_config(apr_pool_t *p, server_rec *s, | 555 | int 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, | |||
558 | int mgs_cache_child_init(apr_pool_t *p, server_rec *s, | 564 | int 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 | ||
574 | int mgs_cache_session_init(mgs_handle_t *ctxt) | 580 | int 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); |