challenger

OAuth 2.0-based authentication service that validates user can receive messages at a certain address
Log | Files | Refs | Submodules | README | LICENSE

commit 9b6896eb076c689e17950c2bc5eea0c2110bbbd2
parent 1415c2504d7eedef64e53a92da09994e4a732361
Author: Christian Grothoff <grothoff@gnunet.org>
Date:   Thu,  9 Jul 2026 22:08:53 +0200

avoid unnecessary update if increment is zero

Diffstat:
Msrc/challengerdb/client_check.c | 77+++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
1 file changed, 51 insertions(+), 26 deletions(-)

diff --git a/src/challengerdb/client_check.c b/src/challengerdb/client_check.c @@ -27,18 +27,13 @@ enum GNUNET_DB_QueryStatus -CHALLENGERDB_client_check (struct CHALLENGERDB_PostgresContext *ctx, - uint64_t client_id, - const char *client_secret, - uint32_t counter_increment, - char **client_redirect_uri) +CHALLENGERDB_client_check ( + struct CHALLENGERDB_PostgresContext *ctx, + uint64_t client_id, + const char *client_secret, + uint32_t counter_increment, + char **client_redirect_uri) { - struct GNUNET_PQ_QueryParam params[] = { - GNUNET_PQ_query_param_uint64 (&client_id), - GNUNET_PQ_query_param_string (client_secret), - GNUNET_PQ_query_param_uint32 (&counter_increment), - GNUNET_PQ_query_param_end - }; struct GNUNET_PQ_ResultSpec rs[] = { GNUNET_PQ_result_spec_allow_null ( GNUNET_PQ_result_spec_string ("uri", @@ -48,25 +43,55 @@ CHALLENGERDB_client_check (struct CHALLENGERDB_PostgresContext *ctx, }; *client_redirect_uri = NULL; - PREPARE (ctx, - "client_check", - "UPDATE clients SET" - " validation_counter=validation_counter+CAST($3::INT4 AS INT8)" - " WHERE client_serial_id=$1" - " AND client_secret=$2" - " RETURNING uri;"); - return GNUNET_PQ_eval_prepared_singleton_select (ctx->conn, - "client_check", - params, - rs); + if (0 == counter_increment) + { + struct GNUNET_PQ_QueryParam params[] = { + GNUNET_PQ_query_param_uint64 (&client_id), + GNUNET_PQ_query_param_string (client_secret), + GNUNET_PQ_query_param_end + }; + + PREPARE (ctx, + "client_check_ro", + "SELECT uri" + " FROM clients" + " WHERE client_serial_id=$1" + " AND client_secret=$2;"); + return GNUNET_PQ_eval_prepared_singleton_select (ctx->conn, + "client_check_ro", + params, + rs); + } + else + { + struct GNUNET_PQ_QueryParam params[] = { + GNUNET_PQ_query_param_uint64 (&client_id), + GNUNET_PQ_query_param_string (client_secret), + GNUNET_PQ_query_param_uint32 (&counter_increment), + GNUNET_PQ_query_param_end + }; + + PREPARE (ctx, + "client_check", + "UPDATE clients SET" + " validation_counter=validation_counter+CAST($3::INT4 AS INT8)" + " WHERE client_serial_id=$1" + " AND client_secret=$2" + " RETURNING uri;"); + return GNUNET_PQ_eval_prepared_singleton_select (ctx->conn, + "client_check", + params, + rs); + } } enum GNUNET_DB_QueryStatus -CHALLENGERDB_client_check2 (struct CHALLENGERDB_PostgresContext *ctx, - const char *client_uri, - const char *client_secret, - uint64_t *client_id) +CHALLENGERDB_client_check2 ( + struct CHALLENGERDB_PostgresContext *ctx, + const char *client_uri, + const char *client_secret, + uint64_t *client_id) { struct GNUNET_PQ_QueryParam params[] = { GNUNET_PQ_query_param_string (client_uri),