From a5b276444c1e2fa9c960131723ffd6955fb92f48 Mon Sep 17 00:00:00 2001
From: karailiev <karailiev@ispconfig3>
Date: Tue, 11 Aug 2009 15:20:21 -0400
Subject: [PATCH] ticket 827 For some reason till has made the version number not to load when no user is logged in. Due to ajax login the version number remains not loaded even after login until the whole page is reloaded. I didn't find any comment why is this done, so I revert it.

---
 server/plugins-available/apache2_plugin.inc.php |  157 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 133 insertions(+), 24 deletions(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 555cffa..30e4aed 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1,7 +1,7 @@
 <?php
 
 /*
-Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+Copyright (c) 2007 - 2009, Till Brehm, projektfarm Gmbh
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
@@ -146,8 +146,12 @@
     		@unlink($rand_file);
     		$ssl_request = file_get_contents($csr_file);
     		$ssl_cert = file_get_contents($crt_file);
+			/* Update the DB of the (local) Server */
     		$app->db->query("UPDATE web_domain SET ssl_request = '$ssl_request', ssl_cert = '$ssl_cert' WHERE domain = '".$data["new"]["domain"]."'");
 			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
+			/* Update also the master-DB of the Server-Farm */
+    		$app->dbmaster->query("UPDATE web_domain SET ssl_request = '$ssl_request', ssl_cert = '$ssl_cert' WHERE domain = '".$data["new"]["domain"]."'");
+			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
 		}
 		
 		//* Save a SSL certificate to disk
@@ -160,7 +164,10 @@
 			file_put_contents($csr_file,$data["new"]["ssl_request"]);
 			file_put_contents($crt_file,$data["new"]["ssl_cert"]);
 			if(trim($data["new"]["ssl_bundle"]) != '') file_put_contents($bundle_file,$data["new"]["ssl_bundle"]);
+			/* Update the DB of the (local) Server */
 			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
+			/* Update also the master-DB of the Server-Farm */
+			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
 			$app->log("Saving SSL Cert for: $domain",LOGLEVEL_DEBUG);
 		}
 		
@@ -174,7 +181,12 @@
 			unlink($csr_file);
 			unlink($crt_file);
 			unlink($bundle_file);
+			/* Update the DB of the (local) Server */
+    		$app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '".$data["new"]["domain"]."'");
 			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
+			/* Update also the master-DB of the Server-Farm */
+    		$app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '".$data["new"]["domain"]."'");
+			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
 			$app->log("Deleting SSL Cert for: $domain",LOGLEVEL_DEBUG);
 		}
 		
@@ -204,7 +216,7 @@
 			$new_parent_domain_id = intval($data["new"]["parent_domain_id"]);
 			
 			// If the parent_domain_id has been chenged, we will have to update the old site as well.
-			if($data["new"]["parent_domain_id"] != $data["old"]["parent_domain_id"]) {
+			if($this->action == 'update' && $data["new"]["parent_domain_id"] != $data["old"]["parent_domain_id"]) {
 				$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$old_parent_domain_id." AND active = 'y'");
 				$data["new"] = $tmp;
 				$data["old"] = $tmp;
@@ -218,7 +230,6 @@
 			$data["old"] = $tmp;
 			$this->action = 'update';
 		}
-		
 		
 		// load the server configuration options
 		$app->uses("getconf");
@@ -250,7 +261,7 @@
 					// Remove trailing slash
 					if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
 					// create the symlinks, if not exist
-					if(!is_link($tmp_symlink)) {
+					if(is_link($tmp_symlink)) {
 						exec("rm -f ".escapeshellcmd($tmp_symlink));
 						$app->log("Removed Symlink: rm -f ".$tmp_symlink,LOGLEVEL_DEBUG);
 					}
@@ -271,12 +282,18 @@
 			exec('mv '.$data["old"]["document_root"].' '.$new_dir);
 			$app->log("Moving site to new document root: ".'mv '.$data["old"]["document_root"].' '.$new_dir,LOGLEVEL_DEBUG);
 			
+			//* Change the owner of the website files to the new website owner
+			exec('chown --recursive --from='.escapeshellcmd($data["old"]["system_user"]).':'.escapeshellcmd($data['old']['system_group']).' '.escapeshellcmd($data["new"]["system_user"]).':'.escapeshellcmd($data['new']['system_group']).' '.$new_dir);
+			
 			//* Change the home directory and group of the website user
 			$command = 'usermod';
 			$command .= ' --home '.escapeshellcmd($data["new"]["document_root"]);
 			$command .= ' --gid '.escapeshellcmd($data['new']['system_group']);
 			$command .= ' '.escapeshellcmd($data["new"]["system_user"]);
 			exec($command);
+			
+			
+			
 			
 		}
 		
