diff --git a/interface/web/dns/dns_import.php b/interface/web/dns/dns_import.php new file mode 100644 index 0000000000000000000000000000000000000000..861c9c833a6d343a0fb1332a76bc0bdbd6465da4 --- /dev/null +++ b/interface/web/dns/dns_import.php @@ -0,0 +1,321 @@ +auth->check_module_permissions('dns'); + + +// Loading the template +$app->uses('tpl,validate_dns'); +$app->tpl->newTemplate("form.tpl.htm"); +$app->tpl->setInclude('content_tpl','templates/dns_import.htm'); +$app->load_language_file('/web/dns/lib/lang/'.$_SESSION['s']['language'].'_dns_wizard.lng'); + +// import variables +$template_id = (isset($_POST['template_id']))?intval($_POST['template_id']):0; +$sys_groupid = (isset($_POST['client_group_id']))?intval($_POST['client_group_id']):0; +$domain = (isset($_POST['domain'])&&!empty($_POST['domain']))?$_POST['domain']:NULL; + +// get the correct server_id +if($_SESSION['s']['user']['typ'] == 'admin') { + $server_id = (isset($_POST['server_id']))?intval($_POST['server_id']):1; +} else { + $client_group_id = $_SESSION["s"]["user"]["default_group"]; + $client = $app->db->queryOneRecord("SELECT default_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id"); + $server_id = $client["default_dnsserver"]; +} + + +// Load the templates +$records = $app->db->queryAllRecords("SELECT * FROM dns_template WHERE visible = 'Y'"); +$template_id_option = ''; +$n = 0; +foreach($records as $rec){ + $checked = ($rec['template_id'] == $template_id)?' SELECTED':''; + $template_id_option .= ''; + if($n == 0 && $template_id == 0) $template_id = $rec['template_id']; + $n++; +} +unset($n); +$app->tpl->setVar("template_id_option",$template_id_option); + +// If the user is administrator +if($_SESSION['s']['user']['typ'] == 'admin') { + + // Load the list of servers + $records = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE mirror_server_id = 0 AND dns_server = 1 ORDER BY server_name"); + $server_id_option = ''; + foreach($records as $rec){ + $checked = ($rec['server_id'] == $server_id)?' SELECTED':''; + $server_id_option .= ''; + } + $app->tpl->setVar("server_id",$server_id_option); + + // load the list of clients + $sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0 ORDER BY name"; + $clients = $app->db->queryAllRecords($sql); + $client_select = ''; + if($_SESSION["s"]["user"]["typ"] == 'admin') $client_select .= ""; + if(is_array($clients)) { + foreach( $clients as $client) { + $selected = ($client["groupid"] == $sys_groupid)?'SELECTED':''; + $client_select .= "\r\n"; + } + } + + $app->tpl->setVar("client_group_id",$client_select); +} + +if ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) { + + // Get the limits of the client + $client_group_id = $_SESSION["s"]["user"]["default_group"]; + $client = $app->db->queryOneRecord("SELECT client.client_id, contact_name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id"); + + + // load the list of clients + $sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id']; + $clients = $app->db->queryAllRecords($sql); + $tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client['client_id']); + $client_select = ''; + if(is_array($clients)) { + foreach( $clients as $client) { + $selected = ($client["groupid"] == $sys_groupid)?'SELECTED':''; + $client_select .= "\r\n"; + } + } + + $app->tpl->setVar("client_group_id",$client_select); +} + +// Import the zone-file +//if(1=="1") +if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'])) +{ + $sql = "SELECT server_name FROM `server` WHERE server_id=".intval($server_id)." OR mirror_server_id=".intval($server_id)." ORDER BY server_name ASC"; + $servers = $app->db->queryAllRecords($sql); + for ($i=0;$i 1) + { + $s++; + $line = str_replace("\t",NULL,$line); + if (!empty($line)) + { + print(strpos(";",$line)); + $line = substr($line,0,strpos($line,";")); + if ($s == 1) + $soa['serial'] = $line; + else if ($s == 2) + $soa['refresh'] = $line; + else if ($s == 3) + $soa['retry'] = $line; + else if ($s == 4) + $soa['expire'] = $line; + else if ($s == 5) + $soa['ttl'] = $line; + + } + } + else + { + $line = str_replace("\t",",",$line); + $recs = explode(",",$line); + + foreach ($recs as $key => $rec) + { + $rec = trim($rec); + //name type data aux ttl active + if ($key == 0) + { + if ($rec == '@' || $rec == "") + { + $rec = $name; + } + + $soa['name'] = $rec; + } + + if ($key != 0 && strtolower($rec) == 'soa') + { + $typekeys[$s] = $key; + } + else if ($key > $typekey[$r]) + { + if ($rec != ""&&$rec != "(") + { + $rec = explode(" ",$rec); + + $soa['ns'] = $servers[0]['server_name']; + $soa['mbox'] = $rec[1]; + } + } + } + } + } + else + { + $line = str_replace("\n","",trim($line)); + + if (!empty($line)) + { + + preg_match_all('/(.*?)\s*IN\s*(A|CNAME|MX|TXT|NS|AAAA)\s*(.*)/',$line, $recs); + + if ($recs[1][0] == '@' || trim($recs[1][0]) == "") + { + $recs[1][0] = $name; + } + $dns_rr[$r]['name'] = $recs[1][0]; + $dns_rr[$r]['type'] = $recs[2][0]; + if (strtolower($dns_rr[$r]['type'])=='mx') + { + $recs[3][0] = str_replace(" ","\t",$recs[3][0]); + $mx[$r] = explode("\t",$recs[3][0]); + for ($m=1;$m'); + print_r($dns_rr); + print(''); + // Insert the soa record + $sys_userid = $_SESSION['s']['user']['userid']; + $origin = $app->db->quote($soa['name']); + $ns = $app->db->quote($soa['ns']); + $mbox = $app->db->quote($soa['mbox']); + $refresh = $app->db->quote($soa['refresh']); + $retry = $app->db->quote($soa['retry']); + $expire = $app->db->quote($soa['expire']); + $minimum = $app->db->quote($soa['ttl']); + $ttl = $app->db->quote($soa['ttl']); + $xfer = $app->db->quote(''); + $serial = $app->db->quote(intval($soa['serial'])+1); + + $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', '$xfer')"; + $dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id'); + + // Insert the dns_rr records + if(is_array($dns_rr) && $dns_soa_id > 0) + { + foreach($dns_rr as $rr) + { + $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'); + } + } + + header('Location: /dns/dns_soa_edit.php?id='.$dns_soa_id); +} + +$app->tpl->setVar('msg',$msg); +$app->tpl->setVar('error',$error); + +$app->tpl->setVar("title",'Import Zone Files'); + +$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dns_wizard.lng'; +include($lng_file); +$app->tpl->setVar($wb); + +$app->tpl_defaults(); +$app->tpl->pparse(); + + +?> \ No newline at end of file diff --git a/interface/web/dns/lib/module.conf.php b/interface/web/dns/lib/module.conf.php index 8018e9808a5d508e6f869e3ff45bd3327d3469d7..1af3a893d3eb55d059c4475abffc385b9a760e84 100644 --- a/interface/web/dns/lib/module.conf.php +++ b/interface/web/dns/lib/module.conf.php @@ -12,6 +12,11 @@ $items[] = array( 'title' => "Add DNS Zone", 'link' => 'dns/dns_wizard.php', 'html_id' => 'dns_wizard'); +$items[] = array( 'title' => "Import Zone File", + 'target' => 'content', + 'link' => 'dns/dns_import.php', + 'html_id' => 'dns_import'); + if($_SESSION["s"]["user"]["typ"] == 'admin') { $items[] = array( 'title' => "Templates", 'target' => 'content', diff --git a/interface/web/dns/templates/dns_import.htm b/interface/web/dns/templates/dns_import.htm new file mode 100644 index 0000000000000000000000000000000000000000..a8e2351376700051efeca9af333adb8ab2e6eec7 --- /dev/null +++ b/interface/web/dns/templates/dns_import.htm @@ -0,0 +1,52 @@ +

