diff options
author | Christian Grothoff <christian@grothoff.org> | 2019-06-05 23:38:28 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-06-05 23:51:26 +0200 |
commit | 69a07468de8555d5260afab4019e34f40e5ec6be (patch) | |
tree | 57aa9a3093c8aa10c789391f4c6a010304aecbfd /src/exchange | |
parent | 2f0015b80385364ffbacca71504a96a46db6f0e0 (diff) | |
download | exchange-69a07468de8555d5260afab4019e34f40e5ec6be.tar.gz exchange-69a07468de8555d5260afab4019e34f40e5ec6be.tar.bz2 exchange-69a07468de8555d5260afab4019e34f40e5ec6be.zip |
working on fix for #5747
Diffstat (limited to 'src/exchange')
-rw-r--r-- | src/exchange/exchange.conf | 6 | ||||
-rw-r--r-- | src/exchange/taler-exchange-httpd.c | 26 | ||||
-rw-r--r-- | src/exchange/taler-exchange-httpd.h | 5 | ||||
-rw-r--r-- | src/exchange/taler-exchange-httpd_keystate.c | 10 |
4 files changed, 41 insertions, 6 deletions
diff --git a/src/exchange/exchange.conf b/src/exchange/exchange.conf index 87b6f18c3..7fe737b72 100644 --- a/src/exchange/exchange.conf +++ b/src/exchange/exchange.conf @@ -15,6 +15,12 @@ REVOCATION_DIR = ${TALER_DATA_HOME}/exchange/revocations/ # This must be adjusted to your actually installation. # MASTER_PUBLIC_KEY = 98NJW3CQHZQGQXTY3K85K531XKPAPAVV4Q5V8PYYRR00NJGZWNVG +# How long do we allow /keys to be cached at most? The actual +# limit is the minimum of this value and the first expected +# significant change in /keys based on the expiration times. +# Used to artifically reduce caching (addresses #5747). +MAX_KEYS_CACHING = forever + # How to access our database DB = postgres diff --git a/src/exchange/taler-exchange-httpd.c b/src/exchange/taler-exchange-httpd.c index b24feef61..45e0c764b 100644 --- a/src/exchange/taler-exchange-httpd.c +++ b/src/exchange/taler-exchange-httpd.c @@ -98,6 +98,11 @@ char *TEH_revocation_directory; struct GNUNET_CONFIGURATION_Handle *cfg; /** + * How long is caching /keys allowed at most? + */ +struct GNUNET_TIME_Relative max_keys_caching; + +/** * Master public key (according to the * configuration in the exchange directory). */ @@ -370,8 +375,8 @@ handle_mhd_request (void *cls, &TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, { "/test/eddsa", MHD_HTTP_METHOD_POST, "application/json", - NULL, 0, - &TEH_TEST_handler_test_eddsa, MHD_HTTP_OK }, + NULL, 0, + &TEH_TEST_handler_test_eddsa, MHD_HTTP_OK }, { "/test/eddsa", NULL, "text/plain", "Only POST is allowed", 0, &TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, @@ -391,13 +396,12 @@ handle_mhd_request (void *cls, &TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, { "/test/transfer", MHD_HTTP_METHOD_POST, "application/json", - NULL, 0, - &TEH_TEST_handler_test_transfer, MHD_HTTP_OK }, + NULL, 0, + &TEH_TEST_handler_test_transfer, MHD_HTTP_OK }, { "/test/transfer", NULL, "text/plain", "Only POST is allowed", 0, &TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, #endif - { NULL, NULL, NULL, NULL, 0, 0 } }; static struct TEH_RequestHandler h404 = @@ -606,6 +610,18 @@ exchange_serve_process_config () char *TEH_master_public_key_str; if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_time (cfg, + "exchange", + "MAX_KEYS_CACHING", + &max_keys_caching)) + { + GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR, + "exchange", + "MAX_KEYS_CACHING", + "valid relative time expected"); + return GNUNET_SYSERR; + } + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (cfg, "exchange", "KEYDIR", diff --git a/src/exchange/taler-exchange-httpd.h b/src/exchange/taler-exchange-httpd.h index ef380e8c4..bf0653606 100644 --- a/src/exchange/taler-exchange-httpd.h +++ b/src/exchange/taler-exchange-httpd.h @@ -39,6 +39,11 @@ extern char *TEH_exchange_currency_string; extern int TEH_exchange_connection_close; /** + * How long is caching /keys allowed at most? + */ +extern struct GNUNET_TIME_Relative max_keys_caching; + +/** * The exchange's configuration. */ extern struct GNUNET_CONFIGURATION_Handle *cfg; diff --git a/src/exchange/taler-exchange-httpd_keystate.c b/src/exchange/taler-exchange-httpd_keystate.c index 8b56813e3..7d6bb08a3 100644 --- a/src/exchange/taler-exchange-httpd_keystate.c +++ b/src/exchange/taler-exchange-httpd_keystate.c @@ -1166,8 +1166,16 @@ setup_general_response_headers (const struct TEH_KS_StateHandle *key_state, dat)); if (0 != key_state->next_reload.abs_value_us) { - get_date_string (key_state->next_reload, + struct GNUNET_TIME_Absolute m; + + m = GNUNET_TIME_relative_to_absolute (max_keys_caching); + m = GNUNET_TIME_absolute_min (m, + key_state->next_reload); + get_date_string (m, dat); + // FIXME: setting 'm' to FOREVER here exposes + // a crash-bug in lib/ where we access /keys + // data after it was already free'd! GNUNET_break (MHD_YES == MHD_add_response_header (response, MHD_HTTP_HEADER_EXPIRES, |