From ebd0e986ed11f2a34fb58cdd33efbfab192083ad Mon Sep 17 00:00:00 2001 From: Till Brehm <tbrehm@ispconfig.org> Date: Fri, 22 Apr 2016 05:26:17 -0400 Subject: [PATCH] Added PHP 7 check in installer and updater. --- install/lib/installer_base.lib.php | 263 ++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 201 insertions(+), 62 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 60ad43b..4adec7f 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -56,12 +56,21 @@ echo 'WARNING: '.$msg."\n"; } - public function simple_query($query, $answers, $default) { + public function simple_query($query, $answers, $default, $name = '') { + global $autoinstall; $finished = false; do { - $answers_str = implode(',', $answers); - swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: '); - $input = sread(); + if($name != '' && $autoinstall[$name] != '') { + if($autoinstall[$name] == 'default') { + $input = $default; + } else { + $input = $autoinstall[$name]; + } + } else { + $answers_str = implode(',', $answers); + swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: '); + $input = sread(); + } //* Stop the installation if($input == 'quit') { @@ -86,9 +95,18 @@ return $answer; } - public function free_query($query, $default) { - swrite($this->lng($query).' ['.$default.']: '); - $input = sread(); + public function free_query($query, $default, $name = '') { + global $autoinstall; + if($name != '' && $autoinstall[$name] != '') { + if($autoinstall[$name] == 'default') { + $input = $default; + } else { + $input = $autoinstall[$name]; + } + } else { + swrite($this->lng($query).' ['.$default.']: '); + $input = sread(); + } //* Stop the installation if($input == 'quit') { @@ -628,16 +646,17 @@ copy('tpl/mailman-virtual_to_transport.sh', $full_file_name); } chgrp($full_file_name, 'list'); - chmod($full_file_name, 0750); + 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'); } public function configure_postfix($options = '') { - global $conf; + global $conf,$autoinstall; $cf = $conf['postfix']; $config_dir = $cf['config_dir']; @@ -689,7 +708,7 @@ if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); //* These postconf commands will be executed on installation and update - $server_ini_rec = $this->db->queryOneRecord("SELECT config FROM server WHERE server_id = ".$conf['server_id']); + $server_ini_rec = $this->db->queryOneRecord("SELECT config FROM `" . $this->db->quote($conf["mysql"]["database"]) . "`.`server` WHERE server_id = ".$conf['server_id']); $server_ini_array = ini_to_array(stripslashes($server_ini_rec['config'])); unset($server_ini_rec); @@ -749,8 +768,13 @@ if(!stristr($options, 'dont-create-certs')) { //* Create the SSL certificate - $command = 'cd '.$config_dir.'; ' - .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509'; + if(AUTOINSTALL){ + $command = 'cd '.$config_dir.'; ' + ."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509"; + } else { + $command = 'cd '.$config_dir.'; ' + .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509'; + } exec($command); $command = 'chmod o= '.$config_dir.'/smtpd.key'; @@ -959,19 +983,20 @@ //* Get the dovecot version exec('dovecot --version', $tmp); - $parts = explode('.', trim($tmp[0])); - $dovecot_version = $parts[0]; + $dovecot_version = $tmp[0]; unset($tmp); - unset($parts); //* Copy dovecot configuration file - if($dovecot_version == 2) { + if(version_compare($dovecot_version,2) >= 0) { if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot2.conf.master')) { copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot2.conf.master', $config_dir.'/'.$configfile); } else { copy('tpl/debian_dovecot2.conf.master', $config_dir.'/'.$configfile); } replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0); + if(version_compare($dovecot_version,2.1) < 0) { + removeLine($config_dir.'/'.$configfile, 'ssl_protocols ='); + } } else { if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot.conf.master')) { copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot.conf.master', $config_dir.'/'.$configfile); @@ -991,11 +1016,15 @@ $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content); $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content); $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); + $content = str_replace('{server_id}', $conf['server_id'], $content); wf($config_dir.'/'.$configfile, $content); chmod($config_dir.'/'.$configfile, 0600); chown($config_dir.'/'.$configfile, 'root'); chgrp($config_dir.'/'.$configfile, 'root'); + + // Dovecot shall ignore mounts in website directory + if(is_installed('doveadm')) exec("doveadm mount add '/var/www/*' ignore > /dev/null 2> /dev/null"); } @@ -1005,7 +1034,7 @@ // amavisd user config file $configfile = 'amavisd_user_config'; if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) copy($conf['amavis']['config_dir'].'/conf.d/50-user', $conf['amavis']['config_dir'].'/50-user~'); - if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user~')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user~', 0400); + if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400); $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); @@ -1013,6 +1042,7 @@ $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content); $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content); wf($conf['amavis']['config_dir'].'/conf.d/50-user', $content); + chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640); // TODO: chmod and chown on the config file @@ -1201,11 +1231,12 @@ //* Create the slave subdirectory $content .= 'slave'; - if(!@is_dir($content)) mkdir($content, 0770, true); + if(!@is_dir($content)) mkdir($content, 2770, 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); } @@ -1232,14 +1263,28 @@ if(is_file('/etc/apache2/ports.conf')) { // add a line "Listen 443" to ports conf if line does not exist replaceLine('/etc/apache2/ports.conf', 'Listen 443', 'Listen 443', 1); + + // 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/apache.conf')) { if(hasLine('/etc/apache2/apache.conf', 'Include sites-enabled/', 1) == false) { - if(hasLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.conf', 1) == false) { + if(hasLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.conf', 1) == false && hasLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/', 1) == false) { replaceLine('/etc/apache2/apache.conf', 'Include sites-enabled/', 'Include sites-enabled/', 1, 1); } elseif(hasLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.vhost', 1) == false) { - replaceLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.vhost', 'IncludeOptional sites-enabled/*.vhost', 1, 1); + replaceLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.vhost', 'IncludeOptional sites-enabled/', 1, 1); + } + } + } + + if(is_file('/etc/apache2/apache2.conf')) { + if(hasLine('/etc/apache2/apache2.conf', 'Include sites-enabled/', 1) == false && hasLine('/etc/apache2/apache2.conf', 'IncludeOptional sites-enabled/', 1) == false) { + if(hasLine('/etc/apache2/apache2.conf', 'Include sites-enabled/*.conf', 1) == true) { + replaceLine('/etc/apache2/apache2.conf', 'Include sites-enabled/*.conf', 'Include sites-enabled/', 1, 1); + } elseif(hasLine('/etc/apache2/apache2.conf', 'IncludeOptional sites-enabled/*.conf', 1) == true) { + replaceLine('/etc/apache2/apache2.conf', 'IncludeOptional sites-enabled/*.conf', 'IncludeOptional sites-enabled/', 1, 1); } } } @@ -1248,11 +1293,12 @@ $vhost_conf_dir = $conf['apache']['vhost_conf_dir']; $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir']; - // copy('tpl/apache_ispconfig.conf.master',$vhost_conf_dir.'/ispconfig.conf'); - - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig.conf.master', 'tpl/apache_ispconfig.conf.master'); + $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'"); - + $ip_addresses = array(); + if(is_array($records) && count($records) > 0) { foreach($records as $rec) { if($rec['ip_type'] == 'IPv6') { @@ -1265,15 +1311,17 @@ foreach($ports as $port) { $port = intval($port); if($port > 0 && $port < 65536 && $ip_address != '') { - $content .= 'NameVirtualHost '.$ip_address.":".$port."\n"; + $ip_addresses[] = array('ip_address' => $ip_address, 'port' => $port); } } } } } - - $content .= "\n"; - wf($vhost_conf_dir.'/ispconfig.conf', $content); + + if(count($ip_addresses) > 0) $tpl->setLoop('ip_adresses',$ip_addresses); + + wf($vhost_conf_dir.'/ispconfig.conf', $tpl->grab()); + unset($tpl); if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.conf')) { symlink($vhost_conf_dir.'/ispconfig.conf', $vhost_conf_enabled_dir.'/000-ispconfig.conf'); @@ -1527,23 +1575,24 @@ } // Dont just copy over the virtualhost template but add some custom settings - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_apps.vhost.master', 'tpl/apache_apps.vhost.master'); - - $content = str_replace('{apps_vhost_ip}', $conf['web']['apps_vhost_ip'], $content); - $content = str_replace('{apps_vhost_port}', $conf['web']['apps_vhost_port'], $content); - $content = str_replace('{apps_vhost_dir}', $conf['web']['website_basedir'].'/apps', $content); - $content = str_replace('{website_basedir}', $conf['web']['website_basedir'], $content); - $content = str_replace('{apps_vhost_servername}', $apps_vhost_servername, $content); + $tpl = new tpl('apache_apps.vhost.master'); + $tpl->setVar('apps_vhost_ip',$conf['web']['apps_vhost_ip']); + $tpl->setVar('apps_vhost_port',$conf['web']['apps_vhost_port']); + $tpl->setVar('apps_vhost_dir',$conf['web']['website_basedir'].'/apps'); + $tpl->setVar('apps_vhost_basedir',$conf['web']['website_basedir']); + $tpl->setVar('apps_vhost_servername',$apps_vhost_servername); + $tpl->setVar('apache_version',getapacheversion()); // comment out the listen directive if port is 80 or 443 if($conf['web']['apps_vhost_ip'] == 80 or $conf['web']['apps_vhost_ip'] == 443) { - $content = str_replace('{vhost_port_listen}', '#', $content); + $tpl->setVar('vhost_port_listen','#'); } else { - $content = str_replace('{vhost_port_listen}', '', $content); + $tpl->setVar('vhost_port_listen',''); } - wf($vhost_conf_dir.'/apps.vhost', $content); + wf($vhost_conf_dir.'/apps.vhost', $tpl->grab()); + unset($tpl); //copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost"); //* and create the symlink @@ -1576,7 +1625,8 @@ if(!is_user($apps_vhost_user)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); - $command = 'adduser '.$conf['nginx']['user'].' '.$apps_vhost_group; + //$command = 'adduser '.$conf['nginx']['user'].' '.$apps_vhost_group; + $command = 'usermod -a -G '.$apps_vhost_group.' '.$conf['nginx']['user']; caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); if(!@is_dir($install_dir)){ @@ -1648,7 +1698,7 @@ } public function make_ispconfig_ssl_cert() { - global $conf; + global $conf,$autoinstall; $install_dir = $conf['ispconfig_install_dir']; @@ -1660,11 +1710,17 @@ $ssl_pw = substr(md5(mt_rand()), 0, 6); exec("openssl genrsa -des3 -passout pass:$ssl_pw -out $ssl_key_file 4096"); - exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -out $ssl_csr_file"); + if(AUTOINSTALL){ + exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -key $ssl_key_file -out $ssl_csr_file"); + } else { + exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -out $ssl_csr_file"); + } exec("openssl req -x509 -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -in $ssl_csr_file -out $ssl_crt_file -days 3650"); exec("openssl rsa -passin pass:$ssl_pw -in $ssl_key_file -out $ssl_key_file.insecure"); rename($ssl_key_file, $ssl_key_file.'.secure'); rename($ssl_key_file.'.insecure', $ssl_key_file); + + exec('chown -R root:root /usr/local/ispconfig/interface/ssl'); } @@ -1693,6 +1749,31 @@ //* copy the ISPConfig server part $command = 'cp -rf ../server '.$install_dir; caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + + //* Make a backup of the security settings + if(is_file('/usr/local/ispconfig/security/security_settings.ini')) copy('/usr/local/ispconfig/security/security_settings.ini','/usr/local/ispconfig/security/security_settings.ini~'); + + //* copy the ISPConfig security part + $command = 'cp -rf ../security '.$install_dir; + caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + + //* Apply changed security_settings.ini values to new security_settings.ini file + if(is_file('/usr/local/ispconfig/security/security_settings.ini~')) { + $security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~')); + $security_settings_new = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini')); + if(is_array($security_settings_new) && is_array($security_settings_old)) { + foreach($security_settings_new as $section => $sval) { + if(is_array($sval)) { + foreach($sval as $key => $val) { + if(isset($security_settings_old[$section]) && isset($security_settings_old[$section][$key])) { + $security_settings_new[$section][$key] = $security_settings_old[$section][$key]; + } + } + } + } + file_put_contents('/usr/local/ispconfig/security/security_settings.ini',array_to_ini($security_settings_new)); + } + } //* Create a symlink, so ISPConfig is accessible via web // Replaced by a separate vhost definition for port 8080 @@ -1834,12 +1915,38 @@ } - //* Chmod the files - $command = 'chmod -R 750 '.$install_dir; + // chown install dir to root and chmod 755 + $command = 'chown root:root '.$install_dir; + caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + $command = 'chmod 755 '.$install_dir; caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); - //* chown the files to the ispconfig user and group - $command = 'chown -R ispconfig:ispconfig '.$install_dir; + //* Chmod the files and directories in the install dir + $command = 'chmod -R 750 '.$install_dir.'/*'; + caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + + //* chown the interface files to the ispconfig user and group + $command = 'chown -R ispconfig:ispconfig '.$install_dir.'/interface'; + caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + + //* chown the server files to the root user and group + $command = 'chown -R root:root '.$install_dir.'/server'; + caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + + //* chown the security files to the root user and group + $command = 'chown -R root:root '.$install_dir.'/security'; + caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + + //* chown the security directory and security_settings.ini to root:ispconfig + $command = 'chown root:ispconfig '.$install_dir.'/security/security_settings.ini'; + caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + $command = 'chown root:ispconfig '.$install_dir.'/security'; + caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + $command = 'chown root:ispconfig '.$install_dir.'/security/ids.whitelist'; + caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + $command = 'chown root:ispconfig '.$install_dir.'/security/ids.htmlfield'; + caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + $command = 'chown root:ispconfig '.$install_dir.'/security/apache_directives.blacklist'; caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); //* Make the global language file directory group writable @@ -1892,6 +1999,8 @@ exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices')); exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices')); } + + exec('chown -R root:root /usr/local/ispconfig/interface/ssl'); // TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing // and must be fixed as this will allow the apache user to read the ispconfig files. @@ -1923,30 +2032,31 @@ $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir']; // Dont just copy over the virtualhost template but add some custom settings - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig.vhost.master', 'tpl/apache_ispconfig.vhost.master'); - $content = str_replace('{vhost_port}', $conf['apache']['vhost_port'], $content); + $tpl = new tpl('apache_ispconfig.vhost.master'); + $tpl->setVar('vhost_port',$conf['apache']['vhost_port']); // comment out the listen directive if port is 80 or 443 if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) { - $content = str_replace('{vhost_port_listen}', '#', $content); + $tpl->setVar('vhost_port_listen','#'); } else { - $content = str_replace('{vhost_port_listen}', '', $content); + $tpl->setVar('vhost_port_listen',''); } if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) { - $content = str_replace('{ssl_comment}', '', $content); + $tpl->setVar('ssl_comment',''); } else { - $content = str_replace('{ssl_comment}', '#', $content); + $tpl->setVar('ssl_comment','#'); } if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key') && is_file($install_dir.'/interface/ssl/ispserver.bundle')) { - $content = str_replace('{ssl_bundle_comment}', '', $content); + $tpl->setVar('ssl_bundle_comment',''); } else { - $content = str_replace('{ssl_bundle_comment}', '#', $content); + $tpl->setVar('ssl_bundle_comment','#'); } + + $tpl->setVar('apache_version',getapacheversion()); - wf($vhost_conf_dir.'/ispconfig.vhost', $content); + wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab()); - //copy('tpl/apache_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost'); //* and create the symlink if($this->is_update == false) { if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost'); @@ -2081,8 +2191,21 @@ //* Remove Domain module as its functions are available in the client module now if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain'); - - + + //* Disable rkhunter run and update in debian cronjob as ispconfig is running and updating rkhunter + if(is_file('/etc/default/rkhunter')) { + replaceLine('/etc/default/rkhunter', 'CRON_DAILY_RUN="yes"', 'CRON_DAILY_RUN="no"', 1, 0); + replaceLine('/etc/default/rkhunter', 'CRON_DB_UPDATE="yes"', 'CRON_DB_UPDATE="no"', 1, 0); + } + + // 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); } public function configure_dbserver() { @@ -2102,7 +2225,7 @@ $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mysql_clientdb.conf.master', 'tpl/mysql_clientdb.conf.master'); $content = str_replace('{hostname}', $conf['mysql']['host'], $content); $content = str_replace('{username}', $conf['mysql']['admin_user'], $content); - $content = str_replace('{password}', $conf['mysql']['admin_password'], $content); + $content = str_replace('{password}', addslashes($conf['mysql']['admin_password']), $content); wf($install_dir.'/server/lib/mysql_clientdb.conf', $content); chmod($install_dir.'/server/lib/mysql_clientdb.conf', 0600); chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root'); @@ -2171,18 +2294,34 @@ chmod($conf['ispconfig_log_dir'].'/cron.log', 0660); } + + // This function is called at the end of the update process and contains code to clean up parts of old ISPCONfig releases + public function cleanup_ispconfig() { + global $app,$conf; + + // Remove directories recursively + if(is_dir('/usr/local/ispconfig/interface/web/designer')) exec('rm -rf /usr/local/ispconfig/interface/web/designer'); + if(is_dir('/usr/local/ispconfig/interface/web/themes/default-304')) exec('rm -rf /usr/local/ispconfig/interface/web/themes/default-304'); + + // Remove files + if(is_file('/usr/local/ispconfig/interface/lib/classes/db_firebird.inc.php')) unlink('/usr/local/ispconfig/interface/lib/classes/db_firebird.inc.php'); + if(is_file('/usr/local/ispconfig/interface/lib/classes/form.inc.php')) unlink('/usr/local/ispconfig/interface/lib/classes/form.inc.php'); + + + + } public function getinitcommand($servicename, $action, $init_script_directory = ''){ global $conf; - // systemd - if(is_executable('/bin/systemd')){ - return 'systemctl '.$action.' '.$servicename.'.service'; - } // upstart if(is_executable('/sbin/initctl')){ exec('/sbin/initctl version 2>/dev/null | /bin/grep -q upstart', $retval['output'], $retval['retval']); if(intval($retval['retval']) == 0) return 'service '.$servicename.' '.$action; } + // systemd + if(is_executable('/bin/systemd') || is_executable('/usr/bin/systemctl')){ + return 'systemctl '.$action.' '.$servicename.'.service'; + } // sysvinit if($init_script_directory == '') $init_script_directory = $conf['init_scripts']; if(substr($init_script_directory, -1) === '/') $init_script_directory = substr($init_script_directory, 0, -1); -- Gitblit v1.9.1