#!/usr/bin/php
<?
/*************************************
* DirectAdmin to Power DNS Importer *
*-----------------------------------*
* (c) 2009 by GUEST s.r.l. - Italy *
* License: GPL *
* Feel free to customize on your *
* needs as long this copyright *
* remains intact *
*************************************/
// MySQL Host
define("MYSQL_HOST","");
// MySQL Username
define("MYSQL_USERNAME","");
// MySQL Password
define("MYSQL_PASSWORD","");
// MySQL Database
define("MYSQL_DATABASE","");
// Default TTL
define("DEFAULT_TTL", 14400);
function run_query($sql)
{
$conn = mysql_connect( MYSQL_HOST, MYSQL_USERNAME, MYSQL_PASSWORD ) or die ("Can't connect to MySQL server: ".mysql_error());
$select_db = mysql_select_db(MYSQL_DATABASE, $conn) or die ("Can't connect to MySQL database: ".mysql_error());
$result = mysql_query($sql) or die ("Error in SQL query: ".mysql_error()."\n".$sql);
return $result;
}
function get_domain_id($DOMAIN) {
// Check if domain is already present (id > 0)
$sql = " SELECT id FROM domains WHERE name = '".$DOMAIN."' LIMIT 1 ";
$result = run_query($sql);
if ( mysql_num_rows($result) == 1 ) {
// domain exists.
$id = mysql_result($result,0,'id');
}
if ( ! $id > 0 ) {
// domain id not present, an error occured in fetch or insert
die("Domain not found.");
}
return $id;
}
function insert_record ($TYPE, $RECORD, $RECORD_TIME, $DOMAIN, $DOMAIN_ID) {
if ( trim($RECORD) == "" ) {
// invalid record or domain.
return false;
}
$arr_record = explode("&",$RECORD);
// Record's TTL doesn't exist. I'll set the default.
if ( ! $RECORD_TIME > 0 ) {
$RECORD_TIME = DEFAULT_TTL;
}
// Delete old records
$sql = "DELETE FROM records WHERE domain_id = '".$DOMAIN_ID."' AND type = '".$TYPE."'";
run_query($sql);
foreach ( $arr_record as $record_singolo ) {
$arr_chiave_valore = explode("=",$record_singolo,2);
$left = $arr_chiave_valore[0];
$content = $arr_chiave_valore[1];
// Last char is a ".", skip concatenating second level domain.
if ( substr($left,-1,1) == "." ) {
// I'll remove latest dot from domain's leftpart
$name = substr($left,0,strlen($left)-1);
} else {
// Recompose the whole domain.
$name = $left.".".$DOMAIN;
}
switch ( $TYPE ) {
case "MX":
// Insert MX records
$sql = "INSERT INTO records SET domain_id = '".$DOMAIN_ID."', name = '".$DOMAIN."', type = '".$TYPE."', content = '".$name."', ttl = '".$RECORD_TIME."', prio = '".$content."', change_date = '".time()."'";
run_query($sql);
break;
case "NS":
// Insert NS records
$sql = "INSERT INTO records SET domain_id = '".$DOMAIN_ID."', name = '".$DOMAIN."', type = '".$TYPE."', content = '".$name."', ttl = '".$RECORD_TIME."', prio = NULL, change_date = '".time()."'";
run_query($sql);
break;
default:
// Insert standard records (A, AAAA, TXT, ...)
$sql = "INSERT INTO records SET domain_id = '".$DOMAIN_ID."', name = '".$name."', type = '".$TYPE."', content = '".$content."', ttl = '".$RECORD_TIME."', prio = NULL, change_date = '".time()."'";
run_query($sql);
break;
}
}
}
if ( trim($_ENV['DOMAIN']) != "" ) {
// domain ID
$domain_id = get_domain_id($_ENV['DOMAIN']);
} else {
die("Invalid domain specified.");
}
// Record type to be parsed with the same function
$record=array('A','AAAA','CNAME','MX', "NS", "TXT", "PTR");
foreach ( $record as $type ) {
// Insert record.
insert_record($type, $_ENV[$type], $_ENV[$type."_TIME"], $_ENV['DOMAIN'], $domain_id);
}
?>