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/lib/installer_base.lib.php | 134 ++++++++++++++++++++++++-------------------- 1 files changed, 74 insertions(+), 60 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 9c938ef..c437ea3 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -171,21 +171,30 @@ if(is_installed('named') || is_installed('bind') || is_installed('bind9')) $conf['bind']['installed'] = true; if(is_installed('squid')) $conf['squid']['installed'] = true; if(is_installed('nginx')) $conf['nginx']['installed'] = true; - if(is_installed('iptables') && is_installed('ufw')) $conf['ufw']['installed'] = true; + if(is_installed('iptables') && is_installed('ufw')) { + $conf['ufw']['installed'] = true; + } elseif(is_installed('iptables')) { + $conf['firewall']['installed'] = true; + } if(is_installed('fail2ban-server')) $conf['fail2ban']['installed'] = true; if(is_installed('vzctl')) $conf['openvz']['installed'] = true; - if(is_installed('iptables') && is_installed('bastille-netfilter')) $conf['bastille']['installed'] = true; if(is_installed('metronome') && is_installed('metronomectl')) $conf['xmpp']['installed'] = true; if(is_installed('spamassassin')) $conf['spamassassin']['installed'] = true; - if(is_installed('vlogger')) $conf['vlogger']['installed'] = true; - if(is_installed('cron')) $conf['cron']['installed'] = true; + // if(is_installed('vlogger')) $conf['vlogger']['installed'] = true; + // ISPConfig ships with vlogger, so it is always installed. + $conf['vlogger']['installed'] = true; + if(is_installed('cron') || is_installed('anacron')) $conf['cron']['installed'] = true; if ($conf['services']['web'] && (($conf['apache']['installed'] && is_file($conf['apache']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")) || ($conf['nginx']['installed'] && is_file($conf['nginx']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")))) $this->ispconfig_interface_installed = true; } public function force_configure_app($service, $enable_force=true) { $force = false; - swriteln("[WARN] autodetect for $service failed"); + if($enable_force == true) { + swriteln("[WARN] autodetect for $service failed"); + } else { + swriteln("[INFO] service $service not detected"); + } if($enable_force) { if(strtolower($this->simple_query("Force configure $service", array('y', 'n'), 'n') ) == 'y') { $force = true; @@ -217,7 +226,12 @@ //* check sql-mode $check_sql_mode = $this->db->queryOneRecord("SELECT @@sql_mode"); - if ($check_sql_mode['@@sql_mode'] != '' && $check_sql_mode['@@sql_mode'] != 'NO_ENGINE_SUBSTITUTION') die('Wrong SQL-mode. You should use NO_ENGINE_SUBSTITUTION'); + if ($check_sql_mode['@@sql_mode'] != '' && $check_sql_mode['@@sql_mode'] != 'NO_ENGINE_SUBSTITUTION') { + echo "Wrong SQL-mode. You should use NO_ENGINE_SUBSTITUTION. Add\n\n"; + echo " sql-mode=\"NO_ENGINE_SUBSTITUTION\"\n\n"; + echo"to the mysqld-section in your mysql-config and restart mysqld afterwards\n"; + die(); + } //** Create the database if(!$this->db->query('CREATE DATABASE IF NOT EXISTS ?? DEFAULT CHARACTER SET ?', $conf['mysql']['database'], $conf['mysql']['charset'])) { @@ -263,18 +277,14 @@ } // Delete ISPConfig user in the local database, in case that it exists - $this->db->query("DELETE FROM mysql.user WHERE User = ? AND Host = ?", $conf['mysql']['ispconfig_user'], $from_host); - $this->db->query("DELETE FROM mysql.db WHERE Db = ? AND Host = ?", $conf['mysql']['database'], $from_host); - $this->db->query('FLUSH PRIVILEGES'); + $this->db->query("DROP USER ?@?", $conf['mysql']['ispconfig_user'], $from_host); + $this->db->query("DROP DATABASE IF EXISTS ?", $conf['mysql']['database']); //* Create the ISPConfig database user in the local database $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON ?? TO ?@? IDENTIFIED BY ?'; if(!$this->db->query($query, $conf['mysql']['database'] . ".*", $conf['mysql']['ispconfig_user'], $from_host, $conf['mysql']['ispconfig_password'])) { $this->error('Unable to create database user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage); } - - //* Reload database privelages - $this->db->query('FLUSH PRIVILEGES;'); //* Set the database name in the DB library $this->db->setDBName($conf['mysql']['database']); @@ -291,6 +301,7 @@ $tpl_ini_array['fastcgi']['fastcgi_bin'] = $conf['fastcgi']['fastcgi_bin']; $tpl_ini_array['server']['hostname'] = $conf['hostname']; $tpl_ini_array['server']['ip_address'] = @gethostbyname($conf['hostname']); + $tpl_ini_array['server']['firewall'] = ($conf['ufw']['installed'] == true)?'ufw':'bastille'; $tpl_ini_array['web']['website_basedir'] = $conf['web']['website_basedir']; $tpl_ini_array['web']['website_path'] = $conf['web']['website_path']; $tpl_ini_array['web']['website_symlinks'] = $conf['web']['website_symlinks']; @@ -653,12 +664,17 @@ if(!$this->dbmaster->query($query, $value['db'] . '.mail_backup', $value['user'], $host)) { $this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage); } + + $query = "GRANT SELECT, UPDATE(`dnssec_initialized`, `dnssec_info`, `dnssec_last_signed`) ON ?? TO ?@?"; + if ($verbose){ + echo $query ."\n"; + } + if(!$this->dbmaster->query($query, $value['db'] . '.dns_soa', $value['user'], $host)) { + $this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage); + } + } - /* - * It is all done. Relod the rights... - */ - $this->dbmaster->query('FLUSH PRIVILEGES'); } } @@ -793,10 +809,25 @@ 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 get_postfix_service($service, $type) { + global $conf; + + exec("postconf -M", $out, $ret); + + if ($ret === 0) { //* with postfix >= 2.9 we can detect configured services with postconf + unset($out); + exec ("postconf -M $service/$type 2> /dev/null", $out, $ret); //* Postfix >= 2.11 + if (!isset($out[0])) { //* try Postfix 2.9 + exec ("postconf -M $service.$type 2> /dev/null", $out, $ret); + } + $postfix_service = @($out[0]=='')?false:true; + } else { //* fallback - Postfix < 2.9 + rf($conf['postfix']['config_dir'].'/master.cf'); + $regex = '/[^#]'.$service.'.*.'.$type.'.*/'; + $postfix_service = @(!preg_match($regex, $content))?true:false; + } + + return $postfix_service; } public function configure_postfix($options = '') { @@ -988,10 +1019,10 @@ //* 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'; - if ($this->postfix_master()) { + if($this->get_postfix_service('maildrop', 'unix')) { exec ("postconf -M maildrop.unix &> /dev/null", $out, $ret); $change_maildrop_flags = @(preg_match($regex, $out[0]) && $out[0] !='')?false:true; - } else { //* fallback - postfix < 2.9 + } else { $change_maildrop_flags = @(preg_match($regex, $configfile))?false:true; } if ($change_maildrop_flags) { @@ -1167,16 +1198,9 @@ } $config_dir = $conf['postfix']['config_dir']; + //* Configure master.cf and add a line for deliver - if ($this->postfix_master()) { - exec ("postconf -M dovecot.unix", $out, $ret); //* Postfix 2.9 - if (!isset($out[0])) exec ("postconf -M dovecot/unix", $out, $ret); //* Postfix >= 2.11 - $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) { + 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'); @@ -1186,7 +1210,7 @@ } //* 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}'; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; af($config_dir.'/master.cf', $deliver_content); unset($content); unset($deliver_content); @@ -1259,6 +1283,10 @@ $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content); $content = str_replace('{server_id}', $conf['server_id'], $content); + # enable iterate_query for dovecot2 + if(version_compare($dovecot_version,2, '>=')) { + $content = str_replace('# iterate_query', 'iterate_query', $content); + } wf($config_dir.'/'.$configfile, $content); chmod($config_dir.'/'.$configfile, 0600); @@ -1308,25 +1336,12 @@ caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); } - $config_dir = $conf['postfix']; + $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 &> /dev/null", $out, $ret); - $add_amavis = @($out[0]=='')?true:false; - unset($out); - exec ("postconf -M 127.0.0.1:10025.inet &> /dev/null", $out, $ret); - $add_amavis_10025 = @($out[0]=='')?true:false; - unset($out); - exec ("postconf -M 127.0.0.1:10027.inet &> /dev/null", $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; - } + $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 @@ -1477,9 +1492,6 @@ $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'] == '') { caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", @@ -1628,7 +1640,7 @@ caselog('chmod u+x /etc/init.d/metronome', __FILE__, __LINE__); caselog('update-rc.d metronome defaults', __FILE__, __LINE__); - exec($this->getinitcommand('xmpp', 'restart')); + exec($this->getinitcommand($conf['xmpp']['init_script'], 'restart')); /* writing new private key to 'smtpd.key' @@ -1679,7 +1691,7 @@ if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true); if(is_file('/etc/suphp/suphp.conf')) { - replaceLine('/etc/suphp/suphp.conf', 'php=php:/usr/bin', 'x-httpd-suphp="php:/usr/bin/php-cgi"', 0); + replaceLine('/etc/suphp/suphp.conf', 'php="php:/usr/bin', 'x-httpd-suphp="php:/usr/bin/php-cgi"', 0); //replaceLine('/etc/suphp/suphp.conf','docroot=','docroot=/var/clients',0); replaceLine('/etc/suphp/suphp.conf', 'umask=0077', 'umask=0022', 0); } @@ -1840,12 +1852,14 @@ public function configure_ufw_firewall() { - $configfile = 'ufw.conf'; - if(is_file('/etc/ufw/ufw.conf')) copy('/etc/ufw/ufw.conf', '/etc/ufw/ufw.conf~'); - $content = rf("tpl/".$configfile.".master"); - wf('/etc/ufw/ufw.conf', $content); - exec('chmod 600 /etc/ufw/ufw.conf'); - exec('chown root:root /etc/ufw/ufw.conf'); + if($this->is_update == false) { + $configfile = 'ufw.conf'; + if(is_file('/etc/ufw/ufw.conf')) copy('/etc/ufw/ufw.conf', '/etc/ufw/ufw.conf~'); + $content = rf("tpl/".$configfile.".master"); + wf('/etc/ufw/ufw.conf', $content); + exec('chmod 600 /etc/ufw/ufw.conf'); + exec('chown root:root /etc/ufw/ufw.conf'); + } } public function configure_bastille_firewall() { -- Gitblit v1.9.1