gnunet-svn
[Top][All Lists]
Advanced

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

[gnunet] branch master updated: NAMESTORE: Generally handle maintenance


From: gnunet
Subject: [gnunet] branch master updated: NAMESTORE: Generally handle maintenance records and allow their management
Date: Wed, 06 Dec 2023 12:41:29 +0100

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 a435fd043 NAMESTORE: Generally handle maintenance records and allow 
their management
a435fd043 is described below

commit a435fd043052c464f3970cb061529593f5e09a1e
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Wed Dec 6 12:40:38 2023 +0100

    NAMESTORE: Generally handle maintenance records and allow their management
    
    NEWS: Added record flag for maintenance records
---
 src/cli/namestore/gnunet-namestore.c             | 94 +++++++++++++++---------
 src/include/gnunet_gnsrecord_lib.h               |  4 +
 src/lib/gnsrecord/gnsrecord_misc.c               |  7 +-
 src/lib/gnsrecord/json_gnsrecord.c               | 44 ++++++-----
 src/service/namestore/gnunet-service-namestore.c |  4 +-
 5 files changed, 93 insertions(+), 60 deletions(-)

diff --git a/src/cli/namestore/gnunet-namestore.c 
b/src/cli/namestore/gnunet-namestore.c
index ec834cc01..6c0890a43 100644
--- a/src/cli/namestore/gnunet-namestore.c
+++ b/src/cli/namestore/gnunet-namestore.c
@@ -208,6 +208,11 @@ static int is_public;
  */
 static int is_shadow;
 
+/**
+ * Is record a maintenance record (#GNUNET_GNSRECORD_RF_MAINTENANCE)
+ */
+static int is_maintenance;
+
 /**
  * Filter private records
  */
@@ -585,6 +590,7 @@ reset_handles (void)
   list = 0;
   is_public = 0;
   is_shadow = 0;
+  is_maintenance = 0;
   purge_zone = 0;
 }
 
@@ -908,13 +914,16 @@ display_record (const struct GNUNET_CRYPTO_PrivateKey 
*zone_key,
                s);
     else
       fprintf (stdout,
-               "\t%s: %s (%s)\t%s\t%s\n",
+               "\t%s: %s (%s)\t%s\t%s\t%s\n",
                typestr,
                s,
                ets,
                (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE)) ? "PRIVATE"
              : "PUBLIC",
                (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_SHADOW)) ? "SHADOW"
+               : "",
+               (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_MAINTENANCE)) ?
+               "MAINTENANCE"
              : "");
     GNUNET_free (s);
   }
@@ -1145,6 +1154,8 @@ get_existing_record (void *cls,
   rde->record_type = type;
   if (1 == is_shadow)
     rde->flags |= GNUNET_GNSRECORD_RF_SHADOW;
+  if (1 == is_maintenance)
+    rde->flags |= GNUNET_GNSRECORD_RF_MAINTENANCE;
   if (1 != is_public)
     rde->flags |= GNUNET_GNSRECORD_RF_PRIVATE;
   rde->expiration_time = etime;
@@ -1259,12 +1270,12 @@ del_monitor (void *cls,
   {
     /* delete everything */
     del_qe = GNUNET_NAMESTORE_record_set_store (ns,
-                                             &zone_pkey,
-                                             name,
-                                             0,
-                                             NULL,
-                                             &del_continuation,
-                                             NULL);
+                                                &zone_pkey,
+                                                name,
+                                                0,
+                                                NULL,
+                                                &del_continuation,
+                                                NULL);
     return;
   }
   rd_left = 0;
@@ -1299,12 +1310,12 @@ del_monitor (void *cls,
   }
   /* delete everything but what we copied to 'rdx' */
   del_qe = GNUNET_NAMESTORE_record_set_store (ns,
-                                           &zone_pkey,
-                                           name,
-                                           rd_left,
-                                           rdx,
-                                           &del_continuation,
-                                           NULL);
+                                              &zone_pkey,
+                                              name,
+                                              rd_left,
+                                              rdx,
+                                              &del_continuation,
+                                              NULL);
 }
 
 
@@ -1387,12 +1398,12 @@ run_with_zone_pkey (const struct 
GNUNET_CONFIGURATION_Handle *cfg)
       rd_count++;
     }
     set_qe = GNUNET_NAMESTORE_record_set_store (ns,
-                                             &zone_pkey,
-                                             name,
-                                             rd_count,
-                                             rd,
-                                             &replace_cont,
-                                             NULL);
+                                                &zone_pkey,
+                                                name,
+                                                rd_count,
+                                                rd,
+                                                &replace_cont,
+                                                NULL);
     GNUNET_free (rd);
     return;
   }
