| |
| |
| @@ -2765,7 +2765,17 @@ |
| UNLOCK_LOOKUP; |
| return; |
| } |
| - if (msg->rcode == dns_rcode_servfail && !l->servfail_stops) { |
| + if ( (!l->servfail_stops) |
| + &&( (msg->rcode == dns_rcode_servfail) |
| + ||( (msg->rcode == dns_rcode_noerror) |
| + &&(msg->counts[DNS_SECTION_ANSWER] == 0) |
| + &&(msg->counts[DNS_SECTION_ADDITIONAL] == 0) |
| + &&((msg->flags & DNS_MESSAGEFLAG_RD) == DNS_MESSAGEFLAG_RD) |
| + &&((msg->flags & (DNS_MESSAGEFLAG_RA | DNS_MESSAGEFLAG_AA)) == 0) |
| + ) |
| + ) |
| + ) |
| + { |
| dig_query_t *next = ISC_LIST_NEXT(query, link); |
| if (l->current_query == query) |
| l->current_query = NULL; |
| @@ -2783,9 +2793,11 @@ |
| */ |
| if ((ISC_LIST_HEAD(l->q) != query) || |
| (ISC_LIST_NEXT(query, link) != NULL)) { |
| - printf(";; Got SERVFAIL reply from %s, " |
| - "trying next server\n", |
| - query->servname); |
| + if( l->comments == ISC_TRUE ) |
| + printf(";; Got %s reply from %s, " |
| + "trying next server\n", |
| + msg->rcode == dns_rcode_servfail ? "SERVFAIL" : "referral", |
| + query->servname); |
| clear_query(query); |
| check_next_lookup(l); |
| dns_message_destroy(&msg); |