--- djbdns-1.05.original/log.h	2001-02-11 21:11:45.000000000 +0000
+++ djbdns-1.05/log.h	2003-07-29 17:12:44.000000000 +0100
@@ -23,6 +23,7 @@
 extern void log_nodata(const char *,const char *,const char *,unsigned int);
 extern void log_servfail(const char *);
 extern void log_lame(const char *,const char *,const char *);
+extern void log_ignore_referral(const char *,const char *,const char *);
 
 extern void log_rr(const char *,const char *,const char *,const char *,unsigned int,unsigned int);
 extern void log_rrns(const char *,const char *,const char *,unsigned int);
--- djbdns-1.05.original/log.c	2001-02-11 21:11:45.000000000 +0000
+++ djbdns-1.05/log.c	2003-07-29 17:12:33.000000000 +0100
@@ -196,6 +196,13 @@
   line();
 }
 
+void log_ignore_referral(const char server[4],const char * control, const char *referral)
+{
+  string("ignored referral "); ip(server); space();
+  name(control); space(); name(referral);
+  line();
+}
+
 void log_servfail(const char *dn)
 {
   const char *x = error_str(errno);
--- djbdns-1.05.original/query.c	2001-02-11 21:11:45.000000000 +0000
+++ djbdns-1.05/query.c	2003-07-29 17:13:13.000000000 +0100
@@ -781,6 +781,18 @@
 
 
   if (!dns_domain_suffix(d,referral)) goto DIE;
+
+  /* In strict "forwardonly" mode, we don't, as the manual states,
+  ** contact a chain of servers according to "NS" resource records.
+  ** We don't obey any referral responses, therefore.  Instead, we
+  ** eliminate the server from the list and try the next one.
+  */
+  if (flagforwardonly) {
+      log_ignore_referral(whichserver,control,referral);
+      byte_zero(whichserver,4);
+      goto HAVENS;
+  }
+
   control = d + dns_domain_suffixpos(d,referral);
   z->control[z->level] = control;
   byte_zero(z->servers[z->level],64);
