From 219bb4b7f28b2f5670fe2d8e7e6a09fbfd3ec70a Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Thu, 20 Oct 2011 05:32:09 -0400 Subject: [PATCH] - Fixed bug in web folder delete function. --- server/plugins-available/nginx_plugin.inc.php | 68 +++++++++++++++++++-------------- 1 files changed, 39 insertions(+), 29 deletions(-) diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index d45ee0c..000b491 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -828,7 +828,8 @@ $tpl->setVar('stats_auth_passwd_file', $data['new']['document_root']."/.htpasswd_stats"); // Create basic http auth for other directories - $tpl->setLoop('basic_auth_locations', $this->_create_web_folder_auth_configuration($data['new'])); + $basic_auth_locations = $this->_create_web_folder_auth_configuration($data['new']); + if(is_array($basic_auth_locations) && !empty($basic_auth_locations)) $tpl->setLoop('basic_auth_locations', $basic_auth_locations); $vhost_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost'); //* Make a backup copy of vhost file @@ -950,9 +951,9 @@ //* Check if this is a chrooted setup if($web_config['website_basedir'] != '' && @is_file($web_config['website_basedir'].'/etc/passwd')) { - $apache_chrooted = true; + $nginx_chrooted = true; } else { - $apache_chrooted = false; + $nginx_chrooted = false; } if($data['old']['type'] != 'vhost' && $data['old']['parent_domain_id'] > 0) { @@ -967,26 +968,34 @@ } else { //* This is a website - // Deleting the vhost file, symlink and the data directory - $vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost'); - unlink($vhost_symlink); - $app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file,LOGLEVEL_DEBUG); - + // Deleting the vhost file, symlink and the data directory $vhost_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost'); + + $vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost'); + if(is_link($vhost_symlink)){ + unlink($vhost_symlink); + $app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file,LOGLEVEL_DEBUG); + } + $vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost'); + if(is_link($vhost_symlink)){ + unlink($vhost_symlink); + $app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file,LOGLEVEL_DEBUG); + } + $vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost'); + if(is_link($vhost_symlink)){ + unlink($vhost_symlink); + $app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file,LOGLEVEL_DEBUG); + } + unlink($vhost_file); $app->log('Removing vhost file: '.$vhost_file,LOGLEVEL_DEBUG); - - // delete file for basic http authentication - $basic_auth_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.auth'); - unlink($basic_auth_file); - $app->log('Removing auth file: '.$basic_auth_file,LOGLEVEL_DEBUG); $docroot = escapeshellcmd($data['old']['document_root']); if($docroot != '' && !stristr($docroot,'..')) exec('rm -rf '.$docroot); - - //remove the php fastgi starter script if available + //remove the php fastgi starter script and PHP-FPM pool definition if available if ($data['old']['php'] == 'fast-cgi') { + $this->php_fpm_pool_delete($data,$web_config); $fastcgi_starter_path = str_replace('[system_user]',$data['old']['system_user'],$web_config['fastcgi_starter_path']); if (is_dir($fastcgi_starter_path)) { exec('rm -rf '.$fastcgi_starter_path); @@ -1035,16 +1044,14 @@ $command = 'userdel'; $command .= ' '.$data['old']['system_user']; exec($command); - if($apache_chrooted) $this->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command); + if($nginx_chrooted) $this->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command); //* Remove the awstats configuration file if($data['old']['stats_type'] == 'awstats') { $this->awstats_delete($data,$web_config); } - if($data['old']['php'] == 'fast-cgi') { - $this->php_fpm_pool_delete($data,$web_config); - } + $app->services->restartServiceDelayed('httpd','reload'); } } @@ -1098,7 +1105,7 @@ if(substr($folder['path'],0,1) == '/') $folder['path'] = substr($folder['path'],1); if(substr($folder['path'],-1) == '/') $folder['path'] = substr($folder['path'],0,-1); $folder_path = escapeshellcmd($website['document_root'].'/web/'.$folder['path']); - if(substr($folder_path,-1 != '/')) $folder_path .= '/'; + if(substr($folder_path,-1) != '/' && $folder['path'] != '') $folder_path .= '/'; //* Check if the resulting path is inside the docroot if(stristr($folder_path,'..') || stristr($folder_path,'./') || stristr($folder_path,'\\')) { @@ -1116,6 +1123,7 @@ $app->log('Created file'.$folder_path.'.htpasswd',LOGLEVEL_DEBUG); } + /* $auth_users = $app->db->queryAllRecords("SELECT * FROM web_folder_user WHERE active = 'y' AND web_folder_id = ".intval($folder_id)); $htpasswd_content = ''; if(is_array($auth_users) && !empty($auth_users)){ @@ -1126,9 +1134,9 @@ $htpasswd_content = trim($htpasswd_content); @file_put_contents($folder_path.'.htpasswd', $htpasswd_content); $app->log('Changed .htpasswd file: '.$folder_path.'.htpasswd',LOGLEVEL_DEBUG); + */ - /* - if($data['new']['username'] != $data['old']['username'] || $data['new']['active'] == 'n') { + if(($data['new']['username'] != $data['old']['username'] || $data['new']['active'] == 'n') && $data['old']['username'] != '') { $app->system->removeLine($folder_path.'.htpasswd',$data['old']['username'].':'); $app->log('Removed user: '.$data['old']['username'],LOGLEVEL_DEBUG); } @@ -1143,8 +1151,8 @@ $app->log('Added or updated user: '.$data['new']['username'],LOGLEVEL_DEBUG); } } - */ + // write basic auth configuration to vhost file because nginx does not support .htaccess $webdata['new'] = $webdata['old'] = $website; $this->update('web_domain_update', $webdata); } @@ -1167,7 +1175,7 @@ if(substr($folder['path'],0,1) == '/') $folder['path'] = substr($folder['path'],1); if(substr($folder['path'],-1) == '/') $folder['path'] = substr($folder['path'],0,-1); $folder_path = realpath($website['document_root'].'/web/'.$folder['path']); - if(substr($folder_path,-1 != '/')) $folder_path .= '/'; + if(substr($folder_path,-1) != '/' && $folder['path'] != '') $folder_path .= '/'; //* Check if the resulting path is inside the docroot if(substr($folder_path,0,strlen($website['document_root'])) != $website['document_root']) { @@ -1181,6 +1189,7 @@ $app->log('Removed file '.$folder_path.'.htpasswd',LOGLEVEL_DEBUG); } + // write basic auth configuration to vhost file because nginx does not support .htaccess $webdata['new'] = $webdata['old'] = $website; $this->update('web_domain_update', $webdata); } @@ -1199,13 +1208,13 @@ //* Get the folder path. if(substr($data['old']['path'],0,1) == '/') $data['old']['path'] = substr($data['old']['path'],1); if(substr($data['old']['path'],-1) == '/') $data['old']['path'] = substr($data['old']['path'],0,-1); - $old_folder_path = escapeshellcmd($website['document_root'].'/web/'.$data['old']['path']); - if(substr($old_folder_path,-1 != '/')) $old_folder_path .= '/'; + $old_folder_path = realpath($website['document_root'].'/web/'.$data['old']['path']); + if(substr($old_folder_path,-1) != '/' && $data['old']['path'] != '') $old_folder_path .= '/'; if(substr($data['new']['path'],0,1) == '/') $data['new']['path'] = substr($data['new']['path'],1); if(substr($data['new']['path'],-1) == '/') $data['new']['path'] = substr($data['new']['path'],0,-1); $new_folder_path = escapeshellcmd($website['document_root'].'/web/'.$data['new']['path']); - if(substr($new_folder_path,-1 != '/')) $new_folder_path .= '/'; + if(substr($new_folder_path,-1) != '/' && $data['new']['path'] != '') $new_folder_path .= '/'; //* Check if the resulting path is inside the docroot if(stristr($new_folder_path,'..') || stristr($new_folder_path,'./') || stristr($new_folder_path,'\\')) { @@ -1236,11 +1245,12 @@ //* move .htpasswd file if(is_file($old_folder_path.'.htpasswd')) { rename($old_folder_path.'.htpasswd',$new_folder_path.'.htpasswd'); - $app->log('Moved file '.$new_folder_path.'.htpasswd',LOGLEVEL_DEBUG); + $app->log('Moved file '.$old_folder_path.'.htpasswd to '.$new_folder_path.'.htpasswd',LOGLEVEL_DEBUG); } } + // write basic auth configuration to vhost file because nginx does not support .htaccess $webdata['new'] = $webdata['old'] = $website; $this->update('web_domain_update', $webdata); } @@ -1413,7 +1423,7 @@ $pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']); if(substr($pool_dir,-1) != '/') $pool_dir .= '/'; - $pool_name = 'web'.$data['new']['domain_id']; + $pool_name = 'web'.$data['old']['domain_id']; if ( @is_file($pool_dir.$pool_name.'.conf') ) { unlink($pool_dir.$pool_name.'.conf'); -- Gitblit v1.9.1