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); |
