diff -r 000000000000 -r 78c87a54521e dns-tool.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dns-tool.pl Thu Nov 20 18:16:17 2008 +0000 @@ -0,0 +1,60 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use Pod::Usage; +use File::Basename; + +my $ME = basename $0; + +my $opt_ttl = 3600; +my $opt_domain; + +my $opt_resolv = "/etc/resolv.conf"; + +MAIN: { + pod2usage() if @ARGV == 0; + + if (!$opt_domain) { + local @ARGV = ($opt_resolv); + $opt_domain = (split " ", (grep /^\s*(?:domain|search)\s+/, <>)[-1])[1]; + + die "$ME: Can't guess the local domain from \"$opt_resolv\"\n" + if not $opt_domain; + } + + my ($host, @aliases) = map { /\./ ? $_ : "$_.$opt_domain" } split /:/, shift; + my $ip = shift; + + pod2usage() if !@aliases and not $ip; + + print "update add $host $opt_ttl CNAME $_\n" foreach @aliases; + print "update add $host $opt_ttl A $ip\n" if defined $ip; + print "send\n"; + + if ($ip) { + my $rev_ip = (join ".", reverse split /\./, $ip) . ".in-addr.arpa"; + print "update add $rev_ip $opt_ttl PTR $host\n" + . "send\n"; + } +} + +__END__ + +=head1 NAME + +dnstool - interface to nsupdate + +=head1 SYNOPSIS + + dns-tool host[:alias:...] ip + dns-tool host:alias:... + +=head1 DESCRIPTION + +=head1 OPTIONS + +=cut + +# vim:sts=4 sw=4 aw ai sm: +