]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: report svc params as a json object
authorRonan Pigott <ronan@rjp.ie>
Wed, 17 Jul 2024 23:30:19 +0000 (16:30 -0700)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 24 Jul 2024 07:18:47 +0000 (08:18 +0100)
This representation is significantly more useful. The previous array
format omitted the svc param key, which is not very useful.

src/resolve/resolved-dns-rr.c
src/shared/varlink-io.systemd.Resolve.c

index e9d667f7d5bb5ea53f37481d27c0c870689a0957..d04af90cbcd36eb1ea39fac4daf34062976ac9e6 100644 (file)
@@ -2224,29 +2224,24 @@ finalize:
 }
 
 static int svc_params_to_json(DnsSvcParam *params, sd_json_variant **ret) {
-        sd_json_variant **elements = NULL;
-        size_t n = 0;
+        _cleanup_(sd_json_variant_unrefp) sd_json_variant *w = NULL;
         int r;
 
         assert(ret);
 
         LIST_FOREACH(params, i, params) {
-                if (!GREEDY_REALLOC(elements, n + 1)) {
-                        r = -ENOMEM;
-                        goto finalize;
-                }
-
-                r = sd_json_variant_new_base64(elements + n, i->value, i->length);
+                _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
+                r = sd_json_variant_new_base64(&v, i->value, i->length);
                 if (r < 0)
-                        goto finalize;
+                        return r;
 
-                n++;
+                r = sd_json_variant_set_field(&w, FORMAT_DNS_SVC_PARAM_KEY(i->key), v);
+                if (r < 0)
+                        return r;
         }
 
-        r = sd_json_variant_new_array(ret, elements, n);
-finalize:
-        sd_json_variant_unref_many(elements, n);
-        return r;
+        *ret = TAKE_PTR(w);
+        return 0;
 }
 
 int dns_resource_record_to_json(DnsResourceRecord *rr, sd_json_variant **ret) {
@@ -2436,7 +2431,7 @@ int dns_resource_record_to_json(DnsResourceRecord *rr, sd_json_variant **ret) {
                                 SD_JSON_BUILD_PAIR("key", SD_JSON_BUILD_VARIANT(k)),
                                 SD_JSON_BUILD_PAIR("priority", SD_JSON_BUILD_UNSIGNED(rr->svcb.priority)),
                                 SD_JSON_BUILD_PAIR("target", SD_JSON_BUILD_STRING(rr->svcb.target_name)),
-                                SD_JSON_BUILD_PAIR("params", SD_JSON_BUILD_VARIANT(p)));
+                                SD_JSON_BUILD_PAIR("svcparams", SD_JSON_BUILD_VARIANT(p)));
         }
 
         case DNS_TYPE_CAA:
index 83c68321c41a2d792184c5ad249f31bf386ee7d4..0515b1ae3d947af164701460de4c2e895aa2178d 100644 (file)
@@ -61,7 +61,9 @@ SD_VARLINK_DEFINE_STRUCT_TYPE(
                 SD_VARLINK_DEFINE_FIELD(tag, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
                 SD_VARLINK_DEFINE_FIELD(value, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
                 SD_VARLINK_DEFINE_FIELD(target, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
-                SD_VARLINK_DEFINE_FIELD(params, SD_VARLINK_STRING, SD_VARLINK_NULLABLE|SD_VARLINK_ARRAY),
+                /* This field is retired */
+                /* SD_VARLINK_DEFINE_FIELD(params, SD_VARLINK_STRING, SD_VARLINK_NULLABLE|SD_VARLINK_ARRAY), */
+                SD_VARLINK_DEFINE_FIELD(svcparams, SD_VARLINK_OBJECT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_DEFINE_FIELD(order, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_DEFINE_FIELD(preference, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_DEFINE_FIELD(naptrFlags, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),