From 79e25e192c84838739b37da37f21955bc0d6a563 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 Mar 2024 11:25:29 +0100 Subject: [PATCH] - Fix that rpz CNAME content is limited to the max number of cnames. --- doc/Changelog | 3 +++ iterator/iterator.c | 12 +++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 69d80fda3..6f413e7a0 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +18 March 2024: Wouter + - Fix that rpz CNAME content is limited to the max number of cnames. + 15 March 2024: Yorgos - Merge #1030: Persist the openssl and expat directories for repeated Windows builds. diff --git a/iterator/iterator.c b/iterator/iterator.c index e35d8e34a..ad67a3241 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -1453,10 +1453,12 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, /* apply rpz qname triggers after cname */ struct dns_msg* forged_response = rpz_callback_from_iterator_cname(qstate, iq); + int count = 0; while(forged_response && reply_find_rrset_section_an( forged_response->rep, iq->qchase.qname, iq->qchase.qname_len, LDNS_RR_TYPE_CNAME, - iq->qchase.qclass)) { + iq->qchase.qclass) && + count++ < ie->max_query_restarts) { /* another cname to follow */ if(!handle_cname_response(qstate, iq, forged_response, &sname, &slen)) { @@ -2751,10 +2753,12 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, /* apply rpz triggers at query time */ struct dns_msg* forged_response_after_cname; struct dns_msg* forged_response = rpz_callback_from_iterator_module(qstate, iq); + int count = 0; while(forged_response && reply_find_rrset_section_an( forged_response->rep, iq->qchase.qname, iq->qchase.qname_len, LDNS_RR_TYPE_CNAME, - iq->qchase.qclass)) { + iq->qchase.qclass) && + count++ < ie->max_query_restarts) { /* another cname to follow */ if(!handle_cname_response(qstate, iq, forged_response, &sname, &snamelen)) { @@ -3382,10 +3386,12 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* apply rpz qname triggers after cname */ struct dns_msg* forged_response = rpz_callback_from_iterator_cname(qstate, iq); + int count = 0; while(forged_response && reply_find_rrset_section_an( forged_response->rep, iq->qchase.qname, iq->qchase.qname_len, LDNS_RR_TYPE_CNAME, - iq->qchase.qclass)) { + iq->qchase.qclass) && + count++ < ie->max_query_restarts) { /* another cname to follow */ if(!handle_cname_response(qstate, iq, forged_response, &sname, &snamelen)) { -- 2.47.3