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 | 413 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 326 insertions(+), 87 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index f867f04..c437ea3 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -36,6 +36,8 @@ public $conf; public $install_ispconfig_interface = true; public $is_update = false; // true if it is an update, falsi if it is a new install + public $min_php = '5.3.3'; // minimal php-version for update / install + protected $mailman_group = 'list'; public function __construct() { @@ -65,6 +67,12 @@ $input = $default; } else { $input = $autoinstall[$name]; + } + } elseif($name != '' && $autoupdate[$name] != '') { + if($autoupdate[$name] == 'default') { + $input = $default; + } else { + $input = $autoupdate[$name]; } } else { $answers_str = implode(',', $answers); @@ -103,6 +111,12 @@ } else { $input = $autoinstall[$name]; } + } elseif($name != '' && $autoupdate[$name] != '') { + if($autoupdate[$name] == 'default') { + $input = $default; + } else { + $input = $autoupdate[$name]; + } } else { swrite($this->lng($query).' ['.$default.']: '); $input = sread(); @@ -129,6 +143,12 @@ } */ + //** Detect PHP-Version + public function get_php_version() { + if(version_compare(PHP_VERSION, $this->min_php, '<')) return false; + else return true; + } + //** Detect installed applications public function find_installed_apps() { global $conf; @@ -151,34 +171,67 @@ 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['spamassasin']['installed'] = true; - if(is_installed('vlogger')) $conf['vlogger']['installed'] = true; - if(is_installed('cron')) $conf['cron']['installed'] = true; + if(is_installed('spamassassin')) $conf['spamassassin']['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) { + public function force_configure_app($service, $enable_force=true) { $force = false; - swriteln("[WARN] autodetect for $service failed"); - if(strtolower($this->simple_query("Force configure $service", array('y', 'n'), 'n') ) == 'y') { -// swriteln("Configure $service"); - $force = true; - } else swriteln("Skipping $service\n"); + 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; + } else swriteln("Skipping $service\n"); + } return $force; } + public function reconfigure_app($service, $reconfigure_services_answer) { + $reconfigure = false; + if ($reconfigure_services_answer != 'selected') { + $reconfigure = true; + } else { + if(strtolower($this->simple_query("Reconfigure $service", array('y', 'n'), 'y') ) == 'y') { + $reconfigure = true; + } else { + swriteln("Skip reconfigure $service\n"); + } + } + return $reconfigure; + } /** Create the database for ISPConfig */ public function configure_database() { global $conf; + + //* 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') { + 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'])) { @@ -224,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']); @@ -252,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']; @@ -326,7 +376,7 @@ $conf['server_id'] = $conf['server_id']; //* Insert the same record in the local DB - $sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`,`firewall_server`,`proxy_server`) VALUES (?,1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);"; + $sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`,`firewall_server`,`proxy_server`) VALUES (?,1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);"; $this->db->query($sql, $conf['server_id'], $conf['hostname'], $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $server_ini_content, $current_db_version, $proxy_server_enabled, $firewall_server_enabled); //* username for the ispconfig user @@ -343,6 +393,84 @@ } + } + + public function detect_ips(){ + global $conf; + + exec("ip addr show | awk '/global/ { print $2 }' | cut -d '/' -f 1", $output, $retval); + + if($retval == 0){ + if(is_array($output) && !empty($output)){ + foreach($output as $line){ + $line = trim($line); + $ip_type = ''; + if (filter_var($line, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { + $ip_type = 'IPv4'; + } + if (filter_var($line, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { + $ip_type = 'IPv6'; + } + if($ip_type == '') continue; + if($this->db->dbHost != $this->dbmaster->dbHost){ + $this->dbmaster->query('INSERT INTO server_ip ( + sys_userid, sys_groupid, sys_perm_user, sys_perm_group, + sys_perm_other, server_id, client_id, ip_type, ip_address, + virtualhost, virtualhost_port + ) VALUES ( + 1, + 1, + "riud", + "riud", + "", + ?, + 0, + ?, + ?, + "y", + "80,443" + )', $conf['server_id'], $ip_type, $line); + $server_ip_id = $this->dbmaster->insertID(); + $this->db->query('INSERT INTO server_ip ( + server_php_id, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, + sys_perm_other, server_id, client_id, ip_type, ip_address, + virtualhost, virtualhost_port + ) VALUES ( + ?, + 1, + 1, + "riud", + "riud", + "", + ?, + 0, + ?, + ?, + "y", + "80,443" + )', $server_ip_id, $conf['server_id'], $ip_type, $line); + } else { + $this->db->query('INSERT INTO server_ip ( + sys_userid, sys_groupid, sys_perm_user, sys_perm_group, + sys_perm_other, server_id, client_id, ip_type, ip_address, + virtualhost, virtualhost_port + ) VALUES ( + 1, + 1, + "riud", + "riud", + "", + ?, + 0, + ?, + ?, + "y", + "80,443" + )', $conf['server_id'], $ip_type, $line); + } + } + } + } } public function grant_master_database_rights($verbose = false) { @@ -536,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'); } } @@ -616,7 +749,7 @@ if (trim($line) != '' && substr($line, 0, 1) != '#') { @list($key, $value) = @explode("=", $line); - if (!empty($value)) + if (isset($value) && $value !== '') { $key = rtrim($key); $old_options[$key] = trim($value); @@ -665,14 +798,36 @@ } else { copy('tpl/mailman-virtual_to_transport.sh', $full_file_name); } - chgrp($full_file_name, 'list'); + chgrp($full_file_name, $this->mailman_group); chmod($full_file_name, 0755); } //* Create aliasaes exec('/usr/lib/mailman/bin/genaliases 2>/dev/null'); - if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman'); + if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman'); + exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman'); + } + + 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 = '') { @@ -772,6 +927,8 @@ } unset($server_ini_array); + $tmp = str_replace('.','\.',$conf['hostname']); + $postconf_placeholders = array('{config_dir}' => $config_dir, '{vmail_mailbox_base}' => $cf['vmail_mailbox_base'], '{vmail_userid}' => $cf['vmail_userid'], @@ -779,6 +936,7 @@ '{rbl_list}' => $rbl_list, '{greylisting}' => $greylisting, '{reject_slm}' => $reject_sender_login_mismatch, + '{myhostname}' => $tmp, ); $postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_postfix.conf.master', 'tpl/debian_postfix.conf.master'); @@ -809,6 +967,27 @@ if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman'); exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman'); + //* 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~'); @@ -837,19 +1016,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->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 { + $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'; @@ -992,6 +1182,8 @@ global $conf; $virtual_transport = 'dovecot'; + + $configure_lmtp = false; // check if virtual_transport must be changed if ($this->is_update) { @@ -1001,27 +1193,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']; + $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->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=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); } - 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 @@ -1042,6 +1235,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.'~'); @@ -1071,6 +1265,11 @@ } } + //* dovecot-lmtpd + if($configure_lmtp) { + replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0); + } + //* dovecot-sql.conf $configfile = 'dovecot-sql.conf'; if(is_file($config_dir.'/'.$configfile)) { @@ -1084,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); @@ -1133,28 +1336,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 - 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']['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 = 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(!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'); @@ -1284,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", @@ -1313,6 +1518,27 @@ } + + //** writes bind configuration files + public function process_bind_file($configfile, $target='/', $absolute=false) { + global $conf; + + if ($absolute) $full_file_name = $target.$configfile; + else $full_file_name = $conf['ispconfig_install_dir'].$target.$configfile; + + //* Backup exiting file + if(is_file($full_file_name)) { + copy($full_file_name, $config_dir.$configfile.'~'); + } + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master'); + $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content); + $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content); + $content = str_replace('{mysql_server_ispconfig_database}', $conf['mysql']['database'], $content); + $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content); + $content = str_replace('{ispconfig_install_dir}', $conf['ispconfig_install_dir'], $content); + $content = str_replace('{dnssec_conffile}', $conf['ispconfig_install_dir'].'/server/scripts/dnssec-config.sh', $content); + wf($full_file_name, $content); + } public function configure_bind() { global $conf; @@ -1325,13 +1551,15 @@ //* Create the slave subdirectory $content .= 'slave'; - if(!@is_dir($content)) mkdir($content, 2770, true); + if(!@is_dir($content)) mkdir($content, 02770, true); //* Chown the slave subdirectory to $conf['bind']['bind_user'] chown($content, $conf['bind']['bind_user']); chgrp($content, $conf['bind']['bind_group']); - chmod($content, 2770); - + chmod($content, 02770); + + //* Install scripts for dnssec implementation + $this->process_bind_file('named.conf.options', '/etc/bind/', true); //TODO replace hardcoded path } @@ -1412,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' @@ -1463,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); } @@ -1480,6 +1708,11 @@ // Comment out the namevirtualhost lines, as they were added by ispconfig in ispconfig.conf file again replaceLine('/etc/apache2/ports.conf', 'NameVirtualHost *:80', '# NameVirtualHost *:80', 1); replaceLine('/etc/apache2/ports.conf', 'NameVirtualHost *:443', '# NameVirtualHost *:443', 1); + } + + if(is_file('/etc/apache2/mods-available/fcgid.conf')) { + // add or modify the parameters for fcgid.conf + replaceLine('/etc/apache2/mods-available/fcgid.conf','MaxRequestLen','MaxRequestLen 15728640',1); } if(is_file('/etc/apache2/apache.conf')) { @@ -1619,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() { @@ -1855,6 +2090,10 @@ } $content = str_replace('{use_tcp}', $use_tcp, $content); $content = str_replace('{use_socket}', $use_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); -- Gitblit v1.9.1