From a59731a3cc9c0fc6fba481e83d56ebd22ed3c87d Mon Sep 17 00:00:00 2001
From: dcy <dcy@ispconfig3>
Date: Sat, 17 Jul 2010 10:34:07 -0400
Subject: [PATCH] Secondary DNS functionality for PowerDNS and Bind
---
interface/web/dns/lib/module.conf.php | 8
interface/web/dns/lib/lang/ar_dns_slave.lng | 14
interface/web/dns/list/dns_slave.list.php | 97 +++
interface/web/client/lib/lang/cz_reseller.lng | 4
interface/web/dns/lib/lang/ja_dns_slave.lng | 14
interface/web/client/lib/lang/nl_client.lng | 3
interface/web/client/lib/lang/tr_client.lng | 3
interface/web/client/lib/lang/en_client_template.lng | 4
interface/web/dns/lib/lang/it_dns_slave_list.lng | 8
interface/web/client/lib/lang/ja_reseller.lng | 3
interface/web/dns/lib/lang/bg_dns_slave_list.lng | 8
interface/web/dns/lib/lang/se_dns_slave_list.lng | 8
interface/web/client/lib/lang/fi_client.lng | 3
interface/web/dns/lib/lang/pl_dns_slave.lng | 14
interface/web/client/lib/lang/it_reseller.lng | 3
interface/web/dns/lib/lang/cz_dns_slave_list.lng | 8
interface/web/dns/lib/lang/br_dns_slave_list.lng | 8
server/plugins-available/powerdns_plugin.inc.php | 96 ++
interface/web/client/lib/lang/ro_client.lng | 3
interface/web/client/lib/lang/fr_client.lng | 3
interface/web/client/lib/lang/de_client_template.lng | 3
interface/web/client/form/reseller.tform.php | 16
interface/web/client/lib/lang/ja_client_template.lng | 3
interface/web/client/lib/lang/es_client.lng | 3
server/mods-available/dns_module.inc.php | 58 +
interface/web/client/lib/lang/hu_reseller.lng | 3
interface/web/dns/lib/lang/pt_dns_slave_list.lng | 8
install/lib/update.lib.php | 35 +
interface/web/client/lib/lang/cz_client_template.lng | 4
interface/web/client/lib/lang/tr_reseller.lng | 3
interface/web/client/lib/lang/ar_reseller.lng | 3
interface/web/client/lib/lang/se_client_template.lng | 3
interface/web/dns/lib/lang/fr_dns_slave_list.lng | 8
interface/web/client/lib/lang/bg_client.lng | 3
interface/web/client/lib/lang/hu_client.lng | 3
interface/web/client/lib/lang/ro_client_template.lng | 3
interface/web/client/lib/lang/se_client.lng | 3
interface/web/dns/lib/lang/de_dns_slave_list.lng | 8
interface/web/dns/templates/dns_slave_list.htm | 59 ++
interface/web/dns/dns_soa_edit.php | 9
interface/web/client/templates/client_template_edit_limits.htm | 4
interface/web/dns/lib/lang/sk_dns_slave.lng | 14
interface/web/client/lib/lang/br_reseller.lng | 3
interface/web/client/templates/client_edit_limits.htm | 4
interface/web/client/lib/lang/it_client_template.lng | 3
interface/web/client/lib/lang/ru_client.lng | 3
interface/web/dns/lib/lang/en_dns_slave_list.lng | 8
server/conf/bind_named.conf.local.slave | 9
interface/web/dns/lib/lang/pl_dns_slave_list.lng | 8
interface/web/client/lib/lang/de_reseller.lng | 6
interface/web/dns/lib/lang/bg_dns_slave.lng | 14
interface/web/dns/lib/lang/fi_dns_slave.lng | 14
interface/web/client/lib/lang/nl_client_template.lng | 3
interface/web/dns/lib/lang/fi_dns_slave_list.lng | 8
interface/web/client/lib/lang/hu_client_template.lng | 3
interface/web/client/lib/lang/pt_client_template.lng | 3
interface/web/dns/lib/lang/es_dns_slave_list.lng | 8
interface/web/client/lib/lang/pt_client.lng | 3
interface/web/dns/lib/lang/ro_dns_slave.lng | 14
interface/web/dns/lib/lang/fr_dns_slave.lng | 14
interface/web/dns/templates/dns_slave_edit.htm | 61 ++
interface/web/dns/lib/lang/nl_dns_slave.lng | 14
install/update.php | 2
interface/web/client/lib/lang/en_client.lng | 2
interface/web/client/lib/lang/es_reseller.lng | 3
install/lib/installer_base.lib.php | 15
install/sql/ispconfig3.sql | 27
interface/web/client/lib/lang/se_reseller.lng | 3
interface/web/dns/lib/lang/nl_dns_slave_list.lng | 8
interface/web/client/lib/lang/es_client_template.lng | 3
interface/web/client/lib/lang/fi_reseller.lng | 3
interface/web/client/lib/lang/it_client.lng | 3
server/plugins-available/bind_plugin.inc.php | 111 +++
interface/web/dns/lib/lang/ro_dns_slave_list.lng | 8
interface/web/client/lib/lang/cz_client.lng | 4
interface/web/client/client_del.php | 6
interface/web/client/lib/lang/ja_client.lng | 3
interface/web/dns/dns_slave_edit.php | 199 ++++++
interface/web/dns/lib/lang/en_dns_slave.lng | 14
interface/web/client/lib/lang/bg_client_template.lng | 3
interface/web/client/lib/lang/de_client.lng | 3
interface/web/client/lib/lang/pl_reseller.lng | 3
interface/web/client/lib/lang/br_client_template.lng | 3
interface/web/dashboard/lib/lang/de_dashlet_limits.lng | 1
interface/web/dns/lib/lang/es_dns_slave.lng | 14
interface/web/dns/lib/lang/tr_dns_slave.lng | 14
interface/web/client/lib/lang/pl_client_template.lng | 3
interface/web/dashboard/dashlets/limits.php | 6
interface/web/dns/lib/lang/hu_dns_slave.lng | 14
interface/web/dns/lib/lang/se_dns_slave.lng | 14
interface/web/dns/lib/lang/hu_dns_slave_list.lng | 8
interface/web/dns/lib/lang/de_dns_slave.lng | 14
interface/web/dashboard/lib/lang/en_dashlet_limits.lng | 1
interface/web/client/lib/lang/ru_reseller.lng | 3
interface/web/dns/lib/lang/br_dns_slave.lng | 14
interface/web/client/lib/lang/ar_client_template.lng | 3
interface/web/client/lib/lang/en_reseller.lng | 4
interface/web/client/lib/lang/sk_client_template.lng | 3
install/tpl/pdns.local.master | 5
interface/web/dns/lib/lang/pt_dns_slave.lng | 14
interface/web/dns/lib/lang/ru_dns_slave.lng | 14
interface/web/dns/lib/lang/ja_dns_slave_list.lng | 8
interface/web/dns/lib/lang/ru_dns_slave_list.lng | 8
interface/web/client/lib/lang/ru_client_template.lng | 3
interface/web/dns/lib/lang/it_dns_slave.lng | 14
interface/web/client/lib/lang/bg_reseller.lng | 3
interface/web/client/lib/lang/pt_reseller.lng | 3
interface/web/dns/lib/lang/ar_dns_slave_list.lng | 8
interface/web/client/lib/lang/ro_reseller.lng | 3
interface/web/client/templates/reseller_edit_limits.htm | 4
interface/web/client/lib/lang/tr_client_template.lng | 3
interface/web/client/lib/lang/fr_client_template.lng | 3
interface/web/client/lib/lang/br_client.lng | 3
interface/web/dns/lib/lang/cz_dns_slave.lng | 14
interface/web/dns/lib/lang/sk_dns_slave_list.lng | 8
interface/web/client/lib/lang/ar_client.lng | 5
interface/web/client/lib/lang/fi_client_template.lng | 3
interface/web/client/form/client.tform.php | 16
install/sql/powerdns.sql | 6
interface/web/client/lib/lang/nl_reseller.lng | 3
interface/web/client/lib/lang/sk_client.lng | 3
interface/web/dns/form/dns_slave.tform.php | 126 ++++
interface/web/client/lib/lang/pl_client.lng | 3
interface/web/dns/dns_slave_del.php | 69 ++
interface/web/dns/lib/lang/tr_dns_slave_list.lng | 8
interface/web/client/form/client_template.tform.php | 14
interface/web/client/lib/lang/sk_reseller.lng | 3
interface/web/dns/dns_slave_list.php | 25
interface/web/client/lib/lang/fr_reseller.lng | 3
129 files changed, 1,678 insertions(+), 40 deletions(-)
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index e6409ae..0c14b1e 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -936,7 +936,20 @@
public function configure_bind() {
global $conf;
- //* Nothing to do
+ //* Check if the zonefile directory has a slash at the end
+ $content=$conf['bind']['bind_zonefiles_dir'];
+ if(substr($content,-1,1) != '/') {
+ $content .= '/';
+ }
+
+ //* Create the slave subdirectory
+ $content .= 'slave';
+ $content_mkdir = 'mkdir -p '.$content;
+ exec($content_mkdir);
+
+ //* Chown the slave subdirectory to $conf['bind']['bind_user']
+ exec('chown '.$conf['bind']['bind_user'].':'.$conf['bind']['bind_group'].' '.$content);
+ exec('chmod 770 '.$content);
}
diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php
index 874f3fd..fc4f57b 100644
--- a/install/lib/update.lib.php
+++ b/install/lib/update.lib.php
@@ -60,6 +60,21 @@
copy('existing_db.sql',$backup_db_name);
exec("chmod 700 $backup_db_name");
exec("chown root:root $backup_db_name");
+
+ if ($conf['powerdns']['installed']) {
+ //** export the current PowerDNS database data
+ if( !empty($conf["mysql"]["admin_password"]) ) {
+ system("mysqldump -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' -c -t --add-drop-table --create-options --quick --result-file=existing_powerdns_db.sql ".$conf['powerdns']['database']);
+ } else {
+ system("mysqldump -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -c -t --add-drop-table --create-options --quick --result-file=existing_powerdns_db.sql ".$conf['powerdns']['database']);
+ }
+
+ // create a backup copy of the PowerDNS database in the root folder
+ $backup_db_name = '/root/ispconfig_powerdns_db_backup_'.@date('Y-m-d_h-i').'.sql';
+ copy('existing_powerdns_db.sql',$backup_db_name);
+ exec("chmod 700 $backup_db_name");
+ exec("chown root:root $backup_db_name");
+ }
}
function updateDbAndIni() {
@@ -134,6 +149,26 @@
} else {
system("mysql --default-character-set=".$conf['mysql']['charset']." --force -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' ".$conf['mysql']['database']." < existing_db.sql");
}
+
+ if ($conf['powerdns']['installed']) {
+
+ swriteln($inst->lng('Starting full PowerDNS database update.'));
+
+ //** Delete the old PowerDNS database
+ if( !$inst->db->query('DROP DATABASE IF EXISTS '.$conf['powerdns']['database']) ) {
+ $inst->error('Unable to drop MySQL database: '.$conf['powerdns']['database'].'.');
+ }
+
+ //** Create the mysql database
+ $inst->configure_powerdns();
+
+ //** load old data back into the PowerDNS database
+ if( !empty($conf["mysql"]["admin_password"]) ) {
+ system("mysql --default-character-set=".$conf['mysql']['charset']." --force -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' ".$conf['powerdns']['database']." < existing_powerdns_db.sql");
+ } else {
+ system("mysql --default-character-set=".$conf['mysql']['charset']." --force -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' ".$conf['powerdns']['database']." < existing_powerdns_db.sql");
+ }
+ }
}
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 89a2021..3d75c6d 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -92,6 +92,7 @@
`limit_webdav_user` int(11) NOT NULL default '0',
`default_dnsserver` int(11) unsigned NOT NULL default '1',
`limit_dns_zone` int(11) NOT NULL default '-1',
+ `limit_dns_slave_zone` int(11) NOT NULL default '-1',
`limit_dns_record` int(11) NOT NULL default '-1',
`default_dbserver` int(11) NOT NULL default '1',
`limit_database` int(11) NOT NULL default '-1',
@@ -148,6 +149,7 @@
`limit_shell_user` int(11) NOT NULL default '0',
`limit_webdav_user` int(11) NOT NULL default '0',
`limit_dns_zone` int(11) NOT NULL default '-1',
+ `limit_dns_slave_zone` int(11) NOT NULL default '-1',
`limit_dns_record` int(11) NOT NULL default '-1',
`limit_database` int(11) NOT NULL default '-1',
`limit_cron` int(11) NOT NULL default '0',
@@ -162,7 +164,7 @@
-- --------------------------------------------------------
--
--- Table structure for table `dns_rr`
+-- Table structure for table `cron`
--
CREATE TABLE `cron` (
`id` int(11) unsigned NOT NULL auto_increment,
@@ -246,6 +248,29 @@
-- --------------------------------------------------------
+--
+-- Table structure for table `dns_slave`
+--
+
+CREATE TABLE `dns_slave` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `sys_userid` int(11) unsigned NOT NULL,
+ `sys_groupid` int(11) unsigned NOT NULL,
+ `sys_perm_user` varchar(5) NOT NULL,
+ `sys_perm_group` varchar(5) NOT NULL,
+ `sys_perm_other` varchar(5) NOT NULL,
+ `server_id` int(11) NOT NULL default '1',
+ `origin` varchar(255) NOT NULL,
+ `ns` varchar(255) NOT NULL,
+ `active` enum('N','Y') NOT NULL,
+ `xfer` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `origin` (`origin`),
+ KEY `active` (`active`)
+) ENGINE=MyISAM AUTO_INCREMENT=1;
+
+-- --------------------------------------------------------
+
--
-- Table structure for table `dns_template`
--
diff --git a/install/sql/powerdns.sql b/install/sql/powerdns.sql
index 8f997ba..3301b87 100644
--- a/install/sql/powerdns.sql
+++ b/install/sql/powerdns.sql
@@ -9,7 +9,7 @@
`ispconfig_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name_index` (`name`)
-) ENGINE=MyISAM;
+) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `records` (
`id` int(11) NOT NULL auto_increment,
@@ -25,10 +25,10 @@
KEY `rec_name_index` (`name`),
KEY `nametype_index` (`name`,`type`),
KEY `domain_id` (`domain_id`)
-) ENGINE=MyISAM;
+) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `supermasters` (
`ip` varchar(25) NOT NULL,
`nameserver` varchar(255) NOT NULL,
`account` varchar(40) default NULL
-) ENGINE=MyISAM;
\ No newline at end of file
+) ENGINE=InnoDB;
diff --git a/install/tpl/pdns.local.master b/install/tpl/pdns.local.master
index c383e64..3e29ec4 100644
--- a/install/tpl/pdns.local.master
+++ b/install/tpl/pdns.local.master
@@ -7,3 +7,8 @@
gmysql-user={mysql_server_ispconfig_user}
gmysql-password={mysql_server_ispconfig_password}
gmysql-dbname={powerdns_database}
+
+slave=yes
+master=yes
+
+disable-axfr=no
diff --git a/install/update.php b/install/update.php
index acfbe30..a1ec71e 100644
--- a/install/update.php
+++ b/install/update.php
@@ -76,7 +76,7 @@
$conf_old = $conf;
unset($conf);
-if($dist['id'] == '') die('Linux Dustribution or Version not recognized.');
+if($dist['id'] == '') die('Linux Distribution or Version not recognized.');
//** Include the distribution specific installer class library and configuration
if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once('dist/lib/'.$dist['baseid'].'.lib.php');
diff --git a/interface/web/client/client_del.php b/interface/web/client/client_del.php
index b125ba4..11cfdb7 100644
--- a/interface/web/client/client_del.php
+++ b/interface/web/client/client_del.php
@@ -78,7 +78,7 @@
$client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = $client_id");
// Get all records (sub-clients, mail, web, etc....) of this client.
- $tables = 'client,dns_rr,dns_soa,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_domain,web_traffic';
+ $tables = 'client,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_domain,web_traffic';
$tables_array = explode(',',$tables);
$client_group_id = intval($client_group['groupid']);
$table_list = array();
@@ -127,7 +127,7 @@
$app->db->query("DELETE FROM sys_user WHERE client_id = $client_id");
// Delete all records (sub-clients, mail, web, etc....) of this client.
- $tables = 'client,dns_rr,dns_soa,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_domain,web_traffic';
+ $tables = 'client,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_domain,web_traffic';
$tables_array = explode(',',$tables);
$client_group_id = intval($client_group['groupid']);
if($client_group_id > 1) {
@@ -163,4 +163,4 @@
$page = new page_action;
$page->onDelete()
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index b38fdb9..5627ace 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -665,6 +665,20 @@
'rows' => '',
'cols' => ''
),
+ 'limit_dns_slave_zone' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'ISINT',
+ 'errmsg'=> 'limit_dns_slave_zone_error_notint'),
+ ),
+ 'default' => '-1',
+ 'value' => '',
+ 'separator' => '',
+ 'width' => '10',
+ 'maxlength' => '10',
+ 'rows' => '',
+ 'cols' => ''
+ ),
'limit_dns_record' => array (
'datatype' => 'INTEGER',
'formtype' => 'TEXT',
@@ -796,4 +810,4 @@
*/
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php
index 9b9a3a5..9e8fe60 100644
--- a/interface/web/client/form/client_template.tform.php
+++ b/interface/web/client/form/client_template.tform.php
@@ -395,6 +395,20 @@
'rows' => '',
'cols' => ''
),
+ 'limit_dns_slave_zone' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'ISINT',
+ 'errmsg'=> 'limit_dns_slave_zone_error_notint'),
+ ),
+ 'default' => '0',
+ 'value' => '',
+ 'separator' => '',
+ 'width' => '10',
+ 'maxlength' => '10',
+ 'rows' => '',
+ 'cols' => ''
+ ),
'limit_dns_record' => array (
'datatype' => 'INTEGER',
'formtype' => 'TEXT',
diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php
index 4cfb52d..1c5c561 100644
--- a/interface/web/client/form/reseller.tform.php
+++ b/interface/web/client/form/reseller.tform.php
@@ -624,6 +624,20 @@
'rows' => '',
'cols' => ''
),
+ 'limit_dns_slave_zone' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'ISINT',
+ 'errmsg'=> 'limit_dns_slave_zone_error_notint'),
+ ),
+ 'default' => '-1',
+ 'value' => '',
+ 'separator' => '',
+ 'width' => '10',
+ 'maxlength' => '10',
+ 'rows' => '',
+ 'cols' => ''
+ ),
'limit_dns_record' => array (
'datatype' => 'INTEGER',
'formtype' => 'TEXT',
@@ -758,4 +772,4 @@
*/
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/client/lib/lang/ar_client.lng b/interface/web/client/lib/lang/ar_client.lng
index 5171736..17257a1 100644
--- a/interface/web/client/lib/lang/ar_client.lng
+++ b/interface/web/client/lib/lang/ar_client.lng
@@ -54,6 +54,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -77,7 +78,9 @@
$wb['limit_web_subdomain_error_notint'] = 'The website subdomain limit must be a number.';
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
-$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_zone_error_notint'] = 'The dns zone limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
diff --git a/interface/web/client/lib/lang/ar_client_template.lng b/interface/web/client/lib/lang/ar_client_template.lng
index c12b0b2..8717432 100644
--- a/interface/web/client/lib/lang/ar_client_template.lng
+++ b/interface/web/client/lib/lang/ar_client_template.lng
@@ -25,6 +25,7 @@
$wb['limit_web_subdomain_txt'] = 'Max. number of web subdomains';
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -47,6 +48,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
diff --git a/interface/web/client/lib/lang/ar_reseller.lng b/interface/web/client/lib/lang/ar_reseller.lng
index f0dc7ca..3ed5060 100644
--- a/interface/web/client/lib/lang/ar_reseller.lng
+++ b/interface/web/client/lib/lang/ar_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
diff --git a/interface/web/client/lib/lang/bg_client.lng b/interface/web/client/lib/lang/bg_client.lng
index 35b3519..e88a8d0 100644
--- a/interface/web/client/lib/lang/bg_client.lng
+++ b/interface/web/client/lib/lang/bg_client.lng
@@ -52,6 +52,7 @@
$wb['default_dnsserver_txt'] = 'DNS сървър по подразбиране';
$wb['limit_dns_zone_txt'] = 'Макс. брой DNS зони';
$wb['limit_dns_record_txt'] = 'Макс. брой DNS записи';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_shell_user_txt'] = 'Макс. брой Shell потребители';
$wb['username_error_empty'] = 'Не е попълнено потребителско име.';
$wb['username_error_unique'] = 'Избраното потребителско име е вече заето.';
@@ -73,6 +74,8 @@
$wb['limit_ftp_user_error_notint'] = 'Макс. брой FTP потребители трябва да е число.';
$wb['limit_shell_user_error_notint'] = 'Макс. брой shell потребители трябва да е число.';
$wb['limit_dns_zone_error_notint'] = 'Макс. брой DNS записи трябва да е число.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'DB сървър по подразбиране';
$wb['limit_database_error_notint'] = 'Макс. брой бази данни трябва да е число.';
$wb['username_error_regex'] = 'Потребителското име съдържа невалидни символи.';
diff --git a/interface/web/client/lib/lang/bg_client_template.lng b/interface/web/client/lib/lang/bg_client_template.lng
index 7545a16..48dd6ab 100644
--- a/interface/web/client/lib/lang/bg_client_template.lng
+++ b/interface/web/client/lib/lang/bg_client_template.lng
@@ -22,6 +22,7 @@
$wb['limit_web_subdomain_txt'] = 'Max. number of web subdomains';
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_maildomain_error_notint'] = 'The email domain limit must be a number.';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Please enter a Template name';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
diff --git a/interface/web/client/lib/lang/bg_reseller.lng b/interface/web/client/lib/lang/bg_reseller.lng
index f0dc7ca..3ed5060 100644
--- a/interface/web/client/lib/lang/bg_reseller.lng
+++ b/interface/web/client/lib/lang/bg_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng
index 6e2b67c..35b2ba9 100644
--- a/interface/web/client/lib/lang/br_client.lng
+++ b/interface/web/client/lib/lang/br_client.lng
@@ -50,6 +50,7 @@
$wb['limit_ftp_user_txt'] = 'Número máximo de usuários FTP';
$wb['default_dnsserver_txt'] = 'Servidor de Nomes Padrão';
$wb['limit_dns_zone_txt'] = 'Número máximo de zonas DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Número máximo de registros DNS';
$wb['limit_shell_user_txt'] = 'Número máximo de usuários de shell';
$wb['limit_client_txt'] = 'Número máximo de clientes';
@@ -73,6 +74,8 @@
$wb['limit_ftp_user_error_notint'] = 'O limite de usuários de FTP deve ser um número.';
$wb['limit_shell_user_error_notint'] = 'O limite de usuários de Shell deve ser um número.';
$wb['limit_dns_zone_error_notint'] = 'O limite de registros de DNS deve ser um número';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Servidor de Banco de Dados Padrão';
$wb['limit_database_error_notint'] = 'O limite de banco de dados deve ser um número';
$wb['username_error_regex'] = 'O nome de usuário contem caracteres inválidos.';
diff --git a/interface/web/client/lib/lang/br_client_template.lng b/interface/web/client/lib/lang/br_client_template.lng
index a4ab10e..652c88f 100644
--- a/interface/web/client/lib/lang/br_client_template.lng
+++ b/interface/web/client/lib/lang/br_client_template.lng
@@ -21,6 +21,7 @@
$wb['limit_web_subdomain_txt'] = 'Número máximo de sub-domínios';
$wb['limit_ftp_user_txt'] = 'Número máximo de usuários de FTP';
$wb['limit_dns_zone_txt'] = 'Número máximo de zonas DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Número máximo de registros DNS';
$wb['limit_shell_user_txt'] = 'Número máximo de usuários de Shell';
$wb['limit_client_txt'] = 'Número máximo de clientes';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'O limite de contas FTP deve ser um número';
$wb['limit_shell_user_error_notint'] = 'O limite de contas shell DNS deve ser um número';
$wb['limit_dns_zone_error_notint'] = 'O limite de zonas DNS deve ser um número';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'O limite dos bancos de dados deve ser um número';
$wb['error_template_name_empty'] = 'Por favor insira o nome do gabarito';
$wb['limit_cron_txt'] = 'Número máximo de tarefas no cron';
diff --git a/interface/web/client/lib/lang/br_reseller.lng b/interface/web/client/lib/lang/br_reseller.lng
index 6324712..6d93435 100644
--- a/interface/web/client/lib/lang/br_reseller.lng
+++ b/interface/web/client/lib/lang/br_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Servidor DNS Padrão';
$wb['limit_dns_zone_txt'] = 'Máximo de zonas DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Máximo de registros DNS';
$wb['limit_shell_user_txt'] = 'Número máximo de usuários de shell';
$wb['limit_client_txt'] = 'Número máximo de clientes';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'O limite de usuários de ftp deve ser um número.';
$wb['limit_shell_user_error_notint'] = 'O limite de usuários de shell deve ser um número.';
$wb['limit_dns_zone_error_notint'] = 'O limite de registros de dns deve ser um número.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Servidor de Banco de Dados Padrão';
$wb['limit_database_error_notint'] = 'O limite de banco de dados deve ser um número.';
$wb['limit_cron_error_notint'] = 'O limite do cron deve ser um número.';
diff --git a/interface/web/client/lib/lang/cz_client.lng b/interface/web/client/lib/lang/cz_client.lng
index 7c0470f..4548bdf 100644
--- a/interface/web/client/lib/lang/cz_client.lng
+++ b/interface/web/client/lib/lang/cz_client.lng
@@ -54,6 +54,7 @@
$wb["limit_ftp_user_txt"] = 'Max. počet FTP uživatelů';
$wb["default_dnsserver_txt"] = 'Výchozí DNS server';
$wb["limit_dns_zone_txt"] = 'Max. počet DNS zón';
+$wb["limit_dns_slave_zone_txt"] = 'Max. number of secondary DNS zones';
$wb["limit_dns_record_txt"] = 'Max. počet DNS záznamů';
$wb["limit_shell_user_txt"] = 'Max. počet shell uživatelů';
$wb["limit_client_txt"] = 'Max. počet klientů';
@@ -78,7 +79,8 @@
$wb["limit_ftp_user_error_notint"] = 'Limit FTP uživatelů musí být číslo.';
$wb["limit_shell_user_error_notint"] = 'Limit shell uživatelů musí být číslo.';
$wb["limit_dns_zone_error_notint"] = 'Limit DNS zón musí být číslo.';
-$wb["limit_dns_zone_error_notint"] = 'Limit DNS záznamů musí být číslo.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb["limit_dns_record_error_notint"] = 'Limit DNS záznamů musí být číslo.';
$wb["limit_client_error_notint"] = 'Limit sub klientů musí být číslo.';
$wb["default_dbserver_txt"] = 'Výchozí databázový server';
$wb["limit_database_txt"] = 'Max. počet databází';
diff --git a/interface/web/client/lib/lang/cz_client_template.lng b/interface/web/client/lib/lang/cz_client_template.lng
index 5d163fe..c7c5e4e 100644
--- a/interface/web/client/lib/lang/cz_client_template.lng
+++ b/interface/web/client/lib/lang/cz_client_template.lng
@@ -26,6 +26,7 @@
$wb["limit_web_subdomain_txt"] = 'Max. počet webových subdomén';
$wb["limit_ftp_user_txt"] = 'Max. počet FTP uživatelů';
$wb["limit_dns_zone_txt"] = 'Max. počet DNS zón';
+$wb["limit_dns_slave_zone_txt"] = 'Max. number of secondary DNS zones';
$wb["limit_dns_record_txt"] = 'Max. počet DNS záznamů';
$wb["limit_shell_user_txt"] = 'Max. počet shell uživatelů';
$wb["limit_client_txt"] = 'Max. počet klient';
@@ -47,7 +48,8 @@
$wb["limit_web_subdomain_error_notint"] = 'Limit webových subdomén musí být číslo.';
$wb["limit_ftp_user_error_notint"] = 'Limit shell uživatelů musí být číslo.';
$wb["limit_dns_zone_error_notint"] = 'Limit DNS zón musí být číslo.';
-$wb["limit_dns_zone_error_notint"] = 'Limit DNS záznamů musí být číslo.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb["limit_dns_record_error_notint"] = 'Limit DNS záznamů musí být číslo.';
$wb["limit_database_txt"] = 'Max. počet databází';
$wb["limit_database_error_notint"] = 'Limit databází musí být číslo.';
$wb["limit_cron_error_notint"] = 'Limit cronu musí být číslo.';
diff --git a/interface/web/client/lib/lang/cz_reseller.lng b/interface/web/client/lib/lang/cz_reseller.lng
index d308944..04546fc 100644
--- a/interface/web/client/lib/lang/cz_reseller.lng
+++ b/interface/web/client/lib/lang/cz_reseller.lng
@@ -53,6 +53,7 @@
$wb["limit_ftp_user_txt"] = 'Max. počet FTP uživatelů';
$wb["default_dnsserver_txt"] = 'Výchozí DNS server';
$wb["limit_dns_zone_txt"] = 'Max. počet DNS zón';
+$wb["limit_dns_slave_zone_txt"] = 'Max. number of secondary DNS zones';
$wb["limit_dns_record_txt"] = 'Max. počet DNS záznamů';
$wb["limit_shell_user_txt"] = 'Max. počet shell uživatelů';
$wb["limit_client_txt"] = 'Max. počet klient';
@@ -76,7 +77,8 @@
$wb["limit_ftp_user_error_notint"] = 'Limit FTP uživatelů musí být číslo.';
$wb["limit_shell_user_error_notint"] = 'Limit shell uživatelů musí být číslo.';
$wb["limit_dns_zone_error_notint"] = 'Limit DNS zón musí být číslo.';
-$wb["limit_dns_zone_error_notint"] = 'Limit DNS záznamů musí být číslo.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb["limit_dns_zone_record_notint"] = 'Limit DNS záznamů musí být číslo.';
$wb["limit_client_error_notint"] = 'Limit sub klientů musí být číslo.';
$wb["default_dbserver_txt"] = 'Výchozí databázový server';
$wb["limit_database_txt"] = 'Max. počet databází';
diff --git a/interface/web/client/lib/lang/de_client.lng b/interface/web/client/lib/lang/de_client.lng
index e140dda..27d9264 100644
--- a/interface/web/client/lib/lang/de_client.lng
+++ b/interface/web/client/lib/lang/de_client.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. Anzahl an FTP Benutzer';
$wb['default_dnsserver_txt'] = 'Standard DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. Anzahl an DNS Zonen';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. Anzahl an DNS Einträge';
$wb['limit_shell_user_txt'] = 'Max. Anzahl an Shell Benutzer';
$wb['limit_webdav_user_txt'] = 'Max. Anzahl an Webdav Benutzer';
@@ -77,6 +78,8 @@
$wb['limit_shell_user_error_notint'] = 'Das Shell Benutzer Limit muss eine Nummer sein.';
$wb['limit_webdav_user_error_notint'] = 'Das Webdav Benutzer Limit muss eine Nummer sein.';
$wb['limit_dns_zone_error_notint'] = 'Das DNS Einträge Limit muss eine Nummer sein.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Standarddatenbankserver';
$wb['limit_database_error_notint'] = 'Das Datenbank Limit muss eine Nummer sein.';
$wb['limit_cron_error_notint'] = 'Das Cron Job Limit muss eine Nummer sein.';
diff --git a/interface/web/client/lib/lang/de_client_template.lng b/interface/web/client/lib/lang/de_client_template.lng
index 140a9db..34a70ad 100644
--- a/interface/web/client/lib/lang/de_client_template.lng
+++ b/interface/web/client/lib/lang/de_client_template.lng
@@ -25,6 +25,7 @@
$wb['limit_web_subdomain_txt'] = 'Max. Anzahl an Web Subdomains';
$wb['limit_ftp_user_txt'] = 'Max. Anzahl an FTP Benutzer';
$wb['limit_dns_zone_txt'] = 'Max. Anzahl an DNS Zonen';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. Anzahl an DNS Einträgen';
$wb['limit_shell_user_txt'] = 'Max. Anzahl an Shell Benutzer';
$wb['limit_webdav_user_txt'] = 'Max. Anzahl an Webdav Benutzer';
@@ -47,6 +48,8 @@
$wb['limit_shell_user_error_notint'] = 'Das Shell Benutzer Limit muss eine Nummer sein.';
$wb['limit_webdav_user_error_notint'] = 'Das Webdav Benutzer Limit muss eine Nummer sein.';
$wb['limit_dns_zone_error_notint'] = 'Das DNS Einträge Limit muss eine Nummer sein.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'Das Datenbanken Limit muss eine Nummer sein.';
$wb['limit_cron_error_notint'] = 'Das Cron Job Limit muss eine Nummer sein.';
$wb['limit_cron_error_frequency'] = 'Das Cron Job Intervall-Limit muss eine Nummer sein.';
diff --git a/interface/web/client/lib/lang/de_reseller.lng b/interface/web/client/lib/lang/de_reseller.lng
index 3be8680..e4abf35 100644
--- a/interface/web/client/lib/lang/de_reseller.lng
+++ b/interface/web/client/lib/lang/de_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. Anzahl an FTP Benutzer';
$wb['default_dnsserver_txt'] = 'Standard DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. Anzahl an DNS Zonen';
+$wb['limit_dns_slave_zone_txt'] = 'Max. Anzahl an sekundären DNS Zonen';
$wb['limit_dns_record_txt'] = 'Max. Anzahl an DNS Einträge';
$wb['limit_shell_user_txt'] = 'Max. Anzahl an Shell Benutzer';
$wb['limit_client_txt'] = 'Max. Anzahl an Kunden';
@@ -75,7 +76,9 @@
$wb['limit_web_subdomain_error_notint'] = 'Das Webseite Subdomain Limit muss eine Nummer sein.';
$wb['limit_ftp_user_error_notint'] = 'Das FTP Benutzer Limit muss eine Nummer sein.';
$wb['limit_shell_user_error_notint'] = 'Das Shell Benutzer Limit muss eine Nummer sein.';
-$wb['limit_dns_zone_error_notint'] = 'Das DNS Einträge Limit muss eine Nummer sein.';
+$wb['limit_dns_zone_error_notint'] = 'Das DNS Zonen Limit muss eine Nummer sein.';
+$wb['limit_dns_slave_zone_error_notint'] = 'Das sekundär DNS Einträge Limit muss eine Nummer sein.';
+$wb['limit_dns_record_error_notint'] = 'Das DNS Einträge Limit muss eine Nummer sein.';
$wb['default_dbserver_txt'] = 'Standarddatenbankserver';
$wb['limit_database_error_notint'] = 'Das Datenbank Limit muss eine Nummer sein.';
$wb['limit_cron_error_notint'] = 'Das Cron Job Limit muss eine Zahl sein.';
@@ -91,4 +94,3 @@
$wb['limit_traffic_quota_txt'] = 'Traffic Quota';
$wb['limit_trafficquota_error_notint'] = 'Traffic Quota muss eine Zahl sein.';
?>
-
diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng
index 9c028f3..59e0baf 100644
--- a/interface/web/client/lib/lang/en_client.lng
+++ b/interface/web/client/lib/lang/en_client.lng
@@ -54,6 +54,7 @@
$wb["limit_ftp_user_txt"] = 'Max. number of FTP users';
$wb["default_dnsserver_txt"] = 'Default DNS Server';
$wb["limit_dns_zone_txt"] = 'Max. number of DNS zones';
+$wb["limit_dns_slave_zone_txt"] = 'Max. number of secondary DNS zones';
$wb["limit_dns_record_txt"] = 'Max. number DNS records';
$wb["limit_shell_user_txt"] = 'Max. number of Shell users';
$wb["limit_webdav_user_txt"] = 'Max. number of Webdav users';
@@ -80,6 +81,7 @@
$wb["limit_shell_user_error_notint"] = 'The shell user limit must be a number.';
$wb["limit_webdav_user_error_notint"] = 'The webdav user limit must be a number.';
$wb["limit_dns_zone_error_notint"] = 'The dns zone limit must be a number.';
+$wb["limit_dns_slave_zone_error_notint"] = 'The dns slave zone limit must be a number.';
$wb["limit_dns_zone_error_notint"] = 'The dns record limit must be a number.';
$wb["limit_client_error_notint"] = 'The sub client limit must be a number.';
$wb["default_dbserver_txt"] = 'Default Database Server';
diff --git a/interface/web/client/lib/lang/en_client_template.lng b/interface/web/client/lib/lang/en_client_template.lng
index ca8d4f7..1b87a34 100644
--- a/interface/web/client/lib/lang/en_client_template.lng
+++ b/interface/web/client/lib/lang/en_client_template.lng
@@ -26,6 +26,7 @@
$wb["limit_web_subdomain_txt"] = 'Max. number of web subdomains';
$wb["limit_ftp_user_txt"] = 'Max. number of FTP users';
$wb["limit_dns_zone_txt"] = 'Max. number of DNS zones';
+$wb["limit_dns_slave_zone_txt"] = 'Max. number of secondary DNS zones';
$wb["limit_dns_record_txt"] = 'Max. number DNS records';
$wb["limit_shell_user_txt"] = 'Max. number of Shell users';
$wb["limit_webdav_user_txt"] = 'Max. number of Webdav users';
@@ -50,7 +51,8 @@
$wb["limit_shell_user_error_notint"] = 'The shell user limit must be a number.';
$wb["limit_webdav_user_error_notint"] = 'The webdav user limit must be a number.';
$wb["limit_dns_zone_error_notint"] = 'The dns zone limit must be a number.';
-$wb["limit_dns_zone_error_notint"] = 'The dns record limit must be a number.';
+$wb["limit_dns_slave_zone_error_notint"] = 'The dns slave zone limit must be a number.';
+$wb["limit_dns_record_error_notint"] = 'The dns record limit must be a number.';
$wb["limit_database_txt"] = 'Max. number of Databases';
$wb["limit_database_error_notint"] = 'The database limit must be a number.';
$wb["limit_cron_error_notint"] = 'The cron limit must be a number.';
diff --git a/interface/web/client/lib/lang/en_reseller.lng b/interface/web/client/lib/lang/en_reseller.lng
index 2b06c33..6207557 100644
--- a/interface/web/client/lib/lang/en_reseller.lng
+++ b/interface/web/client/lib/lang/en_reseller.lng
@@ -53,6 +53,7 @@
$wb["limit_ftp_user_txt"] = 'Max. number of FTP users';
$wb["default_dnsserver_txt"] = 'Default DNS Server';
$wb["limit_dns_zone_txt"] = 'Max. number of DNS zones';
+$wb["limit_dns_slave_zone_txt"] = 'Max. number of secondary DNS zones';
$wb["limit_dns_record_txt"] = 'Max. number DNS records';
$wb["limit_shell_user_txt"] = 'Max. number of Shell users';
$wb["limit_client_txt"] = 'Max. number of Clients';
@@ -76,7 +77,8 @@
$wb["limit_ftp_user_error_notint"] = 'The ftp user limit must be a number.';
$wb["limit_shell_user_error_notint"] = 'The shell user limit must be a number.';
$wb["limit_dns_zone_error_notint"] = 'The dns zone limit must be a number.';
-$wb["limit_dns_zone_error_notint"] = 'The dns record limit must be a number.';
+$wb["limit_dns_slave_zone_error_notint"] = 'The dns slave zone limit must be a number.';
+$wb["limit_dns_record_error_notint"] = 'The dns record limit must be a number.';
$wb["limit_client_error_notint"] = 'The sub client limit must be a number.';
$wb["default_dbserver_txt"] = 'Default Database Server';
$wb["limit_database_txt"] = 'Max. number of Databases';
diff --git a/interface/web/client/lib/lang/es_client.lng b/interface/web/client/lib/lang/es_client.lng
index e42a548..33c0a76 100644
--- a/interface/web/client/lib/lang/es_client.lng
+++ b/interface/web/client/lib/lang/es_client.lng
@@ -51,6 +51,7 @@
$wb['limit_ftp_user_txt'] = 'Número máximo de usuarios FTP';
$wb['default_dnsserver_txt'] = 'Servidor DNS por defecto';
$wb['limit_dns_zone_txt'] = 'Número máximo de zonas DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Número máximo de registros DNS';
$wb['limit_shell_user_txt'] = 'Número máximo de usuarios de consola';
$wb['username_error_empty'] = 'El nombre de usuario está vacío.';
@@ -73,6 +74,8 @@
$wb['limit_ftp_user_error_notint'] = 'El límite de usuarios FTP debe ser un número';
$wb['limit_shell_user_error_notint'] = 'El límite de usuarios de consola debe ser un número';
$wb['limit_dns_zone_error_notint'] = 'El límite de zonas DNS debe ser un número';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Servidor de bases de datos por defecto';
$wb['limit_database_error_notint'] = 'El límite de bases de datos debe ser un número';
$wb['username_error_regex'] = 'El usuario contiene carácteres no válidos';
diff --git a/interface/web/client/lib/lang/es_client_template.lng b/interface/web/client/lib/lang/es_client_template.lng
index 551de12..9b8270c 100644
--- a/interface/web/client/lib/lang/es_client_template.lng
+++ b/interface/web/client/lib/lang/es_client_template.lng
@@ -22,6 +22,7 @@
$wb['limit_web_subdomain_txt'] = 'Número máximo de subdominios';
$wb['limit_ftp_user_txt'] = 'Número máximo de usuarios FTP';
$wb['limit_dns_zone_txt'] = 'Número máximo de zonas DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Número máximo de registros DNS';
$wb['limit_shell_user_txt'] = 'Número máximo de usuarios de consola';
$wb['limit_maildomain_error_notint'] = 'El límite de dominios de correo debe ser un número.';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'El límite de usuarios FTP debe ser un número.';
$wb['limit_shell_user_error_notint'] = 'El límite de usuarios de consola debe ser un número.';
$wb['limit_dns_zone_error_notint'] = 'El límite de registros DNS debe ser un número.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'El límite de bases de datos debe ser un número.';
$wb['error_template_name_empty'] = 'Por favor, introduzca un nombre de plantilla';
$wb['limit_cron_txt'] = 'Número máximo de tareas cron';
diff --git a/interface/web/client/lib/lang/es_reseller.lng b/interface/web/client/lib/lang/es_reseller.lng
index f0dc7ca..3ed5060 100644
--- a/interface/web/client/lib/lang/es_reseller.lng
+++ b/interface/web/client/lib/lang/es_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
diff --git a/interface/web/client/lib/lang/fi_client.lng b/interface/web/client/lib/lang/fi_client.lng
index 87842b1..1d80779 100755
--- a/interface/web/client/lib/lang/fi_client.lng
+++ b/interface/web/client/lib/lang/fi_client.lng
@@ -50,6 +50,7 @@
$wb['limit_ftp_user_txt'] = 'FTP-käyttäjätunnuksien määrä';
$wb['default_dnsserver_txt'] = 'Oletusnimipavelin';
$wb['limit_dns_zone_txt'] = 'DNS-alueiden määrä';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'DNS-tietuieden määrä';
$wb['limit_shell_user_txt'] = 'Shell-käyttäjien määrä';
$wb['username_error_empty'] = 'Käyttäjätunnus on tyhjä';
@@ -72,6 +73,8 @@
$wb['limit_ftp_user_error_notint'] = 'Ftp-käyttäjätunnuksien raja-arvon pitää olla numero.';
$wb['limit_shell_user_error_notint'] = 'Shell-käyttäjätunnuksien raja-arvon pitää olla numero.';
$wb['limit_dns_zone_error_notint'] = 'DNS-tietueiden raja-arvon pitää olla numero.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Oletustietokantapalvelin';
$wb['limit_database_error_notint'] = 'Tietokantojen raja-arvon pitää olla numero.';
$wb['username_error_regex'] = 'Käyttäjätunnus sisältää virheellisiä merkkejä.';
diff --git a/interface/web/client/lib/lang/fi_client_template.lng b/interface/web/client/lib/lang/fi_client_template.lng
index 66de5f4..182f46e 100755
--- a/interface/web/client/lib/lang/fi_client_template.lng
+++ b/interface/web/client/lib/lang/fi_client_template.lng
@@ -22,6 +22,7 @@
$wb['limit_web_subdomain_txt'] = 'Aliverkkotunnuksien määrä';
$wb['limit_ftp_user_txt'] = 'FTP-käyttäjätunnuksien määrä';
$wb['limit_dns_zone_txt'] = 'DNS-alueiden määrä';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'DNS-tietueiden määrä';
$wb['limit_shell_user_txt'] = 'Shell-käyttäjien määrä';
$wb['limit_maildomain_error_notint'] = 'Postiverkkotunnuksien raja-arvon pitää olla numero.';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'FTP-käyttäjätunnuksien raja-arvon pitää olla numero.';
$wb['limit_shell_user_error_notint'] = 'Shell-käyttäjätunnuksien raja-arvon pitää olla numero.';
$wb['limit_dns_zone_error_notint'] = 'DNS-tietueiden raja-arvon pitää olla numero.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'Tietokantojen raja-arvon pitää olla numero.';
$wb['error_template_name_empty'] = 'Anna mallilomakkeen nimi';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
diff --git a/interface/web/client/lib/lang/fi_reseller.lng b/interface/web/client/lib/lang/fi_reseller.lng
index f0dc7ca..3ed5060 100644
--- a/interface/web/client/lib/lang/fi_reseller.lng
+++ b/interface/web/client/lib/lang/fi_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
diff --git a/interface/web/client/lib/lang/fr_client.lng b/interface/web/client/lib/lang/fr_client.lng
index 7afb6e0..81111c4 100644
--- a/interface/web/client/lib/lang/fr_client.lng
+++ b/interface/web/client/lib/lang/fr_client.lng
@@ -51,6 +51,7 @@
$wb['limit_ftp_user_txt'] = 'Nombre max. dutilisateurs FTP';
$wb['default_dnsserver_txt'] = 'Serveur DNS par défaut';
$wb['limit_dns_zone_txt'] = 'Nombre max. de zones DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Nombre max. denregistrements DNS';
$wb['limit_shell_user_txt'] = 'Nombre max. dutilisateurs Shell';
$wb['username_error_empty'] = 'Le nom dutilisateur est vide.';
@@ -73,6 +74,8 @@
$wb['limit_ftp_user_error_notint'] = 'La limite dutilisateurs FTP doit être un nombre.';
$wb['limit_shell_user_error_notint'] = 'La limite dutilisateurs Shell doit être un nombre.';
$wb['limit_dns_zone_error_notint'] = 'La limite denregistrements DNS doit être un nombre.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Serveur de bases de données par défaut';
$wb['limit_database_error_notint'] = 'La limite de bases de données doit être un nombre.';
$wb['username_error_regex'] = 'Le nom dutilisateur contient des caractères invalides.';
diff --git a/interface/web/client/lib/lang/fr_client_template.lng b/interface/web/client/lib/lang/fr_client_template.lng
index 4004ef6..e4f6078 100644
--- a/interface/web/client/lib/lang/fr_client_template.lng
+++ b/interface/web/client/lib/lang/fr_client_template.lng
@@ -22,6 +22,7 @@
$wb['limit_web_subdomain_txt'] = 'Nombre max. de sous-domaines';
$wb['limit_ftp_user_txt'] = 'Nombre max. dutilisateurs FTP';
$wb['limit_dns_zone_txt'] = 'Nombre max. de zones DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Nombre max. denregistrements DNS';
$wb['limit_shell_user_txt'] = 'Nombre max. dutilisateurs Shell';
$wb['limit_maildomain_error_notint'] = 'La limite de domaines de-mail doit être un nombre.';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'La limite dutilisateurs FTP doit être un nombre.';
$wb['limit_shell_user_error_notint'] = 'La limite dutilisateurs Shell doit être un nombre.';
$wb['limit_dns_zone_error_notint'] = 'La limite denregistrements DNS doit être un nombre.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'La limite de bases de données doit être un nombre.';
$wb['error_template_name_empty'] = 'Entrez le nom du modèle.';
$wb['limit_cron_txt'] = 'Nombre max. de tâches Cron';
diff --git a/interface/web/client/lib/lang/fr_reseller.lng b/interface/web/client/lib/lang/fr_reseller.lng
index 24926d4..f0cec4d 100644
--- a/interface/web/client/lib/lang/fr_reseller.lng
+++ b/interface/web/client/lib/lang/fr_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Nombre max. dutilisateurs FTP';
$wb['default_dnsserver_txt'] = 'Serveur DNS par défaut';
$wb['limit_dns_zone_txt'] = 'Nombre max. de zones DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Nombre max. denregistrements DNS';
$wb['limit_shell_user_txt'] = 'Nombre max. dutilisateurs Shell';
$wb['limit_client_txt'] = 'Nombre max. de clients';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'La limite dutilisateurs FTP doit être un nombre.';
$wb['limit_shell_user_error_notint'] = 'La limite dutilisateurs Shell doit être un nombre.';
$wb['limit_dns_zone_error_notint'] = 'La limite denregistrements DNS doit être un nombre.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Serveur de bases de données par défaut';
$wb['limit_database_error_notint'] = 'La limite de bases de données doit être un nombre.';
$wb['limit_cron_error_notint'] = 'La limite de tâches Cron doit être un nombre.';
diff --git a/interface/web/client/lib/lang/hu_client.lng b/interface/web/client/lib/lang/hu_client.lng
index 35be91f..3ce2c54 100644
--- a/interface/web/client/lib/lang/hu_client.lng
+++ b/interface/web/client/lib/lang/hu_client.lng
@@ -50,6 +50,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['username_error_empty'] = 'Username is empty.';
@@ -72,6 +73,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['username_error_regex'] = 'The Username contains invalid chracaters.';
diff --git a/interface/web/client/lib/lang/hu_client_template.lng b/interface/web/client/lib/lang/hu_client_template.lng
index 4f83eaf..0060c3a 100644
--- a/interface/web/client/lib/lang/hu_client_template.lng
+++ b/interface/web/client/lib/lang/hu_client_template.lng
@@ -21,6 +21,7 @@
$wb['limit_web_subdomain_txt'] = 'Max. number of web subdomains';
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Please enter a Template name';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
diff --git a/interface/web/client/lib/lang/hu_reseller.lng b/interface/web/client/lib/lang/hu_reseller.lng
index f0dc7ca..3ed5060 100644
--- a/interface/web/client/lib/lang/hu_reseller.lng
+++ b/interface/web/client/lib/lang/hu_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
diff --git a/interface/web/client/lib/lang/it_client.lng b/interface/web/client/lib/lang/it_client.lng
index 7dbc06c..4efe8b1 100644
--- a/interface/web/client/lib/lang/it_client.lng
+++ b/interface/web/client/lib/lang/it_client.lng
@@ -50,6 +50,7 @@
$wb['limit_ftp_user_txt'] = 'Numero massimo di utenti FTP';
$wb['default_dnsserver_txt'] = 'DNS Server predefinito';
$wb['limit_dns_zone_txt'] = 'Numero massimo di zone DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Numero massimo di record DNS';
$wb['limit_shell_user_txt'] = 'Numero massimo di utenti Shell';
$wb['username_error_empty'] = 'Nome utente è vuoto.';
@@ -72,6 +73,8 @@
$wb['limit_ftp_user_error_notint'] = 'Il limite degli utenti ftp deve essere un numero.';
$wb['limit_shell_user_error_notint'] = 'Il limite degli utenti shell deve essere un numero.';
$wb['limit_dns_zone_error_notint'] = 'Il limite dei record dns deve essere un numero.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Server Database predefinito';
$wb['limit_database_error_notint'] = 'Il limite dei database deve essere un numero.';
$wb['username_error_regex'] = 'Il nome utente contiene caratteri non validi.';
diff --git a/interface/web/client/lib/lang/it_client_template.lng b/interface/web/client/lib/lang/it_client_template.lng
index d180ea3..2ddf42d 100644
--- a/interface/web/client/lib/lang/it_client_template.lng
+++ b/interface/web/client/lib/lang/it_client_template.lng
@@ -22,6 +22,7 @@
$wb['limit_web_subdomain_txt'] = 'Max. number of web subdomains';
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_maildomain_error_notint'] = 'The email domain limit must be a number.';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Devi inserire il nome del modello';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
diff --git a/interface/web/client/lib/lang/it_reseller.lng b/interface/web/client/lib/lang/it_reseller.lng
index f0dc7ca..3ed5060 100644
--- a/interface/web/client/lib/lang/it_reseller.lng
+++ b/interface/web/client/lib/lang/it_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
diff --git a/interface/web/client/lib/lang/ja_client.lng b/interface/web/client/lib/lang/ja_client.lng
index 2289f94..8888c79 100644
--- a/interface/web/client/lib/lang/ja_client.lng
+++ b/interface/web/client/lib/lang/ja_client.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'FTPユーザーの最大数';
$wb['default_dnsserver_txt'] = 'デフォルトのDNSサーバー';
$wb['limit_dns_zone_txt'] = 'DNSゾーンの最大数';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'DNSレコードの最大数';
$wb['limit_shell_user_txt'] = 'Shellユーザーの最大数';
$wb['limit_client_txt'] = 'クライアントの最大値';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'FTPユーザーの最大数は数字で指定してください。';
$wb['limit_shell_user_error_notint'] = 'Shellユーザーの最大数は数字で指定してください。';
$wb['limit_dns_zone_error_notint'] = 'DNSレコードの最大数は数字で指定してください。';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'デフォルトのデータベースサーバー';
$wb['limit_database_error_notint'] = 'データベースの最大数は数字で指定してください。';
$wb['limit_cron_error_notint'] = 'cronジョブの最大数は数字で指定してください。';
diff --git a/interface/web/client/lib/lang/ja_client_template.lng b/interface/web/client/lib/lang/ja_client_template.lng
index adb81cb..b0252bd 100644
--- a/interface/web/client/lib/lang/ja_client_template.lng
+++ b/interface/web/client/lib/lang/ja_client_template.lng
@@ -24,6 +24,7 @@
$wb['limit_web_subdomain_txt'] = 'ウェブサブドメインの最大数';
$wb['limit_ftp_user_txt'] = 'FTPユーザーの最大数';
$wb['limit_dns_zone_txt'] = 'DNSゾーンの最大数';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'DNSレコードの最大数';
$wb['limit_shell_user_txt'] = 'Shellユーザーの最大数';
$wb['limit_client_txt'] = 'クライアントの最大値';
@@ -45,6 +46,8 @@
$wb['limit_ftp_user_error_notint'] = 'FTPユーザーの最大数は数字で指定してください。';
$wb['limit_shell_user_error_notint'] = 'Shellユーザーの最大数は数字で指定してください。';
$wb['limit_dns_zone_error_notint'] = 'DNSレコードの最大数は数字で指定してください。';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'データベースの最大数は数字で指定してください。';
$wb['limit_cron_error_notint'] = 'cronジョブの最大数は数字で指定してください。';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
diff --git a/interface/web/client/lib/lang/ja_reseller.lng b/interface/web/client/lib/lang/ja_reseller.lng
index fbb4380..a7a154a 100644
--- a/interface/web/client/lib/lang/ja_reseller.lng
+++ b/interface/web/client/lib/lang/ja_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'FTPユーザーの最大数';
$wb['default_dnsserver_txt'] = 'デフォルトのDNSサーバー';
$wb['limit_dns_zone_txt'] = 'DNSゾーンの最大数';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'DNSレコードの最大数';
$wb['limit_shell_user_txt'] = 'Shellユーザーの最大数';
$wb['limit_client_txt'] = 'クライアントの最大値';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'FTPユーザーの最大数は数字で指定してください。';
$wb['limit_shell_user_error_notint'] = 'Shellユーザーの最大数は数字で指定してください。';
$wb['limit_dns_zone_error_notint'] = 'DNSレコードの最大数は数字で指定してください。';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'デフォルトのデータベースサーバー';
$wb['limit_database_error_notint'] = 'データベースの最大数は数字で指定してください。';
$wb['limit_cron_error_notint'] = 'cronジョブの最大数は数字で指定してください。';
diff --git a/interface/web/client/lib/lang/nl_client.lng b/interface/web/client/lib/lang/nl_client.lng
index a50da45..55d6c54 100644
--- a/interface/web/client/lib/lang/nl_client.lng
+++ b/interface/web/client/lib/lang/nl_client.lng
@@ -51,6 +51,7 @@
$wb['limit_ftp_user_txt'] = '# FTP gebruikers';
$wb['default_dnsserver_txt'] = 'Standaard DNS server';
$wb['limit_dns_zone_txt'] = '# DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = '# DNS records';
$wb['limit_shell_user_txt'] = '# Shell gebruikers';
$wb['username_error_empty'] = 'Gebruikersnaam is leeg.';
@@ -73,6 +74,8 @@
$wb['limit_ftp_user_error_notint'] = 'De FTP gebruiker limiet moet een nummerieke waarde zijn.';
$wb['limit_shell_user_error_notint'] = 'De Shell gebruiker limit moet een nummerieke waarde zijn.';
$wb['limit_dns_zone_error_notint'] = 'De DNS record limit moet een nummerieke waarde zijn.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Standaard database server';
$wb['limit_database_error_notint'] = 'De database limiet moet een nummerieke waarde zijn.';
$wb['username_error_regex'] = 'De gebruikersnaam bevat ongeldige karakters.';
diff --git a/interface/web/client/lib/lang/nl_client_template.lng b/interface/web/client/lib/lang/nl_client_template.lng
index e8e575f..888d0f6 100644
--- a/interface/web/client/lib/lang/nl_client_template.lng
+++ b/interface/web/client/lib/lang/nl_client_template.lng
@@ -22,6 +22,7 @@
$wb['limit_web_subdomain_txt'] = '# Website subdomeinen';
$wb['limit_ftp_user_txt'] = '# FTP gebruikers';
$wb['limit_dns_zone_txt'] = '# DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = '# DNS records';
$wb['limit_shell_user_txt'] = '# Shell gebruikers';
$wb['limit_maildomain_error_notint'] = 'De e-mail domein limiet moet een numerieke waarde zijn.';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'De ftp user limiet moet een numerieke waarde zijn.';
$wb['limit_shell_user_error_notint'] = 'De shell user limiet moet een numerieke waarde zijn.';
$wb['limit_dns_zone_error_notint'] = 'De DNS record limiet moet een numerieke waarde zijn.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'De database limiet moet een numerieke waarde zijn.';
$wb['error_template_name_empty'] = 'Voer a.u.b. de template naam in.';
$wb['limit_cron_txt'] = '# Cron taken';
diff --git a/interface/web/client/lib/lang/nl_reseller.lng b/interface/web/client/lib/lang/nl_reseller.lng
index 4fa2bdc..9e67d21 100644
--- a/interface/web/client/lib/lang/nl_reseller.lng
+++ b/interface/web/client/lib/lang/nl_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = '# FTP-gebruikers';
$wb['default_dnsserver_txt'] = 'Standaard DNS server';
$wb['limit_dns_zone_txt'] = '# DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = '# DNS records';
$wb['limit_shell_user_txt'] = '# Shell gebruikers';
$wb['limit_client_txt'] = '# Klanten';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'FTP gebruikers limiet moet nummeriek zijn.';
$wb['limit_shell_user_error_notint'] = 'Shell gebruikers limiet moet nummeriek zijn.';
$wb['limit_dns_zone_error_notint'] = 'DNS zones limiet moet nummeriek zijn.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Standaard database server';
$wb['limit_database_error_notint'] = 'Databases limiet moet nummeriek zijn.';
$wb['limit_cron_error_notint'] = 'Cron limiet moet nummeriek zijn.';
diff --git a/interface/web/client/lib/lang/pl_client.lng b/interface/web/client/lib/lang/pl_client.lng
index 42f73b8..0acf4b2 100644
--- a/interface/web/client/lib/lang/pl_client.lng
+++ b/interface/web/client/lib/lang/pl_client.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Maksymalna ilość użytkowników FTP';
$wb['default_dnsserver_txt'] = 'Domyślny serwer DNS';
$wb['limit_dns_zone_txt'] = 'Maksymalna ilość stref DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Maksymalna ilość wpisów DNS';
$wb['limit_shell_user_txt'] = 'Maksymalna ilość użytkowników shell';
$wb['limit_client_txt'] = 'Maksymalna ilość klientów';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'Limit użytkowników FTP musi być liczbą.';
$wb['limit_shell_user_error_notint'] = 'Limit użytkowników shell musi być liczbą.';
$wb['limit_dns_zone_error_notint'] = 'Limit wpisów DNS musi być liczbą.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Domyślny serwer bazy danych';
$wb['limit_database_error_notint'] = 'Limit baz danych musi być liczbą.';
$wb['limit_cron_error_notint'] = 'Limit zadań cron musi być liczbą.';
diff --git a/interface/web/client/lib/lang/pl_client_template.lng b/interface/web/client/lib/lang/pl_client_template.lng
index a1a2d75..8cbfa20 100644
--- a/interface/web/client/lib/lang/pl_client_template.lng
+++ b/interface/web/client/lib/lang/pl_client_template.lng
@@ -24,6 +24,7 @@
$wb['limit_web_subdomain_txt'] = 'Maksymalna ilość subdomen';
$wb['limit_ftp_user_txt'] = 'Maksymalna ilość uzytkowników FTP';
$wb['limit_dns_zone_txt'] = 'Maksymalna ilość stref DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Maksymalna ilość wpisów DNS';
$wb['limit_shell_user_txt'] = 'Maksymalna ilość użytkowników shell';
$wb['limit_client_txt'] = 'Maksymalna ilość klientów';
@@ -45,6 +46,8 @@
$wb['limit_ftp_user_error_notint'] = 'Limit użytkowników FTP musi być liczbą.';
$wb['limit_shell_user_error_notint'] = 'Limit użytkowników shell musi być liczbą.';
$wb['limit_dns_zone_error_notint'] = 'Limit wpisów DNS musi być liczbą.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'Limit baz danych musi być liczbą.';
$wb['limit_cron_error_notint'] = 'Limit zadań cron musi być liczbą.';
$wb['limit_cron_error_frequency'] = 'Limit częstości zadań corn musi być liczbą.';
diff --git a/interface/web/client/lib/lang/pl_reseller.lng b/interface/web/client/lib/lang/pl_reseller.lng
index f08ca1c..1cebf80 100644
--- a/interface/web/client/lib/lang/pl_reseller.lng
+++ b/interface/web/client/lib/lang/pl_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Maksymalna ilość użytkowników FTP';
$wb['default_dnsserver_txt'] = 'Domyślny serwer DNS';
$wb['limit_dns_zone_txt'] = 'Maksymalna ilość stref DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Maksymalna ilość wpisów DNS';
$wb['limit_shell_user_txt'] = 'Maksymalna ilość użytkowników Shell';
$wb['limit_client_txt'] = 'Maksymalna ilość klientów';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'Limit użytkowników ftp musi być liczbą.';
$wb['limit_shell_user_error_notint'] = 'Limit użytkowników shell musi być liczbą.';
$wb['limit_dns_zone_error_notint'] = 'Limit wpisów DNS musi być liczbą.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Domyślny serwer bazy danych';
$wb['limit_database_error_notint'] = 'Limit baz danych musi być liczbą.';
$wb['limit_cron_error_notint'] = 'Limit zadań crone musi być liczbą.';
diff --git a/interface/web/client/lib/lang/pt_client.lng b/interface/web/client/lib/lang/pt_client.lng
index 07fb6d4..6d998a5 100644
--- a/interface/web/client/lib/lang/pt_client.lng
+++ b/interface/web/client/lib/lang/pt_client.lng
@@ -50,6 +50,7 @@
$wb['limit_ftp_user_txt'] = 'Número máximo de utilizadors FTP';
$wb['default_dnsserver_txt'] = 'Servidor de Nomes Padrão';
$wb['limit_dns_zone_txt'] = 'Número máximo de zonas DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Número máximo de registos DNS';
$wb['limit_shell_user_txt'] = 'Número máximo de utilizadors de shell';
$wb['limit_client_txt'] = 'Número máximo de clientes';
@@ -73,6 +74,8 @@
$wb['limit_ftp_user_error_notint'] = 'O limite de utilizadors de FTP deve ser um número.';
$wb['limit_shell_user_error_notint'] = 'O limite de utilizadors de Shell deve ser um número.';
$wb['limit_dns_zone_error_notint'] = 'O limite de registos de DNS deve ser um número';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Servidor de Base de Dados Padrão';
$wb['limit_database_error_notint'] = 'O limite de bases de dados deve ser um número';
$wb['username_error_regex'] = 'O nome de utilizador contem caracteres inválidos.';
diff --git a/interface/web/client/lib/lang/pt_client_template.lng b/interface/web/client/lib/lang/pt_client_template.lng
index bda5bc9..346d7d8 100644
--- a/interface/web/client/lib/lang/pt_client_template.lng
+++ b/interface/web/client/lib/lang/pt_client_template.lng
@@ -21,6 +21,7 @@
$wb['limit_web_subdomain_txt'] = 'Número máximo de sub-domínios';
$wb['limit_ftp_user_txt'] = 'Número máximo de utilizadors de FTP';
$wb['limit_dns_zone_txt'] = 'Número máximo de zonas DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Número máximo de registos DNS';
$wb['limit_shell_user_txt'] = 'Número máximo de utilizadors de Shell';
$wb['limit_client_txt'] = 'Número máximo de clientes';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'O limite de contas FTP deve ser um número';
$wb['limit_shell_user_error_notint'] = 'O limite de contas shell DNS deve ser um número';
$wb['limit_dns_zone_error_notint'] = 'O limite de zonas DNS deve ser um número';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'O limite de bases de dados deve ser um número';
$wb['error_template_name_empty'] = 'Por favor insira o nome da template';
$wb['limit_cron_txt'] = 'Número máximo de tarefas no cron';
diff --git a/interface/web/client/lib/lang/pt_reseller.lng b/interface/web/client/lib/lang/pt_reseller.lng
index ab2823c..388ff1a 100644
--- a/interface/web/client/lib/lang/pt_reseller.lng
+++ b/interface/web/client/lib/lang/pt_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Servidor DNS Padrão';
$wb['limit_dns_zone_txt'] = 'Máximo de zonas DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Máximo de registos DNS';
$wb['limit_shell_user_txt'] = 'Número máximo de utilizadors de shell';
$wb['limit_client_txt'] = 'Número máximo de clientes';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'O limite de utilizadors de ftp deve ser um número.';
$wb['limit_shell_user_error_notint'] = 'O limite de utilizadors de shell deve ser um número.';
$wb['limit_dns_zone_error_notint'] = 'O limite de registos de dns deve ser um número.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Servidor de Base de Dados Padrão';
$wb['limit_database_error_notint'] = 'O limite de bases de dados deve ser um número.';
$wb['limit_cron_error_notint'] = 'O limite do cron deve ser um número.';
diff --git a/interface/web/client/lib/lang/ro_client.lng b/interface/web/client/lib/lang/ro_client.lng
index 6dbfadb..4b3a790 100644
--- a/interface/web/client/lib/lang/ro_client.lng
+++ b/interface/web/client/lib/lang/ro_client.lng
@@ -50,6 +50,7 @@
$wb['limit_ftp_user_txt'] = 'Numar maxim de useri FTP';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Numar maxim de zone DNS ';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Numar maxim de inregistrari DNS ';
$wb['limit_shell_user_txt'] = 'Numar maxim de useri Shell ';
$wb['limit_client_txt'] = 'Numarul maxim de clienti a fost atins';
@@ -73,6 +74,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['username_error_regex'] = 'The Username contains invalid chracaters.';
diff --git a/interface/web/client/lib/lang/ro_client_template.lng b/interface/web/client/lib/lang/ro_client_template.lng
index ab6a8c2..9ea704f 100644
--- a/interface/web/client/lib/lang/ro_client_template.lng
+++ b/interface/web/client/lib/lang/ro_client_template.lng
@@ -21,6 +21,7 @@
$wb['limit_web_subdomain_txt'] = 'Max. number of web subdomains';
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Please enter a Template name';
$wb['limit_mailaliasdomain_txt'] = 'Max. number of domain aliases';
diff --git a/interface/web/client/lib/lang/ro_reseller.lng b/interface/web/client/lib/lang/ro_reseller.lng
index f0dc7ca..3ed5060 100644
--- a/interface/web/client/lib/lang/ro_reseller.lng
+++ b/interface/web/client/lib/lang/ro_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
diff --git a/interface/web/client/lib/lang/ru_client.lng b/interface/web/client/lib/lang/ru_client.lng
index 36817aa..4f4f4f0 100644
--- a/interface/web/client/lib/lang/ru_client.lng
+++ b/interface/web/client/lib/lang/ru_client.lng
@@ -50,6 +50,7 @@
$wb['limit_ftp_user_txt'] = 'макс.число пользователей FTP';
$wb['default_dnsserver_txt'] = 'DNS сервер по-умолчанию';
$wb['limit_dns_zone_txt'] = 'Макс.число DNS-зон';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Макс.число записей DNS';
$wb['limit_shell_user_txt'] = 'Макс.число пользователей Shell';
$wb['username_error_empty'] = 'Логин пустой.';
@@ -72,6 +73,8 @@
$wb['limit_ftp_user_error_notint'] = 'Лимит пользователей ftp должен быть числом.';
$wb['limit_shell_user_error_notint'] = 'Лимит пользователей shell должен быть числом.';
$wb['limit_dns_zone_error_notint'] = 'Лимит DNS-записей должен быть числом.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Сервер БД по-умолчанию';
$wb['limit_database_error_notint'] = 'Лимит БД должен быть числом.';
$wb['password_strength_txt'] = 'Стойкость пароля';
diff --git a/interface/web/client/lib/lang/ru_client_template.lng b/interface/web/client/lib/lang/ru_client_template.lng
index 92f299e..3162ec8 100644
--- a/interface/web/client/lib/lang/ru_client_template.lng
+++ b/interface/web/client/lib/lang/ru_client_template.lng
@@ -22,6 +22,7 @@
$wb['limit_web_subdomain_txt'] = 'Макс.число web субдоменов';
$wb['limit_ftp_user_txt'] = 'Макс.число FTP пользователей';
$wb['limit_dns_zone_txt'] = 'Макс.число DNS зон';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Макс.число DNS записей';
$wb['limit_shell_user_txt'] = 'Макс.число Shell-пользователей';
$wb['limit_maildomain_error_notint'] = 'Лимит почтовых сервером должен быть числом.';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'Лимит пользователей ftp должен быть числом.';
$wb['limit_shell_user_error_notint'] = 'Лимит пользователей shell должен быть числом.';
$wb['limit_dns_zone_error_notint'] = 'Лимит DNS записей должен быть числом.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'Лимит БД должен быть числом.';
$wb['error_template_name_empty'] = 'Введите имя шаблона';
$wb['limit_cron_txt'] = 'Макс.число задач cron';
diff --git a/interface/web/client/lib/lang/ru_reseller.lng b/interface/web/client/lib/lang/ru_reseller.lng
index da0ef8d..4ffdc62 100644
--- a/interface/web/client/lib/lang/ru_reseller.lng
+++ b/interface/web/client/lib/lang/ru_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Макс. число FTP пользователей';
$wb['default_dnsserver_txt'] = 'DNS сервер по-умолчанию';
$wb['limit_dns_zone_txt'] = 'Макс. число DNS зон';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Макс. число DNS записей';
$wb['limit_shell_user_txt'] = 'Макс. число of Shell-пользователей';
$wb['limit_client_txt'] = 'Макс. число клиентов';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'Лимит пользователей FTP должен быть числом.';
$wb['limit_shell_user_error_notint'] = 'Лимит пользователей Shell должен быть числом.';
$wb['limit_dns_zone_error_notint'] = 'Лимит записей DNS должен быть числом.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Сервер БД по-умолчанию';
$wb['limit_database_error_notint'] = 'Лимит БД должен быть числом.';
$wb['limit_cron_error_notint'] = 'Лимит задач cron должен быть числом.';
diff --git a/interface/web/client/lib/lang/se_client.lng b/interface/web/client/lib/lang/se_client.lng
index 2bcea5c..46d6ff9 100644
--- a/interface/web/client/lib/lang/se_client.lng
+++ b/interface/web/client/lib/lang/se_client.lng
@@ -51,6 +51,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['username_error_empty'] = 'Username is empty.';
@@ -73,6 +74,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['username_error_regex'] = 'The Username contains invalid chracaters.';
diff --git a/interface/web/client/lib/lang/se_client_template.lng b/interface/web/client/lib/lang/se_client_template.lng
index 7545a16..48dd6ab 100644
--- a/interface/web/client/lib/lang/se_client_template.lng
+++ b/interface/web/client/lib/lang/se_client_template.lng
@@ -22,6 +22,7 @@
$wb['limit_web_subdomain_txt'] = 'Max. number of web subdomains';
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_maildomain_error_notint'] = 'The email domain limit must be a number.';
@@ -42,6 +43,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Please enter a Template name';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
diff --git a/interface/web/client/lib/lang/se_reseller.lng b/interface/web/client/lib/lang/se_reseller.lng
index f0dc7ca..3ed5060 100644
--- a/interface/web/client/lib/lang/se_reseller.lng
+++ b/interface/web/client/lib/lang/se_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
$wb['default_dnsserver_txt'] = 'Default DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. number DNS records';
$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
$wb['limit_client_txt'] = 'Max. number of Clients';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Default Database Server';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
diff --git a/interface/web/client/lib/lang/sk_client.lng b/interface/web/client/lib/lang/sk_client.lng
index 6daf576..8806f59 100644
--- a/interface/web/client/lib/lang/sk_client.lng
+++ b/interface/web/client/lib/lang/sk_client.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. po?et pou��vate?ov FTP';
$wb['default_dnsserver_txt'] = 'Predvolen� DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. po?et z�n DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. po?et DNS z�znamov';
$wb['limit_shell_user_txt'] = 'Max. po?et Shell u�ivate?ov';
$wb['limit_client_txt'] = 'Max. po?et klientov';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'Limit ftp u�ivate?ov mus� by? ?�slo.';
$wb['limit_shell_user_error_notint'] = 'Limit shell u�ivate?ov mus� by? ?�slo.';
$wb['limit_dns_zone_error_notint'] = 'Limit dns z�znamov mus� by? ?�slo.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Predvolen� Databazov� Server';
$wb['limit_database_error_notint'] = 'Limit datab�z mus� by? ?�slo.';
$wb['limit_cron_error_notint'] = 'Limit cron mus� by? ?�slo.';
diff --git a/interface/web/client/lib/lang/sk_client_template.lng b/interface/web/client/lib/lang/sk_client_template.lng
index d0fe1b7..c6fb4d5 100644
--- a/interface/web/client/lib/lang/sk_client_template.lng
+++ b/interface/web/client/lib/lang/sk_client_template.lng
@@ -24,6 +24,7 @@
$wb['limit_web_subdomain_txt'] = 'Max. po?et web subdom�n';
$wb['limit_ftp_user_txt'] = 'Max. po?et FTP u�ivate?ov';
$wb['limit_dns_zone_txt'] = 'Max. po?et DNS z�n';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. po?et DNS z�znamov';
$wb['limit_shell_user_txt'] = 'Max. po?et Shell u�ivate?ov';
$wb['limit_client_txt'] = 'Max. po?et Klientov';
@@ -45,6 +46,8 @@
$wb['limit_ftp_user_error_notint'] = 'Limit ftp u�ivatelov mus� by? ?�slo.';
$wb['limit_shell_user_error_notint'] = 'Limit shell u�iva?e?ov mus� by? ?�slo.';
$wb['limit_dns_zone_error_notint'] = 'Limit dns z�znamov mus� by? ?�slo.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'Limit datab�z mus� by? ?�slo.';
$wb['limit_cron_error_notint'] = 'Limit cron mus� by? ?�slo.';
$wb['limit_cron_error_frequency'] = 'Cron frekvencia limit mus� by? ?�slo.';
diff --git a/interface/web/client/lib/lang/sk_reseller.lng b/interface/web/client/lib/lang/sk_reseller.lng
index 5b17a80..5edf778 100644
--- a/interface/web/client/lib/lang/sk_reseller.lng
+++ b/interface/web/client/lib/lang/sk_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. po?et FTP u�ivate?ov';
$wb['default_dnsserver_txt'] = 'Predvolen� DNS Server';
$wb['limit_dns_zone_txt'] = 'Max. po?et DNS z�n';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. po?et DNS z�znamov';
$wb['limit_shell_user_txt'] = 'Max. po?et of Shell users';
$wb['limit_client_txt'] = 'Max. po?et Klientov';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'Limit ftp u�ivate? mus� by? ?�slo.';
$wb['limit_shell_user_error_notint'] = 'Limit shell u�ivate? mus� by? ?�slo.';
$wb['limit_dns_zone_error_notint'] = 'Limit dns z�znamov mus� by? ?�slo.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Predvolen� datab�zov� server';
$wb['limit_database_error_notint'] = 'Datab�zov� limit mus� by? ?�slo.';
$wb['limit_cron_error_notint'] = 'Cron limit mus� by? ?�slo.';
diff --git a/interface/web/client/lib/lang/tr_client.lng b/interface/web/client/lib/lang/tr_client.lng
index 74e096d..1f362e8 100644
--- a/interface/web/client/lib/lang/tr_client.lng
+++ b/interface/web/client/lib/lang/tr_client.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. FTP kullanıcı sayısı';
$wb['default_dnsserver_txt'] = 'Varsayılan DNS Sunucusu';
$wb['limit_dns_zone_txt'] = 'Max. DNS zone sayısı';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. DNS kaydı sayısı';
$wb['limit_shell_user_txt'] = 'Max. Shell kullanıcısı sayısı';
$wb['limit_client_txt'] = 'Max. Müşteri sayısı';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'Ftp kullanıcısı limiti sayı olmak zorunda.';
$wb['limit_shell_user_error_notint'] = 'Shell kullanıcısı limiti sayı olmak zorunda.';
$wb['limit_dns_zone_error_notint'] = 'Dns record limiti sayı olmak zorunda.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
$wb['limit_database_error_notint'] = 'Veritabanı limiti sayı olmak zorunda.';
$wb['limit_cron_error_notint'] = 'Zamanlanmış Görev limiti sayı olmak zorunda.';
diff --git a/interface/web/client/lib/lang/tr_client_template.lng b/interface/web/client/lib/lang/tr_client_template.lng
index 59daf4d..f15f4b2 100644
--- a/interface/web/client/lib/lang/tr_client_template.lng
+++ b/interface/web/client/lib/lang/tr_client_template.lng
@@ -24,6 +24,7 @@
$wb['limit_web_subdomain_txt'] = 'Max. sub domain sayısı';
$wb['limit_ftp_user_txt'] = 'Max. FTP kullanıcı sayısı';
$wb['limit_dns_zone_txt'] = 'Max. DNS zone sayısı';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. DNS kaydı sayısı';
$wb['limit_shell_user_txt'] = 'Max. Shell kullanıcısı sayısı';
$wb['limit_client_txt'] = 'Max. Müşteri sayısı';
@@ -45,6 +46,8 @@
$wb['limit_ftp_user_error_notint'] = 'Ftp kullanıcı limiti sayı olmak zorunda.';
$wb['limit_shell_user_error_notint'] = 'Shell kullanıcı limiti sayı olmak zorunda.';
$wb['limit_dns_zone_error_notint'] = 'Dns kaydı limiti sayı olmak zorunda.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limiti sayı olmak zorunda.';
$wb['limit_cron_error_notint'] = 'Zamanlanmış Görev limiti sayı olmak zorunda.';
$wb['limit_cron_error_frequency'] = 'Zamanlanmış Görev sıklığı limiti sayı olmak zorunda.';
diff --git a/interface/web/client/lib/lang/tr_reseller.lng b/interface/web/client/lib/lang/tr_reseller.lng
index f503eea..5265e9e 100644
--- a/interface/web/client/lib/lang/tr_reseller.lng
+++ b/interface/web/client/lib/lang/tr_reseller.lng
@@ -53,6 +53,7 @@
$wb['limit_ftp_user_txt'] = 'Max. FTP kullanıcı sayısı';
$wb['default_dnsserver_txt'] = 'Varsayılan DNS Sunucusu';
$wb['limit_dns_zone_txt'] = 'Max. DNS zone sayısı';
+$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
$wb['limit_dns_record_txt'] = 'Max. DNS record sayısı';
$wb['limit_shell_user_txt'] = 'Max. Shell kullanıcı sayısı';
$wb['limit_client_txt'] = 'Max. Müşteri sayısı';
@@ -76,6 +77,8 @@
$wb['limit_ftp_user_error_notint'] = 'FTP kullanıcı limiti sayı olmak zorunda.';
$wb['limit_shell_user_error_notint'] = 'Shell kullanıcı limiti sayı olmak zorunda.';
$wb['limit_dns_zone_error_notint'] = 'Dns record limiti sayı olmak zorunda.';
+$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
$wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
$wb['limit_database_error_notint'] = 'Veritabanı limiti sayı olmak zorunda.';
$wb['limit_cron_error_notint'] = 'Zamanlanmış Görev limiti sayı olmak zorunda.';
diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm
index aa35ded..38097a1 100644
--- a/interface/web/client/templates/client_edit_limits.htm
+++ b/interface/web/client/templates/client_edit_limits.htm
@@ -150,6 +150,10 @@
<input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
</div>
<div class="ctrlHolder">
+ <label for="limit_dns_slave_zone">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
+ <input name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+ </div>
+ <div class="ctrlHolder">
<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
<input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
</div>
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm
index 43cdda3..c9a0d39 100644
--- a/interface/web/client/templates/client_template_edit_limits.htm
+++ b/interface/web/client/templates/client_template_edit_limits.htm
@@ -90,6 +90,10 @@
<input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
</div>
<div class="ctrlHolder">
+ <label for="limit_dns_slave_zone">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
+ <input name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+ </div>
+ <div class="ctrlHolder">
<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
<input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
</div>
diff --git a/interface/web/client/templates/reseller_edit_limits.htm b/interface/web/client/templates/reseller_edit_limits.htm
index dfed34f..ced6de8 100644
--- a/interface/web/client/templates/reseller_edit_limits.htm
+++ b/interface/web/client/templates/reseller_edit_limits.htm
@@ -131,6 +131,10 @@
<input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
</div>
<div class="ctrlHolder">
+ <label for="limit_dns_slave_zone">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
+ <input name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+ </div>
+ <div class="ctrlHolder">
<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
<input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
</div>
diff --git a/interface/web/dashboard/dashlets/limits.php b/interface/web/dashboard/dashlets/limits.php
index 0f01ca2..e214e69 100644
--- a/interface/web/dashboard/dashlets/limits.php
+++ b/interface/web/dashboard/dashlets/limits.php
@@ -81,6 +81,10 @@
'db_table' => 'dns_soa',
'db_where' => "");
+ $limits[] = array('field' => 'limit_dns_slave_zone',
+ 'db_table' => 'dns_slave',
+ 'db_where' => "");
+
$limits[] = array('field' => 'limit_dns_record',
'db_table' => 'dns_rr',
'db_where' => "");
@@ -166,4 +170,4 @@
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/dashboard/lib/lang/de_dashlet_limits.lng b/interface/web/dashboard/lib/lang/de_dashlet_limits.lng
index 820945c..949ef74 100644
--- a/interface/web/dashboard/lib/lang/de_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/de_dashlet_limits.lng
@@ -20,6 +20,7 @@
$wb['limit_web_subdomain_txt'] = "Anzahl der Web Subdomains";
$wb['limit_ftp_user_txt'] = "Anzahl der FTP Benutzer";
$wb['limit_dns_zone_txt'] = "Anzahl der DNS Zonen";
+$wb["limit_dns_slave_zone_txt"] = 'Number of DNS slave zones';
$wb['limit_dns_record_txt'] = "Number DNS records";
$wb['limit_shell_user_txt'] = "Anzahl der Shellbenutzer";
$wb['limit_webdav_user_txt'] = "Anzahl der WedDAV Benutzer";
diff --git a/interface/web/dashboard/lib/lang/en_dashlet_limits.lng b/interface/web/dashboard/lib/lang/en_dashlet_limits.lng
index 3154fa1..22b435d 100644
--- a/interface/web/dashboard/lib/lang/en_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/en_dashlet_limits.lng
@@ -20,6 +20,7 @@
$wb["limit_web_subdomain_txt"] = 'Number of web subdomains';
$wb["limit_ftp_user_txt"] = 'Number of FTP users';
$wb["limit_dns_zone_txt"] = 'Number of DNS zones';
+$wb["limit_dns_slave_zone_txt"] = 'Number of DNS slave zones';
$wb["limit_dns_record_txt"] = 'Number DNS records';
$wb["limit_shell_user_txt"] = 'Number of Shell users';
$wb["limit_webdav_user_txt"] = 'Number of Webdav users';
diff --git a/interface/web/dns/dns_slave_del.php b/interface/web/dns/dns_slave_del.php
new file mode 100644
index 0000000..845d776
--- /dev/null
+++ b/interface/web/dns/dns_slave_del.php
@@ -0,0 +1,69 @@
+<?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.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/dns_slave.list.php";
+$tform_def_file = "form/dns_slave.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+ function onBeforeDelete() {
+ global $app; $conf;
+
+ if($app->tform->checkPerm($this->id,'d') == false) $app->error($app->lng('error_no_delete_permission'));
+
+ // Delete all records that belog to this zone.
+ $records = $app->db->queryAllRecords("SELECT id FROM dns_slave WHERE zone = '".intval($this->id)."'");
+ foreach($records as $rec) {
+ $app->db->datalogDelete('dns_slave','id',$rec['id']);
+ }
+ }
+}
+
+$page = new page_action;
+$page->onDelete();
+
+?>
\ No newline at end of file
diff --git a/interface/web/dns/dns_slave_edit.php b/interface/web/dns/dns_slave_edit.php
new file mode 100644
index 0000000..9ffbf83
--- /dev/null
+++ b/interface/web/dns/dns_slave_edit.php
@@ -0,0 +1,199 @@
+<?php
+
+/*
+Copyright (c) 2007, 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.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$tform_def_file = "form/dns_slave.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions,validate_dns');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+ function onShowNew() {
+ global $app, $conf;
+
+ // we will check only users, not admins
+ if($_SESSION["s"]["user"]["typ"] == 'user') {
+ if(!$app->tform->checkClientLimit('limit_dns_slave_zone')) {
+ $app->error($app->tform->wordbook["limit_dns_slave_zone_txt"]);
+ }
+ if(!$app->tform->checkResellerLimit('limit_dns_slave_zone')) {
+ $app->error('Reseller: '.$app->tform->wordbook["limit_dns_slave_zone_txt"]);
+ }
+ }
+
+ parent::onShowNew();
+ }
+
+ function onShowEnd() {
+ global $app, $conf;
+
+ // If user is admin, we will allow him to select to whom this record belongs
+ if($_SESSION["s"]["user"]["typ"] == 'admin') {
+ // Getting Domains of the user
+ $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 .= "<option value='0'></option>";
+ $tmp_data_record = $app->tform->getDataRecord($this->id);
+ if(is_array($clients)) {
+ foreach( $clients as $client) {
+ $selected = ($client["groupid"] == @$tmp_data_record["sys_groupid"])?'SELECTED':'';
+ $client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
+ }
+ }
+ $app->tpl->setVar("client_group_id",$client_select);
+ } else if($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, client.contact_name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+
+ // Fill the client select field
+ $sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id']." ORDER BY name";
+ $clients = $app->db->queryAllRecords($sql);
+ $tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client['client_id']);
+ $client_select = '<option value="'.$tmp['groupid'].'">'.$client['contact_name'].'</option>';
+ $tmp_data_record = $app->tform->getDataRecord($this->id);
+ if(is_array($clients)) {
+ foreach( $clients as $client) {
+ $selected = @($client["groupid"] == $tmp_data_record["sys_groupid"])?'SELECTED':'';
+ $client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
+ }
+ }
+ $app->tpl->setVar("client_group_id",$client_select);
+
+ }
+
+ parent::onShowEnd();
+ }
+
+ function onSubmit() {
+ global $app, $conf;
+
+ if($_SESSION["s"]["user"]["typ"] != 'admin') {
+ // Get the limits of the client
+ $client_group_id = $_SESSION["s"]["user"]["default_group"];
+ $client = $app->db->queryOneRecord("SELECT limit_dns_slave_zone, default_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+
+ // When the record is updated
+ if($this->id > 0) {
+ // restore the server ID if the user is not admin and record is edited
+ $tmp = $app->db->queryOneRecord("SELECT server_id FROM dns_slave WHERE id = ".intval($this->id));
+ $this->dataRecord["server_id"] = $tmp["server_id"];
+ unset($tmp);
+ // When the record is inserted
+ } else {
+ // set the server ID to the default dnsserver of the client
+ $this->dataRecord["server_id"] = $client["default_dnsserver"];
+
+ // Check if the user may add anoter secondary domain.
+ if($client["limit_slave_dns_zone"] >= 0) {
+ $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_slave WHERE sys_groupid = $client_group_id");
+ if($tmp["number"] >= $client["limit_dns_slave_zone"]) {
+ $app->error($app->tform->wordbook["limit_dns_slave_zone_txt"]);
+ }
+ }
+ }
+ }
+
+ //* Check if the zone name has a dot at the end
+ if(strlen($this->dataRecord["origin"]) > 0 && substr($this->dataRecord["origin"],-1,1) != '.') $this->dataRecord["origin"] .= '.';
+
+ //* Check if a primary zone with the same name already exists
+ $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_soa WHERE origin = \"".$this->dataRecord["origin"]."\" AND server_id= \"".$this->dataRecord["server_id"]."\"");
+ if($tmp["number"] > 0) {
+ $app->error($app->tform->wordbook["origin_error_unique"]);
+ }
+
+ parent::onSubmit();
+ }
+
+ function onAfterInsert() {
+ global $app, $conf;
+
+ // make sure that the record belongs to the client group and not the admin group when a dmin inserts it
+ if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
+ $client_group_id = intval($this->dataRecord["client_group_id"]);
+ $app->db->query("UPDATE dns_slave SET sys_groupid = $client_group_id WHERE id = ".$this->id);
+ }
+ if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
+ $client_group_id = intval($this->dataRecord["client_group_id"]);
+ $app->db->query("UPDATE dns_slave SET sys_groupid = $client_group_id WHERE id = ".$this->id);
+ }
+
+ }
+
+ function onAfterUpdate() {
+ global $app, $conf;
+
+ $tmp = $app->db->diffrec($this->oldDataRecord,$app->tform->getDataRecord($this->id));
+
+ // make sure that the record belongs to the client group and not the admin group when a dmin inserts it
+ if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
+ $client_group_id = intval($this->dataRecord["client_group_id"]);
+ $app->db->query("UPDATE dns_slave SET sys_groupid = $client_group_id WHERE id = ".$this->id);
+ }
+ if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
+ $client_group_id = intval($this->dataRecord["client_group_id"]);
+ $app->db->query("UPDATE dns_slave SET sys_groupid = $client_group_id WHERE id = ".$this->id);
+ }
+
+ //** When the client group has changed, change also the owner of the record if the owner is not the admin user
+ if($this->oldDataRecord["client_group_id"] != $this->dataRecord["client_group_id"] && $this->dataRecord["sys_userid"] != 1) {
+ $client_group_id = intval($this->dataRecord["client_group_id"]);
+ $tmp = $app->db->queryOneREcord("SELECT userid FROM sys_user WHERE default_group = ".$client_group_id);
+ if($tmp["userid"] > 0) {
+ $app->db->query("UPDATE dns_slave SET sys_userid = ".$tmp["userid"]." WHERE id = ".$this->id);
+ }
+ }
+
+ }
+
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
diff --git a/interface/web/dns/dns_slave_list.php b/interface/web/dns/dns_slave_list.php
new file mode 100644
index 0000000..bc66641
--- /dev/null
+++ b/interface/web/dns/dns_slave_list.php
@@ -0,0 +1,25 @@
+<?php
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/dns_slave.list.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+$app->uses('listform_actions');
+// $app->listform_actions->SQLExtWhere = "access = 'REJECT'";
+
+$app->listform_actions->SQLOrderBy = 'ORDER BY origin';
+$app->listform_actions->onLoad();
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/dns/dns_soa_edit.php b/interface/web/dns/dns_soa_edit.php
index 4c4d25a..646dae0 100644
--- a/interface/web/dns/dns_soa_edit.php
+++ b/interface/web/dns/dns_soa_edit.php
@@ -154,7 +154,12 @@
if(stristr($this->dataRecord["mbox"],'@')) {
$this->dataRecord["mbox"] = str_replace('@','.',$this->dataRecord["mbox"]);
}
-
+
+ //* Check if a secondary zone with the same name already exists
+ $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_slave WHERE origin = \"".$this->dataRecord["origin"]."\" AND server_id = \"".$this->dataRecord["server_id"]."\"");
+ if($tmp["number"] > 0) {
+ $app->error($app->tform->wordbook["origin_error_unique"]);
+ }
parent::onSubmit();
}
@@ -219,4 +224,4 @@
$page = new page_action;
$page->onLoad();
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/dns/form/dns_slave.tform.php b/interface/web/dns/form/dns_slave.tform.php
new file mode 100644
index 0000000..955a6b3
--- /dev/null
+++ b/interface/web/dns/form/dns_slave.tform.php
@@ -0,0 +1,126 @@
+<?php
+
+/*
+ Form Definition
+
+ Tabledefinition
+
+ Datatypes:
+ - INTEGER (Forces the input to Int)
+ - DOUBLE
+ - CURRENCY (Formats the values to currency notation)
+ - VARCHAR (no format check, maxlength: 255)
+ - TEXT (no format check)
+ - DATE (Dateformat, automatic conversion to timestamps)
+
+ Formtype:
+ - TEXT (Textfield)
+ - TEXTAREA (Textarea)
+ - PASSWORD (Password textfield, input is not shown when edited)
+ - SELECT (Select option field)
+ - RADIO
+ - CHECKBOX
+ - CHECKBOXARRAY
+ - FILE
+
+ VALUE:
+ - Wert oder Array
+
+ Hint:
+ The ID field of the database table is not part of the datafield definition.
+ The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"] = "Secondary DNS Zone";
+$form["description"] = "";
+$form["name"] = "dns_slave";
+$form["action"] = "dns_slave_edit.php";
+$form["db_table"] = "dns_slave";
+$form["db_table_idx"] = "id";
+$form["db_history"] = "yes";
+$form["tab_default"] = "dns_slave";
+$form["list_default"] = "dns_slave_list.php";
+$form["auth"] = 'yes'; // yes / no
+
+$form["auth_preset"]["userid"] = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['dns_slave'] = array (
+ 'title' => "Secondary DNS Zone",
+ 'width' => 100,
+ 'template' => "templates/dns_slave_edit.htm",
+ 'fields' => array (
+ ##################################
+ # Begin Datatable fields
+ ##################################
+ 'server_id' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'SELECT',
+ 'datasource' => array ( 'type' => 'SQL',
+ 'querystring' => 'SELECT server_id,server_name FROM server WHERE mirror_server_id = 0 AND dns_server = 1 AND {AUTHSQL} ORDER BY server_name',
+ 'keyfield'=> 'server_id',
+ 'valuefield'=> 'server_name'
+ ),
+ 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
+ 'errmsg'=> 'server_id_error_empty'),
+ ),
+ 'default' => '',
+ 'value' => '',
+ 'width' => '30',
+ 'maxlength' => '255'
+ ),
+ 'origin' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
+ 'errmsg'=> 'origin_error_empty'),
+ 1 => array ( 'type' => 'UNIQUE',
+ 'errmsg'=> 'origin_error_unique'),
+ 2 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[\w\.\-\/]{2,255}\.[a-zA-Z]{2,10}[\.]{0,1}$/',
+ 'errmsg'=> 'origin_error_regex'),
+ ),
+ 'default' => '',
+ 'value' => '',
+ 'width' => '30',
+ 'maxlength' => '255'
+ ),
+ 'ns' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[\w\.\-]{1,64}$/',
+ 'errmsg'=> 'ns_error_regex'),
+ ),
+ 'default' => '',
+ 'value' => '',
+ 'width' => '30',
+ 'maxlength' => '255'
+ ),
+ 'xfer' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'default' => '',
+ 'value' => '',
+ 'width' => '30',
+ 'maxlength' => '255'
+ ),
+ 'active' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'CHECKBOX',
+ 'default' => 'Y',
+ 'value' => array(0 => 'N',1 => 'Y')
+ ),
+ ##################################
+ # ENDE Datatable fields
+ ##################################
+ )
+);
+
+
+?>
diff --git a/interface/web/dns/lib/lang/ar_dns_slave.lng b/interface/web/dns/lib/lang/ar_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/ar_dns_slave_list.lng b/interface/web/dns/lib/lang/ar_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/bg_dns_slave.lng b/interface/web/dns/lib/lang/bg_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_slave_list.lng b/interface/web/dns/lib/lang/bg_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/br_dns_slave.lng b/interface/web/dns/lib/lang/br_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_slave_list.lng b/interface/web/dns/lib/lang/br_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/cz_dns_slave.lng b/interface/web/dns/lib/lang/cz_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_slave_list.lng b/interface/web/dns/lib/lang/cz_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/de_dns_slave.lng b/interface/web/dns/lib/lang/de_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_slave_list.lng b/interface/web/dns/lib/lang/de_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/en_dns_slave.lng b/interface/web/dns/lib/lang/en_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_slave_list.lng b/interface/web/dns/lib/lang/en_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/es_dns_slave.lng b/interface/web/dns/lib/lang/es_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_slave_list.lng b/interface/web/dns/lib/lang/es_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/fi_dns_slave.lng b/interface/web/dns/lib/lang/fi_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_slave_list.lng b/interface/web/dns/lib/lang/fi_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/fr_dns_slave.lng b/interface/web/dns/lib/lang/fr_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_slave_list.lng b/interface/web/dns/lib/lang/fr_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/hu_dns_slave.lng b/interface/web/dns/lib/lang/hu_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_slave_list.lng b/interface/web/dns/lib/lang/hu_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/it_dns_slave.lng b/interface/web/dns/lib/lang/it_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_slave_list.lng b/interface/web/dns/lib/lang/it_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/ja_dns_slave.lng b/interface/web/dns/lib/lang/ja_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_slave_list.lng b/interface/web/dns/lib/lang/ja_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/nl_dns_slave.lng b/interface/web/dns/lib/lang/nl_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_slave_list.lng b/interface/web/dns/lib/lang/nl_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/pl_dns_slave.lng b/interface/web/dns/lib/lang/pl_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_slave_list.lng b/interface/web/dns/lib/lang/pl_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/pt_dns_slave.lng b/interface/web/dns/lib/lang/pt_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_slave_list.lng b/interface/web/dns/lib/lang/pt_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/ro_dns_slave.lng b/interface/web/dns/lib/lang/ro_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_slave_list.lng b/interface/web/dns/lib/lang/ro_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/ru_dns_slave.lng b/interface/web/dns/lib/lang/ru_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_slave_list.lng b/interface/web/dns/lib/lang/ru_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/se_dns_slave.lng b/interface/web/dns/lib/lang/se_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_slave_list.lng b/interface/web/dns/lib/lang/se_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/sk_dns_slave.lng b/interface/web/dns/lib/lang/sk_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/sk_dns_slave_list.lng b/interface/web/dns/lib/lang/sk_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/tr_dns_slave.lng b/interface/web/dns/lib/lang/tr_dns_slave.lng
new file mode 100644
index 0000000..7c29de6
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_slave.lng
@@ -0,0 +1,14 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'DNS Zone';
+$wb["ns_txt"] = 'NS';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_slave_zone_txt"] = 'The max. number of Secondary DNS zones for your account is reached.';
+$wb["client_txt"] = 'Client';
+$wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
+$wb["server_id_error_empty"] = 'No server selected';
+$wb["origin_error_empty"] = 'Zone empty.';
+$wb["origin_error_unique"] = 'There is already a record for this zone.';
+$wb["origin_error_regex"] = 'Zone has a invalid format.';
+$wb["ns_error_regex"] = 'NS has a invalid format.';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_slave_list.lng b/interface/web/dns/lib/lang/tr_dns_slave_list.lng
new file mode 100644
index 0000000..1e34f3d
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_slave_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'DNS Secondary Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new secondary DNS Zone';
+?>
\ 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 125eac4..8018e98 100644
--- a/interface/web/dns/lib/module.conf.php
+++ b/interface/web/dns/lib/module.conf.php
@@ -50,8 +50,16 @@
unset($items);
+$items[] = array( 'title' => "Secondary Zones",
+ 'target' => 'content',
+ 'link' => 'dns/dns_slave_list.php',
+ 'html_id' => 'dns_slave_list');
+$module["nav"][] = array( 'title' => 'Secondary DNS',
+ 'open' => 1,
+ 'items' => $items);
+unset($items);
diff --git a/interface/web/dns/list/dns_slave.list.php b/interface/web/dns/list/dns_slave.list.php
new file mode 100644
index 0000000..e8b2129
--- /dev/null
+++ b/interface/web/dns/list/dns_slave.list.php
@@ -0,0 +1,97 @@
+<?php
+
+/*
+ Datatypes:
+ - INTEGER
+ - DOUBLE
+ - CURRENCY
+ - VARCHAR
+ - TEXT
+ - DATE
+*/
+
+
+
+// Name of the list
+$liste["name"] = "dns_slave";
+
+// Database table
+$liste["table"] = "dns_slave";
+
+// Index index field of the database table
+$liste["table_idx"] = "id";
+
+// Search Field Prefix
+$liste["search_prefix"] = "search_";
+
+// Records per page
+$liste["records_per_page"] = 15;
+
+// Script File of the list
+$liste["file"] = "dns_slave_list.php";
+
+// Script file of the edit form
+$liste["edit_file"] = "dns_slave_edit.php";
+
+// Script File of the delete script
+$liste["delete_file"] = "dns_slave_del.php";
+
+// Paging Template
+$liste["paging_tpl"] = "templates/paging.tpl.htm";
+
+// Enable auth
+$liste["auth"] = "yes";
+
+
+/*****************************************************
+* Suchfelder
+*****************************************************/
+
+
+$liste["item"][] = array( 'field' => "active",
+ 'datatype' => "VARCHAR",
+ 'formtype' => "SELECT",
+ 'op' => "=",
+ 'prefix' => "",
+ 'suffix' => "",
+ 'width' => "",
+ 'value' => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>",'n' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+
+
+$liste["item"][] = array( 'field' => "server_id",
+ 'datatype' => "VARCHAR",
+ 'formtype' => "SELECT",
+ 'op' => "like",
+ 'prefix' => "%",
+ 'suffix' => "%",
+ 'datasource' => array ( 'type' => 'CUSTOM',
+ 'class'=> 'custom_datasource',
+ 'function'=> 'dns_servers'
+ ),
+ 'width' => "",
+ 'value' => "");
+
+$liste["item"][] = array( 'field' => "origin",
+ 'datatype' => "VARCHAR",
+ 'formtype' => "TEXT",
+ 'op' => "like",
+ 'prefix' => "%",
+ 'suffix' => "%",
+ 'width' => "",
+ 'value' => "");
+
+
+$liste["item"][] = array( 'field' => "ns",
+ 'datatype' => "VARCHAR",
+ 'formtype' => "TEXT",
+ 'op' => "like",
+ 'prefix' => "%",
+ 'suffix' => "%",
+ 'width' => "",
+ 'value' => "");
+
+
+
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_slave_edit.htm b/interface/web/dns/templates/dns_slave_edit.htm
new file mode 100644
index 0000000..495b74c
--- /dev/null
+++ b/interface/web/dns/templates/dns_slave_edit.htm
@@ -0,0 +1,61 @@
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_dns_slave">
+
+ <div class="pnl_formsarea">
+ <fieldset class="inlineLabels"><legend>Secondary DNS Zone</legend>
+ <tmpl_if name="is_admin">
+ <div class="ctrlHolder">
+ <label for="server_id">{tmpl_var name='server_id_txt'}</label>
+ <select name="server_id" id="server_id" class="selectInput">
+ {tmpl_var name='server_id'}
+ </select>
+ </div>
+ <div class="ctrlHolder">
+ <label for="client_group_id">{tmpl_var name='client_txt'}</label>
+ <select name="client_group_id" id="client_group_id" class="selectInput">
+ {tmpl_var name='client_group_id'}
+ </select>
+ </div>
+ </tmpl_if>
+ <tmpl_if name="is_reseller">
+ <div class="ctrlHolder">
+ <label for="client_group_id">{tmpl_var name='client_txt'}</label>
+ <select name="client_group_id" id="client_group_id" class="selectInput">
+ {tmpl_var name='client_group_id'}
+ </select>
+ </div>
+ </tmpl_if>
+ <div class="ctrlHolder">
+ <label for="origin">{tmpl_var name='origin_txt'}</label>
+ <input name="origin" id="origin" value="{tmpl_var name='origin'}" size="30" maxlength="255" type="text" class="textInput" />
+ <p class="formHint">e.g. domain.tld.</p>
+ </div>
+ <div class="ctrlHolder">
+ <label for="ns">{tmpl_var name='ns_txt'}</label>
+ <input name="ns" id="ns" value="{tmpl_var name='ns'}" size="30" maxlength="255" type="text" class="textInput" />
+ <p class="formHint">IPv4 form - e.g. 1.2.3.4</p>
+ </div>
+ <div class="ctrlHolder">
+ <label for="xfer">{tmpl_var name='xfer_txt'}</label>
+ <input name="xfer" id="xfer" value="{tmpl_var name='xfer'}" size="30" maxlength="255" type="text" class="textInput" />
+ </div>
+ <div class="ctrlHolder">
+ <p class="label">{tmpl_var name='active_txt'}</p>
+ <div class="multiField">
+ {tmpl_var name='active'}
+ </div>
+ </div>
+ </fieldset>
+
+ <input type="hidden" name="id" value="{tmpl_var name='id'}">
+ <input name="serial" type="hidden" value="{tmpl_var name='serial'}">
+
+ <div class="buttonHolder buttons">
+ <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_slave_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+ <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_slave_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+ </div>
+ </div>
+
+</div>
diff --git a/interface/web/dns/templates/dns_slave_list.htm b/interface/web/dns/templates/dns_slave_list.htm
new file mode 100644
index 0000000..2ddcc6a
--- /dev/null
+++ b/interface/web/dns/templates/dns_slave_list.htm
@@ -0,0 +1,59 @@
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_dns_slave">
+
+ <div class="pnl_toolsarea">
+ <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+ <div class="buttons">
+ <button class="iconstxt icoAdd" type="button" onClick="loadContent('dns/dns_slave_edit.php');">
+ <span>{tmpl_var name="add_new_record_txt"}</span>
+ </button>
+ </div>
+ </fieldset>
+ </div>
+
+ <div class="pnl_listarea">
+ <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+ <table class="list">
+ <thead>
+ <tr>
+ <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
+ <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
+ <th class="tbl_col_origin" scope="col"><tmpl_var name="origin_txt"></th>
+ <th class="tbl_col_ns" scope="col"><tmpl_var name="ns_txt"></th>
+ <th class="tbl_col_buttons" scope="col"> </th>
+ </tr>
+ <tr>
+ <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','dns/dns_slave_list.php');">{tmpl_var name='search_active'}</select></td>
+ <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','dns/dns_slave_list.php');">{tmpl_var name='search_server_id'}</select></td>
+ <td class="tbl_col_origin"><input type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
+ <td class="tbl_col_ns"><input type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
+ <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','dns/dns_slave_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
+ </tr>
+ </thead>
+ <tbody>
+ <tmpl_loop name="records">
+ <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+ <td class="tbl_col_active"><a href="#" onClick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');"><img src="themes/{tmpl_var name='theme'}/icons/{tmpl_var name='_active_'}" border="0" /></a></td>
+ <td class="tbl_col_server_id"><a href="#" onClick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
+ <td class="tbl_col_origin"><a href="#" onClick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="origin"}</a></td>
+ <td class="tbl_col_ns"><a href="#" onClick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ns"}</a></td>
+ <td class="tbl_col_buttons">
+ <div class="buttons icons16">
+ <a class="icons16 icoDelete" href="javascript: del_record('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+ </div>
+ </td>
+ </tr>
+ </tmpl_loop>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+ </tr>
+ </tfoot>
+ </table>
+ </fieldset>
+ </div>
+
+</div>
diff --git a/server/conf/bind_named.conf.local.slave b/server/conf/bind_named.conf.local.slave
new file mode 100644
index 0000000..f840351
--- /dev/null
+++ b/server/conf/bind_named.conf.local.slave
@@ -0,0 +1,9 @@
+
+<tmpl_loop name='zones'>
+<tmpl_if name='zone'>
+zone "<tmpl_var name='zone'>" {
+ type slave;
+<tmpl_var name='options'> file "<tmpl_var name='zonefile_path'>";
+};
+</tmpl_if>
+</tmpl_loop>
diff --git a/server/mods-available/dns_module.inc.php b/server/mods-available/dns_module.inc.php
index 72ae1df..f079127 100644
--- a/server/mods-available/dns_module.inc.php
+++ b/server/mods-available/dns_module.inc.php
@@ -35,6 +35,9 @@
var $actions_available = array( 'dns_soa_insert',
'dns_soa_update',
'dns_soa_delete',
+ 'dns_slave_insert',
+ 'dns_slave_update',
+ 'dns_slave_delete',
'dns_rr_insert',
'dns_rr_update',
'dns_rr_delete');
@@ -73,11 +76,13 @@
*/
$app->modules->registerTableHook('dns_soa',$this->module_name,'process');
+ $app->modules->registerTableHook('dns_slave',$this->module_name,'process');
$app->modules->registerTableHook('dns_rr',$this->module_name,'process');
// Register service
$app->services->registerService('bind','dns_module','restartBind');
+ $app->services->registerService('powerdns','dns_module','restartPowerDNS');
}
@@ -94,6 +99,11 @@
if($action == 'i') $app->plugins->raiseEvent('dns_soa_insert',$data);
if($action == 'u') $app->plugins->raiseEvent('dns_soa_update',$data);
if($action == 'd') $app->plugins->raiseEvent('dns_soa_delete',$data);
+ break;
+ case 'dns_slave':
+ if($action == 'i') $app->plugins->raiseEvent('dns_slave_insert',$data);
+ if($action == 'u') $app->plugins->raiseEvent('dns_slave_update',$data);
+ if($action == 'd') $app->plugins->raiseEvent('dns_slave_delete',$data);
break;
case 'dns_rr':
if($action == 'i') $app->plugins->raiseEvent('dns_rr_insert',$data);
@@ -121,8 +131,54 @@
}
}
+
+ function restartPowerDNS($action = 'restart') {
+ global $app;
+
+ $app->log("restartPDNS called.",LOGLEVEL_DEBUG);
+
+/** Since PowerDNS does not currently allow to limit AXFR for specific zones to specific
+* IP addresses, we create a list of IPs allowed of AXFR transfers from our PowerDNS,
+* however any of these IPs is allowed to AXFR transfer any of the zones we are masters
+* for.
+*/
+ $tmps = $app->db->queryAllRecords("SELECT DISTINCT xfer FROM dns_soa WHERE active = 'Y' UNION SELECT DISTINCT xfer FROM dns_slave WHERE active = 'Y' ");
+
+ //* Make sure the list is never empty
+ $options='127.0.0.1';
+ foreach($tmps as $tmp) {
+ if (trim($tmp['xfer'])!='') {
+ if ($options=='') {
+ $options.=$tmp['xfer'];
+ } else {
+ $options=$options.",".$tmp['xfer'];
+ }
+ }
+ }
+
+ //* Remove duplicate IPs from the array
+ $options = "allow-axfr-ips=".implode(",",array_unique(explode(",",$options)));
+ $app->log("".$options,LOGLEVEL_DEBUG);
+
+/** Not an ideal way to use a hardcoded path like that, but currently
+* we have no way to find out where powerdns' configuration files are
+* located, so we have to work on assumption.
+*/
+ file_put_contents('/etc/powerdns/pdns.d/pdns.ispconfig-axfr',$options."\n");
+
+ if (is_file('/etc/init.d/powerdns')) {
+ $command = '/etc/init.d/powerdns';
+ } else {
+ $command = '/etc/init.d/pdns';
+ }
+
+ exec($command.' restart');
+
+// unset $tmps;
+
+ }
} // end class
-?>
\ No newline at end of file
+?>
diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index 3c084b3..2e4e334 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -63,6 +63,11 @@
$app->plugins->registerEvent('dns_soa_insert',$this->plugin_name,'soa_insert');
$app->plugins->registerEvent('dns_soa_update',$this->plugin_name,'soa_update');
$app->plugins->registerEvent('dns_soa_delete',$this->plugin_name,'soa_delete');
+
+ //* SLAVE
+ $app->plugins->registerEvent('dns_slave_insert',$this->plugin_name,'slave_insert');
+ $app->plugins->registerEvent('dns_slave_update',$this->plugin_name,'slave_update');
+ $app->plugins->registerEvent('dns_slave_delete',$this->plugin_name,'slave_delete');
//* RR
$app->plugins->registerEvent('dns_rr_insert',$this->plugin_name,'rr_insert');
@@ -146,6 +151,61 @@
$app->services->restartServiceDelayed('bind','reload');
}
+
+ function slave_insert($event_name,$data) {
+ global $app, $conf;
+
+ $this->action = 'insert';
+ $this->slave_update($event_name,$data);
+
+ }
+
+ function slave_update($event_name,$data) {
+ global $app, $conf;
+
+ //* Load libraries
+ $app->uses("getconf,tpl");
+
+ //* load the server configuration options
+ $dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
+
+ //* rebuild the named.conf file if the origin has changed or when the origin is inserted.
+ //if($this->action == 'insert' || $data['old']['origin'] != $data['new']['origin']) {
+ $this->write_named_conf($data,$dns_config);
+ //}
+
+ //* Delete old domain file, if domain name has been changed
+ if($data['old']['origin'] != $data['new']['origin']) {
+ $filename = $dns_config['bind_zonefiles_dir'].'/slave/sec.'.substr($data['old']['origin'],0,-1);
+ if(is_file($filename)) unset($filename);
+ }
+
+ //* Reload bind nameserver
+ $app->services->restartServiceDelayed('bind','reload');
+
+ }
+
+ function slave_delete($event_name,$data) {
+ global $app, $conf;
+
+
+ //* load the server configuration options
+ $app->uses("getconf,tpl");
+ $dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
+
+ //* rebuild the named.conf file
+ $this->write_named_conf($data,$dns_config);
+
+ //* Delete the domain file
+ $zone_file_name = $dns_config['bind_zonefiles_dir'].'/slave/sec.'.substr($data['old']['origin'],0,-1);
+ if(is_file($zone_file_name)) unlink($zone_file_name);
+ $app->log("Deleting BIND domain file for secondary zone: ".$zone_file_name,LOGLEVEL_DEBUG);
+
+ //* Reload bind nameserver
+ $app->services->restartServiceDelayed('bind','reload');
+
+
+ }
function rr_insert($event_name,$data) {
global $app, $conf;
@@ -187,14 +247,19 @@
function write_named_conf($data, $dns_config) {
global $app, $conf;
-
- $tmps = $app->db->queryAllRecords("SELECT origin, xfer, also_notify FROM dns_soa WHERE active = 'Y'");
+
+ //* Only write the master file for the current server
+ $tmps = $app->db->queryAllRecords("SELECT origin, xfer, also_notify FROM dns_soa WHERE active = 'Y' AND server_id=".$conf["server_id"]);
$zones = array();
foreach($tmps as $tmp) {
$options = '';
- if(trim($tmp['xfer']) != '') $options .= ' allow-transfer {'.str_replace(',',';',$tmp['xfer']).";};\n";
+ if(trim($tmp['xfer']) != '') {
+ $options .= " allow-transfer {".str_replace(',',';',$tmp['xfer']).";};\n";
+ } else {
+ $options .= " allow-transfer {none;};\n";
+ }
if(trim($tmp['also_notify']) != '') $options .= ' also-notify {'.str_replace(',',';',$tmp['also_notify']).";};\n";
$zones[] = array( 'zone' => substr($tmp['origin'],0,-1),
@@ -202,14 +267,46 @@
'options' => $options
);
}
-
+
$tpl = new tpl();
$tpl->newTemplate("bind_named.conf.local.master");
$tpl->setLoop('zones',$zones);
- file_put_contents($dns_config['named_conf_local_path'],$tpl->grab());
- $app->log("Writing BIND named.conf.local file: ".$dns_config['named_conf_local_path'],LOGLEVEL_DEBUG);
+ //* And loop through the secondary zones, but only for the current server
+ $tmps_sec = $app->db->queryAllRecords("SELECT origin, xfer, ns FROM dns_slave WHERE active = 'Y' AND server_id=".$conf["server_id"]);
+ $zones_sec = array();
+
+ foreach($tmps_sec as $tmp) {
+
+ $options = " masters {".$tmp['ns'].";};\n";
+ if(trim($tmp['xfer']) != '') {
+ $options .= " allow-transfer {".str_replace(',',';',$tmp['xfer']).";};\n";
+ } else {
+ $options .= " allow-transfer {none;};\n";
+ }
+
+
+ $zones_sec[] = array( 'zone' => substr($tmp['origin'],0,-1),
+ 'zonefile_path' => $dns_config['bind_zonefiles_dir'].'/slave/sec.'.substr($tmp['origin'],0,-1),
+ 'options' => $options
+ );
+
+// $filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/slave/sec.'.substr($tmp['origin'],0,-1));
+// $app->log("Writing BIND domain file: ".$filename,LOGLEVEL_DEBUG);
+
+
+ }
+ $tpl_sec = new tpl();
+ $tpl_sec->newTemplate("bind_named.conf.local.slave");
+ $tpl_sec->setLoop('zones',$zones_sec);
+
+ file_put_contents($dns_config['named_conf_local_path'],$tpl->grab()."\n".$tpl_sec->grab());
+ $app->log("Writing BIND named.conf.local file: ".$dns_config['named_conf_local_path'],LOGLEVEL_DEBUG);
+
+ unset($tpl_sec);
+ unset($zones_sec);
+ unset($tmps_sec);
unset($tpl);
unset($zones);
unset($tmps);
@@ -221,4 +318,4 @@
} // end class
-?>
\ No newline at end of file
+?>
diff --git a/server/plugins-available/powerdns_plugin.inc.php b/server/plugins-available/powerdns_plugin.inc.php
index 5627d55..74f32b9 100644
--- a/server/plugins-available/powerdns_plugin.inc.php
+++ b/server/plugins-available/powerdns_plugin.inc.php
@@ -111,6 +111,11 @@
$app->plugins->registerEvent('dns_soa_insert',$this->plugin_name,'soa_insert');
$app->plugins->registerEvent('dns_soa_update',$this->plugin_name,'soa_update');
$app->plugins->registerEvent('dns_soa_delete',$this->plugin_name,'soa_delete');
+
+ //* SLAVE
+ $app->plugins->registerEvent('dns_slave_insert',$this->plugin_name,'slave_insert');
+ $app->plugins->registerEvent('dns_slave_update',$this->plugin_name,'slave_update');
+ $app->plugins->registerEvent('dns_slave_delete',$this->plugin_name,'slave_delete');
//* RR
$app->plugins->registerEvent('dns_rr_insert',$this->plugin_name,'rr_insert');
@@ -130,7 +135,6 @@
$serial = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$ispconfig_id);
$serial_id = $serial["serial"];
$app->db->query("INSERT INTO powerdns.domains (name, type, notified_serial, ispconfig_id) VALUES ('$origin', 'MASTER', $serial_id, $ispconfig_id)");
- //$app->db->query("INSERT INTO powerdns.domains (name, type, ispconfig_id) VALUES ('$origin', 'NATIVE', $ispconfig_id)");
$zone_id = mysql_insert_id();
if(substr($data["new"]["ns"], -1) == '.'){
$ns = substr($data["new"]["ns"], 0, -1);
@@ -141,10 +145,12 @@
$hostmaster = substr($data["new"]["mbox"], 0, -1);
$content = $ns.' '.$hostmaster.' 0';
- //$content = $ns.' '.$hostmaster.' '.$serial_id.'';
$ttl = $data["new"]["ttl"];
$app->db->query("INSERT INTO powerdns.records (domain_id, name, type, content, ttl, prio, change_date, ispconfig_id) VALUES ($zone_id, '$origin', 'SOA', '$content', $ttl, 0, ".time().", $ispconfig_id)");
+
+ //* Reload powerdns nameserver
+ $app->services->restartServiceDelayed('powerdns','reload');
}
@@ -160,8 +166,8 @@
$ispconfig_id = $data["new"]["id"];
$serial = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$ispconfig_id);
$serial_id = $serial["serial"];
- //$app->db->query("UPDATE powerdns.domains SET name = '$origin', notified_serial = $serial_id WHERE ispconfig_id = $ispconfig_id");
- //$app->db->query("UPDATE powerdns.domains SET name = '$origin' WHERE ispconfig_id = $ispconfig_id");
+ //$app->db->query("UPDATE powerdns.domains SET name = '$origin', notified_serial = $serial_id WHERE ispconfig_id = $ispconfig_idi AND type = 'MASTER'");
+ //$app->db->query("UPDATE powerdns.domains SET name = '$origin' WHERE ispconfig_id = $ispconfig_id AND type = 'MASTER'");
if(substr($data["new"]["ns"], -1) == '.'){
$ns = substr($data["new"]["ns"], 0, -1);
@@ -175,6 +181,11 @@
$content = $ns.' '.$hostmaster.' '.$serial_id.'';
$ttl = $data["new"]["ttl"];
$app->db->query("UPDATE powerdns.records SET name = '$origin', content = '$content', ttl = $ttl, change_date = ".time()." WHERE ispconfig_id = ".$data["new"]["id"]." AND type = 'SOA'");
+
+ //* Reload powerdns nameserver
+ $app->services->restartServiceDelayed('powerdns','reload');
+
+
} else {
$this->soa_insert($event_name,$data);
$ispconfig_id = $data["new"]["id"];
@@ -195,11 +206,78 @@
function soa_delete($event_name,$data) {
global $app, $conf;
- $zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["old"]["id"]);
+ $zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["old"]["id"]." AND type = 'MASTER'");
$zone_id = $zone["id"];
$app->db->query("DELETE FROM powerdns.records WHERE domain_id = $zone_id");
$app->db->query("DELETE FROM powerdns.domains WHERE id = $zone_id");
+
+ //* Reload powerdns nameserver
+ $app->services->restartServiceDelayed('powerdns','reload');
+ }
+
+ function slave_insert($event_name,$data) {
+ global $app, $conf;
+
+ if($data["new"]["active"] != 'Y') return;
+
+ $origin = substr($data["new"]["origin"], 0, -1);
+ $ispconfig_id = $data["new"]["id"];
+ $master_ns = $data["new"]["ns"];
+
+ $app->db->query("INSERT INTO powerdns.domains (name, type, master, ispconfig_id) VALUES ('$origin', 'SLAVE', '$master_ns', $ispconfig_id)");
+
+ //$app->db->query("INSERT INTO powerdns.domains (name, type, ispconfig_id) VALUES ('$origin', 'NATIVE', $ispconfig_id)");
+ $zone_id = mysql_insert_id();
+
+ //* Reload powerdns nameserver
+ $app->services->restartServiceDelayed('powerdns','reload');
+
+ }
+
+ function slave_update($event_name,$data) {
+ global $app, $conf;
+
+ if($data["new"]["active"] != 'Y'){
+ if($data["old"]["active"] != 'Y') return;
+ $this->slave_delete($event_name,$data);
+ } else {
+ if($data["old"]["active"] == 'Y'){
+
+ $origin = substr($data["new"]["origin"], 0, -1);
+ $ispconfig_id = $data["new"]["id"];
+ $master_ns = $data["new"]["ns"];
+
+ $app->db->query("UPDATE powerdns.domains SET name = '$origin', type = 'SLAVE', master = '$master_ns' WHERE ispconfig_id=$ispconfig_id AND type = 'SLAVE'");
+ //$app->db->query("INSERT INTO powerdns.domains (name, type, ispconfig_id) VALUES ('$origin', 'NATIVE', $ispconfig_id)");
+ $zone_id = mysql_insert_id();
+
+ $zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$ispconfig_id." AND type = 'SLAVE'");
+ $zone_id = $zone["id"];
+ $app->db->query("DELETE FROM powerdns.records WHERE domain_id = $zone_id AND ispconfig_id = 0");
+
+ //* Reload powerdns nameserver
+ $app->services->restartServiceDelayed('powerdns','reload');
+
+ } else {
+ $this->slave_insert($event_name,$data);
+
+ }
+ }
+
+ }
+
+ function slave_delete($event_name,$data) {
+ global $app, $conf;
+
+ $zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["old"]["id"]." AND type = 'SLAVE'");
+ $zone_id = $zone["id"];
+ $app->db->query("DELETE FROM powerdns.records WHERE domain_id = $zone_id");
+ $app->db->query("DELETE FROM powerdns.domains WHERE id = $zone_id");
+
+ //* Reload powerdns nameserver
+ $app->services->restartServiceDelayed('powerdns','reload');
+
}
function rr_insert($event_name,$data) {
@@ -208,7 +286,7 @@
$zone = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$data["new"]["zone"]);
$origin = substr($zone["origin"], 0, -1);
- $powerdns_zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["new"]["zone"]);
+ $powerdns_zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["new"]["zone"]." AND type = 'MASTER'");
$zone_id = $powerdns_zone["id"];
$type = $data["new"]["type"];
@@ -271,7 +349,7 @@
if($data["old"]["active"] == 'Y'){
$zone = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$data["new"]["zone"]);
$origin = substr($zone["origin"], 0, -1);
- $powerdns_zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["new"]["zone"]);
+ $powerdns_zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["new"]["zone"]." AND type = 'MASTER'");
$zone_id = $powerdns_zone["id"];
$type = $data["new"]["type"];
@@ -338,8 +416,6 @@
}
-
-
} // end class
-?>
\ No newline at end of file
+?>
--
Gitblit v1.9.1