+

+ + +

ERROR

+
+ +
+ +
+
Zone File Import + +
+ + +
+
+ + +
+
+
+ + +
+ +
+ +
+ + +

+
+ +

ERROR

+
+ + + +
+ + +
+ +
+
+ +
diff --git a/interface/web/dns/templates/dns_soa_list.htm b/interface/web/dns/templates/dns_soa_list.htm index 4ed162a3d02fd195a47862f89218da52392e2ccf..13be4f776d4d2e1478f82471d31ae7d6c5ba87cd 100644 --- a/interface/web/dns/templates/dns_soa_list.htm +++ b/interface/web/dns/templates/dns_soa_list.htm @@ -12,6 +12,9 @@ + diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php index ebdd404cd74d2d8771ad8b273485818338fa4115..b112e8c54a5c45dddcc8b1ca49daf433d0fe80ef 100644 --- a/server/mods-available/remoteaction_core_module.inc.php +++ b/server/mods-available/remoteaction_core_module.inc.php @@ -1,141 +1,141 @@ -_execActions(); - } - - /* - This function is called when a change in one of the registered tables is detected. - The function then raises the events for the plugins. - */ - function process($tablename, $action, $data) { - // not needed - } // end function - - private function _actionDone($id, $state) { - /* - * First set the state - */ - global $app; - $sql = "UPDATE sys_remoteaction " . - "SET action_state = '" . $app->dbmaster->quote($state) . "' " . - "WHERE action_id = " . intval($id); - $app->dbmaster->query($sql); - - /* - * Then save the maxid for the next time... - */ - $fp = fopen(dirname(__FILE__) . "/../lib/remote_action.inc.php", 'wb'); - $content = '"; - fwrite($fp, $content); - fclose($fp); - } - - - /** - * This method searches for scheduled actions and exec then - */ - private function _execActions() { - global $app; - global $conf; - - /* the id of the server as int */ - $server_id = intval($conf["server_id"]); - - /* - * First we (till and i, oliver) thought, it was enough to write - * "select from where action_status = 'pending'" and then execute this actions. - * But it is not! - * If a hacker can hack into a server, she can change the valus of action_status - * and so re-exec a action, executed some days bevore. So she can (for example) - * stop a service, a admin stopped some days before! To avoid this, we ignore - * the status (it is only for the interface to show) and use our own maxid - */ - include_once (dirname(__FILE__) . "/../lib/remote_action.inc.php"); - - /* - * Get all actions this server should execute - */ - $sql = "SELECT action_id, action_type, action_param " . - "FROM sys_remoteaction " . - "WHERE server_id = " . $server_id . " ". - " AND action_id > " . intval($maxid_remote_action) . " ". - "ORDER BY action_id"; - $actions = $app->dbmaster->queryAllRecords($sql); - - /* - * process all actions - */ - if(is_array($actions)) { - foreach ($actions as $action) { - if ($action['action_type'] == 'os_update') { - /* do the update */ - $this->_doOsUpdate($action); - /* this action takes so much time, - * we stop executing the actions not to waste more time */ - return; - } - if ($action['action_type'] == 'ispc_update') { - /* do the update */ - $this->_doIspCUpdate($action); - /* this action takes so much time, - * we stop executing the actions not to waste more time */ - return; - } - } - } - } - - private function _doOsUpdate($action) { - /* - * Do the update - */ +_execActions(); + } + + /* + This function is called when a change in one of the registered tables is detected. + The function then raises the events for the plugins. + */ + function process($tablename, $action, $data) { + // not needed + } // end function + + private function _actionDone($id, $state) { + /* + * First set the state + */ + global $app; + $sql = "UPDATE sys_remoteaction " . + "SET action_state = '" . $app->dbmaster->quote($state) . "' " . + "WHERE action_id = " . intval($id); + $app->dbmaster->query($sql); + + /* + * Then save the maxid for the next time... + */ + $fp = fopen(dirname(__FILE__) . "/../lib/remote_action.inc.php", 'wb'); + $content = '"; + fwrite($fp, $content); + fclose($fp); + } + + + /** + * This method searches for scheduled actions and exec then + */ + private function _execActions() { + global $app; + global $conf; + + /* the id of the server as int */ + $server_id = intval($conf["server_id"]); + + /* + * First we (till and i, oliver) thought, it was enough to write + * "select from where action_status = 'pending'" and then execute this actions. + * But it is not! + * If a hacker can hack into a server, she can change the valus of action_status + * and so re-exec a action, executed some days bevore. So she can (for example) + * stop a service, a admin stopped some days before! To avoid this, we ignore + * the status (it is only for the interface to show) and use our own maxid + */ + include_once (dirname(__FILE__) . "/../lib/remote_action.inc.php"); + + /* + * Get all actions this server should execute + */ + $sql = "SELECT action_id, action_type, action_param " . + "FROM sys_remoteaction " . + "WHERE server_id = " . $server_id . " ". + " AND action_id > " . intval($maxid_remote_action) . " ". + "ORDER BY action_id"; + $actions = $app->dbmaster->queryAllRecords($sql); + + /* + * process all actions + */ + if(is_array($actions)) { + foreach ($actions as $action) { + if ($action['action_type'] == 'os_update') { + /* do the update */ + $this->_doOsUpdate($action); + /* this action takes so much time, + * we stop executing the actions not to waste more time */ + return; + } + if ($action['action_type'] == 'ispc_update') { + /* do the update */ + $this->_doIspCUpdate($action); + /* this action takes so much time, + * we stop executing the actions not to waste more time */ + return; + } + } + } + } + + private function _doOsUpdate($action) { + /* + * Do the update + */ exec("aptitude update"); - exec("aptitude upgrade -y"); + exec("aptitude safe-upgrade -y"); //TODO : change this when distribution information has been integrated into server record if(file_exists('/etc/gentoo-release')) { @@ -147,61 +147,61 @@ class remoteaction_core_module { } /* - * All well done! - */ - $this->_actionDone($action['action_id'], 'ok'); - } - - private function _doIspCUpdate($action) { - - // Ensure that this code is not executed twice as this would cause a loop in case of a failure - $this->_actionDone($action['action_id'], 'ok'); - - /* - * Get the version-number of the newest version - */ - $new_version = @file_get_contents('http://www.ispconfig.org/downloads/ispconfig3_version.txt'); - $new_version = trim($new_version); - - /* - * Do the update - */ - - /* jump into the temporary dir */ - $oldDir = getcwd(); - chdir("/tmp"); - - /* delete the old files (if there are any...) */ - exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz"); - exec("rm /tmp/ispconfig3_install -R"); - - /* get the newest version */ - exec("wget http://www.ispconfig.org/downloads/ISPConfig-" . $new_version . ".tar.gz"); - - /* extract the files */ - exec("tar xvfz ISPConfig-" . $new_version . ".tar.gz"); - - /* - * Initialize the automated update - * (the update is then done next start of server.sh - */ - chdir("/tmp/ispconfig3_install/install"); - exec("touch autoupdate"); - - /* - * do some clean-up - */ - exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz"); - - /* - * go back to the "old path" - */ - chdir($oldDir); - - /* - * All well done! - */ - //$this->_actionDone($action['action_id'], 'ok'); - } -} + * All well done! + */ + $this->_actionDone($action['action_id'], 'ok'); + } + + private function _doIspCUpdate($action) { + + // Ensure that this code is not executed twice as this would cause a loop in case of a failure + $this->_actionDone($action['action_id'], 'ok'); + + /* + * Get the version-number of the newest version + */ + $new_version = @file_get_contents('http://www.ispconfig.org/downloads/ispconfig3_version.txt'); + $new_version = trim($new_version); + + /* + * Do the update + */ + + /* jump into the temporary dir */ + $oldDir = getcwd(); + chdir("/tmp"); + + /* delete the old files (if there are any...) */ + exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz"); + exec("rm /tmp/ispconfig3_install -R"); + + /* get the newest version */ + exec("wget http://www.ispconfig.org/downloads/ISPConfig-" . $new_version . ".tar.gz"); + + /* extract the files */ + exec("tar xvfz ISPConfig-" . $new_version . ".tar.gz"); + + /* + * Initialize the automated update + * (the update is then done next start of server.sh + */ + chdir("/tmp/ispconfig3_install/install"); + exec("touch autoupdate"); + + /* + * do some clean-up + */ + exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz"); + + /* + * go back to the "old path" + */ + chdir($oldDir); + + /* + * All well done! + */ + //$this->_actionDone($action['action_id'], 'ok'); + } +} ?> \ No newline at end of file