1259698Sdim#!/usr/bin/perl -WT 2259698Sdim 3259698Sdimuse strict; 4259698Sdimuse warnings; 5259698Sdim 6259698Sdimmy $hostsfile = '/etc/hosts'; 7259698Sdimmy $localzonefile = '/etc/unbound/localzone.conf.new'; 8259698Sdim 9259698Sdimmy $localzone = 'example.com'; 10259698Sdim 11259698Sdimopen( HOSTS,"<${hostsfile}" ) or die( "Could not open ${hostsfile}: $!" ); 12259698Sdimopen( ZONE,">${localzonefile}" ) or die( "Could not open ${localzonefile}: $!" ); 13259698Sdim 14259698Sdimprint ZONE "server:\n\n"; 15259698Sdimprint ZONE "local-zone: \"${localzone}\" transparent\n\n"; 16259698Sdim 17259698Sdimmy %ptrhash; 18259698Sdim 19259698Sdimwhile ( my $hostline = <HOSTS> ) { 20259698Sdim 21259698Sdim # Skip comments 22259698Sdim if ( $hostline !~ "^#" and $hostline !~ '^\s+$' ) { 23259698Sdim 24 my @entries = split( /\s+/, $hostline ); 25 26 my $ip; 27 28 my $count = 0; 29 foreach my $entry ( @entries ) { 30 if ( $count == 0 ) { 31 $ip = $entry; 32 } else { 33 34 if ( $count == 1) { 35 36 # Only return localhost for 127.0.0.1 and ::1 37 if ( ($ip ne '127.0.0.1' and $ip ne '::1') or $entry =~ 'localhost' ) { 38 if ( ! defined $ptrhash{$ip} ) { 39 $ptrhash{$ip} = $entry; 40 print ZONE "local-data-ptr: \"$ip $entry\"\n"; 41 } 42 } 43 44 } 45 46 # Use AAAA for IPv6 addresses 47 my $a = 'A'; 48 if ( $ip =~ ':' ) { 49 $a = 'AAAA'; 50 } 51 52 print ZONE "local-data: \"$entry ${a} $ip\"\n"; 53 54 } 55 $count++; 56 } 57 print ZONE "\n"; 58 59 60 } 61} 62 63 64 65 66__END__ 67 68