From d2ad5dc073aaacaf22b117f16106282a73586803 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Tue, 5 Oct 2021 23:38:20 +0100 Subject: [PATCH] Fix truncation logic in make_local_answer() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add_resource_record() returns 1 if the record was added. Only increment anscount of so. Thanks to Petr Menšík for spotting the problem. --- src/domain-match.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/domain-match.c b/src/domain-match.c index 3f1cc74..d280e83 100644 --- a/src/domain-match.c +++ b/src/domain-match.c @@ -418,9 +418,8 @@ size_t make_local_answer(int flags, int gotname, size_t size, struct dns_header else addr.addr4 = srv->addr; - header->ancount = htons(ntohs(header->ancount) + 1); - if (!add_resource_record(header, limit, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_A, C_IN, "4", &addr)) - return 0; + if (add_resource_record(header, limit, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_A, C_IN, "4", &addr)) + header->ancount = htons(ntohs(header->ancount) + 1); log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV6, name, (union all_addr *)&addr, NULL, 0); } @@ -434,8 +433,8 @@ size_t make_local_answer(int flags, int gotname, size_t size, struct dns_header else addr.addr6 = srv->addr; - header->ancount = htons(ntohs(header->ancount) + 1); - add_resource_record(header, limit, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_AAAA, C_IN, "6", &addr); + if (add_resource_record(header, limit, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_AAAA, C_IN, "6", &addr)) + header->ancount = htons(ntohs(header->ancount) + 1); log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV4, name, (union all_addr *)&addr, NULL, 0); }