<?php
/*************************************************************************************************

    updatedns.php
    DDNSをアップデートをする。

                                2007.07.29 Ver.0.01  Genki wrote

    仕様
    Ver.0.01    POSTで各種データを受信して、データベースと照らし合わせて処理を。
    
***************************************************************************************************/
/**** 各種設定 ****/
/*ドメインの一覧*/
$domains = array("genkikko.net","g-dd.net");


/**** POSTデータを配列に格納 ****/
$array = array("username","password","ipaddress","subdomain","domain");
$sizeofarray sizeof($array);
for(
$i=0;$i<$sizeofarray;$i++){
    $
$array[$i] = $_POST["{$array[$i]}"];
}

/******************************  HTMLヘッダを出力  **********************************************/
print<<<_EOH_
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML lang="ja">
<HEAD>
<meta http-equiv="Content-Type" content="text/php; charset=euc-jp">
<LINK rel="stylesheet" href="/main.css" type="text/css">
<TITLE>DDNS更新 -Genkikko Server DDNS-</TITLE>
</HEAD>
<BODY>
<H3>DDNS更新 -Genkikko Server DDNS-</H3>
_EOH_;



/*************************************************************************************************

    POSTデータが無かったら入力フォーム表示。
    
        ・どれか1つでも欠けてたら入力フォーム
        ・どれか1つでも送信されてたら欠けてる分の警告
        ・IPアドレスがPOSTで送られてなかったら、相手のアドレスを

***************************************************************************************************/
if(!($username && $password && $ipaddress && $subdomain && $domain)){
    if(
$username || $password || $ipaddress || $subdomain || $domain){
        if(!
$username){
            
$msg .= "User IDが入力されていません。<br>";
        }
        if(!
$password){
            
$msg .= "Passwordが入力されていません。<br>";
        }
        if(!
$ipaddress){
            
$msg .= "IP addressが入力されていません。<br>";
        }
        if(!
$subdomain){
            
$msg .= "Subdomainが入力されていません。<br>";
        }
        if(!
$domain){
            
$msg .= "Domainが選択されていません。<br>";
        }
        echo 
"<font color=\"red\">$msg</font>";
    }
    if(!
$ipaddress){
        
$ipaddress $_SERVER['REMOTE_ADDR'];
    }
    echo <<<EOF
<form action="{$_SERVER['PHP_SELF']}" method="post">
 <table border=0>
  <tr>
   <td>
    User ID
   </td>
   <td>
    :
   </td>
   <td>
    <input type="text" name="username" size=20 maxlength=20 value="$username">
   </td>
  </tr>
  <tr>
   <td>
    Password
   </td>
   <td>
    :
   </td>
   <td>
    <input type="password" name="password" size=20 maxlength=20>
   </td>
  </tr>
  <tr>
   <td>
    IP address
   </td>
   <td>
    :
   </td>
   <td>
    <input type="text" name="ipaddress" size=20 maxlength=20 value="$ipaddress">
   </td>
  </tr>
  <tr>
   <td>
    Subdomain
   </td>
   <td>
    :
   </td>
   <td>
    <input type="text" name="subdomain" size=20 maxlength=20 value="$subdomain">
   </td>
  </tr>
  <tr>
   <td>
    Domain
   </td>
   <td>
   :
   </td>
   <td>
    <select name="domain">
     <option value="">-- Please Select --
EOF;
    
//配列$domainから一覧を作成。
    
for($i=0;$domains[$i];$i++){
        if(
$domains[$i] == $domain){
            echo 
"<option value=\"{$domains[$i]}\" selected>.{$domains[$i]}\n";
        }else{
            echo 
"<option value=\"{$domains[$i]}\">.{$domains[$i]}\n";
        }
    }

    echo <<<EOF
    </select>
   </td>
  </tr>
 </table>
 <input type="submit" value="Update">
</form>

EOF;

/*************************************************************************************************

    POSTデータが揃ってたら処理。
        ・データベースに登録されたデータと照合。

***************************************************************************************************/
}else{

    if(
$username && $ipaddress && $subdomain && $domain){
    
        
$table str_replace(".","_",$domain);
        
$table str_replace("-","_",$table);

        
$cn pg_connect("host=????.hibi port=???? dbname=???? user=????");
        
$rs pg_query("select * from $table where subdomain='$subdomain'");

            
$item pg_fetch_array($rs);

        
pg_close($cn);
        
        if(
$item){
            if(
md5($password) != $item['password']){
                echo 
"Invalid Password.";
                die();
            }elseif(
$username != $item['id']){
                echo 
"Invalid Username.";
                die();
            }else{
                
$dat[0] = "update delete $subdomain.$domain\n";
                
$dat[1] = "update add $subdomain.$domain 300 A $ipaddress\n";
                
$dat[2] = "\n";
            
                
$update_file "./temporary/{$$array[3]}.txt";
                
touch($update_file);
            
                
$fp fopen($update_file,'w');
                if(
$item['current_ip'] == "0.0.0.0"){
                    
$i 1;
                }else{
                    
$i 0;
                }
                for(;
$dat[$i];$i++){
                    
fputs($fp,$dat[$i]);
                }
                
fclose($fp);
            
                
exec("nsupdate -k /var/named/Knamed.+???+???.private $update_file",$output,$status);
            
                
unlink($update_file);
            
                echo 
"Updated.";
                
$timestamp date('Y-m-d H:i:s');
    
                
$cn pg_connect("host=????.hibi port=???? dbname=???? user=????");
                
$rs pg_query("update $table set current_ip='$ipaddress' where subdomain='$subdomain'");
                
$rs pg_query("update $table set update_time='$timestamp' where subdomain='$subdomain'");
                
pg_close($cn);
            }
        }else{
            echo 
"Invalid login";
        }
    }
}
echo 
"<hr>\n<a href=\"http://ddns.genkikko.net/\">もどる</a>\n";
echo 
"</body>\n<html>";

?>