3 # Convert -- A Tool for Conversion of Zone Files to NSC Format
5 # (c) 1999 Martin Mares <mj@ucw.cz>
8 use lib "/home/mj/perl/lib/site_perl";
11 use Net::DNS::Resolver;
13 getopts('v', \%opts) && @ARGV == 1 || do {
14 print "Usage: convert [-v] <domain>\n";
17 $domain = norm_name($ARGV[0]);
19 $verbose = $opts{"v"};
21 $res = new Net::DNS::Resolver;
26 $verbose && print "; Fetching zone data for $domain\n";
27 @zone = $res->axfr($domain) or failed("Zone transfer failed");
37 $ips{$n} = (defined $ips{$n} ? $ips{$n} : "") . ", " . $r->address;
38 } elsif ($type eq "SOA") {
39 print "SOA($domain)\n";
40 } elsif ($type eq "MX") {
42 $mx{$n} = ((defined $mx{$n}) ? $mx{$n} . ", " : "") . $r->preference . " " . fix($r->exchange);
43 } elsif ($type eq "CNAME") {
46 $cn{$cn} = ((defined $cn{$cn}) ? $cn{$cn} . ", " : "") . $n;
47 } elsif ($type eq "NS") {
50 $subd{$n} .= "NS(" . fix($r->nsdname) . ")\n";
53 print "; FIXME: ", $r->string, "\n";
58 foreach $n (sort keys %have) {
61 foreach $n (sort keys %sub) {
72 if (defined $ips{$n}) { print "H($n$ips{$n})\n"; }
73 elsif ($flag) { print "HH($n)\n"; }
74 if (defined $mx{$n}) { print "MX($mx{$n})\n"; }
75 if (defined $cn{$n}) { print "CNAME($cn{$n})\n"; }
87 if ($n eq $domain) { return "@"; }
88 elsif ($n =~ /^(.*)\.$domain$/) { return $1; }
89 else { return "$n."; }