summaryrefslogtreecommitdiff
path: root/src/exchange
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-11-17 16:37:40 +0100
committerChristian Grothoff <christian@grothoff.org>2016-11-17 16:37:40 +0100
commit7fd6be5cef06d0bd495f4e03d33c4d6f04c36131 (patch)
tree74dd8e086a3f584b51fcff7721a4b9dba4582784 /src/exchange
parente140ca9dcef9bd86f9c9214872107693ef8c441c (diff)
downloadexchange-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.c21
-rw-r--r--src/exchange/taler-exchange-httpd_responses.c2
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");
}