From ca069831cd635f6155ea7c2504b47bbea95c76e5 Mon Sep 17 00:00:00 2001
From: Florian Schaal <florian@schaal-24.de>
Date: Wed, 21 Oct 2015 14:53:50 +0200
Subject: [PATCH] FS#1990 - Additional V-Server Field - this commits add a
 custom-field for openvz-configs

---
 .../sql/incremental/upd_dev_collection.sql    |  4 ++
 install/sql/ispconfig3.sql                    |  4 +-
 interface/lib/classes/validate_openvz.inc.php | 66 +++++++++++++++++++
 .../lib/plugins/vm_openvz_plugin.inc.php      |  5 +-
 .../web/vm/form/openvz_template.tform.php     | 16 +++++
 interface/web/vm/form/openvz_vm.tform.php     | 17 +++++
 .../web/vm/lib/lang/ar_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/ar_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/bg_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/bg_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/br_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/br_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/cz_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/cz_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/de_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/de_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/el_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/el_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/en_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/en_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/es_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/es_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/fi_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/fi_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/fr_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/fr_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/hr_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/hr_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/hu_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/hu_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/id_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/id_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/it_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/it_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/ja_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/ja_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/nl_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/nl_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/pl_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/pl_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/pt_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/pt_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/ro_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/ro_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/ru_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/ru_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/se_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/se_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/sk_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/sk_openvz_vm.lng    |  1 +
 .../web/vm/lib/lang/tr_openvz_template.lng    |  2 +
 interface/web/vm/lib/lang/tr_openvz_vm.lng    |  1 +
 interface/web/vm/templates/openvz.conf.tpl    |  1 +
 .../openvz_template_advanced_edit.htm         |  4 +-
 .../vm/templates/openvz_vm_advanced_edit.htm  |  4 ++
 55 files changed, 187 insertions(+), 3 deletions(-)
 create mode 100644 interface/lib/classes/validate_openvz.inc.php

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index bbf80e6952..f03448687a 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -168,3 +168,7 @@ CREATE TABLE `server_ip_map` (
 ALTER TABLE `web_domain` ADD COLUMN `rewrite_to_https` ENUM('y','n') NOT NULL DEFAULT 'n' AFTER `seo_redirect`;
 
 ALTER TABLE openvz_ip ADD COLUMN `additional` VARCHAR(255) NOT NULL DEFAULT 'n';
+
+ALTER TABLE openvz_template ADD COLUMN `custom` text;
+ALTER TABLE openvz_vm ADD COLUMN `custom` text;
+
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 6089f3f745..ece5558289 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1093,6 +1093,7 @@ CREATE TABLE IF NOT EXISTS `openvz_template` (
   `capability` varchar(255) DEFAULT NULL,
   `features` varchar(255) DEFAULT NULL,
   `iptables` varchar(255) DEFAULT NULL,
+  `custom` text,
   PRIMARY KEY (`template_id`)
 ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
 
@@ -1100,7 +1101,7 @@ CREATE TABLE IF NOT EXISTS `openvz_template` (
 -- Dumping data for table `openvz_template`
 --
 
-INSERT INTO `openvz_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `diskspace`, `traffic`, `bandwidth`, `ram`, `ram_burst`, `cpu_units`, `cpu_num`, `cpu_limit`, `io_priority`, `active`, `description`, `numproc`, `numtcpsock`, `numothersock`, `vmguarpages`, `kmemsize`, `tcpsndbuf`, `tcprcvbuf`, `othersockbuf`, `dgramrcvbuf`, `oomguarpages`, `privvmpages`, `lockedpages`, `shmpages`, `physpages`, `numfile`, `avnumproc`, `numflock`, `numpty`, `numsiginfo`, `dcachesize`, `numiptent`, `swappages`, `hostname`, `nameserver`, `create_dns`, `capability`, `features`, `iptables`) VALUES(1, 1, 1, 'riud', 'riud', '', 'small', 10, -1, -1, 256, 512, 1000, 4, 400, 4, 'y', '', '999999:999999', '7999992:7999992', '7999992:7999992', '65536:65536', '2147483646:2147483646', '214748160:396774400', '214748160:396774400', '214748160:396774400', '214748160:396774400', '65536:65536', '131072:131072', '999999:999999', '65536:65536', '0:2147483647', '23999976:23999976', '180:180', '999999:999999', '500000:500000', '999999:999999', '2147483646:2147483646', '999999:999999', '256000:256000', 'v{VEID}.test.tld', '8.8.8.8 8.8.4.4', 'n', '', '', '');
+INSERT INTO `openvz_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `diskspace`, `traffic`, `bandwidth`, `ram`, `ram_burst`, `cpu_units`, `cpu_num`, `cpu_limit`, `io_priority`, `active`, `description`, `numproc`, `numtcpsock`, `numothersock`, `vmguarpages`, `kmemsize`, `tcpsndbuf`, `tcprcvbuf`, `othersockbuf`, `dgramrcvbuf`, `oomguarpages`, `privvmpages`, `lockedpages`, `shmpages`, `physpages`, `numfile`, `avnumproc`, `numflock`, `numpty`, `numsiginfo`, `dcachesize`, `numiptent`, `swappages`, `hostname`, `nameserver`, `create_dns`, `capability`, `features`, `iptables`) VALUES(1, 1, 1, 'riud', 'riud', '', 'small', 10, -1, -1, 256, 512, 1000, 4, 400, 4, 'y', '', '999999:999999', '7999992:7999992', '7999992:7999992', '65536:65536', '2147483646:2147483646', '214748160:396774400', '214748160:396774400', '214748160:396774400', '214748160:396774400', '65536:65536', '131072:131072', '999999:999999', '65536:65536', '0:2147483647', '23999976:23999976', '180:180', '999999:999999', '500000:500000', '999999:999999', '2147483646:2147483646', '999999:999999', '256000:256000', 'v{VEID}.test.tld', '8.8.8.8 8.8.4.4', 'n', '', '', '', '');
 
 -- --------------------------------------------------------
 
@@ -1159,6 +1160,7 @@ CREATE TABLE IF NOT EXISTS `openvz_vm` (
   `features` text,
   `iptabless` text,
   `config` mediumtext,
+  `custom` text,
   PRIMARY KEY (`vm_id`)
 ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
 
diff --git a/interface/lib/classes/validate_openvz.inc.php b/interface/lib/classes/validate_openvz.inc.php
new file mode 100644
index 0000000000..75e41fe65f
--- /dev/null
+++ b/interface/lib/classes/validate_openvz.inc.php
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ Copyright (c) 2015, Florian Schaal, schaal @it
+ 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.
+
+ @author Florian Schaal, info@schaal-24.de
+ @copyrighth Florian Schaal, info@schaal-24.de
+ */
+
+class validate_openvz {
+
+	function get_error($errmsg, $additional='') {
+		global $app;
+		if(isset($app->tform->wordbook[$errmsg])) {
+			return $app->tform->wordbook[$errmsg].$additional."<br>\r\n";
+		} else {
+			return $errmsg."<br>".$additional."<br>\r\n";
+		}
+	}
+
+	function check_custom($field_name, $field_value, $validator) {
+		$template = file('../vm/templates/openvz.conf.tpl', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+		$custom_array = explode("\n", $field_value);
+		$used_parameters = array();
+		foreach ($template as $line) {
+			$line = trim ($line);
+			if (preg_match('/^[^#].*=\".*\"/', $line)) {
+				$line = explode('=', $line, 2);
+				$used_parameters[] = $line[0];
+			}
+		}
+		foreach ($custom_array as $check) {
+			$check = trim(strtoupper($check));
+			$check = explode('=', trim($check), 2);
+			$check = trim($check[0]);
+			if (in_array($check, $used_parameters)) {
+				return $this->get_error($validator['errmsg'], $check);
+			}
+		}
+	}
+
+}
diff --git a/interface/lib/plugins/vm_openvz_plugin.inc.php b/interface/lib/plugins/vm_openvz_plugin.inc.php
index 5f6e3bbe80..aae645c4f3 100644
--- a/interface/lib/plugins/vm_openvz_plugin.inc.php
+++ b/interface/lib/plugins/vm_openvz_plugin.inc.php
@@ -156,8 +156,9 @@ class vm_openvz_plugin {
 		$sql .= "capability = ?, ";
 		$sql .= "features = ?, ";
 		$sql .= "iptables = ? ";
+		$sql .= "custom = ? ";
 		$sql .= "WHERE vm_id = ?";
-		$app->db->query($sql, $tpl['diskspace'], $tpl['ram'], $tpl['ram_burst'], $tpl['cpu_units'], $tpl['cpu_num'], $tpl['cpu_limit'], $tpl['io_priority'], $tpl['nameserver'], $tpl['create_dns'], $tpl['capability'], $tpl['features'], $tpl['iptables'], $this->id);
+		$app->db->query($sql, $tpl['diskspace'], $tpl['ram'], $tpl['ram_burst'], $tpl['cpu_units'], $tpl['cpu_num'], $tpl['cpu_limit'], $tpl['io_priority'], $tpl['nameserver'], $tpl['create_dns'], $tpl['capability'], $tpl['features'], $tpl['iptables'], $tpl['custom'], $this->id);
 
 	}
 
@@ -230,6 +231,8 @@ class vm_openvz_plugin {
 		$tpl->setVar('features', $vm['features']);
 		$tpl->setVar('iptables', $vm['iptables']);
 
+		$tpl->setVar('custom', $vm['custom']);
+
 		$tmp = $app->db->queryOneRecord("SELECT template_file FROM openvz_ostemplate WHERE ostemplate_id = ?", $app->functions->intval($vm['ostemplate_id']));
 		$tpl->setVar('ostemplate', $tmp['template_file']);
 		unset($tmp);
diff --git a/interface/web/vm/form/openvz_template.tform.php b/interface/web/vm/form/openvz_template.tform.php
index fd67c99179..8279ce085c 100644
--- a/interface/web/vm/form/openvz_template.tform.php
+++ b/interface/web/vm/form/openvz_template.tform.php
@@ -475,6 +475,22 @@ $form["tabs"]['advanced'] = array (
 			'width'  => '30',
 			'maxlength' => '255'
 		),
+		'custom' => array (
+			'datatype' => 'TEXT',
+			'formtype' => 'TEXTAREA',
+			'default' => '',
+			'value'  => '',
+			'separator' => '',
+			'width'  => '',
+			'maxlength' => '',
+			'rows'  => '10',
+			'cols'  => '30',
+			'validators'    => array (  0 => array ('type'  => 'CUSTOM',
+				'class' => 'validate_openvz',
+				'function' => 'check_custom',
+				'errmsg'=> 'custom_error'),
+			),
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/vm/form/openvz_vm.tform.php b/interface/web/vm/form/openvz_vm.tform.php
index d6911ccfda..37bf86975e 100644
--- a/interface/web/vm/form/openvz_vm.tform.php
+++ b/interface/web/vm/form/openvz_vm.tform.php
@@ -322,6 +322,23 @@ if($_SESSION["s"]["user"]["typ"] == 'admin') {
 				'width'  => '30',
 				'maxlength' => '255'
 			),
+			'custom' => array (
+				'datatype' => 'TEXT',
+				'formtype' => 'TEXTAREA',
+				'default' => '',
+				'value'  => '',
+				'separator' => '',
+				'width'  => '',
+				'maxlength' => '',
+				'rows'  => '10',
+				'cols'  => '30',
+				'searchable' => 2,
+				'validators'    => array (  0 => array ('type'  => 'CUSTOM',
+					'class' => 'validate_openvz',
+					'function' => 'check_custom',
+					'errmsg'=> 'custom_error'),
+				),
+			),
 			//#################################
 			// ENDE Datatable fields
 			//#################################
diff --git a/interface/web/vm/lib/lang/ar_openvz_template.lng b/interface/web/vm/lib/lang/ar_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/ar_openvz_template.lng
+++ b/interface/web/vm/lib/lang/ar_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/ar_openvz_vm.lng b/interface/web/vm/lib/lang/ar_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/ar_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/ar_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/bg_openvz_template.lng b/interface/web/vm/lib/lang/bg_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/bg_openvz_template.lng
+++ b/interface/web/vm/lib/lang/bg_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/bg_openvz_vm.lng b/interface/web/vm/lib/lang/bg_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/bg_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/bg_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_template.lng b/interface/web/vm/lib/lang/br_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/br_openvz_template.lng
+++ b/interface/web/vm/lib/lang/br_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_vm.lng b/interface/web/vm/lib/lang/br_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/br_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/br_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/cz_openvz_template.lng b/interface/web/vm/lib/lang/cz_openvz_template.lng
index 3abd8167dc..26434be3b9 100644
--- a/interface/web/vm/lib/lang/cz_openvz_template.lng
+++ b/interface/web/vm/lib/lang/cz_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Å ablona';
 $wb['Advanced'] = 'Pokročilý';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/cz_openvz_vm.lng b/interface/web/vm/lib/lang/cz_openvz_vm.lng
index eaf12b7557..9d20c9be86 100644
--- a/interface/web/vm/lib/lang/cz_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/cz_openvz_vm.lng
@@ -39,5 +39,6 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Pokročilý';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
 
diff --git a/interface/web/vm/lib/lang/de_openvz_template.lng b/interface/web/vm/lib/lang/de_openvz_template.lng
index c86e878b75..776e14a5e1 100644
--- a/interface/web/vm/lib/lang/de_openvz_template.lng
+++ b/interface/web/vm/lib/lang/de_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Erweitert';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/de_openvz_vm.lng b/interface/web/vm/lib/lang/de_openvz_vm.lng
index edce4b733b..467af85dbd 100644
--- a/interface/web/vm/lib/lang/de_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/de_openvz_vm.lng
@@ -38,4 +38,5 @@ $wb['template_nameserver_error_empty'] = 'Nameserver ist leer.';
 $wb['Virtual server'] = 'Virtueller Server';
 $wb['Advanced'] = 'Erweitert';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/el_openvz_template.lng b/interface/web/vm/lib/lang/el_openvz_template.lng
index b8c6543723..75b2d7f2f1 100644
--- a/interface/web/vm/lib/lang/el_openvz_template.lng
+++ b/interface/web/vm/lib/lang/el_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/el_openvz_vm.lng b/interface/web/vm/lib/lang/el_openvz_vm.lng
index c74b102923..24b6e26d20 100644
--- a/interface/web/vm/lib/lang/el_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/el_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Εικονικός server';
 $wb['Advanced'] = 'Για προχωρημένους';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/en_openvz_template.lng b/interface/web/vm/lib/lang/en_openvz_template.lng
index a2b7f8db96..cb648cbd6a 100644
--- a/interface/web/vm/lib/lang/en_openvz_template.lng
+++ b/interface/web/vm/lib/lang/en_openvz_template.lng
@@ -92,4 +92,6 @@ $wb["Template"] = 'Template';
 $wb["Advanced"] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/en_openvz_vm.lng b/interface/web/vm/lib/lang/en_openvz_vm.lng
index 67cdbfd6f5..213e3ad25d 100644
--- a/interface/web/vm/lib/lang/en_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/en_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb["Virtual server"] = 'Virtual server';
 $wb["Advanced"] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/es_openvz_template.lng b/interface/web/vm/lib/lang/es_openvz_template.lng
index cad093304b..bffc717057 100644
--- a/interface/web/vm/lib/lang/es_openvz_template.lng
+++ b/interface/web/vm/lib/lang/es_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Plantilla';
 $wb['Advanced'] = 'Avanzado';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/es_openvz_vm.lng b/interface/web/vm/lib/lang/es_openvz_vm.lng
index 6a88f4f441..2982a9af8b 100644
--- a/interface/web/vm/lib/lang/es_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/es_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Servidor virtual';
 $wb['Advanced'] = 'Avanzado';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/fi_openvz_template.lng b/interface/web/vm/lib/lang/fi_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/fi_openvz_template.lng
+++ b/interface/web/vm/lib/lang/fi_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/fi_openvz_vm.lng b/interface/web/vm/lib/lang/fi_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/fi_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/fi_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/fr_openvz_template.lng b/interface/web/vm/lib/lang/fr_openvz_template.lng
index 66db26534d..c2554a0b76 100644
--- a/interface/web/vm/lib/lang/fr_openvz_template.lng
+++ b/interface/web/vm/lib/lang/fr_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Modèle';
 $wb['Advanced'] = 'Avancé';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/fr_openvz_vm.lng b/interface/web/vm/lib/lang/fr_openvz_vm.lng
index 26d21a0634..d01f6248f9 100644
--- a/interface/web/vm/lib/lang/fr_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/fr_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Serveur virtuel';
 $wb['Advanced'] = 'Avancé';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/hr_openvz_template.lng b/interface/web/vm/lib/lang/hr_openvz_template.lng
index 69b36b9202..622274bc4d 100644
--- a/interface/web/vm/lib/lang/hr_openvz_template.lng
+++ b/interface/web/vm/lib/lang/hr_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Predložak';
 $wb['Advanced'] = 'Napredno';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/hr_openvz_vm.lng b/interface/web/vm/lib/lang/hr_openvz_vm.lng
index 6ae18e105d..5169eb9555 100644
--- a/interface/web/vm/lib/lang/hr_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/hr_openvz_vm.lng
@@ -39,6 +39,7 @@ $wb['Virtual server'] = 'Virtualni server';
 $wb['Advanced'] = 'Napredno';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
 
 
diff --git a/interface/web/vm/lib/lang/hu_openvz_template.lng b/interface/web/vm/lib/lang/hu_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/hu_openvz_template.lng
+++ b/interface/web/vm/lib/lang/hu_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/hu_openvz_vm.lng b/interface/web/vm/lib/lang/hu_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/hu_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/hu_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/id_openvz_template.lng b/interface/web/vm/lib/lang/id_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/id_openvz_template.lng
+++ b/interface/web/vm/lib/lang/id_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/id_openvz_vm.lng b/interface/web/vm/lib/lang/id_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/id_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/id_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/it_openvz_template.lng b/interface/web/vm/lib/lang/it_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/it_openvz_template.lng
+++ b/interface/web/vm/lib/lang/it_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/it_openvz_vm.lng b/interface/web/vm/lib/lang/it_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/it_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/it_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/ja_openvz_template.lng b/interface/web/vm/lib/lang/ja_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/ja_openvz_template.lng
+++ b/interface/web/vm/lib/lang/ja_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/ja_openvz_vm.lng b/interface/web/vm/lib/lang/ja_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/ja_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/ja_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/nl_openvz_template.lng b/interface/web/vm/lib/lang/nl_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/nl_openvz_template.lng
+++ b/interface/web/vm/lib/lang/nl_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/nl_openvz_vm.lng b/interface/web/vm/lib/lang/nl_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/nl_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/nl_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/pl_openvz_template.lng b/interface/web/vm/lib/lang/pl_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/pl_openvz_template.lng
+++ b/interface/web/vm/lib/lang/pl_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/pl_openvz_vm.lng b/interface/web/vm/lib/lang/pl_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/pl_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/pl_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/pt_openvz_template.lng b/interface/web/vm/lib/lang/pt_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/pt_openvz_template.lng
+++ b/interface/web/vm/lib/lang/pt_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/pt_openvz_vm.lng b/interface/web/vm/lib/lang/pt_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/pt_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/pt_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/ro_openvz_template.lng b/interface/web/vm/lib/lang/ro_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/ro_openvz_template.lng
+++ b/interface/web/vm/lib/lang/ro_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/ro_openvz_vm.lng b/interface/web/vm/lib/lang/ro_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/ro_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/ro_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/ru_openvz_template.lng b/interface/web/vm/lib/lang/ru_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/ru_openvz_template.lng
+++ b/interface/web/vm/lib/lang/ru_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/ru_openvz_vm.lng b/interface/web/vm/lib/lang/ru_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/ru_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/ru_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/se_openvz_template.lng b/interface/web/vm/lib/lang/se_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/se_openvz_template.lng
+++ b/interface/web/vm/lib/lang/se_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/se_openvz_vm.lng b/interface/web/vm/lib/lang/se_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/se_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/se_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/sk_openvz_template.lng b/interface/web/vm/lib/lang/sk_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/sk_openvz_template.lng
+++ b/interface/web/vm/lib/lang/sk_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/sk_openvz_vm.lng b/interface/web/vm/lib/lang/sk_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/sk_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/sk_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_template.lng b/interface/web/vm/lib/lang/tr_openvz_template.lng
index 262cad0dab..27dfbbb7b5 100644
--- a/interface/web/vm/lib/lang/tr_openvz_template.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_template.lng
@@ -92,4 +92,6 @@ $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
+$wb["custom_error"] = "Not allowed in Custom settings: ";
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_vm.lng b/interface/web/vm/lib/lang/tr_openvz_vm.lng
index 3f4e1c1ee1..bbf388a875 100644
--- a/interface/web/vm/lib/lang/tr_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_vm.lng
@@ -39,4 +39,5 @@ $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 $wb['features_txt'] = 'Features';
 $wb["iptables_txt"] = "IP Tables";
+$wb["custom_txt"] = "Custom settings";
 ?>
diff --git a/interface/web/vm/templates/openvz.conf.tpl b/interface/web/vm/templates/openvz.conf.tpl
index 1cb4dc0619..a2b061a06f 100644
--- a/interface/web/vm/templates/openvz.conf.tpl
+++ b/interface/web/vm/templates/openvz.conf.tpl
@@ -50,3 +50,4 @@ MEMINFO="privvmpages:1"
 CAPABILITY="{tmpl_var name='capability'}"
 FEATURES="{tmpl_var name='features'}"
 IPTABLES="{tmpl_var name='iptables'}"
+{tmpl_var name='custom'}
diff --git a/interface/web/vm/templates/openvz_template_advanced_edit.htm b/interface/web/vm/templates/openvz_template_advanced_edit.htm
index d3dee9a281..3712906ed0 100644
--- a/interface/web/vm/templates/openvz_template_advanced_edit.htm
+++ b/interface/web/vm/templates/openvz_template_advanced_edit.htm
@@ -80,7 +80,9 @@
             <div class="form-group">
                 <label for="iptables" class="col-sm-3 control-label">{tmpl_var name='iptables_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="iptables" id="iptables" value="{tmpl_var name='iptables'}" class="form-control" /></div></div>
-        
+            <div class="form-group">
+                <label for="custom" class="col-sm-3 control-label">{tmpl_var name='custom_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="custom" id="custom" rows='10' cols='30'>{tmpl_var name='custom'}</textarea></div></div>        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
             
diff --git a/interface/web/vm/templates/openvz_vm_advanced_edit.htm b/interface/web/vm/templates/openvz_vm_advanced_edit.htm
index 83bbb3d519..a25d715e57 100644
--- a/interface/web/vm/templates/openvz_vm_advanced_edit.htm
+++ b/interface/web/vm/templates/openvz_vm_advanced_edit.htm
@@ -58,6 +58,10 @@
                 <label for="iptables" class="col-sm-3 control-label">{tmpl_var name='iptables_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="iptables" id="iptables" value="{tmpl_var name='iptables'}" class="form-control" />
 			</div></div>
+			<div class="form-group">
+				<label for="custom" class="col-sm-3 control-label">{tmpl_var name='custom_txt'}</label>
+				<div class="col-sm-9"><textarea class="form-control" name="custom" id="custom" rows='10' cols='30'>{tmpl_var name='custom'}</textarea></div>
+			</div>
         
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
-- 
GitLab