@@ -396,7 +413,24 @@
 				}
 			}
 			exec("chmod -R a+r ".escapeshellcmd($data["new"]["document_root"])."/web/");
-		}
+		
+		//** Copy the error documents on update when the error document checkbox has been activated and was deactivated before
+		} elseif ($this->action == 'update' && $data["new"]["type"] == 'vhost' && $data["old"]["errordocs"] == 0 && $data["new"]["errordocs"] == 1) {
+			
+			$error_page_path = escapeshellcmd($data["new"]["document_root"])."/web/error/";
+			if (file_exists("/usr/local/ispconfig/server/conf-custom/error/".substr(escapeshellcmd($conf["language"]),0,2))){
+				exec("cp /usr/local/ispconfig/server/conf-custom/error/".substr(escapeshellcmd($conf["language"]),0,2)."/* ".$error_page_path);
+			}
+			else {
+				if (file_exists("/usr/local/ispconfig/server/conf-custom/error/400.html")){
+					exec("cp /usr/local/ispconfig/server/conf-custom/error/*.html ".$error_page_path);
+				}
+				else {
+					exec("cp /usr/local/ispconfig/server/conf/error/".substr(escapeshellcmd($conf["language"]),0,2)."/* ".$error_page_path);
+				}
+			}
+			exec("chmod -R a+r ".$error_page_path);
+		}  // end copy error docs
 		
 		// Create group and user, if not exist
 		$app->uses("system");
@@ -409,7 +443,7 @@
 		
 		$username = escapeshellcmd($data["new"]["system_user"]);
 		if($data["new"]["system_user"] != '' && !$app->system->is_user($data["new"]["system_user"])) {
-			exec("useradd -d ".escapeshellcmd($data["new"]["document_root"])." -g $groupname $username -s /bin/false");
+			exec("useradd -d ".escapeshellcmd($data["new"]["document_root"])." -g $groupname -G sshusers $username -s /bin/false");
 			$app->log("Adding the user: $username",LOGLEVEL_DEBUG);
 		}
 		
@@ -425,7 +459,6 @@
 			exec("setquota -T -u $username 604800 604800 -a &> /dev/null");
 		}
 		
-		
 		if($this->action == 'insert') {
 			// Chown and chmod the directories below the document root
 			exec("chown -R $username:$groupname ".escapeshellcmd($data["new"]["document_root"]));
@@ -434,8 +467,35 @@
 			exec("chown root:root ".escapeshellcmd($data["new"]["document_root"]));
 		}
 		
-		// make temp direcory writable for the apache user and the website user
-		exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp"));
+		
+		
+		// If the security level is set to high
+		if($web_config['security_level'] == 20) {
+			
+			exec("chmod 751 ".escapeshellcmd($data["new"]["document_root"]."/"));
+			exec("chmod 751 ".escapeshellcmd($data["new"]["document_root"])."/*");
+			exec("chmod 710 ".escapeshellcmd($data["new"]["document_root"]."/web"));
+			
+			// make temp direcory writable for the apache user and the website user
+			exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp"));
+			
+			$command = 'usermod';
+			$command .= ' --groups sshusers';
+			$command .= ' '.escapeshellcmd($data["new"]["system_user"]);
+			exec($command);
+			
+			//* add the apache user to the client group
+			$app->system->add_user_to_group($groupname, escapeshellcmd($web_config['user']));
+			
+		// If the security Level is set to medium
+		} else {
+		
+			exec("chmod 755 ".escapeshellcmd($data["new"]["document_root"]."/"));
+			exec("chmod 755 ".escapeshellcmd($data["new"]["document_root"]."/*"));
+		
+			// make temp direcory writable for the apache user and the website user
+			exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp"));
+		}
 		
 		
 		// Create the vhost config file
@@ -446,7 +506,9 @@
 		
 		$vhost_data = $data["new"];
 		$vhost_data["web_document_root"] = $data["new"]["document_root"]."/web";
-		$vhost_data["web_document_root_www"] = "/var/www/".$data["new"]["domain"]."/web";
+		$vhost_data["web_document_root_www"] = $web_config["website_basedir"]."/".$data["new"]["domain"]."/web";
+		$vhost_data["web_basedir"] = $web_config["website_basedir"];
+		$vhost_data["security_level"] = $web_config["security_level"];
 		
 		// Check if a SSL cert exists
 		$ssl_dir = $data["new"]["document_root"]."/ssl";
