3 # Convert -- A Tool for Conversion of Zone Files to NSC Format
5 # (c) 1999--2003 Martin Mares <mj@ucw.cz>
9 use Net::DNS::Resolver;
11 getopts('v', \%opts) && @ARGV == 2 || do {
12 print "Usage: convert [-v] <domain> <server>\n";
15 $domain = norm_name($ARGV[0]);
17 $verbose = $opts{"v"};
19 $res = new Net::DNS::Resolver;
20 $res->nameservers($ARGV[1]);
25 $verbose && print "; Fetching zone data for $domain\n";
26 @zone = $res->axfr($domain) or die("Zone transfer failed");
36 $ips{$n} = (defined $ips{$n} ? $ips{$n} : "") . ", " . $r->address;
37 } elsif ($type eq "SOA") {
38 print "SOA($domain)\n";
39 } elsif ($type eq "MX") {
41 $mx{$n} = ((defined $mx{$n}) ? $mx{$n} . ", " : "") . $r->preference . " " . fix($r->exchange);
42 } elsif ($type eq "CNAME") {
45 $cn{$cn} = ((defined $cn{$cn}) ? $cn{$cn} . ", " : "") . $n;
46 } elsif ($type eq "NS") {
49 $subd{$n} .= "NS(" . fix($r->nsdname) . ")\n";
52 print "; FIXME: ", $r->string, "\n";
57 foreach $n (sort keys %have) {
60 foreach $n (sort keys %sub) {
71 if (defined $ips{$n}) { print "H($n$ips{$n})\n"; }
72 elsif ($flag) { print "H($n)\n"; }
73 if (defined $mx{$n}) { print "MX($mx{$n})\n"; }
74 if (defined $cn{$n}) { print "ALIAS($cn{$n})\n"; }
86 if ($n eq $domain) { return "@"; }
87 elsif ($n =~ /^(.*)\.$domain$/) { return $1; }
88 else { return "$n."; }