added validation and runtime detection of addition to a second group

This commit is contained in:
2016-03-05 09:39:33 -05:00
parent c72968f277
commit a52124e582
3 changed files with 88 additions and 1 deletions

60
bin/validate-master Executable file
View 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";
}
}
}