array('subdomain','sub2'), 'user2' => array('sub4') ); // main domain for dynamic DNS $dyndns = "dyndns.example.org"; // DNS server to send update to $dnsserver = "localhost"; // port of DNS server $dnsport = ""; // short sanity check for given IP function checkip($ip) { $iptupel = explode(".", $ip); foreach ($iptupel as $value) { if ($value < 0 || $value > 255) return false; } return true; } // retrieve IP $ip = $_SERVER['REMOTE_ADDR']; // retrieve user if ( isset($_SERVER['REMOTE_USER']) ) { $user = $_SERVER['REMOTE_USER']; } else if ( isset($_SERVER['PHP_AUTH_USER']) ) { $user = $_SERVER['PHP_AUTH_USER']; } else { syslog(LOG_WARN, "No user given by connection from $ip"); exit(0); } // open log session openlog("DDNS-Provider", LOG_PID | LOG_PERROR, LOG_LOCAL0); // check for given domain if ( isset($_POST['DOMAIN']) ) { $subdomain = $_POST['DOMAIN']; } else if ( isset($_GET['DOMAIN']) ) { $subdomain = $_GET['DOMAIN']; } else { syslog(LOG_WARN, "User $user from $ip didn't provide any domain"); exit(0); } // check for needed variables if ( isset($subdomain) && isset($ip) && isset($user) ) { // short sanity check for given IP if ( preg_match("/^(\d{1,3}\.){3}\d{1,3}$/", $ip) && checkip($ip) && $ip != "0.0.0.0" && $ip != "255.255.255.255" ) { // short sanity check for given domain if ( preg_match("/^[\w\d-_\*\.]+$/", $subdomain) ) { // check whether user is allowed to change domain if ( in_array("*", $user_domain[$user]) or in_array($subdomain, $user_domain[$user]) ) { if ( $subdomain != "-" ) $subdomain = $subdomain . '.'; else $subdomain = ''; // shell escape all values $subdomain = escapeshellcmd($subdomain); $user = escapeshellcmd($user); $ip = escapeshellcmd($ip); // prepare command $data = "<