forked from .cyb/cyberman
Basic zone writing script
This commit is contained in:
parent
e91816381d
commit
98c3c97e34
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env perl
|
||||
|
||||
# Zone writer for cyberman.
|
||||
# This won't scale well, but it's a basic way to get domains online
|
||||
# Tested with NSD but should work with your favourite
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use feature 'say';
|
||||
use FindBin qw($Bin);
|
||||
use YAML::Tiny;
|
||||
use DBI;
|
||||
|
||||
my $yml = YAML::Tiny->read("$Bin/../config.yml");
|
||||
my $tld = $yml->[0]->{"tld"};
|
||||
my $conf = $yml->[0]->{"zonewriter"};
|
||||
|
||||
open my $out, ">", $conf->{"file"} or die $!;
|
||||
|
||||
# Introduction
|
||||
say $out <<'END';
|
||||
; File produced by cyberman. Do not edit!
|
||||
$TTL 86400
|
||||
$ORIGIN cyb.
|
||||
END
|
||||
|
||||
# Write SOA
|
||||
# Uses mostly hard-coded values for now
|
||||
say $out "@ 1D IN SOA $conf->{ns} $conf->{responsible} (";
|
||||
say $out time;
|
||||
say $out <<'END';
|
||||
3H ; refresh
|
||||
15 ; retry
|
||||
604800 ; expire
|
||||
3h ; nxdomain ttl
|
||||
)
|
||||
END
|
||||
|
||||
if ($conf->{"include"}->{"enabled"}) {
|
||||
say $out "\$INCLUDE $conf->{include}->{file}";
|
||||
}
|
||||
|
||||
# Time to get the records
|
||||
die "Unsupported database!"
|
||||
unless $yml->[0]->{"plugins"}->{"Database"}->{"driver"} eq "SQLite";
|
||||
my $dbfile = "$Bin/../$yml->[0]->{plugins}->{Database}->{dbname}";
|
||||
my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile", "", "");
|
||||
|
||||
my $sth = $dbh->prepare("SELECT * FROM record");
|
||||
$sth->execute;
|
||||
|
||||
while (my $r = $sth->fetchrow_hashref) {
|
||||
# Look up domain
|
||||
my $dsth = $dbh->prepare("select * from domain where id=?");
|
||||
$dsth->bind_param(1, $r->{"domainid"});
|
||||
$dsth->execute;
|
||||
my $d = $dsth->fetchrow_hashref;
|
||||
|
||||
# domain name
|
||||
if ($r->{"name"} eq '@') {
|
||||
print $out $d->{"name"}, " ";
|
||||
} else {
|
||||
print $out $r->{"name"}, ".", $d->{"name"}, " ";
|
||||
}
|
||||
|
||||
# record type
|
||||
print $out "IN $r->{type} ";
|
||||
|
||||
# value
|
||||
say $out $r->{value};
|
||||
}
|
||||
|
||||
close $out;
|
11
config.yml
11
config.yml
|
@ -17,3 +17,14 @@ plugins:
|
|||
log_queries: 1
|
||||
|
||||
tld: 'cyb'
|
||||
|
||||
zonewriter:
|
||||
# Values used for SOA
|
||||
ns: 'ns12.opennic.glue'
|
||||
responsible: 'hostmaster.opennic.cyb.'
|
||||
file: '/var/nsd/zones/master/cyb'
|
||||
include:
|
||||
# Optionally, you can have the zonewriter include another file
|
||||
# in the zone, which allows you to define some records manually
|
||||
enabled: true
|
||||
file: 'human_cyb'
|
||||
|
|
1
cpanfile
1
cpanfile
|
@ -1,6 +1,7 @@
|
|||
requires "Dancer2" => "0.205001";
|
||||
|
||||
requires "YAML" => "0";
|
||||
requires "YAML::Tiny" => "0";
|
||||
requires "URL::Encode::XS" => "0";
|
||||
requires "CGI::Deurl::XS" => "0";
|
||||
requires "HTTP::Parser::XS" => "0";
|
||||
|
|
|
@ -57,8 +57,6 @@ post '/domains/new' => sub {
|
|||
};
|
||||
}
|
||||
|
||||
# TODO: send domains to nsd
|
||||
|
||||
database->quick_insert(
|
||||
"domain",
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue