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">&nbsp;</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