From b9a3ef486ebcde18a5ade37865ff8f397185d24f Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Sun, 24 Jul 2016 05:30:59 -0400
Subject: [PATCH] Fixed #3979 Mailbox users unable to save autoresponders

---
 install/dist/lib/gentoo.lib.php |  121 ++++++++++++++++++++++++++--------------
 1 files changed, 79 insertions(+), 42 deletions(-)

diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php
index 6615dac..7fdec46 100644
--- a/install/dist/lib/gentoo.lib.php
+++ b/install/dist/lib/gentoo.lib.php
@@ -135,6 +135,26 @@
 		touch($config_dir.'/nested_header_checks');
 		touch($config_dir.'/body_checks');
 
+		//* Create auxillary postfix conf files
+		$configfile = 'helo_access';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+			chmod($config_dir.'/'.$configfile.'~', 0400);
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = strtr($content, $postconf_placeholders);
+		# todo: look up this server's ip addrs and loop through each
+		# todo: look up domains hosted on this server and loop through each
+		wf($config_dir.'/'.$configfile, $content);
+
+		$configfile = 'blacklist_helo';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+			chmod($config_dir.'/'.$configfile.'~', 0400);
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = strtr($content, $postconf_placeholders);
+		wf($config_dir.'/'.$configfile, $content);
 
 		//* Make a backup copy of the main.cf file
 		copy($config_dir.'/main.cf', $config_dir.'/main.cf~');
@@ -255,6 +275,8 @@
 		global $conf;
 
 		$virtual_transport = 'dovecot';
+
+		$configure_lmtp = false;
 		
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
@@ -264,30 +286,28 @@
 			
 			if(isset($ini_array['mail']['mailbox_virtual_uidgid_maps']) && $ini_array['mail']['mailbox_virtual_uidgid_maps'] == 'y') {
 				$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
+				$configure_lmtp = true;
 			}
 		}
 
-		$config_dir = $conf['dovecot']['config_dir'];
-
-		$configfile = $conf['postfix']['config_dir'].'/master.cf';
-
-		if(is_file($configfile)) {
-			copy($configfile, $configfile.'~2');
-		}
-		if(is_file($configfile.'~2')) {
-			chmod($configfile.'~2', 0400);
-		}
+		$config_dir = $conf['postfix']['config_dir'];
 
 		//* Configure master.cf and add a line for deliver
-		$content = rf($configfile);
-
-		if(!stristr($content, 'dovecot/deliver')) {
-			$deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DROhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}';
-			af($conf['postfix']['config_dir'].'/master.cf', $deliver_content);
+		if(!$this->get_postfix_service('dovecot', 'unix')) {
+			//* backup
+			if(is_file($config_dir.'/master.cf')){
+				copy($config_dir.'/master.cf', $config_dir.'/master.cf~2');
+			}
+			if(is_file($config_dir.'/master.cf~')){
+				chmod($config_dir.'/master.cf~2', 0400);
+			}
+			//* Configure master.cf and add a line for deliver
+			$content = rf($conf["postfix"]["config_dir"].'/master.cf');
+			$deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DROhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n";
+			af($config_dir.'/master.cf', $deliver_content);
+			unset($content);
+			unset($deliver_content);
 		}
-		unset($content);
-		unset($deliver_content);
-		unset($configfile);
 
 		//* Reconfigure postfix to use dovecot authentication
 		$postconf_commands = array (
@@ -307,14 +327,24 @@
 			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		}
 
+		$config_dir = $conf['dovecot']['config_dir'];
 		//* copy dovecot.conf
 		$configfile = $config_dir.'/dovecot.conf';
 		$content = $this->get_template_file('dovecot.conf', true);
 		$this->write_config_file($configfile, $content);
 
+		//* dovecot-lmtpd
+		if($configure_lmtp) {
+			replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
+		}
+
 		//* dovecot-sql.conf
 		$configfile = $config_dir.'/dovecot-sql.conf';
 		$content = $this->get_template_file('debian_dovecot-sql.conf', true, true);
+		# enable iterate_query for dovecot2
+		if(version_compare($dovecot_version,2, '>=')) {
+			$content = str_replace('# iterate_query', 'iterate_query', $content);
+		}
 		$this->write_config_file($configfile, $content);
 	}
 
@@ -379,27 +409,33 @@
 			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		}
 
-        // Append the configuration for amavisd to the master.cf file
-		$content = rf($conf['postfix']['config_dir'].'/master.cf');
-		// Only add the content if we had not addded it before
-		if(!preg_match('/^amavis\s+unix\s+/m', $content)) {
-			unset($content);
-			$content = $this->get_template_file('master_cf_amavis', true);
-			af($conf['postfix']['config_dir'].'/master.cf', $content);
-			$content = rf($conf['postfix']['config_dir'].'/master.cf');
+		$config_dir = $conf['postfix']['config_dir'];
+
+		// Adding amavis-services to the master.cf file if the service does not already exists
+		$add_amavis = !$this->get_postfix_service('amavis','unix');
+		$add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
+		$add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
+
+		if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) {
+			//* backup master.cf
+			if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
+			// adjust amavis-config
+			if($add_amavis) {
+				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
+				af($config_dir.'/master.cf', $content);
+				unset($content);
+			}
+			if ($add_amavis_10025) {
+				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
+				af($config_dir.'/master.cf', $content);
+				unset($content);
+			}
+			if ($add_amavis_10027) {
+				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
+				af($config_dir.'/master.cf', $content);
+				unset($content);
+			}
 		}
-		if(!preg_match('/^127.0.0.1:10025\s+/m', $content)) {
- 			unset($content);
-            $content = $this->get_template_file('master_cf_amavis10025', true);
-			af($conf['postfix']['config_dir'].'/master.cf', $content);
-			$content = rf($conf['postfix']['config_dir'].'/master.cf');
-		}
-		if(!preg_match('/^127.0.0.1:10027\s+/m', $content)) {
-			unset($content);
-			$content = $this->get_template_file('master_cf_amavis10027', true);
-			af($conf['postfix']['config_dir'].'/master.cf', $content);
-		}
-		unset($content);
 
 		//* Add the clamav user to the amavis group
 		exec('usermod -a -G amavis clamav');
@@ -459,9 +495,6 @@
 		if(!$this->db->query($query, $conf['powerdns']['database'], $conf['mysql']['ispconfig_user'], 'localhost')) {
 			$this->error('Unable to create user for powerdns database Error: '.$this->db->errorMessage);
 		}
-
-		//* Reload database privelages
-		$this->db->query('FLUSH PRIVILEGES;');
 
 		//* load the powerdns databse dump
 		if($conf['mysql']['admin_password'] == '') {
@@ -743,7 +776,11 @@
 			//$content = str_replace('{fpm_port}', ($conf['nginx']['php_fpm_start_port']+1), $content);
 			$content = str_replace('{fpm_socket}', $fpm_socket, $content);
 			$content = str_replace('{cgi_socket}', $cgi_socket, $content);
-
+			
+			// SSL in apps vhost is off by default. Might change later.
+			$content = str_replace('{ssl_on}', 'off', $content);
+			$content = str_replace('{ssl_comment}', '#', $content);
+			
 			wf($vhost_conf_dir.'/apps.vhost', $content);
 
 			// PHP-FPM

--
Gitblit v1.9.1