Compare commits
10 Commits
f342352a3a
...
7b50aa74ab
| Author | SHA1 | Date | |
|---|---|---|---|
| 7b50aa74ab | |||
| ca21337cbd | |||
| 05eba37a2f | |||
| 8339247a1e | |||
| a69fb1dbd3 | |||
| 2733c6d02c | |||
| 1c0ae8137f | |||
| 9d58404b7d | |||
| 3f534cfe90 | |||
| d731312ebc |
14
DDNS.pm
14
DDNS.pm
@ -107,16 +107,20 @@ sub _gethosts {
|
|||||||
while (<$fh>) {
|
while (<$fh>) {
|
||||||
if ($type) {
|
if ($type) {
|
||||||
if (/^(\S+)\.$type\.private\.invalid\.\s+\d+\s+IN\s+TXT\s+\"(.+)\"$/) {
|
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,
|
type => $type,
|
||||||
master => $2 });
|
master => $m });
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
# Querying everything
|
# Querying everything
|
||||||
if (/^(\S+)\.(\S+)\.private\.invalid\.\s+\d+\s+IN\s+TXT\s+\"(.+)\"$/) {
|
if (/^(\S+)\.(\S+)\.private\.invalid\.\s+\d+\s+IN\s+TXT\s+\"(.+)\"$/) {
|
||||||
push (@vh, { zone => $1,
|
my ($z, $t, $m) = ($1, $2, $3);
|
||||||
type => $2,
|
$m =~ s/\"//g;
|
||||||
master => $3 });
|
push (@vh, { zone => $z,
|
||||||
|
type => $t,
|
||||||
|
master => $m });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,6 +23,7 @@ WriteMakefile(
|
|||||||
'bin/validate-master',
|
'bin/validate-master',
|
||||||
'bin/add-dnssec',
|
'bin/add-dnssec',
|
||||||
'bin/del-dnssec',
|
'bin/del-dnssec',
|
||||||
|
'bin/list-dnssec',
|
||||||
],
|
],
|
||||||
'AUTHOR' => 'Jorj Bauer <jorj@jorj.org>',
|
'AUTHOR' => 'Jorj Bauer <jorj@jorj.org>',
|
||||||
);
|
);
|
||||||
|
|||||||
@ -7,7 +7,7 @@ use Regexp::Common qw/net/;
|
|||||||
|
|
||||||
my $host = shift || die "No zonename provided";
|
my $host = shift || die "No zonename provided";
|
||||||
my $master = shift;
|
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"
|
die "Zonename must end in a dot"
|
||||||
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);
|
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);
|
||||||
|
|||||||
@ -7,7 +7,9 @@ use Regexp::Common qw/net/;
|
|||||||
|
|
||||||
my $host = shift || die "No zonename provided";
|
my $host = shift || die "No zonename provided";
|
||||||
my $master = shift;
|
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"
|
die "Zonename must end in a dot"
|
||||||
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);
|
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);
|
||||||
|
|||||||
@ -7,7 +7,7 @@ use Regexp::Common qw/net/;
|
|||||||
|
|
||||||
my $host = shift || die "No vhost provided";
|
my $host = shift || die "No vhost provided";
|
||||||
#my $master = shift || die "No master DNS IP 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"
|
die "Hostname must end in a dot"
|
||||||
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);
|
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);
|
||||||
|
|||||||
12
bin/list-dnssec
Executable file
12
bin/list-dnssec
Executable 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";
|
||||||
|
}
|
||||||
@ -20,7 +20,7 @@ my @vh = $ddns->get('_vhosts');
|
|||||||
my $changecount = 0;
|
my $changecount = 0;
|
||||||
foreach my $i (@vh) {
|
foreach my $i (@vh) {
|
||||||
my $zf = "/var/lib/bind/vhost/db.$i->{zone}";
|
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";
|
print "Generating new zone file for $i->{zone}\n";
|
||||||
open(my $fh, ">", $zf)
|
open(my $fh, ">", $zf)
|
||||||
|| die "Can't create output file $zf: $!";
|
|| die "Can't create output file $zf: $!";
|
||||||
@ -54,7 +54,7 @@ if ($changecount) {
|
|||||||
print "Installing new vhost list\n";
|
print "Installing new vhost list\n";
|
||||||
system("install -o bind -g bind $path /var/lib/bind/vhost.zones.9");
|
system("install -o bind -g bind $path /var/lib/bind/vhost.zones.9");
|
||||||
print "Reloading DNS files\n";
|
print "Reloading DNS files\n";
|
||||||
system("rndc reload");
|
system("/usr/sbin/rndc reload");
|
||||||
}
|
}
|
||||||
|
|
||||||
exit 0;
|
exit 0;
|
||||||
|
|||||||
@ -4,6 +4,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Martnet::DDNS;
|
use Martnet::DDNS;
|
||||||
use File::Temp qw/tempfile/;
|
use File::Temp qw/tempfile/;
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
my $force = shift; # a "force" flag, if the update is big
|
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 @all = parse_slavefile("/etc/bind/martnet.slave.zones.9");
|
||||||
my %allh = all_zones_hash(@all);
|
my %allh = all_zones_hash(@all);
|
||||||
use Data::Dumper;
|
|
||||||
|
|
||||||
# For each virtual host, see if we've got it already
|
# For each virtual host, see if we've got it already
|
||||||
my $changecount = 0;
|
my $changecount = 0;
|
||||||
foreach my $i (@vh) {
|
foreach my $i (@vh) {
|
||||||
unless (contains_zone($i, @all)) {
|
unless (contains_zone($i, @all)) {
|
||||||
|
print "don't have $i->{zone}\n";
|
||||||
$changecount++;
|
$changecount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -45,7 +46,7 @@ sub parse_slavefile {
|
|||||||
|
|
||||||
open(my $fh, $f) || die "Can't open $f: $!";
|
open(my $fh, $f) || die "Can't open $f: $!";
|
||||||
while (<$fh>) {
|
while (<$fh>) {
|
||||||
if (/^zone\s+\"([^\"]+)\"\s+\{.+masters\s?\{\s?([^;]+);/) {
|
if (/^zone\s+\"([^\"]+)\"\s+\{.+masters\s?\{\s?(.+);\s?\};\s?\};/) {
|
||||||
push ( @ret, { zone => $1,
|
push ( @ret, { zone => $1,
|
||||||
master => $2
|
master => $2
|
||||||
} );
|
} );
|
||||||
@ -85,6 +86,10 @@ sub contains_zone {
|
|||||||
my ($zone, @zl) = @_;
|
my ($zone, @zl) = @_;
|
||||||
|
|
||||||
foreach my $i (@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
|
return 1
|
||||||
if ($i->{zone} eq $zone->{zone} &&
|
if ($i->{zone} eq $zone->{zone} &&
|
||||||
$i->{master} eq $zone->{master}
|
$i->{master} eq $zone->{master}
|
||||||
|
|||||||
Reference in New Issue
Block a user