61 lines
1.5 KiB
Perl
Executable File
61 lines
1.5 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Martnet::DDNS;
|
|
|
|
my $ddns = Martnet::DDNS->new();
|
|
|
|
my $path = '/etc/bind';
|
|
|
|
my %files = ( 'custom.zones.9' => '_custom',
|
|
'martnet.zones.9' => '_custom',
|
|
'hostedservers.zones.9' => '_custom',
|
|
'vhost.zones.9' => '_vhosts',
|
|
'martnet.slave.zones.9' => '*' );
|
|
|
|
our %fixes = ( '_custom' => 'add-custom',
|
|
'_vhosts' => 'add-vhost',
|
|
'_pureslave' => 'add-slave',
|
|
'*' => 'one of the add-* scripts',
|
|
);
|
|
|
|
foreach my $i (keys %files) {
|
|
validate_file($path . '/' . $i, $files{$i});
|
|
}
|
|
|
|
exit 0;
|
|
|
|
sub validate_file {
|
|
my ($path, $expected_type) = @_;
|
|
|
|
open(my $fh, $path) || die "Can't open $path: $!";
|
|
|
|
while (<$fh>) {
|
|
my ($zonename) = ($_ =~ /zone \"([^\"]+)\"/i);
|
|
next unless ($zonename);
|
|
$zonename = lc($zonename);
|
|
unless ($zonename =~ /\.$/) {
|
|
$zonename .= '.'; # must end with a dot
|
|
}
|
|
|
|
findOrDie($path, $zonename, $expected_type);
|
|
}
|
|
close $fh;
|
|
}
|
|
|
|
sub findOrDie {
|
|
my ($path, $zonename, $expected_type) = @_;
|
|
|
|
my $type = $ddns->type($zonename);
|
|
unless ($type) {
|
|
my $fix = $fixes{$expected_type};
|
|
die "domain $zonename is not managed, but is in $path [expected $expected_type]; to fix, either remove the domain from the file, or use $fix to fix it";
|
|
}
|
|
if ($expected_type ne '*') {
|
|
unless ($type eq $expected_type) {
|
|
die "domain $zonename is managed in $path of type [$type] but should be [$expected_type] if it's in that file";
|
|
}
|
|
}
|
|
}
|