ftimme
2013-02-18 4cc499bea541bac6e0e75e999b15a08c821a58cb
server/plugins-available/nginx_plugin.inc.php
@@ -703,7 +703,7 @@
            }
            
            if($web_config['add_web_users_to_sshusers_group'] == 'y') {
               $command = 'killall -u '.escapeshellcmd($data['new']['system_user']).' && usermod';
               $command = 'usermod';
               $command .= ' --groups sshusers';
               $command .= ' '.escapeshellcmd($data['new']['system_user']);
               $this->_exec($command);
@@ -1623,7 +1623,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')) {
@@ -1637,14 +1637,31 @@
        $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($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]);
                     }
                  }
               }
            }
         }
            if($subdomain_host == '') $subdomain_host = 'web'.$data['old']['domain_id'];
            $web_folder = $data['old']['web_folder'];
            $log_folder .= '/' . $subdomain_host;
            unset($tmp);
      }
        
      exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
      if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain') 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';
@@ -2328,6 +2345,15 @@
      }
   }
   
   private function nginx_replace($matches){
      $location = 'location'.($matches[1] != '' ? ' '.$matches[1] : '').' '.$matches[2].' '.$matches[3];
      if($matches[4] == '##merge##' || $matches[7] == '##merge##') $location .= ' ##merge##';
      $location .= "\n";
      $location .= $matches[5]."\n";
      $location .= $matches[6];
      return $location;
   }
   private function nginx_merge_locations($vhost_conf){
      $lines = explode("\n", $vhost_conf);
@@ -2337,6 +2363,7 @@
         $linecount = sizeof($lines);
         for($h=0;$h<$linecount;$h++){
            $lines[$h] = rtrim($lines[$h]);
            /*
            if(substr(ltrim($lines[$h]), 0, 8) == 'location' && strpos($lines[$h], '{') !== false && strpos($lines[$h], ';') !== false){
               $lines[$h] = str_replace("{", "{\n", $lines[$h]);
               $lines[$h] = str_replace(";", ";\n", $lines[$h]);
@@ -2352,6 +2379,9 @@
                  $lines[$h] = substr($lines[$h],0,strpos($lines[$h], '{')).' ##merge##'.substr($lines[$h],strpos($lines[$h], '{')+1);
               }
            }
            */
            $pattern = '/^[^\S\n]*location[^\S\n]+(?:(.+)[^\S\n]+)?(.+)[^\S\n]*(\{)[^\S\n]*(##merge##)?[^\S\n]*(.+)[^\S\n]*(\})[^\S\n]*(##merge##)?[^\S\n]*$/';
            $lines[$h] = preg_replace_callback($pattern, array($this, 'nginx_replace') ,$lines[$h]);
         }
      }
      $vhost_conf = implode("\n", $lines);