From cb8c86a5eb7b70feb29a2ef7503aae497d40bf57 Mon Sep 17 00:00:00 2001
From: wyrie <wyrie@ispconfig3>
Date: Wed, 02 Dec 2009 06:57:59 -0500
Subject: [PATCH] Implemented: FS#973 - Gentoo support for installer. Fixed FS#974 - Directory mode for firewall configuration

---
 install/lib/installer_base.lib.php |  117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 115 insertions(+), 2 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index f671db1..7f5046b 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -737,7 +737,7 @@
 		
 		$config_dir = $conf['pureftpd']['config_dir'];
 
-		//* configure pam for SMTP authentication agains the ispconfig database
+		//* configure pure-ftpd for MySQL authentication against the ispconfig database
 		$configfile = 'db/mysql.conf';
 		if(is_file("$config_dir/$configfile")){
             copy("$config_dir/$configfile", "$config_dir/$configfile~");
@@ -903,7 +903,7 @@
   		
 		if(is_dir("/etc/Bastille.backup")) caselog("rm -rf /etc/Bastille.backup", __FILE__, __LINE__);
 		if(is_dir("/etc/Bastille")) caselog("mv -f /etc/Bastille /etc/Bastille.backup", __FILE__, __LINE__);
-  		@mkdir("/etc/Bastille", octdec($directory_mode));
+  		@mkdir("/etc/Bastille", 0700);
   		if(is_dir("/etc/Bastille.backup/firewall.d")) caselog("cp -pfr /etc/Bastille.backup/firewall.d /etc/Bastille/", __FILE__, __LINE__);
   		caselog("cp -f tpl/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
   		caselog("chmod 644 /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
@@ -1383,6 +1383,119 @@
 		
 	}
 	
+	/**
+	 * Helper function - get the path to a template file based on
+	 * the local part of the filename. Checks first for the existence
+	 * of a distribution specific file and if not found looks in the
+	 * base template folder. Optionally the behaviour can be changed
+	 * by setting the 2nd parameter which will fetch the contents
+	 * of the template file and return it instead of the path. The 3rd
+	 * parameter further extends this behaviour by filtering the contents
+	 * by inserting the ispconfig database credentials using the {} placeholders.
+	 * 
+	 * @param string $tLocal local part of filename
+	 * @param bool $tRf
+	 * @param bool $tDBCred
+	 * @return string Relative path to the chosen template file
+	 */
+	protected function get_template_file($tLocal, $tRf=false, $tDBCred=false)
+	{
+		global $conf, $dist;
+		
+		$final_path = '';
+		$dist_template = 'dist/tpl/'.strtolower($dist['name'])."/$tLocal.master";
+		if (file_exists($dist_template)) {
+			$final_path = $dist_template;
+		} else {
+			$final_path = "tpl/$tLocal.master";
+		}
+		
+		if (!$tRf) {
+			return $final_path;
+		} else {
+			return (!$tDBCred) ? rf($final_path) : $this->insert_db_credentials(rf($final_path));
+		}
+	}
+	
+	/**
+	 * Helper function - writes the contents to a config file
+	 * and performs a backup if the file exist. Additionally
+	 * if the file exists the new file will be given the
+	 * same rights and ownership as the original. Optionally the
+	 * rights and/or ownership can be overriden by appending umask,
+	 * user and group to the parameters. Providing only uid and gid
+	 * values will result in only a chown.   
+	 * 
+	 * @param $tConf
+	 * @param $tContents
+	 * @return bool
+	 */
+	protected function write_config_file($tConf, $tContents)
+	{
+		// Backup config file before writing new contents and stat file
+		if ( is_file($tConf) ) 
+		{
+			$stat = exec('stat -c \'%a %U %G\' '.escapeshellarg($tConf), $output, $res);
+			if ($res == 0) { // stat successfull
+				list($access, $user, $group) = split(" ", $stat);
+			}
+			
+			if ( copy($tConf, $tConf.'~') ) {
+				exec('chmod 400 '.$tConf.'~');
+			}
+		}
+		
+		wf($tConf, $tContents); // write file
+		
+		if (func_num_args() >= 4) // override rights and/or ownership
+		{
+			$args = func_get_args();
+			$output = array_slice($args, 2);
+			
+			switch (sizeof($output)) {
+				case 3:
+					$umask = array_shift($output);
+					if (is_numeric($umask) && preg_match('/^0?[0-7]{3}$/', $umask)) {
+						$access = $umask;
+					}
+				case 2:
+					if (is_user($output[0]) && is_group($output[1])) {
+						list($user,$group) = $output;
+					}
+					break;
+			}
+		}
+		
+		if (!empty($user) && !empty($group)) {
+			exec("chown $user:$group $tConf");
+		}
+		
+		if (!empty($access)) {
+			exec("chmod $access $tConf");
+		}
+	}
+	
+	/**
+	 * Helper function - filter the contents of a config
+	 * file by inserting the common ispconfig database
+	 * credentials.
+	 * 
+	 * @param $tContents
+	 * @return string
+	 */
+	protected function insert_db_credentials($tContents)
+	{
+		global $conf;
+		
+		$tContents = str_replace('{mysql_server_ispconfig_user}', $conf["mysql"]["ispconfig_user"], $tContents);
+		$tContents = str_replace('{mysql_server_ispconfig_password}', $conf["mysql"]["ispconfig_password"], $tContents);
+		$tContents = str_replace('{mysql_server_database}', $conf["mysql"]["database"], $tContents);
+		$tContents = str_replace('{mysql_server_ip}', $conf["mysql"]["ip"], $tContents);
+		$tContents = str_replace('{mysql_server_host}',$conf['mysql']['host'], $tContents);
+		$tContents = str_replace('{mysql_server_port}',$conf["mysql"]["port"], $tContents);
+		
+		return $tContents;
+	}
 }
 
 ?>
\ No newline at end of file

--
Gitblit v1.9.1