merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 2e159f1bfd5c7832fdf3acaa99d47779de45dfdb
parent bb99b9f3137975a13a470c4fa98dabe88efedcb5
Author: Christian Grothoff <grothoff@gnunet.org>
Date:   Sun, 25 Jan 2026 14:27:42 +0900

fix #10909: allow instance updates without setting phone/email even if they are usually mandatory if they were not set previously (like when instance was created administratively)

Diffstat:
Msrc/backend/taler-merchant-httpd_private-patch-instances-ID.c | 30++++++++++++++----------------
1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_private-patch-instances-ID.c b/src/backend/taler-merchant-httpd_private-patch-instances-ID.c @@ -199,13 +199,13 @@ patch_instances_ID (struct TMH_MerchantInstance *mi, if ( (NULL != is.phone) && (NULL != mi->settings.phone) && - 0 == strcmp (mi->settings.phone, - is.phone) ) + (0 == strcmp (mi->settings.phone, + is.phone)) ) is.phone_validated = mi->settings.phone_validated; if ( (NULL != is.email) && (NULL != mi->settings.email) && - 0 == strcmp (mi->settings.email, - is.email) ) + (0 == strcmp (mi->settings.email, + is.email)) ) is.email_validated = mi->settings.email_validated; if (mfa_check) { @@ -213,6 +213,7 @@ patch_instances_ID (struct TMH_MerchantInstance *mi, enum TEH_TanChannelSet mtc = TEH_mandatory_tan_channels; if ( (0 != (mtc & TEH_TCS_SMS)) && + (NULL != mi->settings.phone) && (NULL == is.phone) ) { GNUNET_break_op (0); @@ -224,6 +225,7 @@ patch_instances_ID (struct TMH_MerchantInstance *mi, "phone_number"); } if ( (0 != (mtc & TEH_TCS_EMAIL)) && + (NULL != mi->settings.email) && (NULL == is.email) ) { GNUNET_break_op (0); @@ -234,10 +236,12 @@ patch_instances_ID (struct TMH_MerchantInstance *mi, TALER_EC_GENERIC_PARAMETER_MISSING, "email"); } - if ( (is.phone_validated) && + if ( (is.phone_validated || + (NULL == is.phone) ) && (0 != (mtc & TEH_TCS_SMS)) ) mtc -= TEH_TCS_SMS; - if ( (is.email_validated) && + if ( (is.email_validated || + (NULL == is.email) ) && (0 != (mtc & TEH_TCS_EMAIL)) ) mtc -= TEH_TCS_EMAIL; switch (mtc) @@ -246,16 +250,7 @@ patch_instances_ID (struct TMH_MerchantInstance *mi, ret = GNUNET_OK; break; case TEH_TCS_SMS: - if (NULL == is.phone) - { - GNUNET_break_op (0); - GNUNET_JSON_parse_free (spec); - return TALER_MHD_reply_with_error ( - connection, - MHD_HTTP_BAD_REQUEST, - TALER_EC_GENERIC_PARAMETER_MISSING, - "phone_number"); - } + GNUNET_assert (NULL != is.phone); is.phone_validated = true; /* validate new phone number, if possible require old e-mail address for authorization */ @@ -272,6 +267,7 @@ patch_instances_ID (struct TMH_MerchantInstance *mi, TALER_MERCHANT_MFA_CHANNEL_NONE); break; case TEH_TCS_EMAIL: + GNUNET_assert (NULL != is.email); is.email_validated = true; /* validate new e-mail address, if possible require old phone address for authorization */ @@ -288,6 +284,8 @@ patch_instances_ID (struct TMH_MerchantInstance *mi, TALER_MERCHANT_MFA_CHANNEL_NONE); break; case TEH_TCS_EMAIL_AND_SMS: + GNUNET_assert (NULL != mi->settings.phone); + GNUNET_assert (NULL != mi->settings.email); is.phone_validated = true; is.email_validated = true; /* To change both, we require both old and both new