commit 2d2206eb5e5cd9e63d02a79a163ff91ae11447db
parent e7f9a8a938ef3aa7ae95b8fee26716832d56d98a
Author: Christian Grothoff <grothoff@gnunet.org>
Date: Sun, 19 Jul 2026 23:10:19 +0200
check for expiration everywhere
Diffstat:
4 files changed, 33 insertions(+), 21 deletions(-)
diff --git a/src/challengerdb/challenger_do_challenge_set_address_and_pin.sql b/src/challengerdb/challenger_do_challenge_set_address_and_pin.sql
@@ -54,6 +54,7 @@ SELECT address
INTO my_status
FROM validations
WHERE nonce=in_nonce
+ AND expiration_time > in_now
FOR UPDATE;
IF NOT FOUND
diff --git a/src/challengerdb/challenger_do_validate_and_solve_pin.sql b/src/challengerdb/challenger_do_validate_and_solve_pin.sql
@@ -18,6 +18,7 @@ DROP FUNCTION IF EXISTS challenger_do_validate_and_solve_pin;
CREATE FUNCTION challenger_do_validate_and_solve_pin (
IN in_nonce BYTEA,
IN in_new_pin INT4,
+ IN in_now INT8,
OUT out_not_found BOOLEAN,
OUT out_exhausted BOOLEAN,
OUT out_no_challenge BOOLEAN,
@@ -42,6 +43,7 @@ SELECT auth_attempts_left
INTO my_status
FROM validations
WHERE nonce=in_nonce
+ AND expiration_time > in_now
FOR UPDATE;
IF NOT FOUND
diff --git a/src/challengerdb/validate_solve_pin.c b/src/challengerdb/validate_solve_pin.c
@@ -27,22 +27,25 @@
enum GNUNET_DB_QueryStatus
-CHALLENGERDB_validate_solve_pin (struct CHALLENGERDB_PostgresContext *ctx,
- const struct CHALLENGER_ValidationNonceP *nonce
- ,
- uint32_t new_pin,
- bool *solved,
- bool *exhausted,
- bool *no_challenge,
- char **state,
- uint32_t *addr_left,
- uint32_t *auth_attempts_left,
- uint32_t *pin_transmissions_left,
- char **client_redirect_uri)
+CHALLENGERDB_validate_solve_pin (
+ struct CHALLENGERDB_PostgresContext *ctx,
+ const struct CHALLENGER_ValidationNonceP *nonce,
+ uint32_t new_pin,
+ bool *solved,
+ bool *exhausted,
+ bool *no_challenge,
+ char **state,
+ uint32_t *addr_left,
+ uint32_t *auth_attempts_left,
+ uint32_t *pin_transmissions_left,
+ char **client_redirect_uri)
{
+ struct GNUNET_TIME_Absolute now
+ = GNUNET_TIME_absolute_get ();
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (nonce),
GNUNET_PQ_query_param_uint32 (&new_pin),
+ GNUNET_PQ_query_param_absolute_time (&now),
GNUNET_PQ_query_param_end
};
bool not_found;
@@ -87,7 +90,7 @@ CHALLENGERDB_validate_solve_pin (struct CHALLENGERDB_PostgresContext *ctx,
",out_pin_transmissions_left AS pin_transmissions_left"
",out_client_redirect_uri AS client_redirect_uri"
" FROM challenger_do_validate_and_solve_pin"
- " ($1,$2);");
+ " ($1,$2,$3);");
qs = GNUNET_PQ_eval_prepared_singleton_select (ctx->conn,
"do_validate_solve_pin",
params,
diff --git a/src/challengerdb/validation_get.c b/src/challengerdb/validation_get.c
@@ -25,17 +25,22 @@
#include "validation_get.h"
#include "pg_helper.h"
+
enum GNUNET_DB_QueryStatus
-CHALLENGERDB_validation_get (struct CHALLENGERDB_PostgresContext *ctx,
- const struct CHALLENGER_ValidationNonceP *nonce,
- char **client_secret,
- json_t **address,
- char **client_scope,
- char **client_state,
- char **client_redirect_uri)
+CHALLENGERDB_validation_get (
+ struct CHALLENGERDB_PostgresContext *ctx,
+ const struct CHALLENGER_ValidationNonceP *nonce,
+ char **client_secret,
+ json_t **address,
+ char **client_scope,
+ char **client_state,
+ char **client_redirect_uri)
{
+ struct GNUNET_TIME_Absolute now
+ = GNUNET_TIME_absolute_get ();
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (nonce),
+ GNUNET_PQ_query_param_absolute_time (&now),
GNUNET_PQ_query_param_end
};
struct GNUNET_PQ_ResultSpec rs[] = {
@@ -72,7 +77,8 @@ CHALLENGERDB_validation_get (struct CHALLENGERDB_PostgresContext *ctx,
" FROM validations"
" JOIN clients "
" USING (client_serial_id)"
- " WHERE nonce=$1");
+ " WHERE nonce=$1"
+ " AND expiration_time > $2");
return GNUNET_PQ_eval_prepared_singleton_select (ctx->conn,
"validation_get",
params,