#!/usr/bin/perl -w

use Net::DNS;

# If the user didn't specify the domain name and address of a host to add, exit
die "Usage:  $0 <host> <address>" unless (@ARGV == 2);

my $host = $ARGV[0];
my $zone = $host;
my $addr = $ARGV[1];
my $primary;

# (Simplemindedly) Derive the domain name of the zone from the domain
# name of the host
$zone =~ s/^[\w-]+\.//;

# Create the update message
my $update = Net::DNS::Update->new($zone);
    
# Add an A records for the host
$update->push("update", rr_add("$host. 86400 A $addr"));
    
# Find the zone's primary master name server
my $res = Net::DNS::Resolver->new;
my $query = $res->query($zone, "SOA");

if ($query) {
	$primary = ($query->answer)[0]->mname;
} else {
	die "Couldn't find primary master name server: ", $res->errorstring, "\n";
}

$res->nameservers($primary);

my $reply = $res->send($update);
    
# Did it work?
if (defined $reply) {
	if ($reply->header->rcode eq "NOERROR") {
		print "Update succeeded\n";
	} else {
		print "Update failed: ", $reply->header->rcode, "\n";
	}
} else {
	print "Update failed: ", $res->errorstring, "\n";
}
