--- DNSServer.pm	Sun Aug 10 01:44:48 2003
+++ /usr/lib/perl5/site_perl/5.8.0/Net/DNSServer.pm	Sun Aug 10 01:56:45 2003
@@ -133,12 +133,15 @@
   my $sockaddr = $self -> {server} -> {sockaddr};
   my $sockport = $self -> {server} -> {sockport};
   my $proto    = $self -> {server} -> {udp_true} ? "udp" : "tcp";
-  print STDERR "DEBUG: process_request from [$peeraddr:$peerport] for [$sockaddr:$sockport] on [$proto] ...\n";
+  print STDERR "DEBUG: process_request from [$peeraddr:$peerport] for [$sockaddr:$sockport] on [$proto] ...\n"
+	if ($self -> {debug});
   local $0 = "named: $peeraddr:$peerport";
   if( $self -> {server} -> {udp_true} ){
-    print STDERR "DEBUG: udp packet received!\n";
+    print STDERR "DEBUG: udp packet received!\n"
+	if ($self -> {debug});
     my $dns_packet = new Net::DNS::Packet (\$self -> {server} -> {udp_data});
-    print STDERR "DEBUG: Question Packet:\n",$dns_packet->string;
+    print STDERR "DEBUG: Question Packet:\n",$dns_packet->string
+	if ($self -> {debug});
     # Call pre() routine for each module
     foreach (@{$self -> {priority}}) {
       $_->pre($dns_packet);
@@ -146,9 +149,11 @@
 
     # Keep calling resolve() routine until one module resolves it
     my $answer_packet = undef;
-    print STDERR "DEBUG: Preparing for resolvers...\n";
+    print STDERR "DEBUG: Preparing for resolvers...\n"
+	if ($self -> {debug});
     foreach (@{$self -> {priority}}) {
-      print STDERR "DEBUG: Executing ",(ref $_),"->resolve() ...\n";
+      print STDERR "DEBUG: Executing ",(ref $_),"->resolve() ...\n"
+	if ($self -> {debug});
       $answer_packet = $_->resolve();
       last if $answer_packet;
     }
@@ -156,7 +161,8 @@
     # if no module could figure out the real answer (echo)
     $self -> {answer_packet} = $answer_packet || $dns_packet;
 
-    print STDERR "DEBUG: Answer Packet After Resolve:\n",$self->{answer_packet}->string;
+    print STDERR "DEBUG: Answer Packet After Resolve:\n",$self->{answer_packet}->string
+	if ($self -> {debug});
 
     # Before the answer is sent to the client
     # Run it through the post() routine for each module
@@ -165,10 +171,12 @@
     }
 
     # Send the answer back to the client
-    print STDERR "DEBUG: Answer Packet After Post:\n",$self->{answer_packet}->string;
+    print STDERR "DEBUG: Answer Packet After Post:\n",$self->{answer_packet}->string
+	if ($self -> {debug});
     $self -> {server} -> {client} -> send($self->{answer_packet}->data);
   } else {
-    print STDERR "DEBUG: Incoming TCP packet? Not implemented\n";
+    print STDERR "DEBUG: Incoming TCP packet? Not implemented\n"
+	if ($self -> {debug});
   }
 }
 
@@ -186,6 +194,12 @@
 
   run Net::DNSServer {
     priority => [ list of resolver objects ],
+    debug => 1, # report to log_file on internal function states?
+    server => {
+		# options to pass to the Net::Server instance
+		log_file => '/tmp/server.log',
+		server_type => 'Fork',
+	},
   };
   # never returns
 
@@ -216,6 +230,8 @@
 Net::DNSServer is free software; you can redistribute
 it and/or modify it under the same terms as Perl itself.
 
+Small debug changes and documentation additions by Kees Cook.
+
 $Id: DNSServer.pm,v 1.25 2002/11/13 19:47:01 rob Exp $
 
 =cut
