From 392450ffb412d5fb81ebab0c1e50ac8ea421080a Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Wed, 10 Dec 2008 11:42:03 -0500
Subject: [PATCH] - Improved installer and updater for multiserver mode. Modules and plugins were only configured if the selected service is available on the server.

---
 install/lib/installer_base.lib.php |   97 +++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 78 insertions(+), 19 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index c50c119..09086b1 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -112,9 +112,27 @@
 	}
 	*/
 	
+	//** Detect installed applications
+	public function find_installed_apps() {
+		global $conf;
+		
+		if(is_installed('mysql') || is_installed('mysqld')) $conf['mysql']['installed'] = true;
+		if(is_installed('postfix')) $conf['postfix']['installed'] = true;
+		if(is_installed('apache') || is_installed('apache2') || is_installed('httpd')) $conf['apache']['installed'] = true;
+		if(is_installed('getmail')) $conf['getmail']['installed'] = true;
+		if(is_installed('couriertcpd')) $conf['courier']['installed'] = true;
+		if(is_installed('saslsauthd')) $conf['saslauthd']['installed'] = true;
+		if(is_installed('amavisd-new')) $conf['amavis']['installed'] = true;
+		if(is_installed('clamdscan')) $conf['clamav']['installed'] = true;
+		if(is_installed('pure-ftpd') || is_installed('pure-ftpd-wrapper')) $conf['pureftpd']['installed'] = true;
+		if(is_installed('mydns') || is_installed('mydns-ng')) $conf['mydns']['installed'] = true;
+		if(is_installed('jk_chrootsh')) $conf['jailkit']['installed'] = true;
+		
+		
+	}
+	
 	/** Create the database for ISPConfig */ 
