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