From f4038a2160d55a7f519a3b42be1aa96e29e9a908 Mon Sep 17 00:00:00 2001 From: ftimme <ft@falkotimme.com> Date: Wed, 27 Feb 2013 09:01:40 -0500 Subject: [PATCH] - Fixed "FUNCTION databasename.CONCAT does not exist" error for older MySQL versions. --- server/plugins-available/apache2_plugin.inc.php | 288 ++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 202 insertions(+), 86 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index c40afbf..87236b4 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -121,8 +121,14 @@ $this->ssl_certificate_changed = true; //* Rename files if they exist - if(file_exists($key_file)) $app->system->rename($key_file,$key_file.'.bak'); - if(file_exists($key_file2)) $app->system->rename($key_file2,$key_file2.'.bak'); + if(file_exists($key_file)){ + $app->system->rename($key_file,$key_file.'.bak'); + $app->system->chmod($key_file.'.bak',0400); + } + if(file_exists($key_file2)){ + $app->system->rename($key_file2,$key_file2.'.bak'); + $app->system->chmod($key_file2.'.bak',0400); + } if(file_exists($csr_file)) $app->system->rename($csr_file,$csr_file.'.bak'); if(file_exists($crt_file)) $app->system->rename($crt_file,$crt_file.'.bak'); @@ -165,11 +171,15 @@ $rand_file = escapeshellcmd($rand_file); $key_file = escapeshellcmd($key_file); + if(substr($domain, 0, 2) == '*.' && strpos($key_file, '/ssl/\*.') != false) $key_file = str_replace('/ssl/\*.', '/ssl/*.', $key_file); // wildcard certificate $key_file2 = escapeshellcmd($key_file2); + if(substr($domain, 0, 2) == '*.' && strpos($key_file2, '/ssl/\*.') != false) $key_file2 = str_replace('/ssl/\*.', '/ssl/*.', $key_file2); // wildcard certificate $ssl_days = 3650; $csr_file = escapeshellcmd($csr_file); + if(substr($domain, 0, 2) == '*.' && strpos($csr_file, '/ssl/\*.') != false) $csr_file = str_replace('/ssl/\*.', '/ssl/*.', $csr_file); // wildcard certificate $config_file = escapeshellcmd($ssl_cnf_file); $crt_file = escapeshellcmd($crt_file); + if(substr($domain, 0, 2) == '*.' && strpos($crt_file, '/ssl/\*.') != false) $crt_file = str_replace('/ssl/\*.', '/ssl/*.', $crt_file); // wildcard certificate if(is_file($ssl_cnf_file) && !is_link($ssl_cnf_file)) { @@ -190,6 +200,7 @@ } + $app->system->chmod($key_file,0400); $app->system->chmod($key_file2,0400); @$app->system->unlink($config_file); @$app->system->unlink($rand_file); @@ -216,8 +227,14 @@ $bundle_file = $ssl_dir.'/'.$domain.".bundle"; //* Backup files - if(file_exists($key_file)) $app->system->copy($key_file,$key_file.'~'); - if(file_exists($key_file2)) $app->system->copy($key_file2,$key_file2.'~'); + if(file_exists($key_file)){ + $app->system->copy($key_file,$key_file.'~'); + $app->system->chmod($key_file.'~',0400); + } + if(file_exists($key_file2)){ + $app->system->copy($key_file2,$key_file2.'~'); + $app->system->chmod($key_file2.'~',0400); + } if(file_exists($csr_file)) $app->system->copy($csr_file,$csr_file.'~'); if(file_exists($crt_file)) $app->system->copy($crt_file,$crt_file.'~'); if(file_exists($bundle_file)) $app->system->copy($bundle_file,$bundle_file.'~'); @@ -226,7 +243,17 @@ if(trim($data["new"]["ssl_request"]) != '') $app->system->file_put_contents($csr_file,$data["new"]["ssl_request"]); if(trim($data["new"]["ssl_cert"]) != '') $app->system->file_put_contents($crt_file,$data["new"]["ssl_cert"]); if(trim($data["new"]["ssl_bundle"]) != '') $app->system->file_put_contents($bundle_file,$data["new"]["ssl_bundle"]); - if(trim($data["new"]["ssl_key"]) != '') $app->system->file_put_contents($key_file2,$data["new"]["ssl_key"]); + + //* Write the key file, if field is empty then import the key into the db + if(trim($data["new"]["ssl_key"]) != '') { + $app->system->file_put_contents($key_file2,$data["new"]["ssl_key"]); + } else { + $ssl_key2 = $app->db->quote($app->system->file_get_contents($key_file2)); + /* Update the DB of the (local) Server */ + $app->db->query("UPDATE web_domain SET ssl_key = '$ssl_key2' WHERE domain = '".$data['new']['domain']."'"); + /* Update also the master-DB of the Server-Farm */ + $app->dbmaster->query("UPDATE web_domain SET ssl_key = '$ssl_key2' WHERE domain = '".$data['new']['domain']."'"); + } /* Update the DB of the (local) Server */ $app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'"); @@ -313,7 +340,7 @@ } if($data['new']['document_root'] == '') { - $app->log('document_root not set',LOGLEVEL_WARN); + if($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain') $app->log('document_root not set',LOGLEVEL_WARN); return 0; } if($data['new']['system_user'] == 'root' or $data['new']['system_group'] == 'root') { @@ -403,41 +430,45 @@ //* Remove protection of old folders $app->system->web_folder_protection($data['old']['document_root'],false); + + if($data["new"]["type"] != "vhostsubdomain") { + //* Move the site data + $tmp_docroot = explode('/',$data['new']['document_root']); + unset($tmp_docroot[count($tmp_docroot)-1]); + $new_dir = implode('/',$tmp_docroot); - //* Move the site data - $tmp_docroot = explode('/',$data['new']['document_root']); - unset($tmp_docroot[count($tmp_docroot)-1]); - $new_dir = implode('/',$tmp_docroot); + $tmp_docroot = explode('/',$data['old']['document_root']); + unset($tmp_docroot[count($tmp_docroot)-1]); + $old_dir = implode('/',$tmp_docroot); - $tmp_docroot = explode('/',$data['old']['document_root']); - unset($tmp_docroot[count($tmp_docroot)-1]); - $old_dir = implode('/',$tmp_docroot); + //* Check if there is already some data in the new docroot and rename it as we need a clean path to move the existing site to the new path + if(@is_dir($data['new']['document_root'])) { + $app->system->web_folder_protection($data['new']['document_root'],false); + $app->system->rename($data['new']['document_root'],$data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s')); + $app->log('Renaming existing directory in new docroot location. mv '.$data['new']['document_root'].' '.$data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'),LOGLEVEL_DEBUG); + } + + //* Create new base directory, if it does not exist yet + if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir); + $app->system->web_folder_protection($data['old']['document_root'],false); + exec('mv '.escapeshellarg($data['old']['document_root']).' '.escapeshellarg($new_dir)); + //$app->system->rename($data['old']['document_root'],$new_dir); + $app->log('Moving site to new document root: mv '.$data['old']['document_root'].' '.$new_dir,LOGLEVEL_DEBUG); - //* Check if there is already some data in the new docroot and rename it as we need a clean path to move the existing site to the new path - if(@is_dir($data['new']['document_root'])) { - $app->system->rename($data['new']['document_root'],$data['new']['document_root'].'_bak_'.date('Y_m_d')); - $app->log('Renaming existing directory in new docroot location. mv '.$data['new']['document_root'].' '.$data['new']['document_root'].'_bak_'.date('Y_m_d'),LOGLEVEL_DEBUG); - } - - //* Create new base directory, if it does not exist yet - if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir); - exec('mv '.escapeshellarg($data['old']['document_root']).' '.escapeshellarg($new_dir)); - //$app->system->rename($data['old']['document_root'],$new_dir); - $app->log('Moving site to new document root: mv '.$data['old']['document_root'].' '.$new_dir,LOGLEVEL_DEBUG); + // Handle the change in php_open_basedir + $data['new']['php_open_basedir'] = str_replace($data['old']['document_root'],$data['new']['document_root'],$data['old']['php_open_basedir']); - // Handle the change in php_open_basedir - $data['new']['php_open_basedir'] = str_replace($data['old']['document_root'],$data['new']['document_root'],$data['old']['php_open_basedir']); + //* Change the owner of the website files to the new website owner + exec('chown --recursive --from='.escapeshellcmd($data['old']['system_user']).':'.escapeshellcmd($data['old']['system_group']).' '.escapeshellcmd($data['new']['system_user']).':'.escapeshellcmd($data['new']['system_group']).' '.$new_dir); - //* Change the owner of the website files to the new website owner - exec('chown --recursive --from='.escapeshellcmd($data['old']['system_user']).':'.escapeshellcmd($data['old']['system_group']).' '.escapeshellcmd($data['new']['system_user']).':'.escapeshellcmd($data['new']['system_group']).' '.$new_dir); - - //* Change the home directory and group of the website user - $command = 'usermod'; - $command .= ' --home '.escapeshellcmd($data['new']['document_root']); - $command .= ' --gid '.escapeshellcmd($data['new']['system_group']); - $command .= ' '.escapeshellcmd($data['new']['system_user']); - exec($command); - + //* Change the home directory and group of the website user + $command = 'killall -u '.escapeshellcmd($data['new']['system_user']).' && usermod'; + $command .= ' --home '.escapeshellcmd($data['new']['document_root']); + $command .= ' --gid '.escapeshellcmd($data['new']['system_group']); + $command .= ' '.escapeshellcmd($data['new']['system_user']).' 2>/dev/null'; + exec($command); + } + if($apache_chrooted) $this->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command); //* Change the log mount @@ -670,7 +701,7 @@ if($web_config['add_web_users_to_sshusers_group'] == 'y') { $command = 'usermod'; $command .= ' --groups sshusers'; - $command .= ' '.escapeshellcmd($data['new']['system_user']); + $command .= ' '.escapeshellcmd($data['new']['system_user']).' 2>/dev/null'; $this->_exec($command); } @@ -791,6 +822,13 @@ if(!stristr($data['new']['custom_php_ini'],'open_basedir') && $data['new']['php'] == 'suphp') { $data['new']['custom_php_ini'] .= "\nopen_basedir = '".$data['new']['php_open_basedir']."'\n"; } + + if(trim($data['new']['fastcgi_php_version']) != ''){ + list($custom_fastcgi_php_name, $custom_fastcgi_php_executable, $custom_fastcgi_php_ini_dir) = explode(':', trim($data['new']['fastcgi_php_version'])); + if(is_file($custom_fastcgi_php_ini_dir)) $custom_fastcgi_php_ini_dir = dirname($custom_fastcgi_php_ini_dir); + if(substr($custom_fastcgi_php_ini_dir,-1) == '/') $custom_fastcgi_php_ini_dir = substr($custom_fastcgi_php_ini_dir,0,-1); + } + //* Create custom php.ini if(trim($data['new']['custom_php_ini']) != '') { $has_custom_php_ini = true; @@ -799,12 +837,25 @@ if($data['new']['php'] == 'mod') { $master_php_ini_path = $web_config['php_ini_path_apache']; } else { - if($data["new"]['php'] == 'fast-cgi' && file_exists($fastcgi_config["fastcgi_phpini_path"])) { - $master_php_ini_path = $fastcgi_config["fastcgi_phpini_path"]; + if($data["new"]['php'] == 'fast-cgi') { + if(trim($data['new']['fastcgi_php_version']) != '' && file_exists($custom_fastcgi_php_ini_dir)){ + $master_php_ini_path = $custom_fastcgi_php_ini_dir; + } elseif(file_exists($fastcgi_config["fastcgi_phpini_path"])){ + $master_php_ini_path = $fastcgi_config["fastcgi_phpini_path"]; + } else { + $master_php_ini_path = $web_config['php_ini_path_cgi']; + } } else { $master_php_ini_path = $web_config['php_ini_path_cgi']; } } + + //* Add php.ini to the path in case that the master_php_ini_path is a directory + if($master_php_ini_path != '' && is_dir($master_php_ini_path) && is_file($master_php_ini_path.'/php.ini')) { + if(substr($master_php_ini_path,-1) == '/') $master_php_ini_path = substr($master_php_ini_path,0,-1); + $master_php_ini_path .= '/php.ini'; + } + if($master_php_ini_path != '' && substr($master_php_ini_path,-7) == 'php.ini' && is_file($master_php_ini_path)) { $php_ini_content .= $app->system->file_get_contents($master_php_ini_path)."\n"; } @@ -1052,10 +1103,6 @@ } else { $tpl->setVar('rewrite_enabled',0); } - - if(count($alias_seo_redirects) > 0) { - $tpl->setLoop('alias_seo_redirects',$alias_seo_redirects); - } //$tpl->setLoop('redirects',$rewrite_rules); @@ -1090,7 +1137,6 @@ // Support for multiple PHP versions (FastCGI) if(trim($data['new']['fastcgi_php_version']) != ''){ $default_fastcgi_php = false; - list($custom_fastcgi_php_name, $custom_fastcgi_php_executable, $custom_fastcgi_php_ini_dir) = explode(':', trim($data['new']['fastcgi_php_version'])); if(substr($custom_fastcgi_php_ini_dir,-1) != '/') $custom_fastcgi_php_ini_dir .= '/'; } else { $default_fastcgi_php = true; @@ -1267,12 +1313,12 @@ //* create empty vhost array $vhosts = array(); - //* Add vhost for ipv4 IP - if(count($rewrite_rules) > 0){ - $vhosts[] = array('ip_address' => $data['new']['ip_address'], 'ssl_enabled' => 0, 'port' => 80, 'redirects' => $rewrite_rules); - } else { - $vhosts[] = array('ip_address' => $data['new']['ip_address'], 'ssl_enabled' => 0, 'port' => 80); - } + //* Add vhost for ipv4 IP + $tmp_vhost_arr = array('ip_address' => $data['new']['ip_address'], 'ssl_enabled' => 0, 'port' => 80); + if(count($rewrite_rules) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('redirects' => $rewrite_rules); + if(count($alias_seo_redirects) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('alias_seo_redirects' => $alias_seo_redirects); + $vhosts[] = $tmp_vhost_arr; + unset($tmp_vhost_arr); //* Add vhost for ipv4 IP with SSL $ssl_dir = $data['new']['document_root'].'/ssl'; @@ -1281,11 +1327,11 @@ $crt_file = $ssl_dir.'/'.$domain.'.crt'; if($data['new']['ssl_domain'] != '' && $data['new']['ssl'] == 'y' && @is_file($crt_file) && @is_file($key_file) && (@filesize($crt_file)>0) && (@filesize($key_file)>0)) { - if(count($rewrite_rules) > 0){ - $vhosts[] = array('ip_address' => $data['new']['ip_address'], 'ssl_enabled' => 1, 'port' => '443', 'redirects' => $rewrite_rules); - } else { - $vhosts[] = array('ip_address' => $data['new']['ip_address'], 'ssl_enabled' => 1, 'port' => '443'); - } + $tmp_vhost_arr = array('ip_address' => $data['new']['ip_address'], 'ssl_enabled' => 1, 'port' => '443'); + if(count($rewrite_rules) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('redirects' => $rewrite_rules); + if(count($alias_seo_redirects) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('alias_seo_redirects' => $alias_seo_redirects); + $vhosts[] = $tmp_vhost_arr; + unset($tmp_vhost_arr); $app->log('Enable SSL for: '.$domain,LOGLEVEL_DEBUG); } @@ -1302,20 +1348,20 @@ $data['new']['ipv6_address'] = implode(':',$explode_v6); } } - if(count($rewrite_rules) > 0){ - $vhosts[] = array('ip_address' => '['.$data['new']['ipv6_address'].']', 'ssl_enabled' => 0, 'port' => 80, 'redirects' => $rewrite_rules); - } else { - $vhosts[] = array('ip_address' => '['.$data['new']['ipv6_address'].']', 'ssl_enabled' => 0, 'port' => 80); - } + + $tmp_vhost_arr = array('ip_address' => '['.$data['new']['ipv6_address'].']', 'ssl_enabled' => 0, 'port' => 80); + if(count($rewrite_rules) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('redirects' => $rewrite_rules); + if(count($alias_seo_redirects) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('alias_seo_redirects' => $alias_seo_redirects); + $vhosts[] = $tmp_vhost_arr; + unset($tmp_vhost_arr); //* Add vhost for ipv6 IP with SSL if($data['new']['ssl_domain'] != '' && $data['new']['ssl'] == 'y' && @is_file($crt_file) && @is_file($key_file) && (@filesize($crt_file)>0) && (@filesize($key_file)>0)) { - - if(count($rewrite_rules) > 0){ - $vhosts[] = array('ip_address' => '['.$data['new']['ipv6_address'].']', 'ssl_enabled' => 1, 'port' => '443', 'redirects' => $rewrite_rules); - } else { - $vhosts[] = array('ip_address' => '['.$data['new']['ipv6_address'].']', 'ssl_enabled' => 1, 'port' => '443'); - } + $tmp_vhost_arr = array('ip_address' => '['.$data['new']['ipv6_address'].']', 'ssl_enabled' => 1, 'port' => '443'); + if(count($rewrite_rules) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('redirects' => $rewrite_rules); + if(count($alias_seo_redirects) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('alias_seo_redirects' => $alias_seo_redirects); + $vhosts[] = $tmp_vhost_arr; + unset($tmp_vhost_arr); $app->log('Enable SSL for IPv6: '.$domain,LOGLEVEL_DEBUG); } } @@ -1386,13 +1432,13 @@ } //* Create .htaccess and .htpasswd file for website statistics - if(!is_file($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess') or $data['old']['document_root'] != $data['new']['document_root']) { - if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdir($data['new']['document_root'].'/' . $web_folder . '/stats'); - $ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user"; - $app->system->file_put_contents($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess',$ht_file); - $app->system->chmod($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess',0755); - unset($ht_file); - } + //if(!is_file($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess') or $data['old']['document_root'] != $data['new']['document_root']) { + if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdir($data['new']['document_root'].'/' . $web_folder . '/stats'); + $ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user"; + $app->system->file_put_contents($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess',$ht_file); + $app->system->chmod($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess',0755); + unset($ht_file); + //} if(!is_file($data['new']['document_root'].'/web/stats/.htpasswd_stats') || $data['new']['stats_password'] != $data['old']['stats_password']) { if(trim($data['new']['stats_password']) != '') { @@ -1400,7 +1446,7 @@ $app->system->web_folder_protection($data['new']['document_root'],false); $app->system->file_put_contents($data['new']['document_root'].'/web/stats/.htpasswd_stats',$htp_file); $app->system->web_folder_protection($data['new']['document_root'],true); - $app->system->chmod($data['new']['document_root'].'/web/stats/.htpasswd_stats',0750); + $app->system->chmod($data['new']['document_root'].'/web/stats/.htpasswd_stats',0755); unset($htp_file); } } @@ -1450,8 +1496,14 @@ $bundle_file = $ssl_dir.'/'.$domain.'.bundle'; //* Backup the files that might have caused the error - if(is_file($key_file)) $app->system->copy($key_file,$key_file.'.err'); - if(is_file($key_file2)) $app->system->copy($key_file2,$key_file2.'.err'); + if(is_file($key_file)){ + $app->system->copy($key_file,$key_file.'.err'); + $app->system->chmod($key_file.'.err',0400); + } + if(is_file($key_file2)){ + $app->system->copy($key_file2,$key_file2.'.err'); + $app->system->chmod($key_file2.'.err',0400); + } if(is_file($csr_file)) $app->system->copy($csr_file,$csr_file.'.err'); if(is_file($crt_file)) $app->system->copy($crt_file,$crt_file.'.err'); if(is_file($bundle_file)) $app->system->copy($bundle_file,$bundle_file.'.err'); @@ -1512,7 +1564,7 @@ $app->uses('system'); $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); - $app->system->web_folder_protection($data['old']['document_root'],false); + if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain') $app->system->web_folder_protection($data['old']['document_root'],false); //* Check if this is a chrooted setup if($web_config['website_basedir'] != '' && @is_file($web_config['website_basedir'].'/etc/passwd')) { @@ -1526,18 +1578,71 @@ $web_folder = ''; if($data['old']['type'] == 'vhostsubdomain') { $tmp = $app->db->queryOneRecord('SELECT `domain`,`document_root` FROM web_domain WHERE domain_id = '.intval($data['old']['parent_domain_id'])); - $subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['old']['domain']); - if($subdomain_host == '') $subdomain_host = 'web'.$data['old']['domain_id']; - $web_folder = $data['old']['web_folder']; - $log_folder .= '/' . $subdomain_host; + if($tmp['domain'] != ''){ + $subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['old']['domain']); + } else { + // get log folder from /etc/fstab + /* + $bind_mounts = $app->system->file_get_contents('/etc/fstab'); + $bind_mount_lines = explode("\n", $bind_mounts); + if(is_array($bind_mount_lines) && !empty($bind_mount_lines)){ + foreach($bind_mount_lines as $bind_mount_line){ + $bind_mount_line = preg_replace('/\s+/', ' ', $bind_mount_line); + $bind_mount_parts = explode(' ', $bind_mount_line); + if(is_array($bind_mount_parts) && !empty($bind_mount_parts)){ + if($bind_mount_parts[0] == '/var/log/ispconfig/httpd/'.$data['old']['domain'] && $bind_mount_parts[2] == 'none' && strpos($bind_mount_parts[3], 'bind') !== false){ + $subdomain_host = str_replace($data['old']['document_root'].'/log/', '', $bind_mount_parts[1]); + } + } + } + } + */ + // we are deleting the parent domain, so we can delete everything in the log directory + $subdomain_hosts = array(); + $files = array_diff(scandir($data['old']['document_root'].'/'.$log_folder), array('.','..')); + if(is_array($files) && !empty($files)){ + foreach($files as $file){ + if(is_dir($data['old']['document_root'].'/'.$log_folder.'/'.$file)){ + $subdomain_hosts[] = $file; + } + } + } + } + if(is_array($subdomain_hosts) && !empty($subdomain_hosts)){ + $log_folders = array(); + foreach($subdomain_hosts as $subdomain_host){ + $log_folders[] = $log_folder.'/'.$subdomain_host; + } + } else { + if($subdomain_host == '') $subdomain_host = 'web'.$data['old']['domain_id']; + $log_folder .= '/' . $subdomain_host; + } + $web_folder = $data['old']['web_folder']; unset($tmp); + unset($subdomain_hosts); } - exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder)); + if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain'){ + if(is_array($log_folders) && !empty($log_folders)){ + foreach($log_folders as $log_folder){ + if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder)); + } + } else { + if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder)); + } + } //* remove mountpoint from fstab - $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$log_folder.' none bind'; - $app->system->removeLine('/etc/fstab',$fstab_line); + if(is_array($log_folders) && !empty($log_folders)){ + foreach($log_folders as $log_folder){ + $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$log_folder.' none bind'; + $app->system->removeLine('/etc/fstab',$fstab_line); + } + } else { + $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$log_folder.' none bind'; + $app->system->removeLine('/etc/fstab',$fstab_line); + } + unset($log_folders); if($data['old']['type'] != 'vhost' && $data['old']['type'] != 'vhostsubdomain' && $data['old']['parent_domain_id'] > 0) { //* This is a alias domain or subdomain, so we have to update the website instead @@ -1703,8 +1808,8 @@ if($data['old']['type'] == 'vhost') { //delete the web user - $command = 'userdel'; - $command .= ' '.$data['old']['system_user']; + $command = 'killall -u '.escapeshellcmd($data['old']['system_user']).' && userdel'; + $command .= ' '.escapeshellcmd($data['old']['system_user']); exec($command); if($apache_chrooted) $this->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command); @@ -2631,6 +2736,17 @@ $client_dir = $web_config['website_basedir'].'/clients/client'.$client_id; if(is_dir($client_dir) && !stristr($client_dir,'..')) { + // remove symlinks from $client_dir + $files = array_diff(scandir($client_dir), array('.','..')); + if(is_array($files) && !empty($files)){ + foreach($files as $file){ + if(is_link($client_dir.'/'.$file)){ + unlink($client_dir.'/'.$file); + $app->log('Removed symlink: '.$client_dir.'/'.$file,LOGLEVEL_DEBUG); + } + } + } + @rmdir($client_dir); $app->log('Removed client directory: '.$client_dir,LOGLEVEL_DEBUG); } -- Gitblit v1.9.1