commit 6b4ca8adb3bab9fc0e61e094999d6a29620801a3
parent a2f6a0ab24e8b4eec6169fc0478f503cff425e6f
Author: Christian Grothoff <christian@grothoff.org>
Date: Sat, 16 Aug 2025 15:19:04 +0200
-fix test failures (#9434)
Diffstat:
4 files changed, 72 insertions(+), 15 deletions(-)
diff --git a/src/backend/taler-merchant-httpd_post-orders-ID-pay.c b/src/backend/taler-merchant-httpd_post-orders-ID-pay.c
@@ -2960,6 +2960,7 @@ find_valid_input_tokens (
unsigned int num_validated = 0;
struct GNUNET_TIME_Timestamp now
= GNUNET_TIME_timestamp_get ();
+ const struct TALER_MERCHANT_ContractTokenFamilyKey *kig = NULL;
for (unsigned int j = 0; j < expected_num; j++)
{
@@ -2972,28 +2973,63 @@ find_valid_input_tokens (
const struct TALER_MERCHANT_ContractTokenFamilyKey *ki
= &family->keys[i];
- if (GNUNET_TIME_timestamp_cmp (ki->valid_after,
- >=,
- now) ||
- GNUNET_TIME_timestamp_cmp (ki->valid_before,
- <,
- now))
- {
- continue; /* ki currently not valid */
- }
if (0 ==
GNUNET_memcmp (&ki->pub.public_key->pub_key_hash,
&tuc->h_issue.hash))
{
+ if (GNUNET_TIME_timestamp_cmp (ki->valid_after,
+ >,
+ now) ||
+ GNUNET_TIME_timestamp_cmp (ki->valid_before,
+ <=,
+ now))
+ {
+ /* We have a match, but not in the current validity period */
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Public key %s currently not valid\n",
+ GNUNET_h2s (&ki->pub.public_key->pub_key_hash));
+ kig = ki;
+ continue;
+ }
key = ki;
break;
}
}
if (NULL == key)
{
+ if (NULL != kig)
+ {
+ char start_str[128];
+ char end_str[128];
+ char emsg[350];
+
+ GNUNET_snprintf (start_str,
+ sizeof (start_str),
+ "%s",
+ GNUNET_STRINGS_timestamp_to_string (kig->valid_after));
+ GNUNET_snprintf (end_str,
+ sizeof (end_str),
+ "%s",
+ GNUNET_STRINGS_timestamp_to_string (kig->valid_before))
+ ;
+ /* FIXME: use more specific EC */
+ GNUNET_snprintf (emsg,
+ sizeof (emsg),
+ "Token is only valid from %s to %s",
+ start_str,
+ end_str);
+ pay_end (pc,
+ TALER_MHD_reply_with_error (
+ pc->connection,
+ MHD_HTTP_GONE,
+ TALER_EC_MERCHANT_POST_ORDERS_ID_PAY_OFFER_EXPIRED,
+ emsg));
+ return GNUNET_NO;
+ }
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Input token supplied for public key that is not acceptable\n");
- GNUNET_break (0);
+ "Input token supplied for public key %s that is not acceptable\n",
+ GNUNET_h2s (&tuc->h_issue.hash));
+ GNUNET_break_op (0);
pay_end (pc,
TALER_MHD_reply_with_error (
pc->connection,
diff --git a/src/backenddb/pg_insert_spent_token.c b/src/backenddb/pg_insert_spent_token.c
@@ -37,8 +37,8 @@ TMH_PG_insert_spent_token (
{
struct PostgresClosure *pg = cls;
struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (h_issue_pub),
GNUNET_PQ_query_param_auto_from_type (h_contract_terms),
+ GNUNET_PQ_query_param_auto_from_type (h_issue_pub),
GNUNET_PQ_query_param_auto_from_type (use_pub),
GNUNET_PQ_query_param_auto_from_type (use_sig),
GNUNET_PQ_query_param_unblinded_sig (issue_sig->signature),
@@ -56,6 +56,9 @@ TMH_PG_insert_spent_token (
enum GNUNET_DB_QueryStatus qs;
check_connection (pg);
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Storing token spent with key %s\n",
+ GNUNET_h2s (&h_issue_pub->hash));
PREPARE (pg,
"spent_token_insert",
"SELECT"
diff --git a/src/backenddb/pg_insert_spent_token.sql b/src/backenddb/pg_insert_spent_token.sql
@@ -71,7 +71,7 @@ END IF;
out_existed = FALSE;
UPDATE merchant_token_families
- SET redeemed=redeemed+1
+ SET used=used+1
WHERE token_family_serial=my_tf_serial;
END $$;
diff --git a/src/backenddb/pg_insert_token_family_key.c b/src/backenddb/pg_insert_token_family_key.c
@@ -43,6 +43,8 @@ TMH_PG_insert_token_family_key (
struct GNUNET_TIME_Timestamp now
= GNUNET_TIME_timestamp_get ();
const char *cipher = NULL;
+
+#if DEBUG
struct GNUNET_HashCode pub_hash;
switch (pub->public_key->cipher)
@@ -64,11 +66,27 @@ TMH_PG_insert_token_family_key (
GNUNET_break (0);
return GNUNET_DB_STATUS_HARD_ERROR;
}
- GNUNET_assert (pub->public_key->cipher ==
- priv->private_key->cipher);
GNUNET_assert (0 ==
GNUNET_memcmp (&pub_hash,
&pub->public_key->pub_key_hash));
+#endif
+ switch (pub->public_key->cipher)
+ {
+ case GNUNET_CRYPTO_BSA_RSA:
+ cipher = "rsa";
+ break;
+ case GNUNET_CRYPTO_BSA_CS:
+ cipher = "cs";
+ break;
+ case GNUNET_CRYPTO_BSA_INVALID:
+ GNUNET_break (0);
+ return GNUNET_DB_STATUS_HARD_ERROR;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Storing token public key with hash %s\n",
+ GNUNET_h2s (&pub->public_key->pub_key_hash));
+ GNUNET_assert (pub->public_key->cipher ==
+ priv->private_key->cipher);
GNUNET_assert (! GNUNET_TIME_absolute_is_zero (
valid_after.abs_time));
GNUNET_assert (! GNUNET_TIME_absolute_is_zero (