]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
dns-rr: fix SOA JSON fields
authordongshengyuan <545258830@qq.com>
Wed, 8 Jul 2026 06:03:15 +0000 (14:03 +0800)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 8 Jul 2026 12:03:23 +0000 (13:03 +0100)
Signed-off-by: dongshengyuan <dongshengyuan@uniontech.com>
src/resolve/test-dns-rr.c
src/shared/dns-rr.c
src/shared/varlink-io.systemd.Resolve.c

index 2ded6b0ab96f9871ab0ae1a5f0f5581b284c9636..d77ae0639d824a5393176e35f419e133915614ca 100644 (file)
@@ -2240,6 +2240,30 @@ TEST(dns_resource_record_to_string_soa) {
         ASSERT_STREQ(str, "www.example.com IN SOA ns0.example.com ns0.example.com 1111111111 86400 7200 4000000 3600");
 }
 
+TEST(dns_resource_record_to_json_soa) {
+        _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
+        _cleanup_(sd_json_variant_unrefp) sd_json_variant *j = NULL;
+
+        rr = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_SOA, "www.example.com");
+        ASSERT_NOT_NULL(rr);
+        rr->soa.mname = strdup("ns0.example.com");
+        rr->soa.rname = strdup("hostmaster.example.com");
+        rr->soa.serial = 1111111111;
+        rr->soa.refresh = 86400;
+        rr->soa.retry = 7200;
+        rr->soa.expire = 4000000;
+        rr->soa.minimum = 3600;
+
+        ASSERT_OK(dns_resource_record_to_json(rr, &j));
+        ASSERT_STREQ(sd_json_variant_string(sd_json_variant_by_key(j, "mname")), "ns0.example.com");
+        ASSERT_STREQ(sd_json_variant_string(sd_json_variant_by_key(j, "rname")), "hostmaster.example.com");
+        ASSERT_EQ(sd_json_variant_unsigned(sd_json_variant_by_key(j, "serial")), UINT64_C(1111111111));
+        ASSERT_EQ(sd_json_variant_unsigned(sd_json_variant_by_key(j, "refresh")), UINT64_C(86400));
+        ASSERT_EQ(sd_json_variant_unsigned(sd_json_variant_by_key(j, "retry")), UINT64_C(7200));
+        ASSERT_EQ(sd_json_variant_unsigned(sd_json_variant_by_key(j, "expire")), UINT64_C(4000000));
+        ASSERT_EQ(sd_json_variant_unsigned(sd_json_variant_by_key(j, "minimum")), UINT64_C(3600));
+}
+
 TEST(dns_resource_record_to_string_ptr) {
         _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
         const char *str;
index eb91910e835f819e706578266d39b68a4afef940..d594166290643e0f8bed5876bc5daea1fd1d7278 100644 (file)
@@ -2374,7 +2374,8 @@ int dns_resource_record_to_json(DnsResourceRecord *rr, sd_json_variant **ret) {
                                 SD_JSON_BUILD_PAIR_STRING("rname", rr->soa.rname),
                                 SD_JSON_BUILD_PAIR_UNSIGNED("serial", rr->soa.serial),
                                 SD_JSON_BUILD_PAIR_UNSIGNED("refresh", rr->soa.refresh),
-                                SD_JSON_BUILD_PAIR_UNSIGNED("expire", rr->soa.retry),
+                                SD_JSON_BUILD_PAIR_UNSIGNED("retry", rr->soa.retry),
+                                SD_JSON_BUILD_PAIR_UNSIGNED("expire", rr->soa.expire),
                                 SD_JSON_BUILD_PAIR_UNSIGNED("minimum", rr->soa.minimum));
 
         case DNS_TYPE_MX:
index 6c4ef094ca7bcc6206d58e97f6916a504b59dcc2..a5fbae4a977f3b900f323ad5ef89adceafe1e628 100644 (file)
@@ -67,6 +67,7 @@ SD_VARLINK_DEFINE_STRUCT_TYPE(
                 SD_VARLINK_DEFINE_FIELD(rname, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
                 SD_VARLINK_DEFINE_FIELD(serial, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_DEFINE_FIELD(refresh, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
+                SD_VARLINK_DEFINE_FIELD(retry, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_DEFINE_FIELD(expire, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_DEFINE_FIELD(minimum, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_DEFINE_FIELD(exchange, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),