From 2ebadd76247dd1d985ad099edd6ca61fd0a8ea97 Mon Sep 17 00:00:00 2001
From: jwarnier <jwarnier@ispconfig3>
Date: Fri, 17 Sep 2010 20:30:15 -0400
Subject: [PATCH] improve maildirmake and remove yet other execs

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

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 2f106ef..8832d98 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -415,9 +415,9 @@
 				}
 				else {
 					exec("cp /usr/local/ispconfig/server/conf/index/standard_index.html_".substr(escapeshellcmd($conf["language"]),0,2)." ".escapeshellcmd($data["new"]["document_root"])."/web/index.html");
-					exec("cp /usr/local/ispconfig/server/conf/index/favicon.ico ".escapeshellcmd($data["new"]["document_root"])."/web/");
-					exec("cp /usr/local/ispconfig/server/conf/index/robots.txt ".escapeshellcmd($data["new"]["document_root"])."/web/");
-					exec("cp /usr/local/ispconfig/server/conf/index/.htaccess ".escapeshellcmd($data["new"]["document_root"])."/web/");
+					if(is_file('/usr/local/ispconfig/server/conf/index/favicon.ico')) exec("cp /usr/local/ispconfig/server/conf/index/favicon.ico ".escapeshellcmd($data["new"]["document_root"])."/web/");
+					if(is_file('/usr/local/ispconfig/server/conf/index/robots.txt')) exec("cp /usr/local/ispconfig/server/conf/index/robots.txt ".escapeshellcmd($data["new"]["document_root"])."/web/");
+					if(is_file('/usr/local/ispconfig/server/conf/index/.htaccess')) exec("cp /usr/local/ispconfig/server/conf/index/.htaccess ".escapeshellcmd($data["new"]["document_root"])."/web/");
 				}
 			}
 			exec("chmod -R a+r ".escapeshellcmd($data["new"]["document_root"])."/web/");
@@ -489,7 +489,7 @@
 			$this->_exec("chmod 751 ".escapeshellcmd($data["new"]["document_root"])."/*");
 			$this->_exec("chmod 710 ".escapeshellcmd($data["new"]["document_root"]."/web"));
 
-			// make temp direcory writable for the apache user and the website user
+			// make temp directory writable for the apache and website users
 			$this->_exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp"));
 
 			$command = 'usermod';
@@ -534,7 +534,7 @@
 			$this->_exec("chmod 755 ".escapeshellcmd($data["new"]["document_root"]."/*"));
 			$this->_exec("chown root:root ".escapeshellcmd($data["new"]["document_root"]."/"));
 
-			// make temp direcory writable for the apache user and the website user
+			// make temp directory writable for the apache and website users
 			$this->_exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp"));
 		}
 
@@ -825,6 +825,10 @@
 		}
 
 		$vhost_file = escapeshellcmd($web_config["vhost_conf_dir"].'/'.$data["new"]["domain"].'.vhost');
+		//* Make a backup copy of vhost file
+		copy($vhost_file,$vhost_file.'~');
+		
+		//* Write vhost file
 		file_put_contents($vhost_file,$tpl->grab());
 		$app->log("Writing the vhost file: $vhost_file",LOGLEVEL_DEBUG);
 		unset($tpl);
@@ -879,14 +883,36 @@
 		if($data["new"]["stats_type"] == 'awstats' && $data["new"]["type"] == "vhost") {
 			$this->awstats_update($data,$web_config);
 		}
+		
+		if($web_config['check_apache_config'] == 'y') {
+			//* Test if apache starts with the new configuration file
+			$apache_online_status_before_restart = $this->_checkTcp('localhost',80);
+			$app->log("Apache status is: ".$apache_online_status_before_restart,LOGLEVEL_DEBUG);
 
-
-		if($apache_chrooted) {
-			$app->services->restartServiceDelayed('httpd','restart');
+			$app->services->restartService('httpd','restart');
+		
+			//* Check if apache restarted successfully if it was online before
+			$apache_online_status_after_restart = $this->_checkTcp('localhost',80);
+			$app->log("Apache online status after restart is: ".$apache_online_status_after_restart,LOGLEVEL_DEBUG);
+			if($apache_online_status_before_restart && !$apache_online_status_after_restart) {
+				$app->log("Apache did not restart after the configuration change for website ".$data["new"]["domain"].' Reverting the configuration. Saved not working config as '.$vhost_file.'.err',LOGLEVEL_WARN);
+				copy($vhost_file,$vhost_file.'.err');
+				copy($vhost_file.'~',$vhost_file);
+				$app->services->restartService('httpd','restart');
+			}
 		} else {
-			// request a httpd reload when all records have been processed
-			$app->services->restartServiceDelayed('httpd','reload');
+			//* We do not check the apache config after changes (is faster)
+			if($apache_chrooted) {
+				$app->services->restartServiceDelayed('httpd','restart');
+			} else {
+				// request a httpd reload when all records have been processed
+				$app->services->restartServiceDelayed('httpd','reload');
+			}
 		}
+		
+		// Remove the backup copy of the config file.
+		unlink($vhost_file.'~');
+		
 
 		//* Unset action to clean it for next processed vhost.
 		$this->action = '';
@@ -1283,8 +1309,20 @@
 		$app->log("exec: ".$command,LOGLEVEL_DEBUG);
 		exec($command);
 	}
+	
+	private function _checkTcp ($host,$port) {
+
+		$fp = @fsockopen ($host, $port, $errno, $errstr, 2);
+
+		if ($fp) {
+			fclose($fp);
+			return true;
+		} else {
+			return false;
+		}
+	}
 
 
 } // end class
 
-?>
\ No newline at end of file
+?>

--
Gitblit v1.9.1