diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-11-17 16:37:40 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-11-17 16:37:40 +0100 |
commit | 7fd6be5cef06d0bd495f4e03d33c4d6f04c36131 (patch) | |
tree | 74dd8e086a3f584b51fcff7721a4b9dba4582784 /src/exchange | |
parent | e140ca9dcef9bd86f9c9214872107693ef8c441c (diff) | |
download | exchange-7fd6be5cef06d0bd495f4e03d33c4d6f04c36131.tar.gz exchange-7fd6be5cef06d0bd495f4e03d33c4d6f04c36131.tar.bz2 exchange-7fd6be5cef06d0bd495f4e03d33c4d6f04c36131.zip |
add idempotency checks for /refresh/reveal, fixing #4793
Diffstat (limited to 'src/exchange')
-rw-r--r-- | src/exchange/taler-exchange-httpd_db.c | 21 | ||||
-rw-r--r-- | src/exchange/taler-exchange-httpd_responses.c | 2 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/exchange/taler-exchange-httpd_db.c b/src/exchange/taler-exchange-httpd_db.c index 2c6e90656..238112771 100644 --- a/src/exchange/taler-exchange-httpd_db.c +++ b/src/exchange/taler-exchange-httpd_db.c @@ -1280,16 +1280,28 @@ refresh_exchange_coin (struct MHD_Connection *connection, ev_sig.rsa_signature = NULL; return ev_sig; } + if (GNUNET_OK == + TEH_plugin->get_refresh_out (TEH_plugin->cls, + session, + session_hash, + coin_off, + &ev_sig)) + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Returning cashed reply for /refresh/reveal signature\n"); + return ev_sig; + } + ev_sig.rsa_signature - = GNUNET_CRYPTO_rsa_sign_blinded (dki->denom_priv.rsa_private_key, - commit_coin->coin_ev, - commit_coin->coin_ev_size); + = GNUNET_CRYPTO_rsa_sign_blinded (dki->denom_priv.rsa_private_key, + commit_coin->coin_ev, + commit_coin->coin_ev_size); if (NULL == ev_sig.rsa_signature) { GNUNET_break (0); return ev_sig; } - if (GNUNET_OK != + if (GNUNET_SYSERR == TEH_plugin->insert_refresh_out (TEH_plugin->cls, session, session_hash, @@ -1300,6 +1312,7 @@ refresh_exchange_coin (struct MHD_Connection *connection, GNUNET_CRYPTO_rsa_signature_free (ev_sig.rsa_signature); ev_sig.rsa_signature = NULL; } + return ev_sig; } diff --git a/src/exchange/taler-exchange-httpd_responses.c b/src/exchange/taler-exchange-httpd_responses.c index b31f22e10..2ecd3b4e5 100644 --- a/src/exchange/taler-exchange-httpd_responses.c +++ b/src/exchange/taler-exchange-httpd_responses.c @@ -318,7 +318,7 @@ TEH_RESPONSE_reply_internal_db_error (struct MHD_Connection *connection, { return TEH_RESPONSE_reply_internal_error (connection, ec, - "Failed to connect to database"); + "Failure in database interaction"); } |