ftimme
2013-02-19 47440e51ff940a4786c31d72c56d25659662bda9
- Found better solution for deleting vhostsubdomains when parent domain is deleted.
3 files modified
98 ■■■■■ changed files
server/lib/classes/system.inc.php 6 ●●●●● patch | view | raw | blame | history
server/plugins-available/apache2_plugin.inc.php 42 ●●●●● patch | view | raw | blame | history
server/plugins-available/nginx_plugin.inc.php 50 ●●●● patch | view | raw | blame | history
server/lib/classes/system.inc.php
@@ -1537,6 +1537,12 @@
            return intval($string);
        }
    }
    function is_mounted($mountpoint){
        $cmd = 'df 2>/dev/null | grep " '.$mountpoint.'$"';
        exec($cmd, $output, $return_var);
        return $return_var == 0 ? true : false;
    }
}
?>
server/plugins-available/apache2_plugin.inc.php
@@ -340,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') {
@@ -1575,6 +1575,7 @@
                $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)){
@@ -1588,18 +1589,53 @@
                        }
                    }
                }
                */
                // 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'];
            $web_folder = $data['old']['web_folder'];
            $log_folder .= '/' . $subdomain_host;
            }
            $web_folder = $data['old']['web_folder'];
            unset($tmp);
            unset($subdomain_hosts);
        }
        
        if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain') 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
        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
server/plugins-available/nginx_plugin.inc.php
@@ -347,7 +347,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') {
@@ -1641,6 +1641,7 @@
                $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)){
@@ -1654,18 +1655,55 @@
                        }
                    }
                }
                */
                // 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($subdomain_host == '') $subdomain_host = 'web'.$data['old']['domain_id'];
            $web_folder = $data['old']['web_folder'];
            $log_folder .= '/' . $subdomain_host;
            unset($tmp);
                    }
        }
        
        if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain') exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
            }
            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);
        }
        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
        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