@@ -1462,7 +1473,8 @@ run_with_zone_pkey (const struct 
GNUNET_CONFIGURATION_Handle *cfg)
         (GNUNET_DNSPARSER_TYPE_OPENPGPKEY == type))
     {
       fprintf (stderr,
-               _ ("For DNS record types `SRV', `TLSA', `SMIMEA' and 
`OPENPGPKEY'"));
+               _ (
+                 "For DNS record types `SRV', `TLSA', `SMIMEA' and 
`OPENPGPKEY'"));
       fprintf (stderr, ", please use a `BOX' record instead\n");
       ret = 1;
       finish_command ();
@@ -1536,13 +1548,14 @@ run_with_zone_pkey (const struct 
GNUNET_CONFIGURATION_Handle *cfg)
       finish_command ();
       return;
     }
-    del_qe = GNUNET_NAMESTORE_records_lookup (ns,
-                                              &zone_pkey,
-                                              name,
-                                              &del_lookup_error_cb,
-                                              NULL,
-                                              &del_monitor,
-                                              NULL);
+    del_qe = GNUNET_NAMESTORE_records_lookup2 (ns,
+                                               &zone_pkey,
+                                               name,
+                                               &del_lookup_error_cb,
+                                               NULL,
+                                               &del_monitor,
+                                               NULL,
+                                               filter_flags);
   }
   if (purge_orphaned)
   {
@@ -1701,13 +1714,15 @@ run_with_zone_pkey (const struct 
GNUNET_CONFIGURATION_Handle *cfg)
       rd.flags |= GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
     if (1 == is_shadow)
       rd.flags |= GNUNET_GNSRECORD_RF_SHADOW;
+    if (1 == is_maintenance)
+      rd.flags |= GNUNET_GNSRECORD_RF_MAINTENANCE;
     add_qe_uri = GNUNET_NAMESTORE_record_set_store (ns,
-                                                 &zone_pkey,
-                                                 sname,
-                                                 1,
-                                                 &rd,
-                                                 &add_continuation,
-                                                 &add_qe_uri);
+                                                    &zone_pkey,
+                                                    sname,
+                                                    1,
+                                                    &rd,
+                                                    &add_continuation,
+                                                    &add_qe_uri);
   }
   if (monitor)
   {
@@ -1806,7 +1821,7 @@ process_command_stdin ()
       if (NULL == tmp)
       {
         fprintf (stderr, "Error parsing name `%s'\n", next_name);
-        GNUNET_SCHEDULER_shutdown();
+        GNUNET_SCHEDULER_shutdown ();
         ret = 1;
         return;
       }
@@ -1852,7 +1867,7 @@ process_command_stdin ()
       fprintf (stderr, "Warning, encountered recordline without zone\n");
     }
   }
-  GNUNET_SCHEDULER_shutdown();
+  GNUNET_SCHEDULER_shutdown ();
   return;
 }
 
@@ -2055,8 +2070,14 @@ main (int argc, char *const *argv)
       's',
       "shadow",
       gettext_noop (
-        "create shadow record (only valid if all other records of the same 
type have expired"),
+        "create shadow record (only valid if all other records of the same 
type have expired)"),
       &is_shadow),
