jvdias 9992df4
--- bind-9.3.1/bin/dig/dighost.c.next_server_on_referral	2005-08-16 16:27:33.000000000 -0400
jvdias 9992df4
+++ bind-9.3.1/bin/dig/dighost.c	2005-08-16 16:27:49.000000000 -0400
jvdias 9992df4
@@ -2765,7 +2765,17 @@
jvdias d9e5940
 		UNLOCK_LOOKUP;
jvdias d9e5940
 		return;
jvdias d9e5940
 	}			
jvdias d9e5940
-	if (msg->rcode == dns_rcode_servfail && !l->servfail_stops) {
jvdias d9e5940
+	if ( (!l->servfail_stops)
jvdias d9e5940
+	   &&( (msg->rcode == dns_rcode_servfail)
jvdias d9e5940
+	     ||(  (msg->rcode == dns_rcode_noerror) 
jvdias d9e5940
+	        &&(msg->counts[DNS_SECTION_ANSWER] == 0)
jvdias 9992df4
+	        &&(msg->counts[DNS_SECTION_ADDITIONAL] == 0)
jvdias 9992df4
+		&&((msg->flags &  DNS_MESSAGEFLAG_RD) == DNS_MESSAGEFLAG_RD)
jvdias 9992df4
+		&&((msg->flags & (DNS_MESSAGEFLAG_RA | DNS_MESSAGEFLAG_AA)) == 0)
jvdias d9e5940
+	       )
jvdias d9e5940
+	     )
jvdias d9e5940
+	   )
jvdias d9e5940
+	{
jvdias d9e5940
 		dig_query_t *next = ISC_LIST_NEXT(query, link);
jvdias d9e5940
 		if (l->current_query == query)
jvdias d9e5940
 			l->current_query = NULL;
jvdias 9992df4
@@ -2783,9 +2793,11 @@
jvdias d9e5940
 		 */
jvdias d9e5940
 		if ((ISC_LIST_HEAD(l->q) != query) ||
jvdias d9e5940
 		    (ISC_LIST_NEXT(query, link) != NULL)) {
jvdias d9e5940
-			printf(";; Got SERVFAIL reply from %s, "
jvdias d9e5940
-			       "trying next server\n",
jvdias d9e5940
-			       query->servname);
jvdias d9e5940
+		        if( l->comments == ISC_TRUE )
jvdias d9e5940
+			        printf(";; Got %s reply from %s, "
jvdias d9e5940
+				       "trying next server\n",
jvdias d9e5940
+				       msg->rcode == dns_rcode_servfail ? "SERVFAIL" : "referral",
jvdias d9e5940
+				       query->servname);
jvdias d9e5940
 			clear_query(query);
jvdias d9e5940
 			check_next_lookup(l);
jvdias d9e5940
 			dns_message_destroy(&msg;;