#!/usr/local/bin/perl
# Force a zone transfer for a slave domain
use strict;
use warnings;
no warnings 'redefine';
no warnings 'uninitialized';
our (%text, %in);
require './bind8-lib.pl';
&ReadParse();
my $zone = &get_zone_name_or_error($in{'zone'}, $in{'view'});
my $z = &zone_to_config($zone);
my $zconf = $z->{'members'};
&can_edit_zone($zone) ||
&error($text{'master_ecannot'});
my $desc = &ip6int_to_net(&arpa_to_ip($zone->{'name'}));
&ui_print_header($desc, $text{'xfer_title'}, "",
undef, undef, undef, undef, &restart_links($zone));
# Get transfer source IP
my $options = &find("options", $zconf);
my $src = &find("transfer-source", $options->{'members'});
# Get master IPs
my $masters = &find("masters", $zconf);
my @ips;
foreach my $av (@{$masters->{'members'}}) {
push(@ips, join(" ", $av->{'name'}, @{$av->{'values'}}));
}
print &text('xfer_doing', join(" ", @ips)),"
\n";
my $temp = &transname();
my $rv = &transfer_slave_records($zone->{'name'}, \@ips, $temp,
$src ? $src->{'values'}->[0] : undef,
$src && @{$src->{'values'}} > 2 ?
$src->{'values'}->[2] : undef);
foreach my $ip (@ips) {
if ($rv->{$ip}) {
print &text('xfer_failed', $ip,
"".&html_escape($rv->{$ip}).""),
"
\n";
}
else {
print &text('xfer_done', $ip),"
\n";
}
}
print "
\n"; # Show records if (-r $temp) { my @recs = &read_zone_file($temp, $zone->{'name'}.".", undef, 0, 1); if (@recs) { print &text('xfer_count', scalar(@recs)),"
\n"; } else { print "$text{'xfer_none'}
\n"; } } &unlink_file($temp); &ui_print_footer("edit_slave.cgi?zone=$in{'zone'}&view=$in{'view'}", $text{'master_return'});