=head1 list_zone

Zum Anzeigen einer DNS-Zone.

=head2 Argumente

=over 4

=item $dom

Domain-ID laut Datenbank.

=item $kn

Standard-Prompt.

=item $server

Server, von dem die Zone gezogen werden soll;
Default: der in der Datenbank eingetragene Master bzw. C<$NSI>,
falls kein Master eingetragen ist.

=back

=head2 Ergebnis

Nix.

=cut

use utf8;
use warnings; no warnings "redefine";
use strict;

use Cf qw($NSI);
use Dbase::Globals qw(bignum find_descr);
use Dbase::Help qw(DoFn);
use Fehler qw(problem);
use Dbase::IP;

sub list_zone($;$$) {
	my($dom,$kn,$server) = @_;
	my($name,$nserver,$bits,$flags) = DoFn <<_;
	SELECT    domainkunde.domain, ipkunde.ip6,ipkunde.bits, domainkunde.flags
	FROM      domainkunde
	LEFT JOIN ipkunde ON ipkunde.id = domainkunde.nserver
	WHERE     domainkunde.id = $dom
_
	$nserver = Dbase::IP->new_db($nserver,$bits);
	defined( my $flag_dnszone = find_descr domainflags=>'dnszone' )
		or return problem 'Es gibt kein dnszone-Flag in dieser Datenbank!?';
	return problem <<_ unless $server || $nserver || $flags & bignum(1)<<$flag_dnszone;
Ich weiß nicht, woher ich die Zone holen soll, da weder ein DNS-Server explizit
angegeben wurde noch ein Master-Server eingetragen ist noch eine DNS-Zone bei
uns existiert (zumindest vermisse ich das dnszone-Flag).
_
	if ( system my @command = ( dig => axfr => $name, '@'.($server or $nserver ? $nserver->str : $NSI) ) ) {
		return problem "Fehler beim Aufruf von '@command' (Return-Code $?)"
		               . ( length $! ? ":\n$!" : '.' );
	}
}

1;
