Marius Cramer
2015-07-09 e2963947c8428a8bae4a013e8c88dc4bdf299075
Merge branch 'master' into 'master'

Master

See merge request !209
7 files modified
561 ■■■■■ changed files
install/dist/lib/centos_base.lib.php 56 ●●●●● patch | view | raw | blame | history
install/dist/lib/debian60.lib.php 35 ●●●●● patch | view | raw | blame | history
install/dist/lib/fedora.lib.php 97 ●●●●● patch | view | raw | blame | history
install/dist/lib/gentoo.lib.php 97 ●●●●● patch | view | raw | blame | history
install/dist/lib/opensuse.lib.php 135 ●●●●● patch | view | raw | blame | history
install/lib/installer_base.lib.php 138 ●●●●● patch | view | raw | blame | history
install/tpl/debian6_dovecot2.conf.master 3 ●●●●● patch | view | raw | blame | history
install/dist/lib/centos_base.lib.php
@@ -67,28 +67,46 @@
            caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
        }
        // Append the configuration for amavisd to the master.cf file
        if(is_file($conf['postfix']['config_dir'].'/master.cf')) copy($conf['postfix']['config_dir'].'/master.cf', $conf['postfix']['config_dir'].'/master.cf~');
        $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 = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
        $config_dir = $conf['postfix']['config_dir'];
        // Adding amavis-services to the master.cf file if the service does not already exists
        if ($this->postfix_master()) {
            exec ("postconf -M amavis.unix", $out, $ret);
            $add_amavis = @($out[0]=='')?true:false;
            unset($out);
            exec ("postconf -M 127.0.0.1:10025.inet", $out, $ret);
            $add_amavis_10025 = @($out[0]=='')?true:false;
            unset($out);
            exec ("postconf -M 127.0.0.1:10027.inet", $out, $ret);
            $add_amavis_10027 = @($out[0]=='')?true:false;
            unset($out);
        } else { //* fallback - postfix < 2.9
            $content = rf($conf['postfix']['config_dir'].'/master.cf');
            $add_amavis = @(!preg_match('/^amavis\s+unix\s+/m', $content))?true:false;
            $add_amavis_10025 = @(!preg_match('/^127.0.0.1:10025\s+/m', $content))?true:false;
            $add_amavis_10027 = @(!preg_match('/^127.0.0.1:10027\s+/m', $content))?true:false;
        }
        if(!preg_match('/^127.0.0.1:10025\s+/m', $content)) {
            unset($content);
            $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
            $content = rf($conf['postfix']['config_dir'].'/master.cf');
        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:10027\s+/m', $content)) {
            unset($content);
            $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
        }
        unset($content);
        removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn   # REMOVE ME', 1);
        replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1);
install/dist/lib/debian60.lib.php
@@ -50,24 +50,30 @@
            }
        }
        $config_dir = $conf['dovecot']['config_dir'];
        $config_dir = $conf['postfix']['config_dir'];
        //* Configure master.cf and add a line for deliver
        if(is_file($config_dir.'/master.cf')){
            copy($config_dir.'/master.cf', $config_dir.'/master.cf~2');
        if ($this->postfix_master()) {
            exec ("postconf -M dovecot.unix", $out, $ret);
             $add_dovecot_service = @($out[0]=='')?true:false;
        } else { //* fallback - postfix < 2.9
            $content = rf($config_dir.'/master.cf');
            $add_dovecot_service = @(!stristr($content, "dovecot/deliver"))?true:false;
        }
        if(is_file($config_dir.'/master.cf~')){
            chmod($config_dir.'/master.cf~2', 0400);
        }
        $content = rf($conf["postfix"]["config_dir"].'/master.cf');
        // Only add the content if we had not addded it before
        if(!stristr($content, "dovecot/deliver")) {
        if($add_dovecot_service) {
            //* 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=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}';
            af($conf["postfix"]["config_dir"].'/master.cf', $deliver_content);
            af($config_dir.'/master.cf', $deliver_content);
            unset($content);
            unset($deliver_content);
        }
        unset($content);
        unset($deliver_content);
        //* Reconfigure postfix to use dovecot authentication
        // Adding the amavisd commands to the postfix configuration
@@ -88,6 +94,7 @@
        }
        //* copy dovecot.conf
        $config_dir = $conf['dovecot']['config_dir'];
        $configfile = 'dovecot.conf';
        if(is_file($config_dir.'/'.$configfile)){
            copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
install/dist/lib/fedora.lib.php
@@ -349,27 +349,30 @@
            }
        }
        $config_dir = $conf['dovecot']['config_dir'];
        //* Use /etc/dovecot as config dir if exists
        if(is_dir('/etc/dovecot')) $config_dir = '/etc/dovecot';
        $config_dir = $conf['postfix']['config_dir'];
        //* Configure master.cf and add a line for deliver
        if(is_file($config_dir.'/master.cf')){
            copy($config_dir.'/master.cf', $config_dir.'/master.cf~2');
        if ($this->postfix_master()) {
            exec ("postconf -M dovecot.unix", $out, $ret);
            $add_dovecot_service = @($out[0]=='')?true:false;
        } else { //* fallback - postfix < 2.9
            $content = rf($config_dir'/master.cf');
            $add_dovecot_service = @(!stristr($content, "dovecot/deliver"))?true:false;
        }
        if(is_file($config_dir.'/master.cf~')){
            exec('chmod 400 '.$config_dir.'/master.cf~2');
        }
        $content = rf($conf["postfix"]["config_dir"].'/master.cf');
        // Only add the content if we had not addded it before
        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}';
        if($add_dovecot_service) {
            //* 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=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}';
            af($conf["postfix"]["config_dir"].'/master.cf', $deliver_content);
            unset($content);
            unset($deliver_content);
        }
        unset($content);
        unset($deliver_content);
        //* Reconfigure postfix to use dovecot authentication
        // Adding the amavisd commands to the postfix configuration
