gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-anastasis] branch master updated: fix #8755 in the C version


From: gnunet
Subject: [taler-anastasis] branch master updated: fix #8755 in the C version
Date: Sun, 21 Apr 2024 13:36:27 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository anastasis.

The following commit(s) were added to refs/heads/master by this push:
     new a38e188  fix #8755 in the C version
a38e188 is described below

commit a38e188fef9903cb4ba9350e7c5de089e4fb99c2
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Apr 21 13:36:20 2024 +0200

    fix #8755 in the C version
---
 src/include/anastasis.h                  |  1 -
 src/reducer/anastasis_api_backup_redux.c | 95 ++++++++++++++++++++++++++++++++
 2 files changed, 95 insertions(+), 1 deletion(-)

diff --git a/src/include/anastasis.h b/src/include/anastasis.h
index fd1275c..ea49ee7 100644
--- a/src/include/anastasis.h
+++ b/src/include/anastasis.h
@@ -1071,7 +1071,6 @@ struct ANASTASIS_ShareResult
        */
       enum ANASTASIS_UploadStatus ec;
 
-
     } provider_failure;
 
   } details;
diff --git a/src/reducer/anastasis_api_backup_redux.c 
b/src/reducer/anastasis_api_backup_redux.c
index 70d8baf..6ca6de7 100644
--- a/src/reducer/anastasis_api_backup_redux.c
+++ b/src/reducer/anastasis_api_backup_redux.c
@@ -2954,6 +2954,62 @@ serialize_truth (struct UploadContext *uc)
 }
 
 
+/**
+ * Test if the given @a provider_url is used by any of the
+ * authentication methods and thus the provider should be
+ * considered mandatory for storing the policy.
+ *
+ * @param state state to inspect
+ * @param provider_url provider to test
+ * @return false if the provider can be removed from policy
+ *   upload considerations without causing a problem
+ */
+static bool
+provider_required (const json_t *state,
+                   const char *provider_url)
+{
+  json_t *policies
+    = json_object_get (state,
+                       "policies");
+  size_t pidx;
+  json_t *policy;
+
+  json_array_foreach (policies, pidx, policy)
+  {
+    json_t *methods = json_object_get (policy,
+                                       "methods");
+    size_t midx;
+    json_t *method;
+
+    json_array_foreach (methods, midx, method)
+    {
+      const char *provider
+        = json_string_value (json_object_get (method,
+                                              "provider"));
+
+      if (NULL == provider)
+      {
+        GNUNET_break (0);
+        continue;
+      }
+      if (0 == strcmp (provider,
+                       provider_url))
+        return true;
+    }
+  }
+  return false;
+}
+
+
+/**
+ * All truth uploads are done, begin with uploading the policy.
+ *
+ * @param[in,out] uc context for the operation
+ */
+static void
+share_secret (struct UploadContext *uc);
+
+
 /**
  * Function called with the results of a #ANASTASIS_secret_share().
  *
@@ -3080,6 +3136,45 @@ secret_share_result_cb (void *cls,
     {
       json_t *details;
 
+      if (! provider_required (uc->state,
+                               sr->details.provider_failure.provider_url))
+      {
+        /* try again without that provider */
+        json_t *provider;
+        json_t *providers;
+        size_t idx;
+
+        provider
+          = json_object_get (
+              json_object_get (uc->state,
+                               "authentication_providers"),
+              sr->details.provider_failure.provider_url);
+        GNUNET_break (0 ==
+                      json_object_set_new (provider,
+                                           "status",
+                                           json_string ("disabled")));
+        providers
+          = json_object_get (uc->state,
+                             "policy_providers");
+        json_array_foreach (providers, idx, provider)
+        {
+          const char *url
+            = json_string_value (json_object_get (provider,
+                                                  "provider_url"));
+
+          if ( (NULL != url) &&
+               (0 == strcmp (sr->details.provider_failure.provider_url,
+                             url)) )
+          {
+            GNUNET_break (0 ==
+                          json_array_remove (providers,
+                                             idx));
+            break;
+          }
+        }
+        share_secret (uc);
+        return;
+      }
       details = GNUNET_JSON_PACK (
         GNUNET_JSON_pack_uint64 ("http_status",
                                  sr->details.provider_failure.http_status),

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]