challenger

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

commit 45a2819fa7b252fff6ae6723a5ceb0f853ca89ef
parent a6fb529dddc757000bdc88084b0d28daa86b18ca
Author: Christian Grothoff <christian@grothoff.org>
Date:   Sun, 14 Jun 2026 01:34:36 +0200

re-add check to refuse to start if schema is not current

Diffstat:
Msrc/challengerdb/challenger-dbinit.c | 2+-
Msrc/challengerdb/pg.c | 35++++++++++++++++++++++++++++++++---
Msrc/include/challenger_database_lib.h | 15++++++++++++++-
3 files changed, 47 insertions(+), 5 deletions(-)

diff --git a/src/challengerdb/challenger-dbinit.c b/src/challengerdb/challenger-dbinit.c @@ -63,7 +63,7 @@ run (void *cls, (void) args; (void) cfgfile; if (NULL == - (db = CHALLENGERDB_connect (cfg))) + (db = CHALLENGERDB_connect_admin (cfg))) { fprintf (stderr, "Failed to initialize database connection.\n"); diff --git a/src/challengerdb/pg.c b/src/challengerdb/pg.c @@ -103,8 +103,9 @@ internal_setup (struct CHALLENGERDB_PostgresContext *pg) } -struct CHALLENGERDB_PostgresContext * -CHALLENGERDB_connect (const struct GNUNET_CONFIGURATION_Handle *cfg) +static struct CHALLENGERDB_PostgresContext * +do_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, + bool check_current) { struct CHALLENGERDB_PostgresContext *pg; @@ -125,15 +126,43 @@ CHALLENGERDB_connect (const struct GNUNET_CONFIGURATION_Handle *cfg) if (GNUNET_OK != internal_setup (pg)) { - CHALLENGERDB_disconnect (pg); GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to ensure DB is initialized\n"); + CHALLENGERDB_disconnect (pg); + return NULL; + } + if (check_current && + (GNUNET_OK != + GNUNET_PQ_check_current (pg->conn, + "challenger-")) ) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Database schema is not up-to-date. Try running challenger-dbinit or challenger-dbconfig!\n"); + CHALLENGERDB_disconnect (pg); return NULL; } return pg; } +struct CHALLENGERDB_PostgresContext * +CHALLENGERDB_connect ( + const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + return do_connect (cfg, + true); +} + + +struct CHALLENGERDB_PostgresContext * +CHALLENGERDB_connect_admin ( + const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + return do_connect (cfg, + false); +} + + void CHALLENGERDB_disconnect (struct CHALLENGERDB_PostgresContext *pg) { diff --git a/src/include/challenger_database_lib.h b/src/include/challenger_database_lib.h @@ -32,7 +32,20 @@ struct CHALLENGERDB_PostgresContext; * @return NULL on failure */ struct CHALLENGERDB_PostgresContext * -CHALLENGERDB_connect (const struct GNUNET_CONFIGURATION_Handle *cfg); +CHALLENGERDB_connect ( + const struct GNUNET_CONFIGURATION_Handle *cfg); + + +/** + * Connect to the challenger database for administration. + * Disables the check that the database schema is current. + * + * @param cfg configuration to use + * @return NULL on failure + */ +struct CHALLENGERDB_PostgresContext * +CHALLENGERDB_connect_admin ( + const struct GNUNET_CONFIGURATION_Handle *cfg); /**