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:
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