From 624055af2898e06ef2ea3de3a138d0cd9abcddde Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Tue, 02 Oct 2012 09:35:40 -0400
Subject: [PATCH] Made backup function compatible with web folder protection feature.

---
 server/plugins-available/apache2_plugin.inc.php |   68 +++++++++++++++++++++++-----------
 1 files changed, 46 insertions(+), 22 deletions(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index a20efd6..45134fe 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -884,26 +884,30 @@
 
 			switch($data['new']['subdomain']) {
 				case 'www':
-					$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$data['new']['domain'],
+					$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$this->_rewrite_quote($data['new']['domain']),
 						'rewrite_type' 		=> ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
 						'rewrite_target' 	=> $rewrite_target,
-						'rewrite_target_ssl' => $rewrite_target_ssl);
-					$rewrite_rules[] = array(	'rewrite_domain' 	=> '^www.'.$data['new']['domain'],
+						'rewrite_target_ssl' => $rewrite_target_ssl,
+                        'rewrite_is_url'    => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
+					$rewrite_rules[] = array(	'rewrite_domain' 	=> '^' . $this->_rewrite_quote('www.'.$data['new']['domain']),
 							'rewrite_type' 		=> ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
 							'rewrite_target' 	=> $rewrite_target,
-							'rewrite_target_ssl' => $rewrite_target_ssl);
+							'rewrite_target_ssl' => $rewrite_target_ssl,
+                            'rewrite_is_url'    => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
 					break;
 				case '*':
-					$rewrite_rules[] = array(	'rewrite_domain' 	=> '(^|\.)'.$data['new']['domain'],
+					$rewrite_rules[] = array(	'rewrite_domain' 	=> '(^|\.)'.$this->_rewrite_quote($data['new']['domain']),
 						'rewrite_type' 		=> ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
 						'rewrite_target' 	=> $rewrite_target,
-						'rewrite_target_ssl' => $rewrite_target_ssl);
+						'rewrite_target_ssl' => $rewrite_target_ssl,
+                        'rewrite_is_url'    => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
 					break;
 				default:
-					$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$data['new']['domain'],
+					$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$this->_rewrite_quote($data['new']['domain']),
 						'rewrite_type' 		=> ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
 						'rewrite_target' 	=> $rewrite_target,
-						'rewrite_target_ssl' => $rewrite_target_ssl);
+						'rewrite_target_ssl' => $rewrite_target_ssl,
+                        'rewrite_is_url'    => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
 			}
 		}
 		
@@ -920,7 +924,7 @@
 			unset($client);
 			unset($aa_search);
 			unset($aa_replace);
-			$server_alias[] .= $auto_alias;
+			$server_alias[] .= $auto_alias.' ';
 		}
 		
 		// get alias domains (co-domains and subdomains)
@@ -965,26 +969,32 @@
 					
 					switch($alias['subdomain']) {
 						case 'www':
-							$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$alias['domain'],
+							$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$this->_rewrite_quote($alias['domain']),
 								'rewrite_type' 		=> ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
 								'rewrite_target' 	=> $rewrite_target,
-								'rewrite_target_ssl' => $rewrite_target_ssl);
-							$rewrite_rules[] = array(	'rewrite_domain' 	=> '^www.'.$alias['domain'],
+								'rewrite_target_ssl' => $rewrite_target_ssl,
+                                'rewrite_is_url'    => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
+							$rewrite_rules[] = array(	'rewrite_domain' 	=> '^' . $this->_rewrite_quote('www.'.$alias['domain']),
 									'rewrite_type' 		=> ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
 									'rewrite_target' 	=> $rewrite_target,
-									'rewrite_target_ssl' => $rewrite_target_ssl);
+									'rewrite_target_ssl' => $rewrite_target_ssl,
+                                    'rewrite_is_url'    => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
 							break;
 						case '*':
-							$rewrite_rules[] = array(	'rewrite_domain' 	=> '(^|\.)'.$alias['domain'],
+							$rewrite_rules[] = array(	'rewrite_domain' 	=> '(^|\.)'.$this->_rewrite_quote($alias['domain']),
 								'rewrite_type' 		=> ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
 								'rewrite_target' 	=> $rewrite_target,
-								'rewrite_target_ssl' => $rewrite_target_ssl);
+								'rewrite_target_ssl' => $rewrite_target_ssl,
+                                'rewrite_is_url'    => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
 							break;
 						default:
-							$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$alias['domain'],
+                            if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '(^|\.)'.$this->_rewrite_quote(substr($alias['domain'], 2));
+                            else $domain_rule = '^'.$this->_rewrite_quote($alias['domain']);
+							$rewrite_rules[] = array(	'rewrite_domain' 	=> $domain_rule,
 								'rewrite_type' 		=> ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
 								'rewrite_target' 	=> $rewrite_target,
-								'rewrite_target_ssl' => $rewrite_target_ssl);
+								'rewrite_target_ssl' => $rewrite_target_ssl,
+                                'rewrite_is_url'    => ($this->_is_url($rewrite_target) ? 'y' : 'n'));
 					}
 				}
 			}
