From 5f671f49714b70c28d7bc2959b91dff59d92bdc5 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Wed, 14 Nov 2012 07:09:25 -0500
Subject: [PATCH] Added function for IPv6 prefixes in multiserver mirror setups.
---
interface/web/admin/templates/server_config_web_edit.htm | 26 ++++--
server/plugins-available/apache2_plugin.inc.php | 30 +++++--
interface/lib/classes/tform.inc.php | 43 +++++++++-
interface/web/admin/lib/lang/en_server_config.lng | 11 +-
install/tpl/server.ini.master | 26 +++---
interface/web/admin/form/server_config.tform.php | 42 +++++++---
interface/web/admin/templates/server_config_server_edit.htm | 24 +++--
7 files changed, 140 insertions(+), 62 deletions(-)
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index c057ef8..fdaab8e 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -5,12 +5,13 @@
[server]
-auto_network_configuration=n
-ip_address=0.0.0.0
-netmask=255.255.255.0
-gateway=0.0.0.0
-hostname=server1.domain.tld
-nameservers=8.8.8.8,8.8.4.4
+auto_network_configuration=n
+ip_address=0.0.0.0
+netmask=255.255.255.0
+v6_prefix=
+gateway=0.0.0.0
+hostname=server1.domain.tld
+nameservers=8.8.8.8,8.8.4.4
firewall=bastille
loglevel=2
backup_dir=/var/backup
@@ -40,12 +41,13 @@
[web]
server_type=apache
website_basedir=/var/www
-website_path=/var/www/clients/client[client_id]/web[website_id]
-website_symlinks=/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/
-website_symlinks_rel=n
-vhost_conf_dir=/etc/apache2/sites-available
-vhost_conf_enabled_dir=/etc/apache2/sites-enabled
-nginx_vhost_conf_dir=/etc/nginx/sites-available
+website_path=/var/www/clients/client[client_id]/web[website_id]
+website_symlinks=/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/
+website_symlinks_rel=n
+vhost_rewrite_v6=n
+vhost_conf_dir=/etc/apache2/sites-available
+vhost_conf_enabled_dir=/etc/apache2/sites-enabled
+nginx_vhost_conf_dir=/etc/nginx/sites-available
nginx_vhost_conf_enabled_dir=/etc/nginx/sites-enabled
security_level=20
user=www-data
diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php
index 66615d0..b0b727c 100644
--- a/interface/lib/classes/tform.inc.php
+++ b/interface/lib/classes/tform.inc.php
@@ -884,12 +884,43 @@
$this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
} else {
$this->errorMessage .= $errmsg."<br />\r\n";
- }
- }
- break;
- case 'ISIPV4':
- $vip=1;
- if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $field_value)){
+ }
+ }
+ break;
+ case 'ISV6PREFIX':
+ $v6_prefix_ok = 0;
+ $explode_field_value = explode(':',$field_value);
+ if ($explode_field_value[count($explode_field_value)-1]=='' && $explode_field_value[count($explode_field_value)-2]=='' ){
+ if ( count($explode_field_value) <= 9 ) {
+ if(filter_var(substr($field_value,0,strlen($field_value)-2),FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) or filter_var(substr($field_value,0,strlen($field_value)-2).'::0',FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) or filter_var(substr($field_value,0,strlen($field_value)-2).':0',FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) ) {
+ $v6_prefix_ok = 1;
+ }
+ }
+ } else {
+ $v6_prefix_ok = 2;
+ }
+ // check subnet against defined server-ipv6
+ $sql_v6 = $app->db->queryOneRecord("SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND virtualhost = 'y' LIMIT 0,1");
+ $sql_v6_explode=explode(':',$sql_v6['ip_address']);
+ if ( count($sql_v6_explode) < count($explode_field_value) && isset($sql_v6['ip_address']) ) {
+ $v6_prefix_ok = 3;
+ }
+ if($v6_prefix_ok == 0) {
+ $errmsg = $validator['errmsg'];
+ }
+ if($v6_prefix_ok == 2) {
+ $errmsg = 'IPv6 Prefix must end with ::';
+ }
+ if($v6_prefix_ok == 3) {
+ $errmsg = 'IPv6 Prefix too long (according to Server IP Addresses)';
+ }
+ if($v6_prefix_ok <> 1){
+ $this->errorMessage .= $errmsg."<br />\r\n";
+ }
+ break;
+ case 'ISIPV4':
+ $vip=1;
+ if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $field_value)){
$groups=explode(".",$field_value);
foreach($groups as $group){
if($group<0 OR $group>255)
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 360c1ba..1e5b06e 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -83,12 +83,20 @@
'errmsg' => 'netmask_error_wrong'),
),
'value' => '',
- 'width' => '15',
- 'maxlength' => '255'
- ),
- 'gateway' => array(
- 'datatype' => 'VARCHAR',
- 'formtype' => 'TEXT',
+ 'width' => '15',
+ 'maxlength' => '255'
+ ),
+ 'v6_prefix' => array(
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'validators' => array(0 => array('type' => 'ISV6PREFIX',
+ 'errmsg' => 'v6_prefix_wrong'),
+ ),
+ 'default' => ''
+ ),
+ 'gateway' => array(
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
'default' => '192.168.0.1',
'validators' => array(0 => array('type' => 'ISIPV4',
'errmsg' => 'gateway_error_wrong'),
@@ -402,12 +410,22 @@
'formtype' => 'TEXT',
'default' => '',
'value' => '',
- 'width' => '40',
- 'maxlength' => '255'
- ),
- 'vhost_conf_dir' => array(
- 'datatype' => 'VARCHAR',
- 'formtype' => 'TEXT',
+ 'width' => '40',
+ 'maxlength' => '255'
+ ),
+
+'vhost_rewrite_v6' => array (
+'datatype' => 'VARCHAR',
+'formtype' => 'CHECKBOX',
+'default' => 'n',
+'value' => array(0 => 'n',1 => 'y')
+),
+
+
+
+ 'vhost_conf_dir' => array(
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
'default' => '',
'validators' => array(0 => array('type' => 'NOTEMPTY',
'errmsg' => 'vhost_conf_dir_error_empty'),
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index e6e6336..dbaf39e 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -167,7 +167,10 @@
$wb["firewall_txt"] = 'Firewall';
$wb["mailbox_quota_stats_txt"] = 'Mailbox quota statistics';
$wb["enable_ip_wildcard_txt"] = 'Enable IP wildcard (*)';
-$wb["web_folder_protection_txt"] = 'Make web folders immutable (extended attributes)';
-$wb["overtraffic_notify_admin_txt"] = 'Send overtraffic notification to admin';
-$wb["overtraffic_notify_client_txt"] = 'Send overtraffic notification to client';
-?>
\ No newline at end of file
+$wb["web_folder_protection_txt"] = 'Make web folders immutable (extended attributes)';
+$wb["overtraffic_notify_admin_txt"] = 'Send overtraffic notification to admin';
+$wb["overtraffic_notify_client_txt"] = 'Send overtraffic notification to client';
+$wb["v6_prefix_txt"] = 'IPv6 Prefix';
+$wb["vhost_rewrite_v6_txt"] = 'Rewrite IPv6 on Mirror';
+$wb["v6_prefix_wrong"] = 'Invalid v6 Netmask format.';
+?>
diff --git a/interface/web/admin/templates/server_config_server_edit.htm b/interface/web/admin/templates/server_config_server_edit.htm
index 54fba49..40c4051 100644
--- a/interface/web/admin/templates/server_config_server_edit.htm
+++ b/interface/web/admin/templates/server_config_server_edit.htm
@@ -16,12 +16,16 @@
<input name="ip_address" id="ip_address" value="{tmpl_var name='ip_address'}" size="15" maxlength="255" type="text" class="textInput formLengthIPv4" />
</div>
<div class="ctrlHolder">
- <label for="netmask">{tmpl_var name='netmask_txt'}</label>
- <input name="netmask" id="netmask" value="{tmpl_var name='netmask'}" size="15" maxlength="255" type="text" class="textInput formLengthIPv4" />
- </div>
- <div class="ctrlHolder">
- <label for="gateway">{tmpl_var name='gateway_txt'}</label>
- <input name="gateway" id="gateway" value="{tmpl_var name='gateway'}" size="15" maxlength="255" type="text" class="textInput formLengthIPv4" />
+ <label for="netmask">{tmpl_var name='netmask_txt'}</label>
+ <input name="netmask" id="netmask" value="{tmpl_var name='netmask'}" size="15" maxlength="255" type="text" class="textInput formLengthIPv4" />
+ </div>
+ <div class="ctrlHolder">
+ <label for="v6_prefix">{tmpl_var name='v6_prefix_txt'}</label>
+ <input name="v6_prefix" id="v6_prefix" value="{tmpl_var name='v6_prefix'}" size="15" maxlength="255" type="text" class="textInput formLengthIPv4" />
+ </div>
+ <div class="ctrlHolder">
+ <label for="gateway">{tmpl_var name='gateway_txt'}</label>
+ <input name="gateway" id="gateway" value="{tmpl_var name='gateway'}" size="15" maxlength="255" type="text" class="textInput formLengthIPv4" />
</div>
<div class="ctrlHolder">
<label for="hostname">{tmpl_var name='hostname_txt'}</label>
@@ -61,7 +65,7 @@
<div class="buttonHolder buttons">
<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','admin/server_config_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('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
- </div>
- </div>
-
-</div>
\ No newline at end of file
+ </div>
+ </div>
+
+</div>
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index c1c9e6e..7211f8d 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -32,12 +32,18 @@
</div>
</div>
<div class="ctrlHolder">
- <label for="website_autoalias">{tmpl_var name='website_autoalias_txt'}</label>
- <input name="website_autoalias" id="website_autoalias" value="{tmpl_var name='website_autoalias'}" size="40" maxlength="255" type="text" class="textInput" /> {tmpl_var name='website_autoalias_note_txt'} <a href="javascript:void(0);" class="addPlaceholder">[client_id]</a>, <a href="javascript:void(0);" class="addPlaceholder">[client_username]</a>, <a href="javascript:void(0);" class="addPlaceholder">[website_id]</a>, <a href="javascript:void(0);" class="addPlaceholder">[website_domain]</a>
- </div>
- <div class="ctrlHolder apache">
- <label for="vhost_conf_dir">{tmpl_var name='vhost_conf_dir_txt'}</label>
- <input name="vhost_conf_dir" id="vhost_conf_dir" value="{tmpl_var name='vhost_conf_dir'}" size="40" maxlength="255" type="text" class="textInput" />
+ <label for="website_autoalias">{tmpl_var name='website_autoalias_txt'}</label>
+ <input name="website_autoalias" id="website_autoalias" value="{tmpl_var name='website_autoalias'}" size="40" maxlength="255" type="text" class="textInput" /> {tmpl_var name='website_autoalias_note_txt'} <a href="javascript:void(0);" class="addPlaceholder">[client_id]</a>, <a href="javascript:void(0);" class="addPlaceholder">[client_username]</a>, <a href="javascript:void(0);" class="addPlaceholder">[website_id]</a>, <a href="javascript:void(0);" class="addPlaceholder">[website_domain]</a>
+ </div>
+ <div class="ctrlHolder apache">
+ <label for="vhost_rewrite_v6">{tmpl_var name='vhost_rewrite_v6_txt'}</label>
+ <div class="multiField">
+ {tmpl_var name='vhost_rewrite_v6'}
+ </div>
+ </div>
+ <div class="ctrlHolder apache">
+ <label for="vhost_conf_dir">{tmpl_var name='vhost_conf_dir_txt'}</label>
+ <input name="vhost_conf_dir" id="vhost_conf_dir" value="{tmpl_var name='vhost_conf_dir'}" size="40" maxlength="255" type="text" class="textInput" />
</div>
<div class="ctrlHolder apache">
<label for="vhost_conf_enabled_dir">{tmpl_var name='vhost_conf_enabled_dir_txt'}</label>
@@ -250,7 +256,7 @@
jQuery('.apache').hide();
} else {
jQuery('.nginx').hide();
- jQuery('.apache').show();
- }
- }
-</script>
\ No newline at end of file
+ jQuery('.apache').show();
+ }
+ }
+</script>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index c8dda3e..d7b86c8 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1274,14 +1274,28 @@
} else {
$vhosts[] = array('ip_address' => $data['new']['ip_address'], 'ssl_enabled' => 1, 'port' => '443');
}
- $app->log('Enable SSL for: '.$domain,LOGLEVEL_DEBUG);
- }
-
- //* Add vhost for IPv6 IP
- if($data['new']['ipv6_address'] != '') {
- if(count($rewrite_rules) > 0){
- $vhosts[] = array('ip_address' => '['.$data['new']['ipv6_address'].']', 'ssl_enabled' => 0, 'port' => 80, 'redirects' => $rewrite_rules);
- } else {
+ $app->log('Enable SSL for: '.$domain,LOGLEVEL_DEBUG);
+ }
+
+ //* Add vhost for IPv6 IP
+ if($data['new']['ipv6_address'] != '') {
+ if ($conf['serverconfig']['web']['vhost_rewrite_v6'] == 'y') {
+ if (isset($conf['serverconfig']['server']['v6_prefix']) && $conf['serverconfig']['server']['v6_prefix'] <> '') {
+ $explode_v6prefix=explode(':',$conf['serverconfig']['server']['v6_prefix']);
+ $explode_v6=explode(':',$data['new']['ipv6_address']);
+
+print_r($explode_v6prefix);
+print_r($explode_v6);
+
+ for ( $i = 0; $i <= count($explode_v6prefix)-3; $i++ ) {
+ $explode_v6[$i] = $explode_v6prefix[$i];
+ }
+ $data['new']['ipv6_address'] = implode(':',$explode_v6);
+ }
+ }
+ if(count($rewrite_rules) > 0){
+ $vhosts[] = array('ip_address' => '['.$data['new']['ipv6_address'].']', 'ssl_enabled' => 0, 'port' => 80, 'redirects' => $rewrite_rules);
+ } else {
$vhosts[] = array('ip_address' => '['.$data['new']['ipv6_address'].']', 'ssl_enabled' => 0, 'port' => 80);
}
--
Gitblit v1.9.1