So I've looked into the issue and fixed it.

The shadow flag wasn't parsed properly from JSON and it overwrote the "is_supplemental" flag when converting a record to JSON.

As for the rewrite, I don't have that much time on my hand right now.

kind regards,
fence


On 13.08.2024 13:24, Schanzenbach, Martin wrote:
This may be a bug/oversight.
The reason may be that shadow records must be ignored by the resolver and are never returned as part of a resolution process.

If you have any use or require a symmetric API, then this can be changed.
Feel free to modify the code accordingly.

Note that the REST service is in dire need of a rewrite (see https:// www.gnunet.org/en/gsoc.html "Pluggable REST service components").
So, if you have some spare time you can check that out as well :)

BR
Martin

On 12.08.24 17:10, fence wrote:
Hewo,

Is there a reason why GNUNET_JSON_GNSRECORD_FLAG_SHADOW is only deserialised but never serialised?

Is that a bug or was the functionality removed and still being parsed in case an old client still sending the flag?

kind regards,
fence


From 70f7a4f76907b1fe463a33e6d005fb6c80df7ad7 Mon Sep 17 00:00:00 2001
From: fence <fe...@desu-mail.moe>
Date: Wed, 14 Aug 2024 20:20:40 +0200
Subject: [PATCH] lib: fix gnsrecord json serialization

---
 src/lib/gnsrecord/json_gnsrecord.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/lib/gnsrecord/json_gnsrecord.c 
b/src/lib/gnsrecord/json_gnsrecord.c
index 9a08e0157..f83c6e17b 100644
--- a/src/lib/gnsrecord/json_gnsrecord.c
+++ b/src/lib/gnsrecord/json_gnsrecord.c
@@ -99,7 +99,7 @@ parse_record (json_t *data, struct GNUNET_GNSRECORD_Data *rd)
   unpack_state = json_unpack_ex (data,
                                  &err,
                                  0,
-                                 "{s:s, s:s, s:I, s:b, s:b, s:b, s:b}",
+                                 "{s:s, s:s, s:I, s:b, s:b, s:b, s:b, s:b}",
                                  GNUNET_JSON_GNSRECORD_VALUE,
                                  &value,
                                  GNUNET_JSON_GNSRECORD_TYPE,
@@ -124,7 +124,7 @@ parse_record (json_t *data, struct GNUNET_GNSRECORD_Data 
*rd)
     unpack_state = json_unpack_ex (data,
                                    &err,
                                    0,
-                                   "{s:s, s:s, s:I, s:b, s:b, s:b, s:b}",
+                                   "{s:s, s:s, s:I, s:b, s:b, s:b, s:b, s:b}",
                                    GNUNET_JSON_GNSRECORD_VALUE,
                                    &value,
                                    GNUNET_JSON_GNSRECORD_TYPE,
@@ -349,7 +349,7 @@ GNUNET_GNSRECORD_JSON_from_gnsrecord (const char*rname,
                 "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, s:b}",
+      "{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)
@@ -364,7 +364,7 @@ GNUNET_GNSRECORD_JSON_from_gnsrecord (const char*rname,
       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,
+      GNUNET_JSON_GNSRECORD_FLAG_SHADOW,
       rd[i].flags & GNUNET_GNSRECORD_RF_SHADOW);
     GNUNET_free (value_str);
     if (NULL == record)
-- 
2.39.3 (Apple Git-145)

Reply via email to