@@ -1745,8 +1755,8 @@
 		//* Create the .htaccess file
 		//if(!is_file($folder_path.'.htaccess')) {
 			$begin_marker = '### ISPConfig folder protection begin ###';
-            $end_marker = '### ISPConfig folder protection end ###';
-            $ht_file = $begin_marker."\nAuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$folder_path.".htpasswd\nrequire valid-user\n".$end_marker."\n\n";
+            $end_marker = "### ISPConfig folder protection end ###\n\n";
+            $ht_file = $begin_marker."\nAuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$folder_path.".htpasswd\nrequire valid-user\n".$end_marker;
 			
             if(file_exists($folder_path.'.htaccess')) {
                 $old_content = $app->system->file_get_contents($folder_path.'.htaccess');
@@ -1806,12 +1816,14 @@
 		//* Remove .htaccess file
 		if(is_file($folder_path.'.htaccess')) {
             $begin_marker = '### ISPConfig folder protection begin ###';
-            $end_marker = '### ISPConfig folder protection end ###';
+            $end_marker = "### ISPConfig folder protection end ###\n\n";
             
             $ht_file = $app->system->file_get_contents($folder_path.'.htaccess');
             
             if(preg_match('/' . preg_quote($begin_marker, '/') . '(.*?)' . preg_quote($end_marker, '/') . '/s', $ht_file, $matches)) {
                 $ht_file = str_replace($matches[0], '', $ht_file);
+            } else {
+                $ht_file = str_replace("AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$folder_path.".htpasswd\nrequire valid-user", '', $ht_file);
             }
             
             if(trim($ht_file) == '') {
@@ -1873,7 +1885,7 @@
 		if(!is_dir($new_folder_path)) $app->system->mkdirpath($new_folder_path);
 		
         $begin_marker = '### ISPConfig folder protection begin ###';
-        $end_marker = '### ISPConfig folder protection end ###';
+        $end_marker = "### ISPConfig folder protection end ###\n\n";
         
 		if($data['old']['path'] != $data['new']['path']) {
 
@@ -1890,6 +1902,8 @@
                 
                 if(preg_match('/' . preg_quote($begin_marker, '/') . '(.*?)' . preg_quote($end_marker, '/') . '/s', $ht_file, $matches)) {
                     $ht_file = str_replace($matches[0], '', $ht_file);
+                } else {
+                    $ht_file = str_replace("AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$old_folder_path.".htpasswd\nrequire valid-user", '', $ht_file);
                 }
                 
                 if(trim($ht_file) == '') {
@@ -1905,7 +1919,7 @@
 		
 		//* Create the .htaccess file
 		if($data['new']['active'] == 'y') {
-            $ht_file = $begin_marker."\nAuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$new_folder_path.".htpasswd\nrequire valid-user\n".$end_marker."\n\n";
+            $ht_file = $begin_marker."\nAuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$new_folder_path.".htpasswd\nrequire valid-user\n".$end_marker;
 			
             if(file_exists($new_folder_path.'.htaccess')) {
                 $old_content = $app->system->file_get_contents($new_folder_path.'.htaccess');
@@ -1930,6 +1944,8 @@
             
             if(preg_match('/' . preg_quote($begin_marker, '/') . '(.*?)' . preg_quote($end_marker, '/') . '/s', $ht_file, $matches)) {
                 $ht_file = str_replace($matches[0], '', $ht_file);
+            } else {
+                $ht_file = str_replace("AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$new_folder_path.".htpasswd\nrequire valid-user", '', $ht_file);
             }
             
             if(trim($ht_file) == '') {
@@ -2555,6 +2571,14 @@
 		return symlink($cfrom, $to);
 	}
 
+    private function _rewrite_quote($string) {
+        return str_replace(array('.', '*', '?', '+'), array('\\.', '\\*', '\\?', '\\+'), $string);
+    }
+    
+    private function _is_url($string) {
+        return preg_match('/^(f|ht)tp(s)?:\/\//i', $string);
+    }
+    
 } // end class
 
 ?>

--
Gitblit v1.9.1