Compare commits

..

10 Commits

Author SHA1 Message Date
7b50aa74ab fixed regex 2022-11-01 13:46:17 +00:00
ca21337cbd another attempted fix at syntax 2022-11-01 09:08:16 -04:00
05eba37a2f fix master addys 2022-11-01 09:01:55 -04:00
8339247a1e add path to rndc 2022-11-01 08:59:48 -04:00
a69fb1dbd3 add missing lister to make 2022-11-01 08:44:01 -04:00
2733c6d02c add missing lister 2022-11-01 08:43:18 -04:00
1c0ae8137f fix multiple masters 2022-11-01 08:37:32 -04:00
9d58404b7d add v6 for all types 2022-11-01 08:34:42 -04:00
3f534cfe90 add v6 addy 2022-11-01 08:31:03 -04:00
d731312ebc logic fix? 2021-10-31 13:46:25 -04:00
8 changed files with 36 additions and 12 deletions

14
DDNS.pm
View File

@ -107,16 +107,20 @@ sub _gethosts {
while (<$fh>) {
if ($type) {
if (/^(\S+)\.$type\.private\.invalid\.\s+\d+\s+IN\s+TXT\s+\"(.+)\"$/) {
push (@vh, { zone => $1,
my ($z, $m) = ($1, $2);
$m =~ s/\"//g;
push (@vh, { zone => $z,
type => $type,
master => $2 });
master => $m });
}
} else {
# Querying everything
if (/^(\S+)\.(\S+)\.private\.invalid\.\s+\d+\s+IN\s+TXT\s+\"(.+)\"$/) {
push (@vh, { zone => $1,
type => $2,
master => $3 });
my ($z, $t, $m) = ($1, $2, $3);
$m =~ s/\"//g;
push (@vh, { zone => $z,
type => $t,
master => $m });
}
}
}

View File

@ -23,6 +23,7 @@ WriteMakefile(
'bin/validate-master',
'bin/add-dnssec',
'bin/del-dnssec',
'bin/list-dnssec',
],
'AUTHOR' => 'Jorj Bauer <jorj@jorj.org>',
);

View File

@ -7,7 +7,7 @@ use Regexp::Common qw/net/;
my $host = shift || die "No zonename provided";
my $master = shift;
$master ||= '198.251.79.234';
$master ||= '198.251.79.234;2607:f1c0:86e:b66f:6b86:babb:c367:b0dc';
die "Zonename must end in a dot"
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);

View File

@ -7,7 +7,9 @@ use Regexp::Common qw/net/;
my $host = shift || die "No zonename provided";
my $master = shift;
$master ||= '198.251.79.234';
#$master ||= '198.251.79.234';
$master ||= '198.251.79.234;2607:f1c0:86e:b66f:6b86:babb:c367:b0dc';
die "Zonename must end in a dot"
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);

View File

@ -7,7 +7,7 @@ use Regexp::Common qw/net/;
my $host = shift || die "No vhost provided";
#my $master = shift || die "No master DNS IP provided";
my $master = '198.251.79.234';
my $master ||= '198.251.79.234;2607:f1c0:86e:b66f:6b86:babb:c367:b0dc';
die "Hostname must end in a dot"
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);

12
bin/list-dnssec Executable file
View File

@ -0,0 +1,12 @@
#!/usr/bin/perl
use strict;
use warnings;
use Martnet::DDNS;
my $ddns = Martnet::DDNS->new();
my @vh = $ddns->get('_dnssec');
foreach my $i (sort {$a->{zone} cmp $b->{zone}} @vh) {
print $i->{zone}, ". master: ", $i->{master},"\n";
}

View File

@ -20,7 +20,7 @@ my @vh = $ddns->get('_vhosts');
my $changecount = 0;
foreach my $i (@vh) {
my $zf = "/var/lib/bind/vhost/db.$i->{zone}";
unless ( $force_replace || -f $zf ) {
if ( $force_replace || (! -f $zf) ) {
print "Generating new zone file for $i->{zone}\n";
open(my $fh, ">", $zf)
|| die "Can't create output file $zf: $!";
@ -54,7 +54,7 @@ if ($changecount) {
print "Installing new vhost list\n";
system("install -o bind -g bind $path /var/lib/bind/vhost.zones.9");
print "Reloading DNS files\n";
system("rndc reload");
system("/usr/sbin/rndc reload");
}
exit 0;

View File

@ -4,6 +4,7 @@ use strict;
use warnings;
use Martnet::DDNS;
use File::Temp qw/tempfile/;
use Data::Dumper;
my $force = shift; # a "force" flag, if the update is big
@ -14,12 +15,12 @@ my %vhh = map { $_->{zone} => 1 } @vh;
my @all = parse_slavefile("/etc/bind/martnet.slave.zones.9");
my %allh = all_zones_hash(@all);
use Data::Dumper;
# For each virtual host, see if we've got it already
my $changecount = 0;
foreach my $i (@vh) {
unless (contains_zone($i, @all)) {
print "don't have $i->{zone}\n";
$changecount++;
}
}
@ -45,7 +46,7 @@ sub parse_slavefile {
open(my $fh, $f) || die "Can't open $f: $!";
while (<$fh>) {
if (/^zone\s+\"([^\"]+)\"\s+\{.+masters\s?\{\s?([^;]+);/) {
if (/^zone\s+\"([^\"]+)\"\s+\{.+masters\s?\{\s?(.+);\s?\};\s?\};/) {
push ( @ret, { zone => $1,
master => $2
} );
@ -85,6 +86,10 @@ sub contains_zone {
my ($zone, @zl) = @_;
foreach my $i (@zl) {
if ($i->{zone} eq $zone->{zone}) {
print "m: '$i->{master}' ne '$zone->{master}'\n"
unless ($i->{master} eq $zone->{master});
}
return 1
if ($i->{zone} eq $zone->{zone} &&
$i->{master} eq $zone->{master}