@@ -388,6 +391,10 @@
            $command = "postconf -e '$cmd'";
            caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
        }
        //* Use /etc/dovecot as config dir if exists
//        if(is_dir('/etc/dovecot')) $config_dir = '/etc/dovecot';
        $config_dir = $conf['dovecot']['config_dir'];
        //* backup dovecot.conf
        $configfile = 'dovecot.conf';
@@ -482,28 +489,46 @@
            caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
        }
        // Append the configuration for amavisd to the master.cf file
        if(is_file($conf['postfix']['config_dir'].'/master.cf')) copy($conf['postfix']['config_dir'].'/master.cf', $conf['postfix']['config_dir'].'/master.cf~');
        $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 = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
        $config_dir = $conf['postfix']['config_dir'];
        // Adding amavis-services to the master.cf file if the service does not already exists
        if ($this->postfix_master()) {
            exec ("postconf -M amavis.unix", $out, $ret);
            $add_amavis = @($out[0]=='')?true:false;
            unset($out);
            exec ("postconf -M 127.0.0.1:10025.inet", $out, $ret);
            $add_amavis_10025 = @($out[0]=='')?true:false;
            unset($out);
            exec ("postconf -M 127.0.0.1:10027.inet", $out, $ret);
            $add_amavis_10027 = @($out[0]=='')?true:false;
            unset($out);
        } else { //* fallback - postfix < 2.9
            $content = rf($conf['postfix']['config_dir'].'/master.cf');
            $add_amavis = @(!preg_match('/^amavis\s+unix\s+/m', $content))?true:false;
            $add_amavis_10025 = @(!preg_match('/^127.0.0.1:10025\s+/m', $content))?true:false;
            $add_amavis_10027 = @(!preg_match('/^127.0.0.1:10027\s+/m', $content))?true:false;
        }
        if(!preg_match('/^127.0.0.1:10025\s+/m', $content)) {
            unset($content);
            $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
            $content = rf($conf['postfix']['config_dir'].'/master.cf');
        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:10027\s+/m', $content)) {
            unset($content);
            $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
        }
        unset($content);
        removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn   # REMOVE ME', 1);
        replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1);
