From 3728fe9875cd266700bd5db9249ae48f08861373 Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Mon, 07 May 2012 11:29:12 -0400 Subject: [PATCH] Added tool to import dns records from PowerDNS tupa controlpanel. --- interface/web/tools/dns_import_tupa.php | 156 +++++++++++++++++++++++++++++++++++++++ interface/web/tools/lib/menu.d/import.menu.php | 6 + interface/web/tools/lib/lang/en.lng | 2 interface/web/tools/templates/dns_import_tupa.htm | 56 ++++++++++++++ 4 files changed, 219 insertions(+), 1 deletions(-) diff --git a/interface/web/tools/dns_import_tupa.php b/interface/web/tools/dns_import_tupa.php new file mode 100644 index 0000000..2e2cbcb --- /dev/null +++ b/interface/web/tools/dns_import_tupa.php @@ -0,0 +1,156 @@ +<?php +/* +Copyright (c) 2008, Till Brehm, projektfarm Gmbh +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +require_once('../../lib/config.inc.php'); +require_once('../../lib/app.inc.php'); + +//* Check permissions for module +$app->auth->check_module_permissions('admin'); + +//* This is only allowed for administrators +if(!$app->auth->is_admin()) die('only allowed for administrators.'); + +$app->uses('tpl,validate_dns'); + +$app->tpl->newTemplate('form.tpl.htm'); +$app->tpl->setInclude('content_tpl', 'templates/dns_import_tupa.htm'); +$msg = ''; +$error = ''; + +// Resyncing dns zones +if(isset($_POST['start']) && $_POST['start'] == 1) { + + //* Set variable sin template + $app->tpl->setVar('dbhost',$_POST['dbhost']); + $app->tpl->setVar('dbname',$_POST['dbname']); + $app->tpl->setVar('dbuser',$_POST['dbuser']); + $app->tpl->setVar('dbpassword',$_POST['dbpassword']); + + //* Establish connection to external database + $msg .= 'Connecting to external database...<br />'; + + //* Backup DB login details + $conf_bak['db_host'] = $conf['db_host']; + $conf_bak['db_database'] = $conf['db_database']; + $conf_bak['db_user'] = $conf['db_user']; + $conf_bak['db_password'] = $conf['db_password']; + + //* Set external Login details + $conf['db_host'] = $_POST['dbhost']; + $conf['db_database'] = $_POST['dbname']; + $conf['db_user'] = $_POST['dbuser']; + $conf['db_password'] = $_POST['dbpassword']; + + //* create new db object + $exdb = new db(); + + $server_id = 1; + $sys_userid = 1; + $sys_groupid = 1; + + function addot($text) { + return trim($text) . '.'; + } + + //* Connect to DB + if($exdb->connect()) { + $domains = $exdb->queryAllRecords("SELECT * FROM domains WHERE type = 'MASTER'"); + if(is_array($domains)) { + foreach($domains as $domain) { + $soa = $exdb->queryOneRecord("SELECT * FROM records WHERE type = 'SOA' AND domain_id = ".$domain['id']); + if(is_array($soa)) { + $parts = explode(' ',$soa['content']); + $origin = addot($soa['name']); + $ns = addot($parts[0]); + $mbox = addot($parts[1]); + $serial = $parts[2]; + $refresh = 7200; + $retry = 540; + $expire = 604800; + $minimum = 86400; + $ttl = $soa['ttl']; + + $insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `origin`, `ns`, `mbox`, `serial`, `refresh`, `retry`, `expire`, `minimum`, `ttl`, `active`, `xfer`) VALUES + ('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$origin', '$ns', '$mbox', '$serial', '$refresh', '$retry', '$expire', '$minimum', '$ttl', 'Y', '')"; + $dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id'); + unset($parts); + $msg .= 'Import Zone: '.$soa['name'].'<br />'; + + //* Process the other records + $records = $exdb->queryAllRecords("SELECT * FROM records WHERE type != 'SOA' AND domain_id = ".$domain['id']); + if(is_array($records)) { + foreach($records as $rec) { + $rr = array(); + + $rr['name'] = addot($rec['name']); + $rr['type'] = $rec['type']; + $rr['aux'] = $rec['prio']; + $rr['ttl'] = $rec['ttl']; + + if($rec['type'] == 'NS' || $rec['type'] == 'MX' || $rec['type'] == 'CNAME') { + $rr['data'] = addot($rec['content']); + } else { + $rr['data'] = $rec['content']; + } + + $insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `zone`, `name`, `type`, `data`, `aux`, `ttl`, `active`) VALUES + ('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$dns_soa_id', '$rr[name]', '$rr[type]', '$rr[data]', '$rr[aux]', '$rr[ttl]', 'Y')"; + $dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id'); + //$msg .= $insert_data.'<br />'; + + } + } + } + + } + } + + + + } else { + $error .= $exdb->errorMessage; + } + + //* restore db login details + $conf['db_host'] = $conf_bak['db_host']; + $conf['db_database'] = $conf_bak['db_database']; + $conf['db_user'] = $conf_bak['db_user']; + $conf['db_password'] = $conf_bak['db_password']; + +} + +$app->tpl->setVar('msg',$msg); +$app->tpl->setVar('error',$error); + + +$app->tpl_defaults(); +$app->tpl->pparse(); + + +?> \ No newline at end of file diff --git a/interface/web/tools/lib/lang/en.lng b/interface/web/tools/lib/lang/en.lng index 597be72..fee9301 100644 --- a/interface/web/tools/lib/lang/en.lng +++ b/interface/web/tools/lib/lang/en.lng @@ -7,4 +7,6 @@ $wb['Sync Tools'] = 'Sync Tools'; $wb['Resync'] = 'Resync'; $wb['Import'] = 'Import'; +$wb['ISPConfig 3 mail'] = 'ISPConfig 3 mail'; +$wb['PDNS Tupa'] = 'PowerDNS Tupa'; ?> \ No newline at end of file diff --git a/interface/web/tools/lib/menu.d/import.menu.php b/interface/web/tools/lib/menu.d/import.menu.php index 086fd63..cf5f9eb 100644 --- a/interface/web/tools/lib/menu.d/import.menu.php +++ b/interface/web/tools/lib/menu.d/import.menu.php @@ -7,11 +7,15 @@ $items = array(); -$items[] = array( 'title' => 'ISPConfig 3', +$items[] = array( 'title' => 'ISPConfig 3 mail', 'target' => 'content', 'link' => 'tools/import_ispconfig.php'); +$items[] = array( 'title' => 'PDNS Tupa', + 'target' => 'content', + 'link' => 'tools/dns_import_tupa.php'); + $module['nav'][] = array( 'title' => 'Import', 'open' => 1, 'items' => $items); diff --git a/interface/web/tools/templates/dns_import_tupa.htm b/interface/web/tools/templates/dns_import_tupa.htm new file mode 100644 index 0000000..d616eba --- /dev/null +++ b/interface/web/tools/templates/dns_import_tupa.htm @@ -0,0 +1,56 @@ +<h2>Import DNS recods from Tupa PowerDNS controlpanel</h2> +<p><tmpl_var name="list_desc_txt"></p> + +<div class="panel panel_language_import"> + + <div class="pnl_formsarea"> + <fieldset class="inlineLabels"><legend>PowerDNS Tupa import</legend> + <div class="ctrlHolder"> + <p class="label">Tupa database hostname</p> + <div class="multiField"> + <input id="dbhost" type="text" value="{tmpl_var name='dbhost'}" name="dbhost" /> + </div> + </div> + <div class="ctrlHolder"> + <p class="label">Tupa database name</p> + <div class="multiField"> + <input id="dbname" type="text" value="{tmpl_var name='dbname'}" name="dbname" /> + </div> + </div> + <div class="ctrlHolder"> + <p class="label">Tupa database user</p> + <div class="multiField"> + <input id="dbuser" type="text" value="{tmpl_var name='dbuser'}" name="dbuser" /> + </div> + </div> + <div class="ctrlHolder"> + <p class="label">Tupa database password</p> + <div class="multiField"> + <input id="dbpassword" type="text" value="{tmpl_var name='dbpassword'}" name="dbpassword" /> + </div> + </div> + + <div class="ctrlHolder"> + <p class="label">Import DNS Records</p> + <div class="multiField"> + <input id="start" type="checkbox" value="1" name="start" checked/> + </div> + </div> + </fieldset> + + <tmpl_if name="msg"> + <div id="OKMsg"><p><tmpl_var name="msg"></p></div> + </tmpl_if> + <tmpl_if name="error"> + <div id="errorMsg"><h3>ERROR</h3><ol><tmpl_var name="error"></ol></div> + </tmpl_if> + + <input type="hidden" name="id" value="{tmpl_var name='id'}"> + + <div class="buttonHolder buttons"> + <button class="positive iconstxt icoPositive" type="button" value="Import" onClick="submitForm('pageForm','tools/dns_import_tupa.php');"><span>Start</span></button> + <button class="negative iconstxt icoNegative" type="button" value="Cancel" onClick="loadContent('tools/index.php');"><span>Cancel</span></button> + </div> + </div> + +</div> -- Gitblit v1.9.1