-	public function configure_database()
-    {
+	public function configure_database() {
 		global $conf;
 		
 		//** Create the database
@@ -174,19 +192,32 @@
 		//* Set the database name in the DB library
 		$this->db->dbName = $conf['mysql']['database'];
 		
-		$server_ini_content = rf("tpl/server.ini.master");
+		$tpl_ini_array = ini_to_array(rf('tpl/server.ini.master'));
+		
+		// TODO: Update further distribution specific parameters for server config here
+		$tpl_ini_array['web']['vhost_conf_dir'] = $conf['apache']['vhost_conf_dir'];
+		$tpl_ini_array['web']['vhost_conf_enabled_dir'] = $conf['apache']['vhost_conf_enabled_dir'];
+		
+		$server_ini_content = array_to_ini($tpl_ini_array);
 		$server_ini_content = mysql_real_escape_string($server_ini_content);
+		
+		$mail_server_enabled = ($conf['services']['mail'])?1:0;
+		$web_server_enabled = ($conf['services']['web'])?1:0;
+		$dns_server_enabled = ($conf['services']['dns'])?1:0;
+		$file_server_enabled = ($conf['services']['file'])?1:0;
+		$db_server_enabled = ($conf['services']['db'])?1:0;
+		$vserver_server_enabled = ($conf['services']['vserver'])?1:0;
 		
 		if($conf['mysql']['master_slave_setup'] == 'y') {
 			
 			//* Insert the server record in master DB
-			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', 1, 1, 1, 1, 1, 1, '$server_ini_content', 0, 1);";
+			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1);";
 			$this->dbmaster->query($sql);
 			$conf['server_id'] = $this->dbmaster->insertID();
 			$conf['server_id'] = $conf['server_id'];
 			
 			//* Insert the same record in the local DB
-			$sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES ('".$conf['server_id']."',1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', 1, 1, 1, 1, 1, 1, '$server_ini_content', 0, 1);";
+			$sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES ('".$conf['server_id']."',1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1);";
 			$this->db->query($sql);
 			
 			//* insert the ispconfig user in the remote server
@@ -210,7 +241,7 @@
 		
 		} else {
 			//* Insert the server, if its not a mster / slave setup
-			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', 1, 1, 1, 1, 1, 1, '$server_ini_content', 0, 1);";
+			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1);";
 			$this->db->query($sql);
 			$conf['server_id'] = $this->db->insertID();
 			$conf['server_id'] = $conf['server_id'];
@@ -305,10 +336,10 @@
 		
 		//* Creating virtual mail user and group
 		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 		$command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m';
-		caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");		
+		if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");		
 
 		$postconf_commands = array (
 			'myhostname = '.$conf['hostname'],
@@ -587,7 +618,7 @@
 		if(!is_dir($config_dir)) exec("mkdir -p ".escapeshellcmd($config_dir));
 
 		$command = "useradd -d $config_dir getmail";
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		if(!is_user('getmail')) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		
 		$command = "chown -R getmail $config_dir";
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
@@ -729,10 +760,10 @@
 		
 		//* Create a ISPConfig user and group
 		$command = 'groupadd ispconfig';
-		if(!is_group('vacp')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		if(!is_group('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		
 		$command = "useradd -g ispconfig -d $install_dir ispconfig";
-		if(!is_user('vacp')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		if(!is_user('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		
 		//* copy the ISPConfig interface part
 		$command = "cp -rf ../interface $install_dir";
@@ -793,11 +824,17 @@
 		if (is_dir($dir)) {
 			if ($dh = opendir($dir)) {
 				while (($file = readdir($dh)) !== false) {
-					if($file != '.' && $file != '..') {
-						if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
-						if (strpos($file, '_core_module') !== false) {
-							if(!@is_link($install_dir.'/server/mods-core/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
+					if($file != '.' && $file != '..' && substr($file,-8,8) == '.inc.php') {
+						include_once($install_dir.'/server/mods-available/'.$file);
+						$module_name = substr($file,0,-8);
+						$tmp = new $module_name;
+						if($tmp->onInstall()) {
+							if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
+							if (strpos($file, '_core_module') !== false) {
+								if(!@is_link($install_dir.'/server/mods-core/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
+							}
 						}
+						unset($tmp);
 					}
 				}
 				closedir($dh);
@@ -808,17 +845,39 @@
 		if (is_dir($dir)) {
 			if ($dh = opendir($dir)) {
 				while (($file = readdir($dh)) !== false) {
-					if($file != '.' && $file != '..') {
-						if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
-						if (strpos($file, '_core_plugin') !== false) {
-							if(!@is_link($install_dir.'/server/plugins-core/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
+					if($file != '.' && $file != '..' && substr($file,-8,8) == '.inc.php') {
+						include_once($install_dir.'/server/plugins-available/'.$file);
+						$plugin_name = substr($file,0,-8);
+						$tmp = new $plugin_name;
+						if($tmp->onInstall()) {
+							if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
+							if (strpos($file, '_core_plugin') !== false) {
+								if(!@is_link($install_dir.'/server/plugins-core/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
+							}
 						}
+						unset($tmp);
 					}
 				}
 				closedir($dh);
 			}
 		}
 		
+		// Update the server config
+		$mail_server_enabled = ($conf['services']['mail'])?1:0;
+		$web_server_enabled = ($conf['services']['web'])?1:0;
+		$dns_server_enabled = ($conf['services']['dns'])?1:0;
+		$file_server_enabled = ($conf['services']['file'])?1:0;
+		$db_server_enabled = ($conf['services']['db'])?1:0;
+		$vserver_server_enabled = ($conf['services']['vserver'])?1:0;
+		$sql = "UPDATE `server` SET mail_server = '$mail_server_enabled', web_server = '$web_server_enabled', dns_server = '$dns_server_enabled', file_server = '$file_server_enabled', db_server = '$db_server_enabled', vserver_server = '$vserver_server_enabled' WHERE server_id = ".intval($conf['server_id']);
+		
+		if($conf['mysql']['master_slave_setup'] == 'y') {
+			$this->dbmaster->query($sql);
+		} else {
+			$this->db->query($sql);
+		}
+		
+		
 		//* Chmod the files
 		$command = "chmod -R 750 $install_dir";
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");

--
Gitblit v1.9.1