#!/usr/bin/perl -w
#
# requires the following debian packages:
#
# apt-get install libwww-perl libdigest-md5-perl liburi-perl libmime-base64-perl
#

use LWP::UserAgent;
use Digest::MD5;
use MIME::Base64;
use URI::Escape;
use Getopt::Long;
use strict;
use vars qw($opt_host $opt_ip $opt_password $opt_url);

$opt_url = "http://maui.doit.org/cgi-bin/nsupdate.cgi";

GetOptions("host=s", "password=s", "ip=s", "url=s");

if (!defined($opt_host) || !defined($opt_password))
{
    print STDERR "usage: $0 --host=HOST --password=PASSWORD [--ip=IP] [--url=URL]\n";
    exit 1;
}

my $u = LWP::UserAgent->new;
$u->agent("nsupdate/1.0 ");

$opt_url .= "?host=$opt_host";

my $req = HTTP::Request->new(GET => $opt_url);
my $res = $u->request($req);

if ($res->is_success)
{
    my $md = Digest::MD5->new;
    $md->add(decode_base64($res->content));
    # include ip for additional security
    $md->add($opt_ip) if defined($opt_ip);
    $md->add($opt_password);
    my $digest = encode_base64($md->digest);
    $digest = uri_escape($digest);

    $opt_url .= "&auth=$digest";
    $opt_url .= "&ip=$opt_ip" if defined($opt_ip);

    $req = HTTP::Request->new(GET => $opt_url);
    $res = $u->request($req);
    print $res->content;
}
else
{
    print "bummer\n";
}


