gnunet-svn
[Top][All Lists]
Advanced

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

[gnunet] branch master updated: GNS: Add helper function to parse zTLDs


From: gnunet
Subject: [gnunet] branch master updated: GNS: Add helper function to parse zTLDs
Date: Tue, 30 Apr 2024 11:28:13 +0200

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

martin-schanzenbach pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new b54a765c9 GNS: Add helper function to parse zTLDs
b54a765c9 is described below

commit b54a765c9e8fe780689c4b46eed0434fcae4b221
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Tue Apr 30 11:27:37 2024 +0200

    GNS: Add helper function to parse zTLDs
    
    NEWS: Added GNUNET_GNS_parse_ztld helper API
---
 src/include/gnunet_gns_service.h                   | 10 +++++++
 src/service/gns/gns_tld_api.c                      | 32 +++++++++++-----------
 .../reclaim/gnunet-service-reclaim_tickets.c       | 27 ++----------------
 src/service/rest/reclaim_plugin.c                  |  8 +-----
 4 files changed, 30 insertions(+), 47 deletions(-)

diff --git a/src/include/gnunet_gns_service.h b/src/include/gnunet_gns_service.h
index 1f19e58ac..e7ed2d3c2 100644
--- a/src/include/gnunet_gns_service.h
+++ b/src/include/gnunet_gns_service.h
@@ -227,6 +227,16 @@ GNUNET_GNS_lookup_with_tld (struct GNUNET_GNS_Handle 
*handle,
 void *
 GNUNET_GNS_lookup_with_tld_cancel (struct GNUNET_GNS_LookupWithTldRequest 
*ltr);
 
+/**
+ * Try to parse the zTLD into a public key.
+ *
+ * @param[in] name the name to parse
+ * @param[out] ztld_key the identity key (must be allocated by caller). Only 
set of #GNUNET_OK is returned.
+ * @return GNUNET_OK on success.
+ */
+enum GNUNET_GenericReturnValue
+GNUNET_GNS_parse_ztld (const char *name,
+                       struct GNUNET_CRYPTO_PublicKey *ztld_key);
 
 #if 0 /* keep Emacsens' auto-indent happy */
 {
diff --git a/src/service/gns/gns_tld_api.c b/src/service/gns/gns_tld_api.c
index 1ea87fd97..63b5ac552 100644
--- a/src/service/gns/gns_tld_api.c
+++ b/src/service/gns/gns_tld_api.c
@@ -23,6 +23,7 @@
  * @author Martin Schanzenbach
  * @author Christian Grothoff
  */
+#include "gnunet_common.h"
 #include "platform.h"
 #include "gnunet_util_lib.h"
 #include "gnunet_constants.h"
@@ -223,19 +224,18 @@ identity_zone_cb (void *cls,
 }
 
 
-/**
- * Perform an asynchronous lookup operation on the GNS,
- * determining the zone using the TLD of the given name
- * and the current configuration to resolve TLDs to zones.
- *
- * @param handle handle to the GNS service
- * @param name the name to look up, including TLD (in UTF-8 encoding)
- * @param type the record type to look up
- * @param options local options for the lookup
- * @param proc processor to call on result
- * @param proc_cls closure for @a proc
- * @return handle to the get request, NULL on error (e.g. bad configuration)
- */
+enum GNUNET_GenericReturnValue
+GNUNET_GNS_parse_ztld (const char *name,
+                       struct GNUNET_CRYPTO_PublicKey *ztld_key)
+{
+  const char *tld;
+
+  /* start with trivial case: TLD is zkey */
+  tld = get_tld (name);
+  return GNUNET_CRYPTO_public_key_from_string (tld, ztld_key);
+}
+
+
 struct GNUNET_GNS_LookupWithTldRequest *
 GNUNET_GNS_lookup_with_tld (struct GNUNET_GNS_Handle *handle,
                             const char *name,
@@ -258,10 +258,10 @@ GNUNET_GNS_lookup_with_tld (struct GNUNET_GNS_Handle 
*handle,
   ltr->lookup_proc = proc;
   ltr->lookup_proc_cls = proc_cls;
   /* start with trivial case: TLD is zkey */
-  tld = get_tld (ltr->name);
   if (GNUNET_OK ==
-      GNUNET_CRYPTO_public_key_from_string (tld, &pkey))
+      GNUNET_GNS_parse_ztld (ltr->name, &pkey))
   {
+    tld = get_tld (ltr->name);
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "`%s' seems to be a valid zone key\n", tld);
     eat_tld (ltr->name, tld);
@@ -283,7 +283,7 @@ GNUNET_GNS_lookup_with_tld (struct GNUNET_GNS_Handle 
*handle,
     {
       if (GNUNET_OK !=
           GNUNET_CRYPTO_public_key_from_string (zonestr,
-                                                  &pkey))
+                                                &pkey))
       {
         GNUNET_log_config_invalid (
           GNUNET_ERROR_TYPE_ERROR,
diff --git a/src/service/reclaim/gnunet-service-reclaim_tickets.c 
b/src/service/reclaim/gnunet-service-reclaim_tickets.c
index fcedc07ff..6fe77cdb3 100644
--- a/src/service/reclaim/gnunet-service-reclaim_tickets.c
+++ b/src/service/reclaim/gnunet-service-reclaim_tickets.c
@@ -26,6 +26,7 @@
  */
 #include "gnunet-service-reclaim_tickets.h"
 #include "gnunet_common.h"
+#include "gnunet_gns_service.h"
 #include "gnunet_reclaim_service.h"
 #include <string.h>
 
@@ -906,26 +907,6 @@ rvk_attrs_err_cb (void *cls)
 }
 
 
-static enum GNUNET_GenericReturnValue
-get_iss_from_ticket (const struct GNUNET_RECLAIM_Ticket *ticket,
-                     struct GNUNET_CRYPTO_PublicKey *issuer)
-{
-  char *label;
-  char *key;
-  char *tmp;
-  int ret;
-
-  tmp = GNUNET_strdup (ticket->gns_name);
-  label = strtok (tmp, ".");
-  GNUNET_assert (NULL != label);
-  key = strtok (NULL, ".");
-  GNUNET_assert (NULL != key);
-  ret = GNUNET_CRYPTO_public_key_from_string (key, issuer);
-  GNUNET_free (tmp);
-  return ret;
-}
-
-
 /**
  * Revoke a ticket.
  * We start by looking up attribute references in order
@@ -1066,7 +1047,7 @@ process_parallel_lookup_result (void *cls,
   if (NULL != cth->parallel_lookups_head)
     return; // Wait for more
   /* Else we are done */
-  get_iss_from_ticket (&cth->ticket, &iss);
+  GNUNET_assert (GNUNET_OK == GNUNET_GNS_parse_ztld (cth->ticket.gns_name, 
&iss));
   cth->cb (cth->cb_cls, &iss,
            cth->attrs, cth->presentations, GNUNET_OK, NULL);
   cleanup_cth (cth);
@@ -1171,6 +1152,7 @@ lookup_authz_cb (void *cls,
                   "Ignoring unknown record type %d", rd[i].record_type);
     }
   }
+  GNUNET_assert (GNUNET_OK == GNUNET_GNS_parse_ztld (cth->ticket.gns_name, 
&iss));
   if (NULL == rp_uri)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
@@ -1178,7 +1160,6 @@ lookup_authz_cb (void *cls,
     /**
      * Return error
      */
-    get_iss_from_ticket (&cth->ticket, &iss);
     cth->cb (cth->cb_cls, &iss,
              cth->attrs, NULL, GNUNET_NO, NULL);
     cleanup_cth (cth);
@@ -1192,7 +1173,6 @@ lookup_authz_cb (void *cls,
     /**
      * Return error
      */
-    get_iss_from_ticket (&cth->ticket, &iss);
     cth->cb (cth->cb_cls, &iss,
              cth->attrs, NULL, GNUNET_NO, NULL);
     cleanup_cth (cth);
@@ -1213,7 +1193,6 @@ lookup_authz_cb (void *cls,
   /**
    * No references found, return empty attribute list
    */
-  get_iss_from_ticket (&cth->ticket, &iss);
   cth->cb (cth->cb_cls, &iss,
            cth->attrs, NULL, GNUNET_OK, NULL);
   cleanup_cth (cth);
diff --git a/src/service/rest/reclaim_plugin.c 
b/src/service/rest/reclaim_plugin.c
index 31a795dc8..adddab5c6 100644
--- a/src/service/rest/reclaim_plugin.c
+++ b/src/service/rest/reclaim_plugin.c
@@ -1119,8 +1119,6 @@ revoke_ticket_cont (struct GNUNET_REST_RequestHandle 
*con_handle,
   struct GNUNET_CRYPTO_PublicKey iss;
   struct GNUNET_CRYPTO_PublicKey tmp_pk;
   char term_data[handle->rest_handle->data_size + 1];
-  char *tmp;
-  char *key;
   json_t *data_json;
   json_error_t err;
   struct GNUNET_JSON_Specification tktspec[] =
@@ -1157,10 +1155,7 @@ revoke_ticket_cont (struct GNUNET_REST_RequestHandle 
*con_handle,
     return;
   }
 
-  tmp = GNUNET_strdup (ticket->gns_name);
-  GNUNET_assert (NULL != strtok (tmp, "."));
-  key = strtok (NULL, ".");
-  GNUNET_CRYPTO_public_key_from_string (key, &iss);
+  GNUNET_assert (GNUNET_OK == GNUNET_GNS_parse_ztld (ticket->gns_name, &iss));
 
   for (ego_entry = ego_head; NULL != ego_entry;
        ego_entry = ego_entry->next)
@@ -1171,7 +1166,6 @@ revoke_ticket_cont (struct GNUNET_REST_RequestHandle 
*con_handle,
                      sizeof(struct GNUNET_CRYPTO_PublicKey)))
       break;
   }
-  GNUNET_free (tmp);
   if (NULL == ego_entry)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Identity unknown\n");

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