added validation and runtime detection of addition to a second group
This commit is contained in:
60
bin/validate-master
Executable file
60
bin/validate-master
Executable file
@ -0,0 +1,60 @@
|
||||
#!/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";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user