install/dist/lib/gentoo.lib.php
@@ -270,27 +270,30 @@
            }
        }
        $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->postfix_master()) {
            exec ("postconf -M dovecot.unix", $out, $ret);
            $add_dovecot_service = @($out[0]=='')?true:false;
        } else { //* fallback - postfix < 2.9
            $content = rf($config_dir.'/master.cf');
            $add_dovecot_service = @(!stristr($content, "dovecot/deliver"))?true:false;
        }
        unset($content);
        unset($deliver_content);
        unset($configfile);
        if($add_dovecot_service) {
            //* 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}';
            af($conf[$config_dir.'/master.cf', $deliver_content);
            unset($content);
            unset($deliver_content);
        }
        //* Reconfigure postfix to use dovecot authentication
        $postconf_commands = array (
@@ -310,6 +313,7 @@
            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);
@@ -387,27 +391,46 @@
            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);
        $config_dir = $conf['postfix']['config_dir'];
        // Adding amavis-services to the master.cf file if the service does not already exists
        if ($this->postfix_master()) {
            exec ("postconf -M amavis.unix", $out, $ret);
            $add_amavis = @($out[0]=='')?true:false;
            unset($out);
            exec ("postconf -M 127.0.0.1:10025.inet", $out, $ret);
            $add_amavis_10025 = @($out[0]=='')?true:false;
            unset($out);
            exec ("postconf -M 127.0.0.1:10027.inet", $out, $ret);
            $add_amavis_10027 = @($out[0]=='')?true:false;
            unset($out);
        } else { //* fallback - postfix < 2.9
            $content = rf($conf['postfix']['config_dir'].'/master.cf');
            $add_amavis = @(!preg_match('/^amavis\s+unix\s+/m', $content))?true:false;
            $add_amavis_10025 = @(!preg_match('/^127.0.0.1:10025\s+/m', $content))?true:false;
            $add_amavis_10027 = @(!preg_match('/^127.0.0.1:10027\s+/m', $content))?true:false;
        }
        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 ($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: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');
install/dist/lib/opensuse.lib.php
@@ -225,27 +225,34 @@
        $command = 'chmod 755  /var/run/authdaemon.courier-imap';
        caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
        //* Changing maildrop lines in posfix master.cf
        if(is_file($config_dir.'/master.cf')){
            copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
        }
        if(is_file($config_dir.'/master.cf~')){
            exec('chmod 400 '.$config_dir.'/master.cf~');
        }
        //* Check maildrop service in posfix master.cf
        $regex = "/^maildrop   unix.*pipe flags=DRhu user=vmail argv=\\/usr\\/bin\\/maildrop -d ".$cf['vmail_username']." \\$\{extension} \\$\{recipient} \\$\{user} \\$\{nexthop} \\$\{sender}/";
        $configfile = $config_dir.'/master.cf';
        $content = rf($configfile);
        $content = str_replace('  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}',
            '  flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}',
            $content);
        $content = str_replace('  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}',
            '  flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}',
            $content);
        if ($this->postfix_master()) {
            exec ("postconf -M maildrop.unix", $out, $ret);
            $change_maildrop_flags = @(preg_match($regex, $out[0]) && $out[0] !='')?false:true;
        } else { //* fallback - postfix < 2.9
            $change_maildrop_flags = @(preg_match($regex, $configfile))?false:true;
        }
        if ($change_maildrop_flags) {
            //* Change maildrop service in posfix master.cf
            if(is_file($config_dir.'/master.cf')) {
                copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
            }
            if(is_file($config_dir.'/master.cf~')) {
                chmod($config_dir.'/master.cf~', 0400);
            }
            $configfile = $config_dir.'/master.cf';
            $content = rf($configfile);
            $content =    str_replace('  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}',
                        'flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}',
                        $content);
            $content =    str_replace('  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}',
                        'flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}',
                        $content);
        }
        // enable tlsmanager
        $content = str_replace('#tlsmgr    unix  -       -       n       1000?   1       tlsmgr', 'tlsmgr    unix  -       -       n       1000?   1       tlsmgr', $content);
        wf($configfile, $content);
        //* Writing the Maildrop mailfilter file
@@ -357,24 +364,30 @@
            }
        }
        $config_dir = $conf['dovecot']['config_dir'];
        $config_dir = $conf['postfix']['config_dir'];
        //* Configure master.cf and add a line for deliver
        if(is_file($config_dir.'/master.cf')){
            copy($config_dir.'/master.cf', $config_dir.'/master.cf~2');
        if ($this->postfix_master()) {
            exec ("postconf -M dovecot.unix", $out, $ret);
            $add_dovecot_service = @($out[0]=='')?true:false;
        } else { //* fallback - postfix < 2.9
            $content = rf($config_dir.'/master.cf');
            $add_dovecot_service = @(!stristr($content, "dovecot/deliver"))?true:false;
        }
        if(is_file($config_dir.'/master.cf~')){
            exec('chmod 400 '.$config_dir.'/master.cf~2');
        }
        $content = rf($conf["postfix"]["config_dir"].'/master.cf');
        // Only add the content if we had not addded it before
        if(!stristr($content, "dovecot/deliver")) {
            $deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DROhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}';
        if($add_dovecot_service) {
            //* 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=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}';
            af($conf["postfix"]["config_dir"].'/master.cf', $deliver_content);
            unset($content);
            unset($deliver_content);
        }
        unset($content);
        unset($deliver_content);
        //* Reconfigure postfix to use dovecot authentication
        // Adding the amavisd commands to the postfix configuration
@@ -393,6 +406,8 @@
            $command = "postconf -e '$cmd'";
            caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
        }
        $config_dir = $conf['dovecot']['config_dir'];
        //* backup dovecot.conf
        $configfile = 'dovecot.conf';
