--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile Thu Nov 20 18:16:17 2008 +0000
@@ -0,0 +1,33 @@
+
+DESTDIR =
+
+prefix = /usr/local
+sbindir = ${prefix}/sbin
+bindir = ${prefix}/bin
+man8dir = ${prefix}/man/man8
+
+SCRIPTS = dns-tool
+MAN8PAGES = $(SCRIPTS:=.8.gz)
+CLEANFILES = $(SCRIPTS) $(MAN8PAGES)
+
+
+.PHONY: all clean install
+
+all: $(SCRIPTS) $(MAN8PAGES)
+
+clean:
+ rm -f $(CLEANFILES)
+
+install: all
+ install -m 0755 -d ${DESTDIR}${sbindir}/
+ install -m 0755 -d ${DESTDIR}${man8dir}/
+
+ install -m 0755 $(SCRIPTS) ${DESTDIR}${sbindir}/
+ install -m 0644 $(MAN8PAGES) ${DESTDIR}${man8dir}/
+
+
+%: %.pl
+ install -m 0755 $< $@
+
+%.8.gz: %.pl
+ pod2man --section 8 $< | gzip >$@
--- /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:
+