« 今週の残念な質問術 | ホーム | OmniFocusがよくわかりませんよ »

2008年2月 4日

今週のもっと自動化しよう

最近tinydnsでのDNS管理のが多いんだけど一方でBINDも使ってたりするので、両者の間で移管作業とかなるとちょっとくらくらする。しかも趣味でなく業務だったりすると一個でもRR抜けたりすると下手すりゃ血を見るのでまあがくぶるなわけで。
#!/usr/bin/perl

use DNS::ZoneParse;

use strict;
use warnings;

my $fname = $ARGV[0];
my $origin = $ARGV[1];
my $p = new DNS::ZoneParse($fname, $origin);

print "Z" . $p->origin . ":" . $p->soa->{primary} . ":" . $p->soa->{email} . "\n";

# NS RR
foreach (@{$p->ns()}) {
    my $ttl = ($_->{ttl} ? $_->{ttl} : $p->soa->{ttl});
    print "&" . $p->origin . ":" . $_->{host} . ":" . $p->soa->{ttl} . "\n";
}

# MX RR
foreach (@{$p->mx()}) {
    my $ttl = ($_->{ttl} ? $_->{ttl} : $p->soa->{ttl});
    if ($_->{name} eq "@") {
        print "@" . $p->origin . "::" . $_->{host} . "." . $p->origin . ":" . $p->soa->{ttl} . "\n";
    } else {
        print "@" . $_->{name} . "." . $p->origin . "::" . $_->{host} . "." . $p->origin . ":" . $p->soa->{ttl} . "\n";
    }
}

# TXT RR
foreach (@{$p->txt()}) {
    my $ttl = ($_->{ttl} ? $_->{ttl} : $p->soa->{ttl});
    my $txt = $_->{text};
    $txt =~ s/:/\\072/g;
    if ($_->{name} eq "@") {
        print "'" . $p->origin . ":" . $txt . ":" . $p->soa->{ttl} . "\n";
    } else {
        print "'" . $_->{name} . "." . $p->origin . ":" . $txt . ":" . $p->soa->{ttl} . "\n";
    }
}


# A RR
foreach (@{$p->a()}) {
    my $ttl = ($_->{ttl} ? $_->{ttl} : $p->soa->{ttl});
    if ($_->{name} eq "@") {
        print "+" . $p->origin . ":" . $_->{host} . ":" . $p->soa->{ttl} . "\n";
    } else {
        print "+" . $_->{name} . "." . $p->origin . ":" . $_->{host} . ":" . $p->soa->{ttl} . "\n";
    }
}

トラックバック(0)

トラックバックURL: http://foursics.jp/cgi-bin/mt/mt-tb.cgi/162

コメントする