From edaa7c5d66ef52eec1c15f79ae4034fc3e67b9b7 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Thu, 25 Oct 2012 10:29:39 -0400
Subject: [PATCH] - Fixed: FS#2502 - Problem in web traffic accounting for large integers - Added intval function from interface functions library to server system library.

---
 server/plugins-available/apache2_plugin.inc.php |   98 ++++++++++++++++++++++++++++++-------------------
 1 files changed, 60 insertions(+), 38 deletions(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 398b4ae..34939f8 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -115,8 +115,8 @@
 		$csr_file = $ssl_dir.'/'.$domain.'.csr';
 		$crt_file = $ssl_dir.'/'.$domain.'.crt';
 
-		//* Create a SSL Certificate
-		if($data['new']['ssl_action'] == 'create') {
+		//* Create a SSL Certificate, but only if this is not a mirror server.
+		if($data['new']['ssl_action'] == 'create' && $conf['mirror_server_id'] == 0) {
 			
 			$this->ssl_certificate_changed = true;
 			
@@ -887,23 +887,27 @@
 					$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'));
 					$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' 	=> '(^|\.)'.$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' 	=> '^'.$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'));
 			}
 		}
 		
@@ -968,25 +972,29 @@
 							$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'));
 							$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' 	=> '(^|\.)'.$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:
-                            if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '(^|\.)'.$this->_rewrite_quote($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'));
 					}
 				}
 			}
@@ -1346,7 +1354,7 @@
 				$app->system->web_folder_protection($data['new']['document_root'],false);
 				$app->system->file_put_contents($data['new']['document_root'].'/.htpasswd_stats',$htp_file);
 				$app->system->web_folder_protection($data['new']['document_root'],true);
-				$app->system->chmod($data['new']['document_root'].'/.htpasswd_stats',0755);
+				$app->system->chmod($data['new']['document_root'].'/.htpasswd_stats',0750);
 				unset($htp_file);
 			}
 		}
@@ -1707,8 +1715,8 @@
 		
 		//* Create empty .htpasswd file, if it does not exist
 		if(!is_file($folder_path.'.htpasswd')) {
-			touch($folder_path.'.htpasswd');
-			$app->system->chmod($folder_path.'.htpasswd',0755);
+			$app->system->touch($folder_path.'.htpasswd');
+			$app->system->chmod($folder_path.'.htpasswd',0750);
 			$app->system->chown($folder_path.'.htpasswd',$website['system_user']);
 			$app->system->chgrp($folder_path.'.htpasswd',$website['system_group']);
 			$app->log('Created file '.$folder_path.'.htpasswd',LOGLEVEL_DEBUG);
@@ -1762,7 +1770,7 @@
             unset($old_content);
             
             $app->system->file_put_contents($folder_path.'.htaccess',$ht_file);
-			$app->system->chmod($folder_path.'.htaccess',0755);
+			$app->system->chmod($folder_path.'.htaccess',0750);
 			$app->system->chown($folder_path.'.htaccess',$website['system_user']);
 			$app->system->chgrp($folder_path.'.htaccess',$website['system_group']);
 			$app->log('Created/modified file '.$folder_path.'.htaccess',LOGLEVEL_DEBUG);
@@ -1924,7 +1932,7 @@
             }
             
             $app->system->file_put_contents($new_folder_path.'.htaccess',$ht_file);
-			$app->system->chmod($new_folder_path.'.htaccess',0755);
+			$app->system->chmod($new_folder_path.'.htaccess',0750);
 			$app->system->chown($new_folder_path.'.htaccess',$website['system_user']);
 			$app->system->chgrp($new_folder_path.'.htaccess',$website['system_group']);
 			$app->log('Created/modified file '.$new_folder_path.'.htaccess',LOGLEVEL_DEBUG);
@@ -2110,6 +2118,8 @@
 	 * @param string $pwd      The password-hash of the user
 	 */
 	private function _writeHtDigestFile($filename, $username, $authname, $pwdhash ) {
+		global $app;
+		
 		$changed = false;
 		if(is_file($filename) && !is_link($filename)) {
 			$in = fopen($filename, 'r');
@@ -2188,7 +2198,7 @@
 				$files = @scandir($webdavRoot);
 				if(is_array($files)) {
 				foreach($files as $file) {
-					if (substr($file, strlen($file) - strlen('.htdigest')) == '.htdigest' && preg_match("[a-zA-Z0-9\-_\.]",$file)) {
+					if (substr($file, strlen($file) - strlen('.htdigest')) == '.htdigest' && preg_match("/^[a-zA-Z0-9\-_\.]*$/",$file)) {
 						/*
 						 * found a htdigest - file, so add it to webdav
 						*/
@@ -2263,7 +2273,11 @@
 		}
 		
 		if(is_file($data['new']['document_root']."/" . $web_folder . "/stats/index.html")) $app->system->unlink($data['new']['document_root']."/" . $web_folder . "/stats/index.html");
-		$app->system->copy("/usr/local/ispconfig/server/conf/awstats_index.php.master",$data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+		if(file_exists("/usr/local/ispconfig/server/conf-custom/awstats_index.php.master")) {
+			$app->system->copy("/usr/local/ispconfig/server/conf-custom/awstats_index.php.master",$data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+		} else {
+			$app->system->copy("/usr/local/ispconfig/server/conf/awstats_index.php.master",$data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+		}
 	}
 	
 	//* Delete the awstats configuration file
@@ -2369,27 +2383,31 @@
 			$ini_settings = explode("\n", $custom_php_ini_settings);
 			if(is_array($ini_settings) && !empty($ini_settings)){
 				foreach($ini_settings as $ini_setting){
-						list($key, $value) = explode('=', $ini_setting);
-						if($value){
-							$value = trim($value);
-							$key = trim($key);
-							switch (strtolower($value)) {
-								case '0':
-									// PHP-FPM might complain about invalid boolean value if you use 0
-									$value = 'off';
-								case '1':
-								case 'on':
-								case 'off':
-								case 'true':
-								case 'false':
-								case 'yes':
-								case 'no':
-									$final_php_ini_settings[] = array('ini_setting' => 'php_admin_flag['.$key.'] = '.$value);
-									break;
-								default:
-									$final_php_ini_settings[] = array('ini_setting' => 'php_admin_value['.$key.'] = '.$value);
-							}
+					$ini_setting = trim($ini_setting);
+					if(substr($ini_setting,0,1) == ';') continue;
+					if(substr($ini_setting,0,1) == '#') continue;
+					if(substr($ini_setting,0,2) == '//') continue;
+					list($key, $value) = explode('=', $ini_setting);
+					if($value){
+						$value = trim($value);
+						$key = trim($key);
+						switch (strtolower($value)) {
+							case '0':
+								// PHP-FPM might complain about invalid boolean value if you use 0
+								$value = 'off';
+							case '1':
+							case 'on':
+							case 'off':
+							case 'true':
+							case 'false':
+							case 'yes':
+							case 'no':
+								$final_php_ini_settings[] = array('ini_setting' => 'php_admin_flag['.$key.'] = '.$value);
+								break;
+							default:
+								$final_php_ini_settings[] = array('ini_setting' => 'php_admin_value['.$key.'] = '.$value);
 						}
+					}
 				}
 			}
 		}
@@ -2567,6 +2585,10 @@
         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