From dd0130670fe3cab4c7e2c1ab4f3bf0d2b2d512b0 Mon Sep 17 00:00:00 2001
From: Denny Bortfeldt <denny@bortfeldt.net>
Date: Mon, 27 Jun 2016 18:02:16 -0400
Subject: [PATCH] When uploading a logo which is smaller than the current ispconfig one, then the logo will be on the left side of the header. In my opinion it will look better when it's centered. You could vote about it ;)
---
server/plugins-available/apache2_plugin.inc.php | 370 +++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 292 insertions(+), 78 deletions(-)
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 4bacf07..6763399 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -91,8 +91,52 @@
$app->plugins->registerAction('php_ini_changed', $this->plugin_name, 'php_ini_changed');
}
- // check for php.ini changes
-
+ private function get_master_php_ini_content($web_data) {
+ global $app, $conf;
+
+ $app->uses('getconf');
+ $web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
+ $fastcgi_config = $app->getconf->get_server_config($conf['server_id'], 'fastcgi');
+
+ $php_ini_content = '';
+ $master_php_ini_path = '';
+
+ if($web_data['php'] == 'mod') {
+ $master_php_ini_path = $web_config['php_ini_path_apache'];
+ } else {
+ // check for custom php
+ if($web_data['fastcgi_php_version'] != '') {
+ $tmp = explode(':', $web_data['fastcgi_php_version']);
+ if(isset($tmp[2])) {
+ $tmppath = $tmp[2];
+ if(substr($tmppath, -7) != 'php.ini') {
+ if(substr($tmppath, -1) != '/') $tmppath .= '/';
+ $tmppath .= 'php.ini';
+ }
+ if(file_exists($tmppath)) {
+ $master_php_ini_path = $tmppath;
+ }
+ unset($tmppath);
+ }
+ unset($tmp);
+ }
+
+ if(!$master_php_ini_path) {
+ if($web_data['php'] == 'fast-cgi' && file_exists($fastcgi_config["fastcgi_phpini_path"])) {
+ $master_php_ini_path = $fastcgi_config["fastcgi_phpini_path"];
+ } elseif($web_data['php'] == 'php-fpm' && file_exists($web_config['php_fpm_ini_path'])) {
+ $master_php_ini_path = $fastcgi_config["fastcgi_phpini_path"];
+ } else {
+ $master_php_ini_path = $web_config['php_ini_path_cgi'];
+ }
+ }
+ }
+ if($master_php_ini_path != '' && substr($master_php_ini_path, -7) == 'php.ini' && is_file($master_php_ini_path)) {
+ $php_ini_content .= $app->system->file_get_contents($master_php_ini_path)."\n";
+ }
+
+ return $php_ini_content;
+ }
// Handle php.ini changes
function php_ini_changed($event_name, $data) {
@@ -145,25 +189,13 @@
$custom_php_ini_dir .= '_' . $web_folder;
}
if(!is_dir($web_config['website_basedir'].'/conf')) $app->system->mkdir($web_config['website_basedir'].'/conf');
-
-
+
if(!is_dir($custom_php_ini_dir)) $app->system->mkdir($custom_php_ini_dir);
- $php_ini_content = '';
- if($web_data['php'] == 'mod') {
- $master_php_ini_path = $web_config['php_ini_path_apache'];
- } else {
- if($web_data['php'] == 'fast-cgi' && file_exists($fastcgi_config["fastcgi_phpini_path"])) {
- $master_php_ini_path = $fastcgi_config["fastcgi_phpini_path"];
- } else {
- $master_php_ini_path = $web_config['php_ini_path_cgi'];
- }
- }
- if($master_php_ini_path != '' && substr($master_php_ini_path, -7) == 'php.ini' && is_file($master_php_ini_path)) {
- $php_ini_content .= $app->system->file_get_contents($master_php_ini_path)."\n";
- }
+
+ $php_ini_content = $this->get_master_php_ini_content($web_data);
if(intval($web_data['directive_snippets_id']) > 0){
- $snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($web_data['directive_snippets_id']));
+ $snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'apache' AND active = 'y' AND customer_viewable = 'y'", intval($web_data['directive_snippets_id']));
if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
$required_php_snippets = explode(',', trim($snippet['required_php_snippets']));
if(is_array($required_php_snippets) && !empty($required_php_snippets)){
@@ -275,15 +307,15 @@
[ req_distinguished_name ]
C = ".trim($data['new']['ssl_country'])."
- ST = ".trim($data['new']['ssl_state'])."
- L = ".trim($data['new']['ssl_locality'])."
- O = ".trim($data['new']['ssl_organisation'])."
- OU = ".trim($data['new']['ssl_organisation_unit'])."
+ " . (trim($data['new']['ssl_state']) == '' ? '' : "ST = ".trim($data['new']['ssl_state'])) . "
+ " . (trim($data['new']['ssl_locality']) == '' ? '' : "L = ".trim($data['new']['ssl_locality']))."
+ " . (trim($data['new']['ssl_organisation']) == '' ? '' : "O = ".trim($data['new']['ssl_organisation']))."
+ " . (trim($data['new']['ssl_organisation_unit']) == '' ? '' : "OU = ".trim($data['new']['ssl_organisation_unit']))."
CN = $domain
emailAddress = webmaster@".$data['new']['domain']."
[ req_attributes ]
- challengePassword = A challenge password";
+ ";//challengePassword = A challenge password";
$ssl_cnf_file = $ssl_dir.'/openssl.conf';
$app->system->file_put_contents($ssl_cnf_file, $ssl_cnf);
@@ -336,6 +368,22 @@
/* Update also the master-DB of the Server-Farm */
$app->dbmaster->query("UPDATE web_domain SET ssl_request = ?, ssl_cert = ?, ssl_key = ? WHERE domain = ?", $ssl_request, $ssl_cert, $ssl_key2, $data['new']['domain']);
$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+ }
+
+ //* Check that the SSL key is not password protected
+ if($data["new"]["ssl_action"] == 'save') {
+ if(stristr($data["new"]["ssl_key"],'Proc-Type: 4,ENCRYPTED')) {
+ $data["new"]["ssl_action"] = '';
+
+ $app->log('SSL Certificate not saved. The SSL key is encrypted.', LOGLEVEL_WARN);
+ $app->dbmaster->datalogError('SSL Certificate not saved. The SSL key is encrypted.');
+
+ /* Update the DB of the (local) Server */
+ $app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+
+ /* Update also the master-DB of the Server-Farm */
+ $app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+ }
}
//* Save a SSL certificate to disk
@@ -594,7 +642,8 @@
}
//* Unmount the old log directory bfore we move the log dir
- exec('umount '.escapeshellcmd($old_dir.'/log'));
+ //exec('fuser -km '.escapeshellcmd($old_dir.'/log'));
+ exec('umount '.escapeshellcmd($data['old']['document_root'].'/log'));
//* Create new base directory, if it does not exist yet
if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
@@ -676,6 +725,7 @@
$app->system->removeLine('/etc/fstab', $fstab_line);
//* Unmount log directory
+ //exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder));
exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder));
}
@@ -689,7 +739,8 @@
$app->system->chmod($data['new']['document_root'].'/'.$log_folder, 0755);
exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
//* add mountpoint to fstab
- $fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.' none bind,nobootwait,_netdev 0 0';
+ $fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.' none bind,nobootwait';
+ $fstab_line .= @($web_config['network_filesystem'] == 'y')?',_netdev 0 0':' 0 0';
$app->system->replaceLine('/etc/fstab', $fstab_line, $fstab_line, 1, 1);
}
@@ -825,11 +876,29 @@
if($data['new']['hd_quota'] > 0) {
$blocks_soft = $data['new']['hd_quota'] * 1024;
$blocks_hard = $blocks_soft + 1024;
+ $mb_hard = $mb_soft + 1;
} else {
- $blocks_soft = $blocks_hard = 0;
+ $mb_soft = $mb_hard = $blocks_soft = $blocks_hard = 0;
}
- exec("setquota -u $username $blocks_soft $blocks_hard 0 0 -a &> /dev/null");
- exec('setquota -T -u '.$username.' 604800 604800 -a &> /dev/null');
+
+ // get the primitive folder for document_root and the filesystem, will need it later.
+ $df_output=explode(" ", exec("df -T $document_root|awk 'END{print \$2,\$NF}'"));
+ $file_system = $df_output[0];
+ $primitive_root = $df_output[1];
+
+ if ( in_array($file_system , array('ext2','ext3','ext4'), true) ) {
+ exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
+ exec('setquota -T -u '.$username.' 604800 604800 -a &> /dev/null');
+ } elseif ($file_system == 'xfs') {
+
+ exec("xfs_quota -x -c 'limit -g bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " $username' $primitive_root");
+
+ // xfs only supports timers globally, not per user.
+ exec("xfs_quota -x -c 'timer -bir -i 604800'");
+
+ unset($project_uid, $username_position, $xfs_projects);
+ unset($primitive_root, $df_output, $mb_hard, $mb_soft);
+ }
}
if($this->action == 'insert' || $data["new"]["system_user"] != $data["old"]["system_user"]) {
@@ -1006,36 +1075,12 @@
if(trim($data['new']['custom_php_ini']) != '') {
$has_custom_php_ini = true;
if(!is_dir($custom_php_ini_dir)) $app->system->mkdirpath($custom_php_ini_dir);
- $php_ini_content = '';
- if($data['new']['php'] == 'mod') {
- $master_php_ini_path = $web_config['php_ini_path_apache'];
- } else {
- if($data["new"]['php'] == 'fast-cgi') {
- if(trim($data['new']['fastcgi_php_version']) != '' && file_exists($custom_fastcgi_php_ini_dir)){
- $master_php_ini_path = $custom_fastcgi_php_ini_dir;
- } elseif(file_exists($fastcgi_config["fastcgi_phpini_path"])){
- $master_php_ini_path = $fastcgi_config["fastcgi_phpini_path"];
- } else {
- $master_php_ini_path = $web_config['php_ini_path_cgi'];
- }
- } else {
- $master_php_ini_path = $web_config['php_ini_path_cgi'];
- }
- }
-
- //* Add php.ini to the path in case that the master_php_ini_path is a directory
- if($master_php_ini_path != '' && is_dir($master_php_ini_path) && is_file($master_php_ini_path.'/php.ini')) {
- if(substr($master_php_ini_path, -1) == '/') $master_php_ini_path = substr($master_php_ini_path, 0, -1);
- $master_php_ini_path .= '/php.ini';
- }
-
- if($master_php_ini_path != '' && substr($master_php_ini_path, -7) == 'php.ini' && is_file($master_php_ini_path)) {
- $php_ini_content .= $app->system->file_get_contents($master_php_ini_path)."\n";
- }
+
+ $php_ini_content = $this->get_master_php_ini_content($data['new']);
$php_ini_content .= str_replace("\r", '', trim($data['new']['custom_php_ini']));
if(intval($data['new']['directive_snippets_id']) > 0){
- $snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
+ $snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'apache' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
$required_php_snippets = explode(',', trim($snippet['required_php_snippets']));
if(is_array($required_php_snippets) && !empty($required_php_snippets)){
@@ -1048,6 +1093,10 @@
$php_ini_content .= "\n".$php_snippet['snippet'];
}
}
+ }
+
+ foreach($sub_prefixes as $s) {
+ $temp_domains[] = $s . $aliasdomain['domain'];
}
}
}
@@ -1088,12 +1137,16 @@
// Make sure we only have Unix linebreaks
$vhost_data['apache_directives'] = str_replace("\r\n", "\n", $vhost_data['apache_directives']);
$vhost_data['apache_directives'] = str_replace("\r", "\n", $vhost_data['apache_directives']);
- $trans = array('{DOCROOT}' => $vhost_data['web_document_root_www']);
+ $trans = array(
+ '{DOCROOT}' => $vhost_data['web_document_root_www'],
+ '{DOCROOT_CLIENT}' => $vhost_data['web_document_root']
+ );
$vhost_data['apache_directives'] = strtr($vhost_data['apache_directives'], $trans);
// Check if a SSL cert exists
$ssl_dir = $data['new']['document_root'].'/ssl';
$domain = $data['new']['ssl_domain'];
+ if(!$domain) $domain = $data['new']['domain'];
$key_file = $ssl_dir.'/'.$domain.'.key';
$crt_file = $ssl_dir.'/'.$domain.'.crt';
$bundle_file = $ssl_dir.'/'.$domain.'.bundle';
@@ -1107,6 +1160,144 @@
$app->log('SSL Disabled. '.$domain,LOGLEVEL_DEBUG);
}
*/
+
+ if($data['new']['ssl'] == 'y' && $data['new']['ssl_letsencrypt'] == 'y') {
+ if(substr($domain, 0, 2) === '*.') {
+ // wildcard domain not yet supported by letsencrypt!
+ $app->log('Wildcard domains not yet supported by letsencrypt, so changing ' . $domain . ' to ' . substr($domain, 2), LOGLEVEL_WARN);
+ $domain = substr($domain, 2);
+ }
+
+ $data['new']['ssl_domain'] = $domain;
+ $vhost_data['ssl_domain'] = $domain;
+ }
+
+ //* Generate Let's Encrypt SSL certificat
+ if($data['new']['ssl'] == 'y' && $data['new']['ssl_letsencrypt'] == 'y' && ( // ssl and let's encrypt is active
+ ($data['old']['ssl'] == 'n' || $data['old']['ssl_letsencrypt'] == 'n') // we have new let's encrypt configuration
+ || ($data['old']['domain'] != $data['new']['domain']) // we have domain update
+ || ($data['old']['subdomain'] != $data['new']['subdomain']) // we have new or update on "auto" subdomain
+ || ($data['new']['type'] == 'subdomain') // we have new or update on subdomain
+ || ($data['old']['type'] == 'alias' || $data['new']['type'] == 'alias') // we have new or update on aliasdomain
+ )) {
+ // default values
+ $temp_domains = array();
+ $lddomain = $domain;
+ $subdomains = null;
+ $aliasdomains = null;
+ $sub_prefixes = array();
+
+ //* be sure to have good domain
+ if($data['new']['subdomain'] == "www" OR $data['new']['subdomain'] == "*") {
+ $temp_domains[] = "www." . $domain;
+ }
+
+ //* then, add subdomain if we have
+ $subdomains = $app->db->queryAllRecords('SELECT domain FROM web_domain WHERE parent_domain_id = '.intval($data['new']['domain_id'])." AND active = 'y' AND type = 'subdomain'");
+ if(is_array($subdomains)) {
+ foreach($subdomains as $subdomain) {
+ $temp_domains[] = $subdomain['domain'];
+ $sub_prefixes[] = str_replace($domain, "", $subdomain['domain']);
+ }
+ }
+
+ //* then, add alias domain if we have
+ $aliasdomains = $app->db->queryAllRecords('SELECT domain,subdomain FROM web_domain WHERE parent_domain_id = '.intval($data['new']['domain_id'])." AND active = 'y' AND type = 'alias'");
+ if(is_array($aliasdomains)) {
+ foreach($aliasdomains as $aliasdomain) {
+ $temp_domains[] = $aliasdomain['domain'];
+ if(isset($aliasdomain['subdomain']) && ! empty($aliasdomain['subdomain'])) {
+ $temp_domains[] = $aliasdomain['subdomain'] . "." . $aliasdomain['domain'];
+ }
+ }
+ }
+
+ // prevent duplicate
+ $temp_domains = array_unique($temp_domains);
+
+ // generate cli format
+ foreach($temp_domains as $temp_domain) {
+ $lddomain .= (string) " --domains " . $temp_domain;
+ }
+
+ // useless data
+ unset($subdomains);
+ unset($temp_domains);
+
+ $crt_tmp_file = "/etc/letsencrypt/live/".$domain."/cert.pem";
+ $key_tmp_file = "/etc/letsencrypt/live/".$domain."/privkey.pem";
+ $bundle_tmp_file = "/etc/letsencrypt/live/".$domain."/chain.pem";
+ $webroot = $data['new']['document_root']."/web";
+
+ //* check if we have already a Let's Encrypt cert
+ if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) {
+ $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG);
+
+ $success = false;
+ $letsencrypt = array_shift( explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')) );
+ if(is_executable($letsencrypt)) {
+ $success = $this->_exec($letsencrypt . " certonly --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme");
+ }
+ if(!$success) {
+ // error issuing cert
+ $app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN);
+ $data['new']['ssl_letsencrypt'] = 'n';
+ if($data['old']['ssl'] == 'n') $data['new']['ssl'] = 'n';
+ /* Update the DB of the (local) Server */
+ $app->db->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ?", $data['new']['ssl'], 'n', $data['new']['domain']);
+ /* Update also the master-DB of the Server-Farm */
+ $app->dbmaster->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ?", $data['new']['ssl'], 'n', $data['new']['domain']);
+ }
+ }
+
+ //* check is been correctly created
+ if(file_exists($crt_tmp_file) OR file_exists($key_tmp_file)) {
+ $date = date("YmdHis");
+ if(is_file($key_file)) {
+ $app->system->copy($key_file, $key_file.'.old'.$date);
+ $app->system->chmod($key_file.'.old.'.$date, 0400);
+ $app->system->unlink($key_file);
+ }
+
+ if ($web_config["website_symlinks_rel"] == 'y') {
+ $this->create_relative_link(escapeshellcmd($key_tmp_file), escapeshellcmd($key_file));
+ } else {
+ exec("ln -s ".escapeshellcmd($key_tmp_file)." ".escapeshellcmd($key_file));
+ }
+
+ if(is_file($crt_file)) {
+ $app->system->copy($crt_file, $crt_file.'.old.'.$date);
+ $app->system->chmod($crt_file.'.old.'.$date, 0400);
+ $app->system->unlink($crt_file);
+ }
+
+ if($web_config["website_symlinks_rel"] == 'y') {
+ $this->create_relative_link(escapeshellcmd($crt_tmp_file), escapeshellcmd($crt_file));
+ } else {
+ exec("ln -s ".escapeshellcmd($crt_tmp_file)." ".escapeshellcmd($crt_file));
+ }
+
+ if(is_file($bundle_file)) {
+ $app->system->copy($bundle_file, $bundle_file.'.old.'.$date);
+ $app->system->chmod($bundle_file.'.old.'.$date, 0400);
+ $app->system->unlink($bundle_file);
+ }
+
+ if($web_config["website_symlinks_rel"] == 'y') {
+ $this->create_relative_link(escapeshellcmd($bundle_tmp_file), escapeshellcmd($bundle_file));
+ } else {
+ exec("ln -s ".escapeshellcmd($bundle_tmp_file)." ".escapeshellcmd($bundle_file));
+ }
+
+ /* we don't need to store it.
+ /* Update the DB of the (local) Server */
+ $app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '', ssl_key = '' WHERE domain = ?", $data['new']['domain']);
+ $app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+ /* Update also the master-DB of the Server-Farm */
+ $app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '', ssl_key = '' WHERE domain = ?", $data['new']['domain']);
+ $app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+ }
+ }
if(@is_file($bundle_file)) $vhost_data['has_bundle_cert'] = 1;
@@ -1132,6 +1323,7 @@
// Rewrite rules
$rewrite_rules = array();
+ $rewrite_wildcard_rules = array();
if($data['new']['redirect_type'] != '' && $data['new']['redirect_path'] != '') {
if(substr($data['new']['redirect_path'], -1) != '/' && !preg_match('/^(https?|\[scheme\]):\/\//', $data['new']['redirect_path'])) $data['new']['redirect_path'] .= '/';
if(substr($data['new']['redirect_path'], 0, 8) == '[scheme]'){
@@ -1163,7 +1355,7 @@
'rewrite_add_path' => (substr($rewrite_target, -1) == '/' ? 'y' : 'n'));
break;
case '*':
- $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']),
+ $rewrite_wildcard_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']),
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
'rewrite_target' => $rewrite_target,
'rewrite_target_ssl' => $rewrite_target_ssl,
@@ -1262,7 +1454,7 @@
'rewrite_add_path' => (substr($rewrite_target, -1) == '/' ? 'y' : 'n'));
break;
case '*':
- $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($alias['domain']),
+ $rewrite_wildcard_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($alias['domain']),
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
'rewrite_target' => $rewrite_target,
'rewrite_target_ssl' => $rewrite_target_ssl,
@@ -1299,6 +1491,8 @@
} else {
$tpl->setVar('alias', '');
}
+
+ if (count($rewrite_wildcard_rules) > 0) $rewrite_rules = array_merge($rewrite_rules, $rewrite_wildcard_rules); // Append wildcard rules to the end of rules
if(count($rewrite_rules) > 0 || $vhost_data['seo_redirect_enabled'] > 0 || count($alias_seo_redirects) > 0) {
$tpl->setVar('rewrite_enabled', 1);
@@ -1405,7 +1599,7 @@
* PHP-FPM
*/
// Support for multiple PHP versions
- if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){
+ if($data['new']['php'] == 'php-fpm'){
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']));
@@ -1571,7 +1765,7 @@
$data['new']['ipv6_address'] = implode(':', $explode_v6);
}
}
-
+ if($data['new']['ipv6_address'] == '*') $data['new']['ipv6_address'] = '::';
$tmp_vhost_arr = array('ip_address' => '['.$data['new']['ipv6_address'].']', 'ssl_enabled' => 0, 'port' => 80);
if(count($rewrite_rules) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('redirects' => $rewrite_rules);
if(count($alias_seo_redirects) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('alias_seo_redirects' => $alias_seo_redirects);
@@ -1900,10 +2094,12 @@
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));
+ //exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
}
} else {
//if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
+ //exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
}
}
@@ -2820,19 +3016,19 @@
$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']) && $data['new']['custom_php_ini'] != $data['old']['custom_php_ini'])) {
// Custom php.ini settings
$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
if(intval($data['new']['directive_snippets_id']) > 0){
- $snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
+ $snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'apache' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
$required_php_snippets = explode(',', trim($snippet['required_php_snippets']));
if(is_array($required_php_snippets) && !empty($required_php_snippets)){
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'];
@@ -2848,27 +3044,37 @@
$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);
file_put_contents('/etc/init.d/hhvm_' . $data['new']['system_user'], $content);
exec('chmod +x /etc/init.d/hhvm_' . $data['new']['system_user'] . ' >/dev/null 2>&1');
exec('/usr/sbin/update-rc.d hhvm_' . $data['new']['system_user'] . ' defaults >/dev/null 2>&1');
- exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' start >/dev/null 2>&1');
+ exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' restart >/dev/null 2>&1');
- $monit_content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $monit_content);
- file_put_contents('/etc/monit/conf.d/hhvm_' . $data['new']['system_user'], $monit_content);
- exec('/etc/init.d/monit restart >/dev/null 2>&1');
+ if(is_dir('/etc/monit/conf.d')){
+ $monit_content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $monit_content);
+ file_put_contents('/etc/monit/conf.d/00-hhvm_' . $data['new']['system_user'], $monit_content);
+ if(is_file('/etc/monit/conf.d/hhvm_' . $data['new']['system_user'])) unlink('/etc/monit/conf.d/hhvm_' . $data['new']['system_user']);
+ exec('/etc/init.d/monit restart >/dev/null 2>&1');
+ }
} 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'])){
- unlink('/etc/monit/conf.d/hhvm_' . $data['new']['system_user']);
+ 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/00-hhvm_' . $data['new']['system_user'])){
+ unlink('/etc/monit/conf.d/00-hhvm_' . $data['new']['system_user']);
+ }
exec('/etc/init.d/monit restart >/dev/null 2>&1');
}
}
@@ -2943,7 +3149,7 @@
$tpl->setVar('fpm_pool', $pool_name);
$tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1);
$tpl->setVar('fpm_user', $data['new']['system_user']);
- $tpl->setVar('fpm_group', $data['new']['system_group']);
+ $tpl->setVar('fpm_group', $web_config['group']);
$tpl->setVar('fpm_domain', $data['new']['domain']);
$tpl->setVar('pm', $data['new']['pm']);
$tpl->setVar('pm_max_children', $data['new']['pm_max_children']);
@@ -2975,7 +3181,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'];
@@ -2986,6 +3192,7 @@
}
}
+ $custom_session_save_path = false;
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);
@@ -3001,6 +3208,7 @@
$value = trim($value);
if($value != ''){
$key = trim($key);
+ if($key == 'session.save_path') $custom_session_save_path = true;
switch (strtolower($value)) {
case '0':
// PHP-FPM might complain about invalid boolean value if you use 0
@@ -3021,7 +3229,9 @@
}
}
}
-
+
+ $tpl->setVar('custom_session_save_path', ($custom_session_save_path ? 'y' : 'n'));
+
$tpl->setLoop('custom_php_ini_settings', $final_php_ini_settings);
$app->system->file_put_contents($pool_dir.$pool_name.'.conf', $tpl->grab());
@@ -3165,8 +3375,12 @@
//* Wrapper for exec function for easier debugging
private function _exec($command) {
global $app;
+ $out = array();
+ $ret = 0;
$app->log('exec: '.$command, LOGLEVEL_DEBUG);
- exec($command);
+ exec($command, $out, $ret);
+ if($ret != 0) return false;
+ else return true;
}
private function _checkTcp ($host, $port) {
--
Gitblit v1.9.1