From e4ed507d12a95c4d1791431180e2a7cdc0a562be Mon Sep 17 00:00:00 2001 From: dongshengyuan <545258830@qq.com> Date: Wed, 8 Jul 2026 14:03:15 +0800 Subject: [PATCH] dns-rr: fix SOA JSON fields Signed-off-by: dongshengyuan (cherry picked from commit 34a222334432c1bafc269b600a8298697a8d7712) (cherry picked from commit dd01b5bd605ed5d86ac245db41d7e86222193407) --- src/resolve/test-dns-rr.c | 24 ++++++++++++++++++++++++ src/shared/dns-rr.c | 3 ++- src/shared/varlink-io.systemd.Resolve.c | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/resolve/test-dns-rr.c b/src/resolve/test-dns-rr.c index e45f1d34238..19d4fe6f8d8 100644 --- a/src/resolve/test-dns-rr.c +++ b/src/resolve/test-dns-rr.c @@ -2222,6 +2222,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; diff --git a/src/shared/dns-rr.c b/src/shared/dns-rr.c index 58d26e3609b..38ccc2843ba 100644 --- a/src/shared/dns-rr.c +++ b/src/shared/dns-rr.c @@ -2375,7 +2375,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: diff --git a/src/shared/varlink-io.systemd.Resolve.c b/src/shared/varlink-io.systemd.Resolve.c index e8de8b39f81..0c9f5fe9798 100644 --- a/src/shared/varlink-io.systemd.Resolve.c +++ b/src/shared/varlink-io.systemd.Resolve.c @@ -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),