diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index cc234f132e1fb4a66f4d7e5a1b13866617f4bd88..a8e90f189b47e43a25cfa02e40ace9c67c984733 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -33,11 +33,16 @@ class installer extends installer_base {
public function configure_dovecot()
{
global $conf;
-
+
$virtual_transport = 'dovecot';
$configure_lmtp = false;
-
+
+ // use lmtp if installed
+ if($configure_lmtp = is_file('/usr/lib/dovecot/lmtp')) {
+ $virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
+ }
+
// check if virtual_transport must be changed
if ($this->is_update) {
$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
@@ -138,7 +143,7 @@ class installer extends installer_base {
}
//remove #2.3+ comment
$content = file_get_contents($config_dir.'/'.$configfile);
- $content = str_replace('#2.3+','',$content);
+ $content = str_replace('#2.3+ ','',$content);
file_put_contents($config_dir.'/'.$configfile,$content);
unset($content);
@@ -155,11 +160,20 @@ class installer extends installer_base {
}
}
+ $dovecot_protocols = 'imap pop3';
+
//* dovecot-lmtpd
if($configure_lmtp) {
- replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
+ $dovecot_protocols .= ' lmtp';
+ }
+
+ //* dovecot-managesieved
+ if(is_file('/usr/lib/dovecot/managesieve')) {
+ $dovecot_protocols .= ' sieve';
}
+ replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', "protocols = $dovecot_protocols", 1, 0);
+
//* dovecot-sql.conf
$configfile = 'dovecot-sql.conf';
if(is_file($config_dir.'/'.$configfile)){
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 02ebba28503541ac5c4db11d3508e7cc57b6a850..ea4e563a6a4bf9e0c849495925060820588b644d 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -471,29 +471,38 @@ function rf($file){
}
function wf($file, $content){
- mkdirs(dirname($file));
+ if(!$ret_val = mkdirs(dirname($file))) return false;
if(!$fp = fopen($file, 'wb')){
ilog('WARNING: could not open file '.$file);
+ // implicitly returned false because the following fwrite and fclose both fail,
+ // but to be explicit:
+ $ret_val = false;
}
- fwrite($fp, $content);
- fclose($fp);
+ fwrite($fp, $content) or $ret_val = false;
+ fclose($fp) or $ret_val = false;
+ return $ret_val;
}
function af($file, $content){
- mkdirs(dirname($file));
+ if(!$ret_val = mkdirs(dirname($file))) return false;
if(!$fp = fopen($file, 'ab')){
ilog('WARNING: could not open file '.$file);
+ $ret_val = false;
}
- fwrite($fp, $content);
- fclose($fp);
+ fwrite($fp, $content) or $ret_val = false;
+ fclose($fp) or $ret_val = false;
+ return $ret_val;
}
function aftsl($file, $content){
+ $ret_val = true;
if(!$fp = fopen($file, 'ab')){
ilog('WARNING: could not open file '.$file);
+ $ret_val = false;
}
- fwrite($fp, $content);
- fclose($fp);
+ fwrite($fp, $content) or $ret_val = false;
+ fclose($fp) or $ret_val = false;
+ return $ret_val;
}
function unix_nl($input){
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index e5ac1428d8f7cc817c6a36f3f274c020b4ed7af3..5ca16cc6741e0ef483e8139ed849904ca1198bb4 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -864,7 +864,7 @@ class installer_base {
exec ("postconf -M $service.$type 2> /dev/null", $out, $ret);
}
$postfix_service = @($out[0]=='')?false:true;
- } else { //* fallback - Postfix < 2.9
+ } else { //* fallback - Postfix < 2.9
$content = rf($conf['postfix']['config_dir'].'/master.cf');
$regex = "/^((?!#)".$service.".*".$type.".*)$/m";
$postfix_service = @(preg_match($regex, $content))?true:false;
@@ -873,6 +873,68 @@ class installer_base {
return $postfix_service;
}
+ public function remove_postfix_service( $service, $type ) {
+ global $conf;
+
+ // nothing to do if the service isn't even defined.
+ if (! $this->get_postfix_service( $service, $type ) ) {
+ return true;
+ }
+
+ $postfix_version = `postconf -d mail_version 2>/dev/null`;
+ $postfix_version = preg_replace( '/mail_version\s*=\s*(.*)\s*/', '$1', $postfix_version );
+
+ if ( version_compare( $postfix_version, '2.11', '>=' ) ) {
+
+ exec("postconf -X -M $service/$type 2> /dev/null", $out, $ret);
+
+ # reduce 3 or more newlines to 2
+ $content = rf($conf['postfix']['config_dir'].'/master.cf');
+ $content = preg_replace( '/(\r?\n){3,}/', '$1$1', $content );
+ wf( $conf['postfix']['config_dir'].'/master.cf', $content );
+
+ } else { //* fallback - Postfix < 2.11
+
+ if ( ! $cf = fopen( $conf['postfix']['config_dir'].'/master.cf', 'r' ) ) {
+ return false;
+ }
+
+ $out = "";
+ $reading_service = false;
+
+ while ( !feof( $cf ) ) {
+ $line = fgets( $cf );
+
+ if ( $reading_service ) {
+ # regex matches a new service or "empty" (whitespace) line
+ if ( preg_match( '/^([^\s#]+.*|\s*)$/', $line ) &&
+ ! preg_match( '/^'.$service.'\s+'.$type.'/', $line ) ) {
+ $out .= $line;
+ $reading_service = false;
+ }
+
+ # $skipped_lines .= $line;
+
+ # regex matches definition matching service to be removed
+ } else if ( preg_match( '/^'.$service.'\s+'.$type.'/', $line ) ) {
+
+ $reading_service = true;
+ # $skipped_lines .= $line;
+
+ } else {
+ $out .= $line;
+ }
+ }
+ fclose( $cf );
+
+ $out = preg_replace( '/(\r?\n){3,}/', '$1$1', $out ); # reduce 3 or more newlines to 2
+
+ return wf( $conf['postfix']['config_dir'].'/master.cf', $out );
+ }
+
+ return true;
+ }
+
public function configure_postfix($options = '') {
global $conf,$autoinstall;
$cf = $conf['postfix'];
@@ -927,17 +989,26 @@ class installer_base {
//* mysql-virtual_uids.cf
$this->process_postfix_config('mysql-virtual_uids.cf');
+ // test if lmtp if available
+ $configure_lmtp = $this->get_postfix_service('lmtp','unix');
+
//* postfix-dkim
$filename='tag_as_originating.re';
$full_file_name=$config_dir.'/'.$filename;
if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
+ if($configure_lmtp) {
+ $content = preg_replace('/amavis:/', 'lmtp:', $content);
+ }
wf($full_file_name, $content);
$filename='tag_as_foreign.re';
$full_file_name=$config_dir.'/'.$filename;
if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
+ if($configure_lmtp) {
+ $content = preg_replace('/amavis:/', 'lmtp:', $content);
+ }
wf($full_file_name, $content);
//* Changing mode and group of the new created config files.
@@ -1233,11 +1304,16 @@ class installer_base {
public function configure_dovecot() {
global $conf;
-
+
$virtual_transport = 'dovecot';
$configure_lmtp = false;
-
+
+ // use lmtp if installed
+ if($configure_lmtp = is_file('/usr/lib/dovecot/lmtp')) {
+ $virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
+ }
+
// check if virtual_transport must be changed
if ($this->is_update) {
$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
@@ -1347,7 +1423,7 @@ class installer_base {
}
//remove #2.3+ comment
$content = file_get_contents($config_dir.'/'.$configfile);
- $content = str_replace('#2.3+','',$content);
+ $content = str_replace('#2.3+ ','',$content);
file_put_contents($config_dir.'/'.$configfile,$content);
unset($content);
@@ -1358,11 +1434,20 @@ class installer_base {
}
}
+ $dovecot_protocols = 'imap pop3';
+
//* dovecot-lmtpd
if($configure_lmtp) {
- replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
+ $dovecot_protocols .= ' lmtp';
+ }
+
+ //* dovecot-managesieved
+ if(is_file('/usr/lib/dovecot/managesieve')) {
+ $dovecot_protocols .= ' sieve';
}
+ replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', "protocols = $dovecot_protocols", 1, 0);
+
//* dovecot-sql.conf
$configfile = 'dovecot-sql.conf';
if(is_file($config_dir.'/'.$configfile)) {
@@ -1409,6 +1494,8 @@ class installer_base {
// TODO: chmod and chown on the config file
+ // test if lmtp if available
+ $configure_lmtp = $this->get_postfix_service('lmtp','unix');
// Adding the amavisd commands to the postfix configuration
// Add array for no error in foreach and maybe future options
@@ -1416,7 +1503,8 @@ class installer_base {
// Check for amavisd -> pure webserver with postfix for mailing without antispam
if ($conf['amavis']['installed']) {
- $postconf_commands[] = 'content_filter = amavis:[127.0.0.1]:10024';
+ $content_filter_service = ($configure_lmtp) ? 'lmtp' : 'amavis';
+ $postconf_commands[] = "content_filter = ${content_filter_service}:[127.0.0.1]:10024";
$postconf_commands[] = 'receive_override_options = no_address_mappings';
}
@@ -1432,11 +1520,16 @@ class installer_base {
$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');
+// $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');
//*TODO: check templates against existing postfix-services to make sure we use the template
+ // Or just remove the old service definitions and add them again?
+ $add_amavis = $this->remove_postfix_service('amavis','unix');
+ $add_amavis_10025 = $this->remove_postfix_service('127.0.0.1:10025','inet');
+ $add_amavis_10027 = $this->remove_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~');
diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 659708c685587c79bed747f1e0e99514d7e27449..aebc01dcb8284a8166864d7d54819f40e1b1862a 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -26,3 +26,9 @@ ALTER TABLE `mail_user`
-- doveadm should be enabled for all mailboxes
UPDATE `mail_user` set `disabledoveadm` = 'n';
+
+-- add disablequota-status for quota-status policy daemon
+ALTER TABLE `mail_user` ADD `disablequota-status` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `disabledoveadm`;
+
+-- add disableindexer-worker for solr search
+ALTER TABLE `mail_user` ADD `disableindexer-worker` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `disablequota-status`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 4965358bc65a695b11a7f4719774dfec2c229297..9d2fb741340e7484c4d636b03a7db13cca82d52a 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1062,6 +1062,8 @@ CREATE TABLE `mail_user` (
`disablelda` enum('n','y') NOT NULL default 'n',
`disablelmtp` enum('n','y') NOT NULL default 'n',
`disabledoveadm` enum('n','y') NOT NULL default 'n',
+ `disablequota-status` enum('n','y') NOT NULL default 'n',
+ `disableindexer-worker` enum('n','y') NOT NULL default 'n',
`last_quota_notification` date NULL default NULL,
`backup_interval` VARCHAR( 255 ) NOT NULL default 'none',
`backup_copies` INT NOT NULL DEFAULT '1',
diff --git a/install/tpl/debian6_dovecot.conf.master b/install/tpl/debian6_dovecot.conf.master
index 4286689cd448ef52004801a89570730b3ac36384..a112712690d663db76537911af3f9e04e9ced29e 100644
--- a/install/tpl/debian6_dovecot.conf.master
+++ b/install/tpl/debian6_dovecot.conf.master
@@ -57,7 +57,13 @@ plugin {
# the maildir quota does not need to be set.
# You do not need: quota = maildir
+ # no longer needed, as 'sieve' is in userdb extra fields:
sieve=/var/vmail/%d/%n/.sieve
+
+ sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+ sieve_max_script_size = 2M
+ sieve_max_actions = 100
+ sieve_max_redirects = 25
}
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 777280f044eb6739965d602f7c19122d636b3f86..6f32e6d5a2b9d402320f69cda6c21c5db7b5845b 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -10,6 +10,7 @@ ssl_dh = dataRecord["postfix"] == 'y')?'n':'y';
$disablesmtp = ($this->dataRecord["disablesmtp"])?'y':'n';
- $sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ? WHERE mailuser_id = ?";
$app->db->query($sql, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $this->id);
+ $sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disablelmtp = ? WHERE mailuser_id = ?";
+ $app->db->query($sql, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $disabledeliver, $this->id);
}
}
@@ -365,8 +366,8 @@ class page_action extends tform_actions {
$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
$disablesmtp = (isset($this->dataRecord["disablesmtp"]) && $this->dataRecord["disablesmtp"])?'y':'n';
- $sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, `disablesieve-filter` = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ? WHERE mailuser_id = ?";
- $app->db->query($sql, $disableimap, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $this->id);
+ $sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, `disablesieve-filter` = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disablelmtp = ? WHERE mailuser_id = ?";
+ $app->db->query($sql, $disableimap, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $disabledeliver, $this->id);
}
//** If the email address has been changed, change it in all aliases too
diff --git a/interface/web/tools/import_vpopmail.php b/interface/web/tools/import_vpopmail.php
index 3e732d3740923cb32457409f9d5260b086ac08a4..7ae4efb58b6f87388e9233584de3b434b5027ddd 100644
--- a/interface/web/tools/import_vpopmail.php
+++ b/interface/web/tools/import_vpopmail.php
@@ -242,6 +242,7 @@ function start_import() {
"disablesmtp" => 'n',
"disablesieve" => 'n',
"disablelda" => 'n',
+ "disablelmtp" => 'n',
"disabledoveadm" => 'n'
);
$app->db->datalogInsert('mail_user', $sql, 'mailuser_id');
diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master
index 13c08dd56b18987573c18fd1fe1aee432db17e44..f72cd11d1f68539269e262e727db68bfb79fd1f9 100644
--- a/server/conf/sieve_filter.master
+++ b/server/conf/sieve_filter.master
@@ -1,3 +1,6 @@
+# This sieve script is generated by ISPConfig, any changes made will be overwritten.
+# You can create and activate a per-user sieve script (manually or via managesieve),
+# which will execute before this.
require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
@@ -36,4 +39,4 @@ vacation :days 1
# :addresses ["test@test.int", "till@test.int"]
"";
-
\ No newline at end of file
+
diff --git a/server/conf/sieve_filter_1.2.master b/server/conf/sieve_filter_1.2.master
index 5244693102ce0778964ce2e25b61c377b1b2bf8a..edd4060b9f8012ad874a6e0aafcdac30187cba59 100644
--- a/server/conf/sieve_filter_1.2.master
+++ b/server/conf/sieve_filter_1.2.master
@@ -1,3 +1,6 @@
+# This sieve script is generated by ISPConfig, any changes made will be overwritten.
+# You can create and activate a per-user sieve script (manually or via managesieve),
+# which will execute before this.
require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php
index 2c16601f5024d8d74242b4fb25b29f43e13b918c..9c9939655c7dd3cdc802ee1a44521d385eb86845 100644
--- a/server/plugins-available/maildeliver_plugin.inc.php
+++ b/server/plugins-available/maildeliver_plugin.inc.php
@@ -98,9 +98,16 @@ class maildeliver_plugin {
$app->log("Mailfilter config has been changed", LOGLEVEL_DEBUG);
$sieve_file = $data["new"]["maildir"].'/.sieve';
- $sieve_file_isp = $data["new"]["maildir"].'/sieve/ispconfig.sieve';
- if(is_file($sieve_file)) unlink($sieve_file) or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
+ $sieve_file_svbin = $data["new"]["maildir"].'/.sieve.svbin';
+ $old_sieve_file_isp = $data["new"]["maildir"].'/sieve/ispconfig.sieve';
+ $sieve_file_isp = $data["new"]["maildir"].'/.ispconfig.sieve';
+ $sieve_file_isp_svbin = $data["new"]["maildir"].'/.ispconfig.svbin';
+ if(is_file($old_sieve_file_isp)) unlink($old_sieve_file_isp) or $app->log("Unable to delete file: $old_sieve_file_isp", LOGLEVEL_WARN);
+ // cleanup .sieve file if it is now a broken link
+ if(is_link($sieve_file) && !file_exists($sieve_file)) unlink($sieve_file) or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
+ if(is_file($sieve_file_svbin)) unlink($sieve_file_svbin) or $app->log("Unable to delete file: $sieve_file_svbin", LOGLEVEL_WARN);
if(is_file($sieve_file_isp)) unlink($sieve_file_isp) or $app->log("Unable to delete file: $sieve_file_isp", LOGLEVEL_WARN);
+ if(is_file($sieve_file_isp_svbin)) unlink($sieve_file_isp_svbin) or $app->log("Unable to delete file: $sieve_file_isp_svbin", LOGLEVEL_WARN);
$app->load('tpl');
//* Select sieve filter file for dovecot version
@@ -221,16 +228,13 @@ class maildeliver_plugin {
if ( is_file($sieve_file_isp) ) {
$app->system->chown($sieve_file_isp,$mail_config['mailuser_name'],false);
$app->system->chgrp($sieve_file_isp,$mail_config['mailuser_group'],false);
+
+ $app->system->exec_safe("sievec ?", "$sieve_file_isp");
+ if ( is_file($sieve_file_isp_svbin) ) {
+ $app->system->chown($sieve_file_isp_svbin,$mail_config['mailuser_name'],false);
+ $app->system->chgrp($sieve_file_isp_svbin,$mail_config['mailuser_group'],false);
+ }
}
- chdir($data["new"]["maildir"]);
- //* create symlink to activate sieve script
- symlink("sieve/ispconfig.sieve", ".sieve") or $app->log("Unable to create symlink to active sieve filter", LOGLEVEL_WARN);
- if (is_link(".sieve")) {
- $app->system->chown(".sieve",$mail_config['mailuser_name'],true);
- $app->system->chgrp(".sieve",$mail_config['mailuser_group'],true);
- }
- $app->system->chown($sieve_file,$mail_config['mailuser_name'],true);
- $app->system->chgrp($sieve_file,$mail_config['mailuser_group'],true);
unset($tpl);
@@ -241,9 +245,16 @@ class maildeliver_plugin {
global $app, $conf;
$sieve_file = $data["old"]["maildir"].'/.sieve';
- $sieve_file_isp = $data["old"]["maildir"].'/sieve/ispconfig.sieve';
- if(is_file($sieve_file)) unlink($sieve_file) or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
+ $sieve_file_svbin = $data["old"]["maildir"].'/.sieve.svbin';
+ $old_sieve_file_isp = $data["old"]["maildir"].'/sieve/ispconfig.sieve';
+ $sieve_file_isp = $data["old"]["maildir"].'/.ispconfig.sieve';
+ $sieve_file_isp_svbin = $data["old"]["maildir"].'/.ispconfig.svbin';
+ if(is_file($old_sieve_file_isp)) unlink($old_sieve_file_isp) or $app->log("Unable to delete file: $old_sieve_file_isp", LOGLEVEL_WARN);
+ // cleanup .sieve file if it is now a broken link
+ if(is_link($sieve_file) && !file_exists($sieve_file)) unlink($sieve_file) or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
+ if(is_file($sieve_file_svbin)) unlink($sieve_file_svbin) or $app->log("Unable to delete file: $sieve_file_svbin", LOGLEVEL_WARN);
if(is_file($sieve_file_isp)) unlink($sieve_file_isp) or $app->log("Unable to delete file: $sieve_file_isp", LOGLEVEL_WARN);
+ if(is_file($sieve_file_isp_svbin)) unlink($sieve_file_isp_svbin) or $app->log("Unable to delete file: $sieve_file_isp_svbin", LOGLEVEL_WARN);
}
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index ad48e3dee87064ed2ecc913a2ae5128fb90e8155..80db1c102a08a8e3a0b21edb82d4621220336a1d 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -158,24 +158,35 @@ class postfix_server_plugin {
}
if($app->system->is_installed('dovecot')) {
+ $virtual_transport = 'dovecot';
+ $configure_lmtp = false;
+ $dovecot_protocols = 'imap pop3';
+
+ //* dovecot-lmtpd
+ if( ($configure_lmtp = is_file('/usr/lib/dovecot/lmtp')) ||
+ ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') )
+ {
+ $virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
+ $dovecot_protocols .= ' lmtp';
+ }
+
+ //* dovecot-managesieved
+ if(is_file('/usr/lib/dovecot/managesieve')) {
+ $dovecot_protocols .= ' sieve';
+ }
+
$out = null;
exec("postconf -n virtual_transport", $out);
- if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') {
- // If dovecot switch to lmtp
- if($out[0] != "virtual_transport = lmtp:unix:private/dovecot-lmtp") {
- exec("postconf -e 'virtual_transport = lmtp:unix:private/dovecot-lmtp'");
- exec('postfix reload');
- $app->system->replaceLine("/etc/dovecot/dovecot.conf", "protocols = imap pop3", "protocols = imap pop3 lmtp");
- exec($conf['init_scripts'] . '/' . 'dovecot restart');
- }
- } else {
- // If dovecot switch to dovecot
- if($out[0] != "virtual_transport = dovecot") {
- exec("postconf -e 'virtual_transport = dovecot'");
- exec('postfix reload');
- $app->system->replaceLine("/etc/dovecot/dovecot.conf", "protocols = imap pop3 lmtp", "protocols = imap pop3");
- exec($conf['init_scripts'] . '/' . 'dovecot restart');
- }
+ if($out[0] != "virtual_transport = $virtual_transport") {
+ exec("postconf -e 'virtual_transport = $virtual_transport'");
+ exec('postfix reload');
+ }
+
+ $out = null;
+ exec("grep '^protocols\s' /etc/dovecot/dovecot.conf", $out);
+ if($out[0] != "protocols = $dovecot_protocols") {
+ $app->system->replaceLine("/etc/dovecot/dovecot.conf", 'REGEX:/^protocols\s=/', "protocols = $dovecot_protocols");
+ exec($conf['init_scripts'] . '/' . 'dovecot restart');
}
}
@@ -222,7 +233,7 @@ class postfix_server_plugin {
exec("postconf -X 'milter_default_action'");
exec("postconf -e 'receive_override_options = no_address_mappings'");
- exec("postconf -e 'content_filter = amavis:[127.0.0.1]:10024'");
+ exec("postconf -e 'content_filter = " . ($configure_lmtp ? "lmtp" : "amavis" ) . ":[127.0.0.1]:10024'");
exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, permit_sasl_authenticated, check_sender_access regexp:/etc/postfix/tag_as_foreign.re'");
}