[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnunet] branch master updated: NAMESTORE: Generally handle maintenance records and allow their management,
gnunet <=