+    GNUNET_GETOPT_option_flag (
+      'M',
+      "maintenance",
+      gettext_noop (
+        "create maintenance record (e.g TOMBSTONEs)"),
+      &is_maintenance),
     GNUNET_GETOPT_option_string ('z',
                                  "zone",
                                  "EGO",
@@ -2071,6 +2092,7 @@ main (int argc, char *const *argv)
 
   is_public = -1;
   is_shadow = -1;
+  is_maintenance = -1;
   GNUNET_log_setup ("gnunet-namestore", "WARNING", NULL);
   if (GNUNET_OK !=
       (lret = GNUNET_PROGRAM_run (argc,
diff --git a/src/include/gnunet_gnsrecord_lib.h 
b/src/include/gnunet_gnsrecord_lib.h
index 3f1830498..813409340 100644
--- a/src/include/gnunet_gnsrecord_lib.h
+++ b/src/include/gnunet_gnsrecord_lib.h
@@ -121,6 +121,10 @@ enum GNUNET_GNSRECORD_Flags
    */
   GNUNET_GNSRECORD_RF_SUPPLEMENTAL = 1 << (15 - 13),
 
+  /**
+   * Maintenance records. E.g. TOMBSTONEs
+   */
+  GNUNET_GNSRECORD_RF_MAINTENANCE = 1 << (15 - 2),
 
   /**
    * This expiration time of the record is a relative time (not an absolute 
time). Used in GNUnet implementation.
diff --git a/src/lib/gnsrecord/gnsrecord_misc.c 
b/src/lib/gnsrecord/gnsrecord_misc.c
index 888295148..0a94e1f78 100644
--- a/src/lib/gnsrecord/gnsrecord_misc.c
+++ b/src/lib/gnsrecord/gnsrecord_misc.c
@@ -258,7 +258,7 @@ GNUNET_GNSRECORD_zkey_to_pkey (const char *zkey,
 {
   if (GNUNET_OK !=
       GNUNET_CRYPTO_public_key_from_string (zkey,
-                                              pkey))
+                                            pkey))
     return GNUNET_SYSERR;
   return GNUNET_OK;
 }
@@ -444,11 +444,10 @@ GNUNET_GNSRECORD_normalize_record_set (const char *label,
                   "Filtering expired record...\n");
       continue;    /* record already expired, skip it */
     }
-    /* Ignore the tombstone unless filter permits explicitly.
+    /* Ignore the maintenance record (e.g. tombstone) unless filter permits 
explicitly.
     * Remember expiration time. */
-    if (GNUNET_GNSRECORD_TYPE_TOMBSTONE == rd[i].record_type)
+    if (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_MAINTENANCE))
     {
-      minimum_expiration.abs_value_us = rd[i].expiration_time;
       if (0 != (filter & GNUNET_GNSRECORD_FILTER_INCLUDE_MAINTENANCE))
       {
         rd_public[rd_count_tmp] = rd[i];
diff --git a/src/lib/gnsrecord/json_gnsrecord.c 
b/src/lib/gnsrecord/json_gnsrecord.c
index cc96e42fb..9a08e0157 100644
--- a/src/lib/gnsrecord/json_gnsrecord.c
+++ b/src/lib/gnsrecord/json_gnsrecord.c
@@ -33,6 +33,7 @@
 #define GNUNET_JSON_GNSRECORD_TYPE "record_type"
 #define GNUNET_JSON_GNSRECORD_RELATIVE_EXPIRATION_TIME "relative_expiration"
 #define GNUNET_JSON_GNSRECORD_ABSOLUTE_EXPIRATION_TIME "absolute_expiration"
+#define GNUNET_JSON_GNSRECORD_FLAG_MAINTENANCE "is_maintenance"
 #define GNUNET_JSON_GNSRECORD_FLAG_PRIVATE "is_private"
 #define GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL "is_supplemental"
 #define GNUNET_JSON_GNSRECORD_FLAG_RELATIVE "is_relative_expiration"
@@ -86,6 +87,7 @@ parse_record (json_t *data, struct GNUNET_GNSRECORD_Data *rd)
   struct GNUNET_TIME_Relative rel_exp;
   const char *value;
   const char *record_type;
+  int maintenance;
   int private;
   int supplemental;
   int is_rel_exp;
@@ -104,6 +106,8 @@ parse_record (json_t *data, struct GNUNET_GNSRECORD_Data 
*rd)
                                  &record_type,
                                  
GNUNET_JSON_GNSRECORD_RELATIVE_EXPIRATION_TIME,
                                  &rel_exp.rel_value_us,
+                                 GNUNET_JSON_GNSRECORD_FLAG_MAINTENANCE,
+                                 &maintenance,
                                  GNUNET_JSON_GNSRECORD_FLAG_PRIVATE,
                                  &private,
                                  GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL,
@@ -127,6 +131,8 @@ parse_record (json_t *data, struct GNUNET_GNSRECORD_Data 
*rd)
                                    &record_type,
                                    
GNUNET_JSON_GNSRECORD_ABSOLUTE_EXPIRATION_TIME,
                                    &abs_exp.abs_value_us,
+                                   GNUNET_JSON_GNSRECORD_FLAG_MAINTENANCE,
+                                   &maintenance,
                                    GNUNET_JSON_GNSRECORD_FLAG_PRIVATE,
                                    &private,
                                    GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL,
@@ -165,6 +171,8 @@ parse_record (json_t *data, struct GNUNET_GNSRECORD_Data 
*rd)
 
   if (is_rel_exp)
     rd->flags |= GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
+  if (1 == maintenance)
+    rd->flags |= GNUNET_GNSRECORD_RF_MAINTENANCE;
   if (1 == private)
     rd->flags |= GNUNET_GNSRECORD_RF_PRIVATE;
   if (1 == supplemental)
@@ -340,24 +348,24 @@ GNUNET_GNSRECORD_JSON_from_gnsrecord (const char*rname,
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Packing %s %s %" PRIu64 " %d\n",
                 value_str, record_type_str, rd[i].expiration_time, 
rd[i].flags);
-    record = json_pack ("{s:s,s:s,s:I,s:b,s:b,s:b,s:b}",
-                        GNUNET_JSON_GNSRECORD_VALUE,
-                        value_str,
-                        GNUNET_JSON_GNSRECORD_TYPE,
-                        record_type_str,
-                        (rd[i].flags
-                         & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION) ?
-                        GNUNET_JSON_GNSRECORD_RELATIVE_EXPIRATION_TIME :
-                        GNUNET_JSON_GNSRECORD_ABSOLUTE_EXPIRATION_TIME,
-                        rd[i].expiration_time,
-                        GNUNET_JSON_GNSRECORD_FLAG_PRIVATE,
-                        rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE,
-                        GNUNET_JSON_GNSRECORD_FLAG_RELATIVE,
-                        rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION,
-                        GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL,
-                        rd[i].flags & GNUNET_GNSRECORD_RF_SUPPLEMENTAL,
-                        GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL,
-                        rd[i].flags & GNUNET_GNSRECORD_RF_SHADOW);
+    record = json_pack (
+      "{s:s,s:s,s:I,s:b,s:b,s:b,s:b, s:b}",
+      GNUNET_JSON_GNSRECORD_VALUE, value_str,
+      GNUNET_JSON_GNSRECORD_TYPE, record_type_str,
+      (rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION)
+            ? GNUNET_JSON_GNSRECORD_RELATIVE_EXPIRATION_TIME
+            : GNUNET_JSON_GNSRECORD_ABSOLUTE_EXPIRATION_TIME,
+      rd[i].expiration_time,
+      GNUNET_JSON_GNSRECORD_FLAG_MAINTENANCE,
+      rd[i].flags & GNUNET_GNSRECORD_RF_MAINTENANCE,
+      GNUNET_JSON_GNSRECORD_FLAG_PRIVATE,
+      rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE,
+      GNUNET_JSON_GNSRECORD_FLAG_RELATIVE,
+      rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION,
+      GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL,
+      rd[i].flags & GNUNET_GNSRECORD_RF_SUPPLEMENTAL,
+      GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL,
+      rd[i].flags & GNUNET_GNSRECORD_RF_SHADOW);
     GNUNET_free (value_str);
     if (NULL == record)
     {
diff --git a/src/service/namestore/gnunet-service-namestore.c 
b/src/service/namestore/gnunet-service-namestore.c
index f375828dc..b159ba769 100644
--- a/src/service/namestore/gnunet-service-namestore.c
+++ b/src/service/namestore/gnunet-service-namestore.c
@@ -1832,7 +1832,7 @@ store_record_set (struct NamestoreClient *nc,
                                                  rd_nf,
                                                  &rd_nf_count,
                                                  &new_block_exp,
-                                                 GNUNET_GNSRECORD_FILTER_NONE,
+                                                 
GNUNET_GNSRECORD_FILTER_INCLUDE_MAINTENANCE,
                                                  &emsg))
       {
         GNUNET_free (conv_name);
@@ -1859,7 +1859,7 @@ store_record_set (struct NamestoreClient *nc,
           lctx.exp.abs_value_us;
         rd_nf[rd_nf_count].data = NULL;
         rd_nf[rd_nf_count].data_size = 0;
-        rd_nf[rd_nf_count].flags = GNUNET_GNSRECORD_RF_PRIVATE;
+        rd_nf[rd_nf_count].flags = GNUNET_GNSRECORD_RF_PRIVATE | 
GNUNET_GNSRECORD_RF_MAINTENANCE;
         rd_nf_count++;
       }
       if ((0 == strcmp (GNUNET_GNS_EMPTY_LABEL_AT, conv_name)) &&

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