From a4e127a6af97041b2c067f888f8c73a8aec682f1 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 04 Jan 2016 05:29:53 -0500
Subject: [PATCH] Merge branch 'mergebranch' into 'master'
---
server/plugins-available/nginx_plugin.inc.php | 132 +++++++++++++++++++++++++++++++++++++------
1 files changed, 113 insertions(+), 19 deletions(-)
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index aaab39b..3437b55 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -372,6 +372,19 @@
$log_folder = 'log';
$old_web_folder = 'web';
$old_log_folder = 'log';
+ if($data['new']['type'] == 'vhost'){
+ if($data['new']['web_folder'] != ''){
+ if(substr($data['new']['web_folder'],0,1) == '/') $data['new']['web_folder'] = substr($data['new']['web_folder'],1);
+ if(substr($data['new']['web_folder'],-1) == '/') $data['new']['web_folder'] = substr($data['new']['web_folder'],0,-1);
+ }
+ $web_folder .= '/'.$data['new']['web_folder'];
+
+ if($data['old']['web_folder'] != ''){
+ if(substr($data['old']['web_folder'],0,1) == '/') $data['old']['web_folder'] = substr($data['old']['web_folder'],1);
+ if(substr($data['old']['web_folder'],-1) == '/') $data['old']['web_folder'] = substr($data['old']['web_folder'],0,-1);
+ }
+ $old_web_folder .= '/'.$data['old']['web_folder'];
+ }
if($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') {
// new one
$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['new']['parent_domain_id']);
@@ -475,8 +488,7 @@
}
//* Unmount the old log directory bfore we move the log dir
- //exec('fuser -km '.escapeshellcmd($old_dir.'/log'));
- exec('umount '.escapeshellcmd($data['old']['document_root'].'/log'));
+ exec('umount '.escapeshellcmd($old_dir.'/log'));
//* Create new base directory, if it does not exist yet
if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
@@ -729,7 +741,7 @@
if($data['new']['type'] == 'vhost' && $web_config['security_level'] == 20) $app->system->add_user_to_group($groupname, escapeshellcmd($web_config['nginx_user']));
//* If the security level is set to high
- if(($this->action == 'insert' && $data['new']['type'] == 'vhost') or ($web_config['set_folder_permissions_on_update'] == 'y' && $data['new']['type'] == 'vhost')) {
+ if(($this->action == 'insert' && $data['new']['type'] == 'vhost') or ($web_config['set_folder_permissions_on_update'] == 'y' && $data['new']['type'] == 'vhost') or ($web_folder != $old_web_folder && $data['new']['type'] == 'vhost')) {
$app->system->web_folder_protection($data['new']['document_root'], false);
@@ -743,6 +755,7 @@
//$app->system->chmod($data['new']['document_root'].'/webdav',0710);
$app->system->chmod($data['new']['document_root'].'/private', 0710);
$app->system->chmod($data['new']['document_root'].'/ssl', 0755);
+ if($web_folder != 'web') $app->system->chmod($data['new']['document_root'].'/'.$web_folder, 0751);
// make tmp directory writable for nginx and the website users
$app->system->chmod($data['new']['document_root'].'/tmp', 0770);
@@ -794,6 +807,11 @@
//$app->system->chgrp($data['new']['document_root'].'/webdav',$groupname);
$app->system->chown($data['new']['document_root'].'/private', $username);
$app->system->chgrp($data['new']['document_root'].'/private', $groupname);
+
+ if($web_folder != 'web'){
+ $app->system->chown($data['new']['document_root'].'/'.$web_folder, $username);
+ $app->system->chgrp($data['new']['document_root'].'/'.$web_folder, $groupname);
+ }
// If the security Level is set to medium
} else {
@@ -803,6 +821,7 @@
//$app->system->chmod($data['new']['document_root'].'/webdav',0755);
$app->system->chmod($data['new']['document_root'].'/ssl', 0755);
$app->system->chmod($data['new']['document_root'].'/cgi-bin', 0755);
+ if($web_folder != 'web') $app->system->chmod($data['new']['document_root'].'/'.$web_folder, 0755);
// make temp directory writable for nginx and the website users
$app->system->chmod($data['new']['document_root'].'/tmp', 0770);
@@ -833,6 +852,11 @@
$app->system->chgrp($data['new']['document_root'].'/web/stats', $groupname);
//$app->system->chown($data['new']['document_root'].'/webdav',$username);
//$app->system->chgrp($data['new']['document_root'].'/webdav',$groupname);
+
+ if($web_folder != 'web'){
+ $app->system->chown($data['new']['document_root'].'/'.$web_folder, $username);
+ $app->system->chgrp($data['new']['document_root'].'/'.$web_folder, $groupname);
+ }
}
} elseif((($data['new']['type'] == 'vhostsubdomain') || ($data['new']['type'] == 'vhostalias')) &&
(($this->action == 'insert') || ($web_config['set_folder_permissions_on_update'] == 'y'))) {
@@ -953,7 +977,7 @@
$default_php_fpm = true;
}
*/
- if($data['new']['php'] == 'php-fpm'){
+ if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){
if(trim($data['new']['fastcgi_php_version']) != ''){
$default_php_fpm = false;
list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
@@ -1128,6 +1152,58 @@
$nginx_directives = $data['new']['nginx_directives'];
$vhost_data['enable_pagespeed'] = false;
}
+
+ // folder_directive_snippets
+ if(trim($data['new']['folder_directive_snippets']) != ''){
+ $data['new']['folder_directive_snippets'] = trim($data['new']['folder_directive_snippets']);
+ $data['new']['folder_directive_snippets'] = str_replace("\r\n", "\n", $data['new']['folder_directive_snippets']);
+ $data['new']['folder_directive_snippets'] = str_replace("\r", "\n", $data['new']['folder_directive_snippets']);
+ $folder_directive_snippets_lines = explode("\n", $data['new']['folder_directive_snippets']);
+
+ if(is_array($folder_directive_snippets_lines) && !empty($folder_directive_snippets_lines)){
+ foreach($folder_directive_snippets_lines as $folder_directive_snippets_line){
+ list($folder_directive_snippets_folder, $folder_directive_snippets_snippets_id) = explode(':', $folder_directive_snippets_line);
+
+ $folder_directive_snippets_folder = trim($folder_directive_snippets_folder);
+ $folder_directive_snippets_snippets_id = trim($folder_directive_snippets_snippets_id);
+
+ if($folder_directive_snippets_folder != '' && intval($folder_directive_snippets_snippets_id) > 0 && preg_match('@^((?!(.*\.\.)|(.*\./)|(.*//))[^/][\w/_\.\-]{1,100})?$@', $folder_directive_snippets_folder)){
+ if(substr($folder_directive_snippets_folder, -1) != '/') $folder_directive_snippets_folder .= '/';
+ if(substr($folder_directive_snippets_folder, 0, 1) == '/') $folder_directive_snippets_folder = substr($folder_directive_snippets_folder, 1);
+
+ $master_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($folder_directive_snippets_snippets_id));
+ if(isset($master_snippet['snippet'])){
+ $folder_directive_snippets_trans = array('{FOLDER}' => $folder_directive_snippets_folder, '{FOLDERMD5}' => md5($folder_directive_snippets_folder));
+ $master_snippet['snippet'] = strtr($master_snippet['snippet'], $folder_directive_snippets_trans);
+ $nginx_directives .= "\n\n".$master_snippet['snippet'];
+
+ // create folder it it does not exist
+ if(!is_dir($data['new']['document_root'].'/' . $web_folder.$folder_directive_snippets_folder)){
+ $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder.$folder_directive_snippets_folder);
+ $app->system->chown($data['new']['document_root'].'/' . $web_folder.$folder_directive_snippets_folder, $username);
+ $app->system->chgrp($data['new']['document_root'].'/' . $web_folder.$folder_directive_snippets_folder, $groupname);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // use vLib for template logic
+ $nginx_directives_new = '';
+ $ngx_conf_tpl = new tpl();
+ $ngx_conf_tpl_tmp_file = tempnam($conf['temppath'], "ngx");
+ file_put_contents($ngx_conf_tpl_tmp_file, $nginx_directives);
+ $ngx_conf_tpl->newTemplate($ngx_conf_tpl_tmp_file);
+ $ngx_conf_tpl->setVar('use_tcp', $use_tcp);
+ $ngx_conf_tpl->setVar('use_socket', $use_socket);
+ $ngx_conf_tpl->setVar('fpm_socket', $fpm_socket);
+ $ngx_conf_tpl->setVar($vhost_data);
+ $nginx_directives_new = $ngx_conf_tpl->grab();
+ if(is_file($ngx_conf_tpl_tmp_file)) unlink($ngx_conf_tpl_tmp_file);
+ if($nginx_directives_new != '') $nginx_directives = $nginx_directives_new;
+ unset($nginx_directives_new);
+
// Make sure we only have Unix linebreaks
$nginx_directives = str_replace("\r\n", "\n", $nginx_directives);
$nginx_directives = str_replace("\r", "\n", $nginx_directives);
@@ -1448,6 +1524,18 @@
'use_rewrite' => ($data['new']['redirect_type'] == 'proxy' ? false:true),
'use_proxy' => ($data['new']['redirect_type'] == 'proxy' ? true:false));
}
+ }
+
+ // http2 or spdy?
+ $vhost_data['enable_http2'] = 'n';
+ if($vhost_data['enable_spdy'] == 'y'){
+ // check if nginx support http_v2; if so, use that instead of spdy
+ exec("2>&1 nginx -V | tr -- - '\n' | grep http_v2_module", $tmp_output, $tmp_retval);
+ if($tmp_retval == 0){
+ $vhost_data['enable_http2'] = 'y';
+ $vhost_data['enable_spdy'] = 'n';
+ }
+ unset($tmp_output, $tmp_retval);
}
$tpl->setVar($vhost_data);
@@ -2115,6 +2203,7 @@
$this->php_fpm_pool_delete($data, $web_config);
} elseif($data['old']['php'] == 'hhvm') {
$this->hhvm_update($data, $web_config);
+ $this->php_fpm_pool_delete($data, $web_config);
}
//remove the php cgi starter script if available
@@ -2485,7 +2574,7 @@
$monit_content = file_get_contents($conf['rootpath'] . '/conf/hhvm_monit.master');
}
- if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm' || $data['new']['custom_php_ini'] != $data['old']['custom_php_ini']) {
+ if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm' || (isset($data['old']['custom_php_ini']) && isset($data['new']['custom_php_ini']) && $data['new']['custom_php_ini'] != $data['old']['custom_php_ini'])) {
// Custom php.ini settings
$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
@@ -2497,7 +2586,7 @@
foreach($required_php_snippets as $required_php_snippet){
$required_php_snippet = intval($required_php_snippet);
if($required_php_snippet > 0){
- $php_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'php' AND active = 'y'", $required_php_snippet);
+ $php_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE ".($snippet['master_directive_snippets_id'] > 0 ? 'master_' : '')."directive_snippets_id = ? AND type = 'php' AND active = 'y'", $required_php_snippet);
$php_snippet['snippet'] = trim($php_snippet['snippet']);
if($php_snippet['snippet'] != ''){
$custom_php_ini_settings .= "\n".$php_snippet['snippet'];
@@ -2507,13 +2596,14 @@
}
}
}
+
if($custom_php_ini_settings != ''){
// Make sure we only have Unix linebreaks
$custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings);
$custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings);
file_put_contents('/etc/hhvm/'.$data['new']['system_user'].'.ini', $custom_php_ini_settings);
} else {
- if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
+ if($data['old']['system_user'] != '' && is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
}
$content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $content);
@@ -2530,17 +2620,19 @@
}
} elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') {
- exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1');
- exec('/usr/sbin/update-rc.d hhvm_' . $data['old']['system_user'] . ' remove >/dev/null 2>&1');
- unlink('/etc/init.d/hhvm_' . $data['old']['system_user']);
- if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
+ if($data['old']['system_user'] != ''){
+ exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1');
+ exec('/usr/sbin/update-rc.d hhvm_' . $data['old']['system_user'] . ' remove >/dev/null 2>&1');
+ unlink('/etc/init.d/hhvm_' . $data['old']['system_user']);
+ if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
+ }
- if(is_file('/etc/monit/conf.d/hhvm_' . $data['new']['system_user']) || is_file('/etc/monit/conf.d/00-hhvm_' . $data['new']['system_user'])){
- if(is_file('/etc/monit/conf.d/hhvm_' . $data['new']['system_user'])){
- unlink('/etc/monit/conf.d/hhvm_' . $data['new']['system_user']);
+ if(is_file('/etc/monit/conf.d/hhvm_' . $data['old']['system_user']) || is_file('/etc/monit/conf.d/00-hhvm_' . $data['old']['system_user'])){
+ if(is_file('/etc/monit/conf.d/hhvm_' . $data['old']['system_user'])){
+ unlink('/etc/monit/conf.d/hhvm_' . $data['old']['system_user']);
}
- if(is_file('/etc/monit/conf.d/00-hhvm_' . $data['new']['system_user'])){
- unlink('/etc/monit/conf.d/00-hhvm_' . $data['new']['system_user']);
+ if(is_file('/etc/monit/conf.d/00-hhvm_' . $data['old']['system_user'])){
+ unlink('/etc/monit/conf.d/00-hhvm_' . $data['old']['system_user']);
}
exec('/etc/init.d/monit restart >/dev/null 2>&1');
}
@@ -2560,7 +2652,8 @@
$default_php_fpm = true;
}
*/
- if($data['new']['php'] == 'php-fpm'){
+ // HHVM => PHP-FPM-Fallback
+ if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){
if(trim($data['new']['fastcgi_php_version']) != ''){
$default_php_fpm = false;
list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
@@ -2581,7 +2674,8 @@
$app->uses("getconf");
$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
- if($data['new']['php'] != 'php-fpm'){
+ // HHVM => PHP-FPM-Fallback
+ if($data['new']['php'] != 'php-fpm' && $data['new']['php'] != 'hhvm'){
if(@is_file($pool_dir.$pool_name.'.conf')){
$app->system->unlink($pool_dir.$pool_name.'.conf');
//$reload = true;
@@ -2649,7 +2743,7 @@
foreach($required_php_snippets as $required_php_snippet){
$required_php_snippet = intval($required_php_snippet);
if($required_php_snippet > 0){
- $php_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'php' AND active = 'y'", $required_php_snippet);
+ $php_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE ".($snippet['master_directive_snippets_id'] > 0 ? 'master_' : '')."directive_snippets_id = ? AND type = 'php' AND active = 'y'", $required_php_snippet);
$php_snippet['snippet'] = trim($php_snippet['snippet']);
if($php_snippet['snippet'] != ''){
$custom_php_ini_settings .= "\n".$php_snippet['snippet'];
--
Gitblit v1.9.1