@@ -471,14 +533,15 @@
 		// Rewrite rules
 		$rewrite_rules = array();
 		if($data["new"]["redirect_type"] != '') {
+			if(substr($data["new"]["redirect_path"],-1) != '/') $data["new"]["redirect_path"] .= '/';
 			$rewrite_rules[] = array(	'rewrite_domain' 	=> $data["new"]["domain"],
-										'rewrite_type' 		=> $data["new"]["redirect_type"],
+										'rewrite_type' 		=> ($data["new"]["redirect_type"] == 'no')?'':'['.$data["new"]["redirect_type"].']',
 										'rewrite_target' 	=> $data["new"]["redirect_path"]);
             
             switch($data["new"]["subdomain"]) {
             case 'www':
     			$rewrite_rules[] = array(	'rewrite_domain' 	=> 'www.'.$data["new"]["domain"],
-    										'rewrite_type' 		=> $data["new"]["redirect_type"],
+    										'rewrite_type' 		=> ($data["new"]["redirect_type"] == 'no')?'':'['.$data["new"]["redirect_type"].']',
     										'rewrite_target' 	=> $data["new"]["redirect_path"]);
                 break;
             case '*':
@@ -492,37 +555,39 @@
 		
 		// get alias domains (co-domains and subdomains)
 		$aliases = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$data["new"]["domain_id"]." AND active = 'y'");
-        switch($data["new"]["subdomain"]) {
+        $server_alias = array();
+		switch($data["new"]["subdomain"]) {
         case 'www':
-            $server_alias .= 'www.'.$data["new"]["domain"].' ';
+            $server_alias[] .= 'www.'.$data["new"]["domain"].' ';
             break;
         case '*':
-            $server_alias .= '*.'.$data["new"]["domain"].' ';    
+            $server_alias[] .= '*.'.$data["new"]["domain"].' ';    
             break;
         }
 		if(is_array($aliases)) {
 			foreach($aliases as $alias) {
                 switch($alias["subdomain"]) {
                 case 'www':
-                    $server_alias .= 'www.'.$alias["domain"].' '.$alias["domain"].' ';
+                    $server_alias[] .= 'www.'.$alias["domain"].' '.$alias["domain"].' ';
                     break;
                 case '*':
-                    $server_alias .= '*.'.$alias["domain"].' '.$alias["domain"].' ';    
+                    $server_alias[] .= '*.'.$alias["domain"].' '.$alias["domain"].' ';    
                     break;
                 default:
-                    $server_alias .= $alias["domain"].' ';            
+                    $server_alias[] .= $alias["domain"].' ';            
                     break;
                 }
 				$app->log("Add server alias: $alias[domain]",LOGLEVEL_DEBUG);
 				// Rewriting
 				if($alias["redirect_type"] != '') {
+					if(substr($data["new"]["redirect_path"],-1) != '/') $data["new"]["redirect_path"] .= '/';
 					$rewrite_rules[] = array(	'rewrite_domain' 	=> $alias["domain"],
-												'rewrite_type' 		=> $alias["redirect_type"],
+												'rewrite_type' 		=> ($alias["redirect_type"] == 'no')?'':'['.$alias["redirect_type"].']',
 												'rewrite_target' 	=> $alias["redirect_path"]);
                     switch($alias["subdomain"]) {
                     case 'www':
             			$rewrite_rules[] = array(	'rewrite_domain' 	=> 'www.'.$alias["domain"],
-            										'rewrite_type' 		=> $alias["redirect_type"],
+            										'rewrite_type' 		=> ($alias["redirect_type"] == 'no')?'':'['.$alias["redirect_type"].']',
             										'rewrite_target' 	=> $alias["redirect_path"]);
                         break;
                     case '*':
@@ -535,7 +600,24 @@
 				}
 			}
 		}
-		$tpl->setVar('alias',trim($server_alias));
+		
+		//* If we have some alias records
+		if(count($server_alias) > 0) {
+			$server_alias_str = '';
+			$n = 0;
+			
+			// begin a new ServerAlias line after 30 alias domains
+			foreach($server_alias as $tmp_alias) {
+				if($n % 30 == 0) $server_alias_str .= "\n    ServerAlias ";
+				$server_alias_str .= $tmp_alias;
+			}
+			unset($tmp_alias);
+			
+			$tpl->setVar('alias',trim($server_alias_str));
+		} else {
+			$tpl->setVar('alias','');
+		}
+		
 		if(count($rewrite_rules) > 0) {
 			$tpl->setVar('rewrite_enabled',1);
 		} else {
@@ -560,11 +642,13 @@
 			if (!is_dir($fastcgi_starter_path))
 			{
 				exec("mkdir -p ".escapeshellcmd($fastcgi_starter_path));
-				exec("chown ".$data["new"]["system_user"].":".$data["new"]["system_group"]." ".escapeshellcmd($fastcgi_starter_path));
+				//exec("chown ".$data["new"]["system_user"].":".$data["new"]["system_group"]." ".escapeshellcmd($fastcgi_starter_path));
 				
 				
 				$app->log("Creating fastcgi starter script directory: $fastcgi_starter_path",LOGLEVEL_DEBUG);
 			}
+			
+			exec("chown -R ".$data["new"]["system_user"].":".$data["new"]["system_group"]." ".escapeshellcmd($fastcgi_starter_path));
 			
 			$fcgi_tpl = new tpl();
 			$fcgi_tpl->newTemplate("php-fcgi-starter.master");
@@ -574,6 +658,7 @@
 			$fcgi_tpl->setVar('php_fcgi_children',$fastcgi_config["fastcgi_children"]);
 			$fcgi_tpl->setVar('php_fcgi_max_requests',$fastcgi_config["fastcgi_max_requests"]);
 			$fcgi_tpl->setVar('php_fcgi_bin',$fastcgi_config["fastcgi_bin"]);
+			$fcgi_tpl->setVar('security_level',$web_config["security_level"]);
 				
 			$fcgi_starter_script = escapeshellcmd($fastcgi_starter_path.$fastcgi_config["fastcgi_starter_script"]);
 			file_put_contents($fcgi_starter_script,$fcgi_tpl->grab());
@@ -602,7 +687,7 @@
 		{
 			//$cgi_config = $app->getconf->get_server_config($conf["server_id"], 'cgi');
 
-			$cgi_config["cgi_starter_path"] = "/var/www/php-cgi-scripts/[system_user]/";
+			$cgi_config["cgi_starter_path"] = $web_config["website_basedir"]."/php-cgi-scripts/[system_user]/";
 			$cgi_config["cgi_starter_script"] = "php-cgi-starter";
 			$cgi_config["cgi_bin"] = "/usr/bin/php-cgi";
 
@@ -625,6 +710,7 @@
 			// This will NOT work!
 			//$cgi_tpl->setVar('open_basedir', "/var/www/" . $data["new"]["domain"]);
 			$cgi_tpl->setVar('php_cgi_bin',$cgi_config["cgi_bin"]);
+			$cgi_tpl->setVar('security_level',$web_config["security_level"]);
 
 			$cgi_starter_script = escapeshellcmd($cgi_starter_path.$cgi_config["cgi_starter_script"]);
 			file_put_contents($cgi_starter_script,$cgi_tpl->grab());
@@ -669,8 +755,31 @@
 			$app->log("Removing File $vhost_file",LOGLEVEL_DEBUG);
 		}
 		
+		//* Create .htaccess and .htpasswd file for website statistics
+		if(!is_file($data["new"]["document_root"].'/web/stats/.htaccess') or $data["old"]["document_root"] != $data["new"]["document_root"]) {
+			if(!is_dir($data["new"]["document_root"].'/web/stats')) mkdir($data["new"]["document_root"].'/web/stats');
+			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data["new"]["document_root"]."/.htpasswd_stats\n<limit GET PUT POST>\nrequire valid-user\n</limit>";
+			file_put_contents($data["new"]["document_root"].'/web/stats/.htaccess',$ht_file);
+			chmod($data["new"]["document_root"].'/web/stats/.htaccess',0664);
+			unset($ht_file);
+		}
+		
+		if(!is_file($data["new"]["document_root"].'/.htpasswd_stats') || $data["new"]["stats_password"] != $data["old"]["stats_password"]) {
+			if(trim($data["new"]["stats_password"]) != '') {
+				$htp_file = 'admin:'.trim($data["new"]["stats_password"]);
+				file_put_contents($data["new"]["document_root"].'/.htpasswd_stats',$htp_file);
+				chmod($data["new"]["document_root"].'/.htpasswd_stats',0664);
+				unset($htp_file);
+			}
+		}
+		
+		
+		
 		// request a httpd reload when all records have been processed
 		$app->services->restartServiceDelayed('httpd','reload');
+		
+		//* Unset action to clean it for next processed vhost.
+		$this->action = '';
 		
 	}
 	
@@ -721,7 +830,7 @@
 			if ($data["old"]["php"] == "cgi")
 			{
 				// TODO: fetch the date from the server-settings
-				$web_config["cgi_starter_path"] = "/var/www/php-cgi-scripts/[system_user]/";
+				$web_config["cgi_starter_path"] = $web_config["website_basedir"]."/php-cgi-scripts/[system_user]/";
 
 				$cgi_starter_path = str_replace("[system_user]",$data["old"]["system_user"],$web_config["cgi_starter_path"]);
 				if (is_dir($cgi_starter_path))

--
Gitblit v1.9.1