Marius Cramer
2013-11-14 7cf3e98090a3e9f0a9cc960d07c5f259adab6a19
server/plugins-available/nginx_plugin.inc.php
@@ -170,15 +170,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
         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
         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
         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(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)) {
            
@@ -2490,6 +2490,7 @@
   private function nginx_replace($matches){
      $location = 'location'.($matches[1] != '' ? ' '.$matches[1] : '').' '.$matches[2].' '.$matches[3];
      if($matches[4] == '##merge##' || $matches[7] == '##merge##') $location .= ' ##merge##';
      if($matches[4] == '##delete##' || $matches[7] == '##delete##') $location .= ' ##delete##';
      $location .= "\n";
      $location .= $matches[5]."\n";
      $location .= $matches[6];
@@ -2528,7 +2529,7 @@
               }
            }
            */
            $pattern = '/^[^\S\n]*location[^\S\n]+(?:(.+)[^\S\n]+)?(.+)[^\S\n]*(\{)[^\S\n]*(##merge##)?[^\S\n]*(.+)[^\S\n]*(\})[^\S\n]*(##merge##)?[^\S\n]*$/';
            $pattern = '/^[^\S\n]*location[^\S\n]+(?:(.+)[^\S\n]+)?(.+)[^\S\n]*(\{)[^\S\n]*(##merge##|##delete##)?[^\S\n]*(.+)[^\S\n]*(\})[^\S\n]*(##merge##|##delete##)?[^\S\n]*$/';
            $lines[$h] = preg_replace_callback($pattern, array($this, 'nginx_replace') ,$lines[$h]);
         }
      }
@@ -2540,6 +2541,7 @@
         
      if(is_array($lines) && !empty($lines)){   
         $locations = array();
         $locations_to_delete = array();
         $islocation = false;
         $linecount = sizeof($lines);
         $server_count = 0;
@@ -2566,12 +2568,12 @@
               unset($loc_parts);
               
               if(!isset($locations[$location]['action'])) $locations[$location]['action'] = 'replace';
               if(substr($l, -9) == '##merge##'){
                  $locations[$location]['action'] = 'merge';
               }
               if(substr($l, -9) == '##merge##') $locations[$location]['action'] = 'merge';
               if(substr($l, -10) == '##delete##') $locations[$location]['action'] = 'delete';
               
               if(!isset($locations[$location]['open_tag'])) $locations[$location]['open_tag'] = '        location '.$location.' {';
               if(!isset($locations[$location]['location']) || $locations[$location]['action'] == 'replace') $locations[$location]['location'] = '';
               if($locations[$location]['action'] == 'delete') $locations_to_delete[] = $location;
               if(!isset($locations[$location]['end_tag'])) $locations[$location]['end_tag'] = '        }';
               if(!isset($locations[$location]['start_line'])) $locations[$location]['start_line'] = $i;
@@ -2598,6 +2600,12 @@
         }
         
         if(is_array($locations) && !empty($locations)){
            if(is_array($locations_to_delete) && !empty($locations_to_delete)){
               foreach($locations_to_delete as $location_to_delete){
                  if(isset($locations[$location_to_delete])) unset($locations[$location_to_delete]);
               }
            }
            foreach($locations as $key => $val){
               $new_location = $val['open_tag']."\n".$val['location'].$val['end_tag'];
               $lines[$val['start_line']] = $new_location;