mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-14 22:20:03 -04:00
3962. [bug] 'dig +topdown +trace +sigchase' address unhandled error conditions. [RT #34663]
(cherry picked from commit 7d891eaf91)
This commit is contained in:
parent
d5a5ca7225
commit
3e8a36cf7e
2 changed files with 29 additions and 5 deletions
3
CHANGES
3
CHANGES
|
|
@ -1,3 +1,6 @@
|
|||
3962. [bug] 'dig +topdown +trace +sigchase' address unhandled error
|
||||
conditions. [RT #34663]
|
||||
|
||||
3961. [bug] Forwarding of SIG(0) signed UPDATE messages failed with
|
||||
BADSIG. [RT #37216]
|
||||
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@
|
|||
#include <dns/log.h>
|
||||
#include <dns/message.h>
|
||||
#include <dns/name.h>
|
||||
#include <dns/rcode.h>
|
||||
#include <dns/rdata.h>
|
||||
#include <dns/rdataclass.h>
|
||||
#include <dns/rdatalist.h>
|
||||
|
|
@ -4396,6 +4397,9 @@ chase_scanname_section(dns_message_t *msg, dns_name_t *name,
|
|||
dns_rdataset_t *rdataset;
|
||||
dns_name_t *msg_name = NULL;
|
||||
|
||||
if (msg->counts[section] == 0)
|
||||
return (NULL);
|
||||
|
||||
do {
|
||||
dns_message_currentname(msg, section, &msg_name);
|
||||
if (dns_name_compare(msg_name, name) == 0) {
|
||||
|
|
@ -5204,6 +5208,20 @@ sigchase_td(dns_message_t *msg)
|
|||
isc_boolean_t have_answer = ISC_FALSE;
|
||||
isc_boolean_t true = ISC_TRUE;
|
||||
|
||||
if (msg->rcode != dns_rcode_noerror &&
|
||||
msg->rcode != dns_rcode_nxdomain) {
|
||||
char buf[20];
|
||||
isc_buffer_t b;
|
||||
|
||||
isc_buffer_init(&b, buf, sizeof(buf));
|
||||
result = dns_rcode_totext(msg->rcode, &b);
|
||||
check_result(result, "dns_rcode_totext failed");
|
||||
printf("error response code %.*s\n",
|
||||
(int)isc_buffer_usedlength(&b), buf);
|
||||
error_message = msg;
|
||||
return;
|
||||
}
|
||||
|
||||
if ((result = dns_message_firstname(msg, DNS_SECTION_ANSWER))
|
||||
== ISC_R_SUCCESS) {
|
||||
dns_message_currentname(msg, DNS_SECTION_ANSWER, &name);
|
||||
|
|
@ -5216,10 +5234,13 @@ sigchase_td(dns_message_t *msg)
|
|||
if (!current_lookup->trace_root_sigchase) {
|
||||
result = dns_message_firstname(msg,
|
||||
DNS_SECTION_AUTHORITY);
|
||||
if (result == ISC_R_SUCCESS)
|
||||
dns_message_currentname(msg,
|
||||
DNS_SECTION_AUTHORITY,
|
||||
&name);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
printf("no answer or authority section\n");
|
||||
error_message = msg;
|
||||
return;
|
||||
}
|
||||
dns_message_currentname(msg, DNS_SECTION_AUTHORITY,
|
||||
&name);
|
||||
chase_nsrdataset
|
||||
= chase_scanname_section(msg, name,
|
||||
dns_rdatatype_ns,
|
||||
|
|
@ -5229,7 +5250,7 @@ sigchase_td(dns_message_t *msg)
|
|||
if (chase_nsrdataset != NULL) {
|
||||
have_delegation_ns = ISC_TRUE;
|
||||
printf("no response but there is a delegation"
|
||||
" in authority section:");
|
||||
" in authority section: ");
|
||||
dns_name_print(name, stdout);
|
||||
printf("\n");
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in a new issue