From: Daniel Gröber via Unbound-users Date: Mon, 9 Oct 2023 12:43:34 +0000 (+0200) Subject: dns64: Refactor handle_event checks for readability X-Git-Tag: release-1.19.0rc1~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0c88f98a3b07c0a84e2f9eaa97f6867f06289de5;p=thirdparty%2Funbound.git dns64: Refactor handle_event checks for readability No functional change intended. Signed-off-by: Daniel Gröber --- diff --git a/dns64/dns64.c b/dns64/dns64.c index 1e31f51e8..83d61b2bd 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -580,16 +580,16 @@ handle_event_pass(struct module_qstate* qstate, int id) /* Handle PTR queries for IPv6 addresses. */ return handle_ipv6_ptr(qstate, id); - if (qstate->env->cfg->dns64_synthall && - iq && iq->state == DNS64_NEW_QUERY - && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) - return generate_type_A_query(qstate, id); - - if(dns64_always_synth_for_qname(qstate, id) && - iq && iq->state == DNS64_NEW_QUERY - && !(qstate->query_flags & BIT_CD) - && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) { - verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway"); + int synth_all_cfg = qstate->env->cfg->dns64_synthall; + int synth_qname = + dns64_always_synth_for_qname(qstate, id) && + !(qstate->query_flags & BIT_CD); + + if (iq && iq->state == DNS64_NEW_QUERY && + qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA && + (synth_all_cfg || synth_qname)) { + if (synth_qname) + verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway"); return generate_type_A_query(qstate, id); } @@ -627,24 +627,26 @@ handle_event_moddone(struct module_qstate* qstate, int id) * synthesize in (sec 5.1.2 of RFC6147). * - A successful AAAA query with an answer. */ - if((!iq || iq->state != DNS64_INTERNAL_QUERY) - && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA - && !(qstate->query_flags & BIT_CD) - && !(qstate->return_msg && - qstate->return_msg->rep && - reply_find_answer_rrset(&qstate->qinfo, - qstate->return_msg->rep))) - /* not internal, type AAAA, not CD, and no answer RRset, - * So, this is a AAAA noerror/nodata answer */ - return generate_type_A_query(qstate, id); - if((!iq || iq->state != DNS64_INTERNAL_QUERY) - && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA - && !(qstate->query_flags & BIT_CD) - && dns64_always_synth_for_qname(qstate, id)) { - /* if it is not internal, AAAA, not CD and listed domain, - * generate from A record and ignore AAAA */ - verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway"); + /* When an AAAA query completes check if we want to perform DNS64 + * synthesis. We skip queries with DNSSEC enabled (!CD) and + * ones generated by us to retrive the A/PTR record to use for + * synth. */ + int want_synth = + qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA && + (!iq || iq->state != DNS64_INTERNAL_QUERY) && + !(qstate->query_flags & BIT_CD); + int has_data = /*< whether query returned non-empty rrset */ + qstate->return_msg && + qstate->return_msg->rep && + reply_find_answer_rrset(&qstate->qinfo, qstate->return_msg->rep); + int synth_qname; + + if(want_synth && + (!has_data || (synth_qname=dns64_always_synth_for_qname(qstate, id)))) + { + if (synth_qname) + verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway"); return generate_type_A_query(qstate, id); }