From 0b6b1e4e64995187662e81e37f75fa8eb7a934d1 Mon Sep 17 00:00:00 2001
From: fantu <fantu@ispconfig3>
Date: Sat, 20 Dec 2008 17:56:12 -0500
Subject: [PATCH] fix in the ip address validator and one test

---
 install/lib/installer_base.lib.php |  125 +++++++++++++++++++++++++++++++++--------
 1 files changed, 100 insertions(+), 25 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index c50c119..2a6cca0 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -35,7 +35,7 @@
 	var $db;
 	public $conf;
 	public $install_ispconfig_interface = true;
-	
+	public $is_update = false; // true if it is an update, falsi if it is a new install
 
 
     public function __construct()
@@ -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
@@ -141,6 +159,11 @@
 			if(count($db_tables) == 0) {
 				$this->error('Unable to load SQL-Dump into database table.');
 			}
+			
+			//* Load system.ini into the sys_ini table
+			$system_ini = $this->db->quote(rf('tpl/system.ini.master'));
+			$this->db->query("UPDATE sys_ini SET config = '$system_ini' WHERE sysini_id = 1");
+			
 		}
 	}
 	
@@ -174,35 +197,54 @@
 		//* 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
 			$from_host = $conf['hostname'];
+			$from_ip = gethostbyname($conf['hostname']);
 			
 			//* username for the ispconfig user
 			$conf['mysql']['master_ispconfig_user'] = 'ispconfigserver'.$conf['server_id'];
 		
-			//* Delete ISPConfig user in the local database, in case that it exists
+			//* Delete ISPConfig user in the master database, in case that it exists
 			$this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_host."';");
 			$this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_host."';");
+			$this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_ip."';");
+			$this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_ip."';");
 			$this->dbmaster->query('FLUSH PRIVILEGES;');
 		
 			//* Create the ISPConfig database user in the local database
         	$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['master_database'].".* "
                 	."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$from_host."' "
+                	."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
+			$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['master_database'].".* "
+                	."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$from_ip."' "
                 	."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
 			if(!$this->dbmaster->query($query)) {
 				$this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
@@ -210,7 +252,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 +347,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 +629,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");
@@ -683,9 +725,15 @@
     		$tcp_public_services = trim(str_replace(',',' ',$row["tcp_port"]));
     		$udp_public_services = trim(str_replace(',',' ',$row["udp_port"]));
   		} else {
-    		$tcp_public_services = '21 22 25 53 80 110 443 8080 10000';
+    		$tcp_public_services = '21 22 25 53 80 110 443 3306 8080 10000';
     		$udp_public_services = '53';
   		}
+		
+		if(!stristr($tcp_public_services, $conf['apache']['vhost_port'])) {
+			$tcp_public_services .= ' '.intval($conf['apache']['vhost_port']);
+			if($row["tcp_port"] != '') $this->db->query("UPDATE firewall SET tcp_port = tcp_port + ',".intval($conf['apache']['vhost_port'])."' WHERE server_id = ".intval($conf['server_id']));
+		}
+		
   		$content = str_replace("{TCP_PUBLIC_SERVICES}", $tcp_public_services, $content);
   		$content = str_replace("{UDP_PUBLIC_SERVICES}", $udp_public_services, $content);
 
@@ -729,10 +777,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 +841,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,16 +862,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);
+			$this->db->query($sql);
+		} else {
+			$this->db->query($sql);
+		}
+		
 		
 		//* Chmod the files
 		$command = "chmod -R 750 $install_dir";
@@ -868,13 +945,11 @@
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		
 		//* Copy the ISPConfig vhost for the controlpanel
-        // TODO: These are missing! should they be "vhost_dist_*_dir" ?
         $vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
         $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
         
         
         // Dont just copy over the virtualhost template but add some custom settings
-         
         $content = rf("tpl/apache_ispconfig.vhost.master");
 		$content = str_replace('{vhost_port}', $conf['apache']['vhost_port'], $content);
 		
@@ -889,7 +964,7 @@
 		
 		//copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
 		//* and create the symlink
-		if($this->install_ispconfig_interface == true) {
+		if($this->install_ispconfig_interface == true && $this->is_update == false) {
 			if(@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) unlink("$vhost_conf_enabled_dir/ispconfig.vhost");
 			if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) {
 				exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");

--
Gitblit v1.9.1