<?php

	$myip = null;
	$hostname = null;
	$type = null;
	$user = null;
	$password = null;
	$myzone = 'example.com';
	$myserver = 'nameserver.example.com';

	$AUTH_MAP = array(
		"foo.$myzone" => array( 'user' => 'bar', 'password' => 'mysecret', 'ipv6' => false ),
	);

	if ( isset($_GET['hostname']) ) {
		if ( isset($AUTH_MAP[$_GET['hostname']]) ) {
			$hostname = $_GET['hostname'];
		} else {
			echo "nohost\n";
			exit;
		}
	} else {
		echo "911\n";
		exit;
	}

	if ( isset($_GET['myip']) && filter_var($_GET['myip'], FILTER_VALIDATE_IP) ) {
		$myip = $_GET['myip'];
	} else {
		$myip = $_SERVER['REMOTE_ADDR'];
	}

	if ( $AUTH_MAP[$hostname]['ipv6'] && filter_var($myip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ) {
		$type = 'AAAA';
	} elseif ( filter_var($myip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ) {
		$type = 'A';
	} else {
		echo "911\n";
		exit;
	}

	if ( isset($_SERVER['PHP_AUTH_USER']) ) {
		$user = $_SERVER['PHP_AUTH_USER'];
	} else {
		echo "badauth\n";
		exit;
	}

	if ( isset($_SERVER['PHP_AUTH_PW']) ) {
		$password = $_SERVER['PHP_AUTH_PW'];
	} else {
		echo "badauth\n";
		exit;
	}

	if ( ($AUTH_MAP[$hostname]['user'] == $user) && ($AUTH_MAP[$hostname]['password'] == $password) ) {
		shell_exec("/usr/bin/nsupdate -k /www/Kexample.com.+247+89651.private <<EOF
server $myserver
zone $myzone
update delete $hostname. $type
update add $hostname. 30 $type $myip
send
EOF
");
		echo "good $myip\n";
	} else {
		echo "badauth\n";
		exit;
	}

	if ( isset($_GET['debug']) ) {
		echo "user: $user, password: $password, hostname: $hostname, myip: $myip, type: $type\n";
	}

?>