ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/FreeBSDAdmin/DNS/reverse.pl
Revision: 853
Committed: 2006-08-07T16:25:48-07:00 (18 years, 10 months ago) by douglas
Content type: text/x-perl
File size: 2254 byte(s)
Log Message:
Sweet!

File Contents

# Content
1 #!/usr/local/bin/perl
2 # Reverse
3 #
4 # Douglas Thrift
5 #
6 # $Id$
7
8 use strict;
9 use warnings;
10 use Net::hostent;
11 use POSIX qw(:time_h :unistd_h);
12 use Socket;
13
14 my @hostnames;
15
16 open DAT, "$ENV{HOME}/reverse.dat" or die "$0: $!";
17
18 while (<DAT>)
19 {
20 $hostnames[$#hostnames + 1] = $& if (/^[^#].*$/);
21 }
22
23 close DAT;
24
25 my $namedb = geteuid == 0 ? '/etc/namedb' : '.';
26
27 open CONF, "$namedb/named.conf" or die "$0: $!";
28
29 my $conf;
30
31 while (<CONF>)
32 {
33 $conf .= $_;
34 }
35
36 my $updated = 0;
37
38 for my $hostname (@hostnames)
39 {
40 my $host = gethostbyname $hostname;
41
42 if (defined $host)
43 {
44 my $address = inet_ntoa($host->addr);
45 my $zone = join ('.', reverse unpack('C4', $host->addr)) . '.in-addr.arpa';
46
47 $host = gethostbyaddr ($host->addr, AF_INET);
48
49 if (!defined ($host) || $host->name ne $hostname)
50 {
51 open ZONE, '>', "$namedb/master/$zone" or die "$0: $!";
52
53 my $serialnum = strftime('%Y%m%d01', localtime);
54
55 if ($conf =~ /\n# $hostname\nzone "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\.in-addr\.arpa)" {\n\ttype master;\n\tfile "master\/\1";\n};\n/)
56 {
57 next if ($1 eq $zone);
58
59 my $oldzone = $1;
60 my $oldzonefile = "$namedb/master/$oldzone";
61
62 open OLDZONE, $oldzonefile;
63
64 $oldzone =~ s/\./\\./g;
65
66 while (<OLDZONE>)
67 {
68 s/$oldzone/$zone/;
69 s/\d{10} ; serial$/$serialnum ; serial/;
70
71 print ZONE;
72 }
73
74 close OLDZONE;
75 unlink $oldzonefile;
76
77 $conf =~ s/$oldzone/$zone/g;
78 }
79 else
80 {
81 print ZONE "\$ORIGIN .
82 \$TTL 3600 ; 1 hour
83 $zone IN SOA ns.douglasthrift.net. admin.douglasthrift.net. (
84 $serialnum ; serial
85 7200 ; refresh (2 hours)
86 3600 ; retry (1 hour)
87 604800 ; expire (1 week)
88 3600 ; minimum (1 hour)
89 )
90 NS ns.douglasthrift.net.
91 PTR $hostname.
92 ";
93
94 $conf .= "
95 # $hostname
96 zone \"$zone\" {
97 type master;
98 file \"master/$zone\";
99 };
100 ";
101 }
102
103 close ZONE;
104
105 $updated = 1;
106 }
107 }
108 elsif ($conf =~ s/\n# $hostname\nzone "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\.in-addr\.arpa)" {\n\ttype master;\n\tfile "master\/\1";\n};\n//)
109 {
110 unlink "$namedb/master/$1";
111
112 $updated = 1;
113 }
114 }
115
116 if ($updated)
117 {
118 open CONF, '>', "$namedb/named.conf" or die "$0: $!";
119 print CONF $conf;
120 }
121
122 close CONF;
123 exec {'/usr/sbin/rndc'} 'rndc', 'reconfig' or die "$0: $!" if ($updated);

Properties

Name Value
svn:executable *
svn:keywords Id