karchnu
527313614c
Le code a été simplifié de plusieurs manières : du code plus générique, dans la gestion des utilisateurs et des routes, mais aussi côté gestion des zones et serveurs de zones ajout de commandes en cli pour gérer les zones et utilisateurs, et faire des tests du code plus simplement qu'en passant par l'interface web Le projet est passé à Dancer2. Le dépôt est désormais moins éparpillé également, ce qui est visible est directement le projet Dancer. Le code concernant l'init reste pas top, idem pour la gestion de dépendances (un simple script), il faudrait utiliser les outils du cpan.
126 lines
3.2 KiB
Perl
126 lines
3.2 KiB
Perl
package interface::nsd4;
|
||
use v5.14;
|
||
use Moo;
|
||
use URI;
|
||
use fileutil ':all';
|
||
use remotecmd ':all';
|
||
use copycat ':all';
|
||
use configuration ':all';
|
||
|
||
has [ qw/mycfg tmpdir primarydnsserver secondarydnsserver/ ] => qw/is ro required 1/;
|
||
|
||
# on suppose que tout est déjà mis à jour dans le fichier
|
||
sub reload_sec {
|
||
my ($self, $slavedzones) = @_;
|
||
|
||
$self->_reload_conf($slavedzones);
|
||
|
||
my $cmd = "sudo nsd-control reconfig";
|
||
|
||
my $user = get_user_from_cfg($$self{mycfg});
|
||
my $host = get_host_from_cfg($$self{mycfg});
|
||
my $port = get_port_from_cfg($$self{mycfg});
|
||
|
||
remotecmd $user, $host, $port, $cmd
|
||
}
|
||
|
||
# get, modify, push the file
|
||
|
||
sub _reload_conf {
|
||
my ($self, $slavedzones) = @_;
|
||
|
||
my $f = "file://$$self{tmpdir}/nsd.conf";
|
||
my $remote = ($$self{mycfg}{cfg}) ? $$self{mycfg}{cfg} : undef;
|
||
|
||
my $user = get_user_from_cfg($$self{mycfg});
|
||
my $host = get_host_from_cfg($$self{mycfg});
|
||
my $port = get_port_from_cfg($$self{mycfg});
|
||
|
||
$remote //= "ssh://$user". '@' . "$host/etc/nsd/nsd.conf";
|
||
|
||
copycat $remote, $f;
|
||
|
||
my $data = read_file $f;
|
||
|
||
# if it's the first time we get the configuration, fresh start
|
||
$data .= "\n## BEGIN_GENERATED" if( $data !~ /BEGIN_GENERATED/);
|
||
|
||
my $v4 = get_v4_from_cfg($$self{primarydnsserver});
|
||
my $v6 = get_v6_from_cfg($$self{primarydnsserver});
|
||
|
||
my $debut = "## BEGIN_GENERATED";
|
||
|
||
my $nouveau = '';
|
||
my $dnsslavekey = get_dnsslavekey_from_cfg($$self{primarydnsserver});
|
||
|
||
# $nouveau .= "
|
||
#remote-control:
|
||
# control-enable: yes
|
||
# control-interface: 127.0.0.1
|
||
# control-port: 8952
|
||
# server-key-file: '/etc/nsd/nsd_server.key'
|
||
# server-cert-file: '/etc/nsd/nsd_server.pem'
|
||
# control-key-file: '/etc/nsd/nsd_control.key'
|
||
# control-cert-file: '/etc/nsd/nsd_control.pem'
|
||
#
|
||
#key:
|
||
#
|
||
## pattern : configuration to reproduce on every slaves
|
||
$nouveau .= "
|
||
pattern:
|
||
\tname: 'slavepattern'
|
||
";
|
||
|
||
if($v4) {
|
||
# allow notify & request xfr, v4 & v6
|
||
$nouveau .= "\tallow-notify: $v4 \"$dnsslavekey\" \n"
|
||
. "\trequest-xfr: $v4 \"$dnsslavekey\" \n";
|
||
}
|
||
|
||
if($v6) {
|
||
$nouveau .= "\tallow-notify: $v6 \"$dnsslavekey\" \n"
|
||
. "\trequest-xfr: $v6 \"$dnsslavekey\" \n";
|
||
}
|
||
|
||
$nouveau .= "\n";
|
||
|
||
for(@{$slavedzones}) {
|
||
|
||
$nouveau .= "zone:\n\tname: \"$$_{domain}\"\n"
|
||
. "\tzonefile: \"slave/$$_{domain}\"\n";
|
||
$nouveau .= "\tinclude-pattern: 'slavepattern'\n\n";
|
||
}
|
||
|
||
$data =~ s/$debut.*/$debut\n$nouveau/gsm;
|
||
|
||
write_file $f, $data;
|
||
copycat $f, $remote;
|
||
|
||
my $cmd = "sudo nsd-control reconfig";
|
||
|
||
remotecmd $user, $host, $port, $cmd
|
||
}
|
||
|
||
sub reconfig {
|
||
my ($self, $zname) = @_;
|
||
|
||
my $user = get_user_from_cfg($$self{mycfg});
|
||
my $host = get_host_from_cfg($$self{mycfg});
|
||
my $port = get_port_from_cfg($$self{mycfg});
|
||
my $cmd = "sudo nsd-control reconfig";
|
||
remotecmd $user, $host, $port, $cmd
|
||
}
|
||
|
||
sub delzone {
|
||
my ($self) = @_;
|
||
|
||
my $user = get_user_from_cfg($$self{mycfg});
|
||
my $host = get_host_from_cfg($$self{mycfg});
|
||
my $port = get_port_from_cfg($$self{mycfg});
|
||
my $cmd = "sudo nsd-control reconfig";
|
||
remotecmd $user, $host, $port, $cmd;
|
||
#die "nsd4 delzone not implemented.";
|
||
}
|
||
|
||
1;
|