From: bert hubert Date: Fri, 1 Jul 2016 10:07:37 +0000 (+0200) Subject: improve error message when validation of domain fails due to timeouts X-Git-Tag: rec-4.0.0~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b25cae9a0c8254c73aa4a67fecab09aac7fe3d8c;p=thirdparty%2Fpdns.git improve error message when validation of domain fails due to timeouts --- diff --git a/pdns/pdns_recursor.cc b/pdns/pdns_recursor.cc index d75e1fe37d..7a5e104a60 100644 --- a/pdns/pdns_recursor.cc +++ b/pdns/pdns_recursor.cc @@ -952,45 +952,53 @@ void startDoResolve(void *p) // Does the validation mode or query demand validation? if(g_dnssecmode == DNSSECMode::ValidateAll || g_dnssecmode==DNSSECMode::ValidateForLog || (dc->d_mdp.d_header.ad && g_dnssecmode==DNSSECMode::Process)) { - if(sr.doLog()) { - L<d_mdp.d_qname<<" for "<d_remote.toStringWithPort()<d_mdp.d_qname<<" for "<d_remote.toStringWithPort()<<" validates correctly"<d_mdp.d_header.ad) - pw.getHeader()->ad=1; - } - else if(state == Insecure) { + try { if(sr.doLog()) { - L<d_mdp.d_qname<<" for "<d_remote.toStringWithPort()<<" validates as Insecure"<ad=0; - } - else if(state == Bogus) { - if(sr.doLog() || g_dnssecmode == DNSSECMode::ValidateForLog) { - L<d_mdp.d_qname<<" for "<d_remote.toStringWithPort()<<" validates as Bogus"<d_mdp.d_qname<<" for "<d_remote.toStringWithPort()<cd && (g_dnssecmode == DNSSECMode::ValidateAll || dc->d_mdp.d_header.ad)) { + + auto state=validateRecords(ret); + if(state == Secure) { if(sr.doLog()) { - L<d_mdp.d_qname<<" because recursor or query demands it for Bogus results"<d_mdp.d_qname<<" for "<d_remote.toStringWithPort()<<" validates correctly"<rcode=RCode::ServFail; - goto sendit; - } else { + + // Is the query source interested in the value of the ad-bit? + if (dc->d_mdp.d_header.ad) + pw.getHeader()->ad=1; + } + else if(state == Insecure) { if(sr.doLog()) { - L<d_mdp.d_qname<<" Bogus validation since neither config nor query demands this"<d_mdp.d_qname<<" for "<d_remote.toStringWithPort()<<" validates as Insecure"<ad=0; } + else if(state == Bogus) { + if(sr.doLog() || g_dnssecmode == DNSSECMode::ValidateForLog) { + L<d_mdp.d_qname<<" for "<d_remote.toStringWithPort()<<" validates as Bogus"<cd && (g_dnssecmode == DNSSECMode::ValidateAll || dc->d_mdp.d_header.ad)) { + if(sr.doLog()) { + L<d_mdp.d_qname<<" because recursor or query demands it for Bogus results"<rcode=RCode::ServFail; + goto sendit; + } else { + if(sr.doLog()) { + L<d_mdp.d_qname<<" Bogus validation since neither config nor query demands this"<getRemote()<<" during validation of '"<d_mdp.d_qname<<"' because: "<rcode=RCode::ServFail; + goto sendit; } }