@@ -484,28 +499,46 @@
            caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
        }
        // Append the configuration for amavisd to the master.cf file
        if(is_file($conf["postfix"]["config_dir"].'/master.cf')) copy($conf["postfix"]["config_dir"].'/master.cf', $conf["postfix"]["config_dir"].'/master.cf~');
        $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 = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
        $config_dir = $conf['postfix']['config_dir'];
        // Adding amavis-services to the master.cf file if the service does not already exists
        if ($this->postfix_master()) {
            exec ("postconf -M amavis.unix", $out, $ret);
            $add_amavis = @($out[0]=='')?true:false;
            unset($out);
            exec ("postconf -M 127.0.0.1:10025.inet", $out, $ret);
            $add_amavis_10025 = @($out[0]=='')?true:false;
            unset($out);
            exec ("postconf -M 127.0.0.1:10027.inet", $out, $ret);
            $add_amavis_10027 = @($out[0]=='')?true:false;
            unset($out);
        } else { //* fallback - postfix < 2.9
            $content = rf($conf['postfix']['config_dir'].'/master.cf');
            $add_amavis = @(!preg_match('/^amavis\s+unix\s+/m', $content))?true:false;
            $add_amavis_10025 = @(!preg_match('/^127.0.0.1:10025\s+/m', $content))?true:false;
            $add_amavis_10027 = @(!preg_match('/^127.0.0.1:10027\s+/m', $content))?true:false;
        }
        if(!preg_match('/^127.0.0.1:10025\s+/m', $content)) {
            unset($content);
            $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
            $content = rf($conf['postfix']['config_dir'].'/master.cf');
        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:10027\s+/m', $content)) {
            unset($content);
            $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
        }
        unset($content);
        // Add the clamav user to the vscan group
        //exec('groupmod --add-user clamav vscan');
install/lib/installer_base.lib.php
@@ -682,6 +682,12 @@
        exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
    }
    //* with postfix >= 2.9 we can detect configured services with postconf
    public function postfix_master() {
        exec("postconf -M", $out, $ret);
        return $ret===0?true:false;
    }
    public function configure_postfix($options = '') {
        global $conf,$autoinstall;
        $cf = $conf['postfix'];
@@ -844,19 +850,30 @@
        $command = 'chmod 755  /var/run/courier/authdaemon/';
        if(is_file('/var/run/courier/authdaemon/')) caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
        //* Changing maildrop lines in posfix master.cf
        if(is_file($config_dir.'/master.cf')) {
            copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
        }
        if(is_file($config_dir.'/master.cf~')) {
            chmod($config_dir.'/master.cf~', 0400);
        }
        //* Check maildrop service in posfix master.cf
        $regex = "/^maildrop   unix.*pipe flags=DRhu user=vmail argv=\\/usr\\/bin\\/maildrop -d ".$cf['vmail_username']." \\$\{extension} \\$\{recipient} \\$\{user} \\$\{nexthop} \\$\{sender}/";
        $configfile = $config_dir.'/master.cf';
        $content = rf($configfile);
        $content = str_replace('flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}',
            'flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}',
            $content);
        wf($configfile, $content);
        if ($this->postfix_master()) {
            exec ("postconf -M maildrop.unix", $out, $ret);
            $change_maildrop_flags = @(preg_match($regex, $out[0]) && $out[0] !='')?false:true;
        } else { //* fallback - postfix < 2.9
            $change_maildrop_flags = @(preg_match($regex, $configfile))?false:true;
        }
        if ($change_maildrop_flags) {
            //* Change maildrop service in posfix master.cf
            if(is_file($config_dir.'/master.cf')) {
                copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
            }
            if(is_file($config_dir.'/master.cf~')) {
                chmod($config_dir.'/master.cf~', 0400);
             }
            $configfile = $config_dir.'/master.cf';
            $content = rf($configfile);
            $content =    str_replace('flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}',
                        'flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}',
                        $content);
            wf($configfile, $content);
        }
        //* Writing the Maildrop mailfilter file
        $configfile = 'mailfilter';
@@ -1014,24 +1031,30 @@
            }
        }
        $config_dir = $conf['dovecot']['config_dir'];
        $config_dir = $conf['postfix']['config_dir'];
        //* Configure master.cf and add a line for deliver
        if(is_file($conf['postfix']['config_dir'].'/master.cf')) {
            copy($conf['postfix']['config_dir'].'/master.cf', $conf['postfix']['config_dir'].'/master.cf~2');
        if ($this->postfix_master()) {
            exec ("postconf -M dovecot.unix", $out, $ret);
            $add_dovecot_service = @($out[0]=='')?true:false;
         } else { //* fallback - postfix < 2.9
            $content = rf($config_dir.'/master.cf');
            $add_dovecot_service = @(!stristr($content, "dovecot/deliver"))?true:false;
         }
        if($add_dovecot_service) {
             //* 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=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}';
            af($config_dir.'/master.cf', $deliver_content);
            unset($content);
            unset($deliver_content);
        }
        if(is_file($conf['postfix']['config_dir'].'/master.cf~')) {
            chmod($conf['postfix']['config_dir'].'/master.cf~2', 0400);
        }
        $content = rf($conf['postfix']['config_dir'].'/master.cf');
        // Only add the content if we had not addded it before
        if(!stristr($content, 'dovecot/deliver')) {
            $deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DROhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}';
            af($conf['postfix']['config_dir'].'/master.cf', $deliver_content);
        }
        unset($content);
        unset($deliver_content);
        //* Reconfigure postfix to use dovecot authentication
        // Adding the amavisd commands to the postfix configuration
