From e1ceb050e19c7574bca146a8da7047ee4ff456b5 Mon Sep 17 00:00:00 2001 From: Marius Burkard <m.burkard@pixcept.de> Date: Sun, 10 Jul 2016 05:02:35 -0400 Subject: [PATCH] Merge branch 'stable-3.1' --- install/dist/lib/gentoo.lib.php | 165 ++++++++++++++++++++++++++++++++----------------------- 1 files changed, 96 insertions(+), 69 deletions(-) diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php index 18527ad..7fdec46 100644 --- a/install/dist/lib/gentoo.lib.php +++ b/install/dist/lib/gentoo.lib.php @@ -81,7 +81,7 @@ } //* These postconf commands will be executed on installation and update - $server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?.`server` WHERE server_id = ?", $conf["mysql"]["database"], $conf['server_id']); + $server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"].'.server', $conf['server_id']); $server_ini_array = ini_to_array(stripslashes($server_ini_rec['config'])); unset($server_ini_rec); @@ -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,39 +275,39 @@ global $conf; $virtual_transport = 'dovecot'; + + $configure_lmtp = false; // check if virtual_transport must be changed if ($this->is_update) { - $tmp = $this->db->queryOneRecord("SELECT * FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']); + $tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"].".server", $conf['server_id']); $ini_array = ini_to_array(stripslashes($tmp['config'])); // ini_array needs not to be checked, because already done in update.php -> updateDbAndIni() 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'); @@ -450,18 +486,15 @@ global $conf; //* Create the database - if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$conf['powerdns']['database'].' DEFAULT CHARACTER SET '.$conf['mysql']['charset'])) { + if(!$this->db->query('CREATE DATABASE IF NOT EXISTS ?? DEFAULT CHARACTER SET ?', $conf['powerdns']['database'], $conf['mysql']['charset'])) { $this->error('Unable to create MySQL database: '.$conf['powerdns']['database'].'.'); } //* Create the ISPConfig database user in the local database - $query = 'GRANT ALL ON `'.$conf['powerdns']['database'].'` . * TO \''.$conf['mysql']['ispconfig_user'].'\'@\'localhost\';'; - if(!$this->db->query($query)) { + $query = 'GRANT ALL ON ??.* TO ?@?'; + 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'] == '') { @@ -566,25 +599,10 @@ //* Copy the ISPConfig configuration include - /* - $content = $this->get_template_file('apache_ispconfig.conf', true); - - $records = $this->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ".$conf["server_id"]." AND virtualhost = 'y'"); - if(is_array($records) && count($records) > 0) - { - foreach($records as $rec) { - $content .= "NameVirtualHost ".$rec["ip_address"].":80\n"; - $content .= "NameVirtualHost ".$rec["ip_address"].":443\n"; - } - } - - $this->write_config_file($conf['apache']['vhost_conf_dir'].'/000-ispconfig.conf', $content); - */ - $tpl = new tpl('apache_ispconfig.conf.master'); $tpl->setVar('apache_version',getapacheversion()); - $records = $this->db->queryAllRecords('SELECT * FROM '.$conf['mysql']['master_database'].'.server_ip WHERE server_id = '.$conf['server_id']." AND virtualhost = 'y'"); + $records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']); $ip_addresses = array(); if(is_array($records) && count($records) > 0) { @@ -758,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 @@ -849,6 +871,7 @@ $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content); $content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content); $content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content); + $content = str_replace('{mysql_master_server_port}', $conf['mysql']['master_port'], $content); $content = str_replace('{server_id}', $conf['server_id'], $content); $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content); @@ -933,13 +956,11 @@ $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']); + $sql = "UPDATE `server` SET mail_server = ?, web_server = ?, dns_server = ?, file_server = ?, db_server = ?, vserver_server = ? WHERE server_id = ?"; + $this->db->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']); if($conf['mysql']['master_slave_setup'] == 'y') { - $this->dbmaster->query($sql); - $this->db->query($sql); - } else { - $this->db->query($sql); + $this->dbmaster->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']); } // chown install dir to root and chmod 755 @@ -1206,7 +1227,13 @@ // Add symlink for patch tool if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch'); - + + // Change mode of a few files from amavisd + if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640); + if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400); + if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640); + if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400); + } } -- Gitblit v1.9.1