summaryrefslogtreecommitdiff
path: root/src/backend/taler-merchant-httpd_private-patch-instances-ID.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2021-02-17 20:48:28 +0100
committerChristian Grothoff <christian@grothoff.org>2021-02-17 20:48:28 +0100
commit441d1a5915beb96556541292f95f8d3a434e1d9a (patch)
tree133114236d22616677b31a9bed659d27dd29e239 /src/backend/taler-merchant-httpd_private-patch-instances-ID.c
parentf8bc94d00f82f12d1e7caf3d37bf7aac10c9d108 (diff)
downloadmerchant-441d1a5915beb96556541292f95f8d3a434e1d9a.tar.gz
merchant-441d1a5915beb96556541292f95f8d3a434e1d9a.tar.bz2
merchant-441d1a5915beb96556541292f95f8d3a434e1d9a.zip
fix account re-enable issue, related to #6755, but not exactly
Diffstat (limited to 'src/backend/taler-merchant-httpd_private-patch-instances-ID.c')
-rw-r--r--src/backend/taler-merchant-httpd_private-patch-instances-ID.c38
1 files changed, 30 insertions, 8 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
index 4590e6c5..62dc77a4 100644
--- a/src/backend/taler-merchant-httpd_private-patch-instances-ID.c
+++ b/src/backend/taler-merchant-httpd_private-patch-instances-ID.c
@@ -193,7 +193,7 @@ TMH_private_patch_instances_ID (const struct TMH_RequestHandler *rh,
/* Check for changes in accounts */
{
unsigned int len = json_array_size (payto_uris);
- bool matches[GNUNET_NZL (len)];
+ struct TMH_WireMethod *matches[GNUNET_NZL (len)];
bool matched;
memset (matches,
@@ -205,6 +205,7 @@ TMH_private_patch_instances_ID (const struct TMH_RequestHandler *rh,
{
const char *uri = json_string_value (json_object_get (wm->j_wire,
"payto_uri"));
+
GNUNET_assert (NULL != uri);
matched = false;
for (unsigned int i = 0; i<len; i++)
@@ -222,10 +223,10 @@ TMH_private_patch_instances_ID (const struct TMH_RequestHandler *rh,
TALER_EC_GENERIC_PAYTO_URI_MALFORMED,
NULL);
}
- if ((0 == strcasecmp (uri,
- str)) )
+ if (0 == strcasecmp (uri,
+ str))
{
- if (matches[i])
+ if (NULL != matches[i])
{
GNUNET_break (0);
TMH_db->rollback (TMH_db->cls);
@@ -236,13 +237,14 @@ TMH_private_patch_instances_ID (const struct TMH_RequestHandler *rh,
TALER_EC_GENERIC_PAYTO_URI_MALFORMED,
str);
}
- matches[i] = true;
+ matches[i] = wm;
matched = true;
break;
}
}
/* delete unmatched (= removed) accounts */
- if (! matched)
+ if ( (! matched) &&
+ (wm->active) )
{
/* Account was REMOVED */
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -267,8 +269,25 @@ TMH_private_patch_instances_ID (const struct TMH_RequestHandler *rh,
struct TALER_MERCHANTDB_AccountDetails ad;
struct TMH_WireMethod *wm;
- if (matches[i])
- continue; /* account existed */
+ if (NULL != matches[i])
+ {
+ wm = matches[i];
+ if (! wm->active)
+ {
+ qs = TMH_db->activate_account (TMH_db->cls,
+ &wm->h_wire);
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
+ {
+ TMH_db->rollback (TMH_db->cls);
+ if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
+ goto retry;
+ else
+ goto giveup;
+ }
+ }
+ wm->enabling = true;
+ continue;
+ }
ad.payto_uri = json_string_value (json_array_get (payto_uris,
i));
GNUNET_assert (NULL != ad.payto_uri);
@@ -359,8 +378,11 @@ giveup:
/* We did not flip the 'active' bits earlier because the
DB transaction could still fail. Now it is time to update our
runtime state. */
+ GNUNET_assert (! (wm->deleting & wm->enabling));
if (wm->deleting)
wm->active = false;
+ if (wm->enabling)
+ wm->active = true;
}
/* Update our 'settings' */