<?php

# CONFIGURATION BEGINS -------------------------------------------------------
# define host and passwords here 
$hosts = array(
	'test'  => 'test',
	'b7br' => 'ootae6Nahc',
        '0js0' => 'ieZekokan9',
        'v2hm' => 'Eigh9demei',
        '4sgq' => 'Ecae5eeloo',
        'q5cg' => 'aPh6EeH1ki',

);
$zone = "dyn.kkhleer.de"; # the dynamic DNS zone
$dnsserver = "localhost"; # authorative DNS server for the zone above
# CONFIGURATION ENDS ---------------------------------------------------------

if(isset($_GET['username']) && isset($_GET['password']) !="") {
	$host = $_GET['username'];
	$pass = $_GET['password'];
} else {
	$host = @$_SERVER['PHP_AUTH_USER'];
	$pass = @$_SERVER['PHP_AUTH_PW'];
}

if ((!$host) or (!$pass) or (!($hosts[$host] == $pass))) { 
    echo "badauth";
    exit; 
}

if($_GET['hostname'] != $host.".".$zone) {
echo "nohost";
exit;
}



	if(filter_var($_GET['ipv4'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
		$ipv4 = $_GET['ipv4'];
	else if(filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
		$ipv4 = $_SERVER['REMOTE_ADDR'];

	if(filter_var($_GET['ipv6'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
		$ipv6 = $_GET['ipv6'];
	else if(filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
		$ipv6 = $_SERVER['REMOTE_ADDR'];
	
	$oldipv4 = trim(`host $host.$zone localhost | cut -d ' ' -f 4`);
	$oldipv6 = trim(`host $host.$zone localhost | cut -d ' ' -f 5`);

	$ip4eq=false;
	$ip6eq=false;
	
	if($ipv4 != "") 
		$ip4eq = ($ipv4==$oldipv4);
		
	if($ipv6 != "")
		$ip6eq = ($ipv6==$oldipv6);	

	if($ip4eq || $ip6eq) {
		echo "nochg";
	    	exit;
	}

		
	$nsucmd = "server $dnsserver
	zone $zone
	";

		$nsucmd .= "update delete $host.$zone A
		";
		$nsucmd .= "update delete $host.$zone AAAA
		";

	if(isset($ipv4)) 
		$nsucmd .= "update add $host.$zone 300 A ".$ipv4."
		";

	if(isset($ipv6)) 
		$nsucmd .= "update add $host.$zone 300 AAAA ".$ipv6."
		";

$nsucmd .= "send
        ";

$tmpfile = trim(`mktemp /tmp/nsupdate.XXXXXX`);
$fp = fopen($tmpfile, 'w');
if(!$fp) die("500");
fwrite($fp, $nsucmd);
fclose($fp);
`/usr/bin/nsupdate $tmpfile`;
unlink($tmpfile);
echo "good";
//error_log($nsucmd);
?>
