diff options
-rw-r--r-- | src/exchange/taler-exchange-httpd_keystate.c | 9 | ||||
-rw-r--r-- | src/exchangedb/exchangedb_denomkeys.c | 6 | ||||
-rw-r--r-- | src/exchangedb/exchangedb_signkeys.c | 6 | ||||
-rw-r--r-- | src/exchangedb/plugin_exchangedb_postgres.c | 26 | ||||
-rw-r--r-- | src/include/taler_exchangedb_plugin.h | 28 |
5 files changed, 73 insertions, 2 deletions
diff --git a/src/exchange/taler-exchange-httpd_keystate.c b/src/exchange/taler-exchange-httpd_keystate.c index 1390f95a3..1a7e99da2 100644 --- a/src/exchange/taler-exchange-httpd_keystate.c +++ b/src/exchange/taler-exchange-httpd_keystate.c @@ -1503,7 +1503,14 @@ make_fresh_key_state () destroy_response_factory (&rfc); return NULL; } - +#if FIX_FOR_5536 + /* Once we no longer get expired DKIs from + TALER_EXCHANGEDB_denomination_keys_iterate(), + we must fetch the information from the database! */ + qs = TEH_plugin->iterate_denomination_info (TEH_plugin->cls, + &reload_public_denoms_cb, + &rfc); +#endif /* Initialize `current_sign_key_issue` and `rfc.sign_keys_array` */ TALER_EXCHANGEDB_signing_keys_iterate (TEH_exchange_directory, &reload_keys_sign_iter, diff --git a/src/exchangedb/exchangedb_denomkeys.c b/src/exchangedb/exchangedb_denomkeys.c index 5ff3b5c51..d23f8f2f0 100644 --- a/src/exchangedb/exchangedb_denomkeys.c +++ b/src/exchangedb/exchangedb_denomkeys.c @@ -151,6 +151,12 @@ TALER_EXCHANGEDB_denomination_key_read (const char *filename, data, offset); GNUNET_free (data); + if (0 == GNUNET_TIME_absolute_get_remaining + (GNUNET_TIME_absolute_ntoh (dki->issue.properties.expire_withdraw)).rel_value_us) + { + /* FIXME: #5536: we should delete this file, the + private key is no longer needed (and return SYSERR!) */ + } return GNUNET_OK; } diff --git a/src/exchangedb/exchangedb_signkeys.c b/src/exchangedb/exchangedb_signkeys.c index 866bf4d3d..3c9f1630a 100644 --- a/src/exchangedb/exchangedb_signkeys.c +++ b/src/exchangedb/exchangedb_signkeys.c @@ -73,6 +73,12 @@ signkeys_iterate_dir_iter (void *cls, (unsigned int) sizeof (struct TALER_EXCHANGEDB_PrivateSigningKeyInformationP)); return GNUNET_OK; } + if (0 == GNUNET_TIME_absolute_get_remaining + (GNUNET_TIME_absolute_ntoh (issue.issue.expire)).rel_value_us) + { + /* FIXME: #5536: we should delete this file, the + private key is no longer needed (and return SYSERR!) */ + } return skc->it (skc->it_cls, filename, &issue); diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c index 2ce865ae3..c399aeeb5 100644 --- a/src/exchangedb/plugin_exchangedb_postgres.c +++ b/src/exchangedb/plugin_exchangedb_postgres.c @@ -1981,6 +1981,31 @@ postgres_get_denomination_info (void *cls, /** + * Fetch information about all known denomination keys. + * + * @param cls the @e cls of this struct with the plugin-specific state + * @param cb function to call on each denomination key + * @param cb_cls closure for @a cb + * @return transaction status code + */ +static enum GNUNET_DB_QueryStatus +postgres_iterate_denomination_info (void *cls, + TALER_EXCHANGEDB_DenominationInfoIterator cb, + void *cb_cls) +{ +#if 0 + enum GNUNET_DB_QueryStatus qs; + struct GNUNET_PQ_QueryParam params[] = { + GNUNET_PQ_query_param_end + }; +#endif + + GNUNET_break (0); // not implemented! #5536 + return GNUNET_DB_STATUS_HARD_ERROR; +} + + +/** * Get the summary of a reserve. * * @param cls the `struct PostgresClosure` with the plugin-specific state @@ -7099,6 +7124,7 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) plugin->rollback = &postgres_rollback; plugin->insert_denomination_info = &postgres_insert_denomination_info; plugin->get_denomination_info = &postgres_get_denomination_info; + plugin->iterate_denomination_info = &postgres_iterate_denomination_info; plugin->reserve_get = &postgres_reserve_get; plugin->reserves_in_insert = &postgres_reserves_in_insert; plugin->get_latest_reserve_in_reference = &postgres_get_latest_reserve_in_reference; diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h index 89df42190..2d9f14208 100644 --- a/src/include/taler_exchangedb_plugin.h +++ b/src/include/taler_exchangedb_plugin.h @@ -711,7 +711,6 @@ typedef int int done); - /** * Callback used to process data of a merchant under KYC monitoring. * @@ -1140,6 +1139,19 @@ typedef void /** + * Function called with information about the exchange's denomination keys. + * + * @parma cls closure + * @param denom_pub public key of the denomination + * @param issue detailed information about the denomination (value, expiration times, fees) + */ +typedef void +(*TALER_EXCHANGEDB_DenominationInfoIterator)(void *cls, + const struct TALER_DenominationPublicKey *denom_pub, + const struct TALER_EXCHANGEDB_DenominationKeyInformationP *issue); + + +/** * @brief The plugin API, returned from the plugin's "init" function. * The argument given to "init" is simply a configuration handle. */ @@ -1274,6 +1286,20 @@ struct TALER_EXCHANGEDB_Plugin /** + * Function called on every known denomination key. Runs in its + * own read-only transaction (hence no session provided). + * + * @param cls the @e cls of this struct with the plugin-specific state + * @param cb function to call on each denomination key + * @param cb_cls closure for @a cb + * @return transaction status code + */ + enum GNUNET_DB_QueryStatus + (*iterate_denomination_info) (void *cls, + TALER_EXCHANGEDB_DenominationInfoIterator cb, + void *cb_cls); + + /** * Get the summary of a reserve. * * @param cls the @e cls of this struct with the plugin-specific state |