@@ -1052,6 +1075,7 @@
        }
        //* backup dovecot.conf
        $config_dir = $conf['dovecot']['config_dir'];
        $configfile = 'dovecot.conf';
        if(is_file($config_dir.'/'.$configfile)) {
            copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
@@ -1148,28 +1172,46 @@
            caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
        }
        // Append the configuration for amavisd to the master.cf file
        if(is_file($conf['postfix']['config_dir'].'/master.cf')) copy($conf['postfix']['config_dir'].'/master.cf', $conf['postfix']['config_dir'].'/master.cf~');
        $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 = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
            $content = rf($conf['postfix']['config_dir'].'/master.cf');
        $config_dir = $conf['postfix'];
        // Adding amavis-services to the master.cf file if the service does not already exists
        if ($this->postfix_master()) {
            exec ("postconf -M amavis.unix", $out, $ret);
            $add_amavis = @($out[0]=='')?true:false;
            unset($out);
            exec ("postconf -M 127.0.0.1:10025.inet", $out, $ret);
            $add_amavis_10025 = @($out[0]=='')?true:false;
            unset($out);
            exec ("postconf -M 127.0.0.1:10027.inet", $out, $ret);
            $add_amavis_10027 = @($out[0]=='')?true:false;
            unset($out);
        } else { //* fallback - postfix < 2.9
            $content = rf($conf['postfix']['config_dir'].'/master.cf');
            $add_amavis = @(!preg_match('/^amavis\s+unix\s+/m', $content))?true:false;
            $add_amavis_10025 = @(!preg_match('/^127.0.0.1:10025\s+/m', $content))?true:false;
            $add_amavis_10027 = @(!preg_match('/^127.0.0.1:10027\s+/m', $content))?true:false;
        }
        if(!preg_match('/^127.0.0.1:10025\s+/m', $content)) {
            unset($content);
            $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
            $content = rf($conf['postfix']['config_dir'].'/master.cf');
        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:10027\s+/m', $content)) {
            unset($content);
            $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
            af($conf['postfix']['config_dir'].'/master.cf', $content);
        }
        unset($content);
        // Add the clamav user to the amavis group
        exec('adduser clamav amavis');
install/tpl/debian6_dovecot2.conf.master
@@ -42,6 +42,9 @@
   group = postfix
   mode = 0600
   user = postfix
   # For higher volume sites, it may be desirable to increase the number of active listener processes.
   # A range of 5 to 20 is probably good for most sites
#   process_min_avail = 5
  }
}
service imap-login {