From f486df99c87f4ea660a4e39fe4497c9fd2afa847 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 28 Aug 2020 23:43:05 +0200 Subject: fail if exchange-account configuration is definitively wrong (#5642) --- src/exchange-tools/taler-exchange-wire.c | 11 ++++++++--- src/exchangedb/exchangedb_accounts.c | 21 ++++++++++++++++----- src/include/taler_exchangedb_lib.h | 3 ++- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/exchange-tools/taler-exchange-wire.c b/src/exchange-tools/taler-exchange-wire.c index 2f6b4ad73..8aa3f570c 100644 --- a/src/exchange-tools/taler-exchange-wire.c +++ b/src/exchange-tools/taler-exchange-wire.c @@ -169,9 +169,14 @@ run (void *cls, } GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Signing /wire responses\n"); - TALER_EXCHANGEDB_find_accounts (cfg, - &sign_account_data, - NULL); + if (GNUNET_OK != + TALER_EXCHANGEDB_find_accounts (cfg, + &sign_account_data, + NULL)) + { + global_ret = 1; + return; + } } diff --git a/src/exchangedb/exchangedb_accounts.c b/src/exchangedb/exchangedb_accounts.c index 986d4ae2d..5b74c8369 100644 --- a/src/exchangedb/exchangedb_accounts.c +++ b/src/exchangedb/exchangedb_accounts.c @@ -52,6 +52,11 @@ struct FindAccountContext * Closure for @e cb. */ void *cb_cls; + + /** + * Set to #GNUNET_SYSERR if the configuration is invalid. + */ + int res; }; @@ -86,6 +91,7 @@ check_for_account (void *cls, GNUNET_log_config_missing (GNUNET_ERROR_TYPE_WARNING, section, "PAYTO_URI"); + ctx->res = GNUNET_SYSERR; return; } method = TALER_payto_get_method (payto_uri); @@ -94,6 +100,7 @@ check_for_account (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "payto URI in config ([%s]/PAYTO_URI) malformed\n", section); + ctx->res = GNUNET_SYSERR; GNUNET_free (payto_uri); return; } @@ -135,20 +142,24 @@ check_for_account (void *cls, * @param cfg configuration to use * @param cb callback to invoke * @param cb_cls closure for @a cb + * @return #GNUNET_OK if the configuration seems valid, #GNUNET_SYSERR if not */ -void +int TALER_EXCHANGEDB_find_accounts (const struct GNUNET_CONFIGURATION_Handle *cfg, TALER_EXCHANGEDB_AccountCallback cb, void *cb_cls) { - struct FindAccountContext ctx; + struct FindAccountContext ctx = { + .cfg = cfg, + .cb = cb, + .cb_cls = cb_cls, + .res = GNUNET_OK + }; - ctx.cfg = cfg; - ctx.cb = cb; - ctx.cb_cls = cb_cls; GNUNET_CONFIGURATION_iterate_sections (cfg, &check_for_account, &ctx); + return ctx.res; } diff --git a/src/include/taler_exchangedb_lib.h b/src/include/taler_exchangedb_lib.h index 33ead98bb..5400330ee 100644 --- a/src/include/taler_exchangedb_lib.h +++ b/src/include/taler_exchangedb_lib.h @@ -438,8 +438,9 @@ typedef void * @param cfg configuration to use * @param cb callback to invoke * @param cb_cls closure for @a cb + * @return #GNUNET_OK if the configuration seems valid, #GNUNET_SYSERR if not */ -void +int TALER_EXCHANGEDB_find_accounts (const struct GNUNET_CONFIGURATION_Handle *cfg, TALER_EXCHANGEDB_AccountCallback cb, void *cb_cls); -- cgit v1.2.3