From 72ce788832f008fc210146d751dd5f20fa03f493 Mon Sep 17 00:00:00 2001
From: ftimme <ft@falkotimme.com>
Date: Wed, 21 Sep 2011 07:28:59 -0400
Subject: [PATCH] Added support for PHP-FPM sockets.

---
 install/dist/conf/centos53.conf.php                      |    1 
 interface/web/sites/templates/web_domain_advanced.htm    |    6 +
 server/conf/nginx_vhost.conf.master                      |    3 
 interface/web/admin/templates/server_config_web_edit.htm |    4 +
 install/lib/update.lib.php                               |    1 
 install/dist/conf/fedora9.conf.php                       |    1 
 install/sql/incremental/upd_0021.sql                     |    1 
 interface/web/sites/lib/lang/de_web_domain.lng           |    1 
 install/dist/conf/debian40.conf.php                      |    1 
 interface/web/sites/lib/lang/en_web_domain.lng           |    1 
 interface/web/admin/lib/lang/en_server_config.lng        |    2 
 install/tpl/server.ini.master                            |    1 
 install/dist/conf/debian60.conf.php                      |    1 
 interface/web/admin/form/server_config.tform.php         |   11 ++
 install/dist/conf/centos52.conf.php                      |    1 
 interface/web/admin/lib/lang/de_server_config.lng        |    2 
 install/lib/installer_base.lib.php                       |    1 
 install/sql/ispconfig3.sql                               |    1 
 install/dist/conf/opensuse110.conf.php                   |    1 
 install/dist/conf/opensuse112.conf.php                   |    1 
 install/dist/conf/gentoo.conf.php                        |    1 
 server/plugins-available/nginx_plugin.inc.php            |  168 ++++++++++++++++++++++++-----------------
 interface/web/sites/form/web_domain.tform.php            |    6 +
 server/conf/php_fpm_pool.conf.master                     |    8 +
 24 files changed, 151 insertions(+), 74 deletions(-)

diff --git a/install/dist/conf/centos52.conf.php b/install/dist/conf/centos52.conf.php
index d32f69b..396fd80 100644
--- a/install/dist/conf/centos52.conf.php
+++ b/install/dist/conf/centos52.conf.php
@@ -192,6 +192,7 @@
 $conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini';
 $conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d';
 $conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
 
 //* vlogger
 $conf['vlogger']['config_dir'] = '/etc';
diff --git a/install/dist/conf/centos53.conf.php b/install/dist/conf/centos53.conf.php
index d32f69b..396fd80 100644
--- a/install/dist/conf/centos53.conf.php
+++ b/install/dist/conf/centos53.conf.php
@@ -192,6 +192,7 @@
 $conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini';
 $conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d';
 $conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
 
 //* vlogger
 $conf['vlogger']['config_dir'] = '/etc';
diff --git a/install/dist/conf/debian40.conf.php b/install/dist/conf/debian40.conf.php
index b884a89..0c42d7d 100644
--- a/install/dist/conf/debian40.conf.php
+++ b/install/dist/conf/debian40.conf.php
@@ -204,6 +204,7 @@
 $conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini';
 $conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm/pool.d';
 $conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
 
 //*Ufw
 $conf['ufw']['installed'] = false;
diff --git a/install/dist/conf/debian60.conf.php b/install/dist/conf/debian60.conf.php
index 4af85b8..35e6160 100644
--- a/install/dist/conf/debian60.conf.php
+++ b/install/dist/conf/debian60.conf.php
@@ -204,6 +204,7 @@
 $conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini';
 $conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm/pool.d';
 $conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
 
 //* Ufw
 $conf['ufw']['installed'] = false;
diff --git a/install/dist/conf/fedora9.conf.php b/install/dist/conf/fedora9.conf.php
index 3e1bda1..6e5e529 100644
--- a/install/dist/conf/fedora9.conf.php
+++ b/install/dist/conf/fedora9.conf.php
@@ -192,6 +192,7 @@
 $conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini';
 $conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d';
 $conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
 
 //* vlogger
 $conf['vlogger']['config_dir'] = '/etc';
diff --git a/install/dist/conf/gentoo.conf.php b/install/dist/conf/gentoo.conf.php
index 8ed4fee..c2c0a6e 100644
--- a/install/dist/conf/gentoo.conf.php
+++ b/install/dist/conf/gentoo.conf.php
@@ -208,6 +208,7 @@
 $conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini';
 $conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm/pool.d';
 $conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
 
 //* vlogger
 $conf['vlogger']['config_dir'] = '/etc/vlogger';
diff --git a/install/dist/conf/opensuse110.conf.php b/install/dist/conf/opensuse110.conf.php
index 6cb0a78..755e673 100644
--- a/install/dist/conf/opensuse110.conf.php
+++ b/install/dist/conf/opensuse110.conf.php
@@ -192,6 +192,7 @@
 $conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini';
 $conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm';
 $conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
 
 //* vlogger
 $conf['vlogger']['config_dir'] = '/etc';
diff --git a/install/dist/conf/opensuse112.conf.php b/install/dist/conf/opensuse112.conf.php
index fe114f0..1402ad6 100644
--- a/install/dist/conf/opensuse112.conf.php
+++ b/install/dist/conf/opensuse112.conf.php
@@ -192,6 +192,7 @@
 $conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini';
 $conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm';
 $conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
 
 //* vlogger
 $conf['vlogger']['config_dir'] = '/etc';
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 7e6fc23..f3e7ef4 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -243,6 +243,7 @@
 			$tpl_ini_array['web']['php_fpm_ini_path'] = $conf['nginx']['php_fpm_ini_path'];
 			$tpl_ini_array['web']['php_fpm_pool_dir'] = $conf['nginx']['php_fpm_pool_dir'];
 			$tpl_ini_array['web']['php_fpm_start_port'] = $conf['nginx']['php_fpm_start_port'];
+			$tpl_ini_array['web']['php_fpm_socket_dir'] = $conf['nginx']['php_fpm_socket_dir'];
 			$tpl_ini_array['web']['server_type'] = 'nginx';
 			$tpl_ini_array['global']['webserver'] = 'nginx';
 		}
diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php
index fc4a5e3..b75a55f 100644
--- a/install/lib/update.lib.php
+++ b/install/lib/update.lib.php
@@ -270,6 +270,7 @@
 		$tpl_ini_array['web']['php_fpm_ini_path'] = $conf['nginx']['php_fpm_ini_path'];
 		$tpl_ini_array['web']['php_fpm_pool_dir'] = $conf['nginx']['php_fpm_pool_dir'];
 		$tpl_ini_array['web']['php_fpm_start_port'] = $conf['nginx']['php_fpm_start_port'];
+		$tpl_ini_array['web']['php_fpm_socket_dir'] = $conf['nginx']['php_fpm_socket_dir'];
 		$tpl_ini_array['web']['server_type'] = 'nginx';
 		$tpl_ini_array['global']['webserver'] = 'nginx';
 	}
diff --git a/install/sql/incremental/upd_0021.sql b/install/sql/incremental/upd_0021.sql
new file mode 100644
index 0000000..09994e2
--- /dev/null
+++ b/install/sql/incremental/upd_0021.sql
@@ -0,0 +1 @@
+ALTER TABLE `web_domain` ADD `php_fpm_use_socket` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `nginx_directives`;
\ No newline at end of file
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index e8162b8..0a9d8d9 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1510,6 +1510,7 @@
   `allow_override` varchar(255) NOT NULL default 'All',
   `apache_directives` mediumtext,
   `nginx_directives` mediumtext,
+  `php_fpm_use_socket` ENUM('n','y') NOT NULL DEFAULT 'n'
   `php_open_basedir` mediumtext,
   `custom_php_ini` mediumtext,
   `backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none',
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 6c647a4..251859a 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -66,6 +66,7 @@
 php_fpm_ini_path=/etc/php5/fpm/php.ini
 php_fpm_pool_dir=/etc/php5/fpm/pool.d
 php_fpm_start_port=9010
+php_fpm_socket_dir=/var/run/php5-fpm
 
 [dns]
 bind_user=root
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 3f574af..43346e2 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -548,6 +548,17 @@
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'php_fpm_socket_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(0 => array('type' => 'NOTEMPTY',
+					'errmsg' => 'php_fpm_socket_dir_error_empty'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
 		'php_open_basedir' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 9ce6e27..e03e6dc 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -139,4 +139,6 @@
 $wb["php_fpm_pool_dir_error_empty"] = 'PHP-FPM pool Verzeichnis ist leer.';
 $wb["php_fpm_start_port_txt"] = 'PHP-FPM Start-Port';
 $wb["php_fpm_start_port_error_empty"] = 'PHP-FPM Start-Port ist leer.';
+$wb["php_fpm_socket_dir_txt"] = 'PHP-FPM Socket-Verzeichnis';
+$wb["php_fpm_socket_dir_error_empty"] = 'PHP-FPM Socket-Verzeichnis ist leer.';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 745e3a6..a2ad3a8 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -141,6 +141,8 @@
 $wb["php_fpm_pool_dir_error_empty"] = 'PHP-FPM pool directory is empty.';
 $wb["php_fpm_start_port_txt"] = 'PHP-FPM start port';
 $wb["php_fpm_start_port_error_empty"] = 'PHP-FPM start port is empty.';
+$wb["php_fpm_socket_dir_txt"] = 'PHP-FPM socket directory';
+$wb["php_fpm_socket_dir_error_empty"] = 'PHP-FPM socket directory is empty.';
 $wb["try_rescue_txt"] = 'Enable service monitoring and restart on failure';
 $wb["do_not_try_rescue_apache_txt"] = 'Disable apache monitoring';
 $wb["do_not_try_rescue_mysql_txt"] = 'Disable MySQL monitoring';
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index 4b85025..7eb707c 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -109,6 +109,10 @@
       	<label for="php_fpm_start_port">{tmpl_var name='php_fpm_start_port_txt'}</label>
         <input name="php_fpm_start_port" id="php_fpm_start_port" value="{tmpl_var name='php_fpm_start_port'}" size="40" maxlength="255" type="text" class="textInput" />
 	  </div>
+	  <div class="ctrlHolder nginx">
+      	<label for="php_fpm_socket_dir">{tmpl_var name='php_fpm_socket_dir_txt'}</label>
+        <input name="php_fpm_socket_dir" id="php_fpm_socket_dir" value="{tmpl_var name='php_fpm_socket_dir'}" size="40" maxlength="255" type="text" class="textInput" />
+	  </div>
 	  <div class="ctrlHolder">
       	<label for="php_open_basedir">{tmpl_var name='php_open_basedir_txt'}</label>
         <input name="php_open_basedir" id="php_open_basedir" value="{tmpl_var name='php_open_basedir'}" size="40" type="text" class="textInput" />
diff --git a/interface/web/sites/form/web_domain.tform.php b/interface/web/sites/form/web_domain.tform.php
index 362a154..5e3a873 100644
--- a/interface/web/sites/form/web_domain.tform.php
+++ b/interface/web/sites/form/web_domain.tform.php
@@ -488,6 +488,12 @@
 			'width'		=> '30',
 			'maxlength'	=> '255'
 		),
+		'php_fpm_use_socket' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'n',
+			'value'		=> array(0 => 'n',1 => 'y')
+		),
 		'php_open_basedir' => array (
 			'datatype'	=> 'VARCHAR',
 			'formtype'	=> 'TEXT',
diff --git a/interface/web/sites/lib/lang/de_web_domain.lng b/interface/web/sites/lib/lang/de_web_domain.lng
index 1226b47..cfd3ac9 100644
--- a/interface/web/sites/lib/lang/de_web_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_domain.lng
@@ -76,4 +76,5 @@
 $wb["seo_redirect_txt"] = 'SEO Redirect';
 $wb["non_www_to_www_txt"] = 'Nicht-www -&gt; www';
 $wb["www_to_non_www_txt"] = 'www -&gt; Nicht-www';
+$wb["php_fpm_use_socket_txt"] = 'Benutze Socket f&uuml;r PHP-FPM';
 ?>
diff --git a/interface/web/sites/lib/lang/en_web_domain.lng b/interface/web/sites/lib/lang/en_web_domain.lng
index fb85dcb..9bc71ad 100644
--- a/interface/web/sites/lib/lang/en_web_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_domain.lng
@@ -76,4 +76,5 @@
 $wb["seo_redirect_txt"] = 'SEO Redirect';
 $wb["non_www_to_www_txt"] = 'Non-www -&gt; www';
 $wb["www_to_non_www_txt"] = 'www -&gt; non-www';
+$wb["php_fpm_use_socket_txt"] = 'Use Socket For PHP-FPM';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_domain_advanced.htm b/interface/web/sites/templates/web_domain_advanced.htm
index 92a77c0..b815d0e 100644
--- a/interface/web/sites/templates/web_domain_advanced.htm
+++ b/interface/web/sites/templates/web_domain_advanced.htm
@@ -20,6 +20,12 @@
       	<label for="allow_override">{tmpl_var name='allow_override_txt'}</label>
         <input name="allow_override" id="allow_override" value="{tmpl_var name='allow_override'}" size="30" maxlength="255" type="text" class="textInput" />
 	  </div>
+	  <div class="ctrlHolder nginx">
+				<p class="label">{tmpl_var name='php_fpm_use_socket_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='php_fpm_use_socket'}
+					</div>
+			</div>
 	  <div class="ctrlHolder">
       	<label for="php_open_basedir">{tmpl_var name='php_open_basedir_txt'}</label>
         <input name="php_open_basedir" id="php_open_basedir" value="{tmpl_var name='php_open_basedir'}" size="30" type="text" class="textInput"  style="width:400px;" />
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 0f43481..df52349 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -75,7 +75,8 @@
 		
         location ~ \.php$ {
             try_files $uri =404;
-            fastcgi_pass 127.0.0.1:<tmpl_var name='fpm_port'>;
+            <tmpl_var name='use_tcp'>fastcgi_pass 127.0.0.1:<tmpl_var name='fpm_port'>;
+            <tmpl_var name='use_socket'>fastcgi_pass unix:<tmpl_var name='fpm_socket'>;
             fastcgi_index index.php;
             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
             fastcgi_param PATH_INFO $fastcgi_script_name;
diff --git a/server/conf/php_fpm_pool.conf.master b/server/conf/php_fpm_pool.conf.master
index 6736647..75127b4 100644
--- a/server/conf/php_fpm_pool.conf.master
+++ b/server/conf/php_fpm_pool.conf.master
@@ -1,8 +1,12 @@
 [<tmpl_var name='fpm_pool'>]
 
-listen = 127.0.0.1:<tmpl_var name='fpm_port'>
+<tmpl_var name='use_tcp'>listen = 127.0.0.1:<tmpl_var name='fpm_port'>
+<tmpl_var name='use_tcp'>listen.allowed_clients = 127.0.0.1
 
-listen.allowed_clients = 127.0.0.1
+<tmpl_var name='use_socket'>listen = <tmpl_var name='fpm_socket'>
+<tmpl_var name='use_socket'>listen.owner = <tmpl_var name='fpm_user'>
+<tmpl_var name='use_socket'>listen.group = <tmpl_var name='fpm_group'>
+<tmpl_var name='use_socket'>listen.mode = 0660
 
 user = <tmpl_var name='fpm_user'>
 group = <tmpl_var name='fpm_group'>
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 4d6edef..92ca082 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -639,6 +639,25 @@
 		$vhost_data['web_document_root_www'] = $web_config['website_basedir'].'/'.$data['new']['domain'].'/web';
 		$vhost_data['web_basedir'] = $web_config['website_basedir'];
 		$vhost_data['ssl_domain'] = $data['new']['ssl_domain'];
+		
+		// PHP-FPM
+		$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+		if(substr($pool_dir,-1) != '/') $pool_dir .= '/';
+		$pool_name = 'web'.$data['new']['domain_id'];
+		$socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']);
+		if(substr($socket_dir,-1) != '/') $socket_dir .= '/';
+		
+		if($data['new']['php_fpm_use_socket'] == 'y'){
+			$use_tcp = '#';
+			$use_socket = '';
+		} else {
+			$use_tcp = '';
+			$use_socket = '#';
+		}
+		$tpl->setVar('use_tcp', $use_tcp);
+		$tpl->setVar('use_socket', $use_socket);
+		$fpm_socket = $socket_dir.$pool_name.'.sock';
+		$tpl->setVar('fpm_socket', $fpm_socket);
 		$vhost_data['fpm_port'] = $web_config['php_fpm_start_port'] + $data['new']['domain_id'] + 1;
 		
 		// Custom nginx directives
@@ -870,7 +889,7 @@
 			$this->awstats_update($data,$web_config);
 		}
 		
-		$this->php_fpm_pool_update($data,$web_config);
+		$this->php_fpm_pool_update($data,$web_config,$pool_dir,$pool_name,$socket_dir);
 		
 		if($web_config['check_apache_config'] == 'y') {
 			//* Test if nginx starts with the new configuration file
@@ -1073,89 +1092,95 @@
 	}
 	
 	//* Update the PHP-FPM pool configuration file
-	private function php_fpm_pool_update ($data,$web_config) {
+	private function php_fpm_pool_update ($data,$web_config,$pool_dir,$pool_name,$socket_dir) {
 		global $app, $conf;
-		
-		$pool_dir = $web_config['php_fpm_pool_dir'];
-		$pool_name = 'web'.$data['new']['domain_id'];
 		//$reload = false;
 		
 		if($data['new']['php'] == 'no'){
-			if(@is_file($pool_dir.'/'.$pool_name.'.conf')){
-				unlink($pool_dir.'/'.$pool_name.'.conf');
+			if(@is_file($pool_dir.$pool_name.'.conf')){
+				unlink($pool_dir.$pool_name.'.conf');
 				//$reload = true;
 			}
 			//if($reload == true) $app->services->restartService('php-fpm','reload');
 			return;
 		}
-		
-		//if(!@is_file($pool_dir.'/'.$data['new']['domain'].'.conf') || ($data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain'])) {
-			//if ( @is_file($pool_dir.'/'.$pool_name.'.conf') ) {
-			//	unlink($pool_dir.'/'.$pool_name.'.conf');
-			//}
 			
-			$app->uses("getconf");
-			$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
+		$app->uses("getconf");
+		$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
 			
-			$app->load('tpl');
-			$tpl = new tpl();
-			$tpl->newTemplate('php_fpm_pool.conf.master');
+		$app->load('tpl');
+		$tpl = new tpl();
+		$tpl->newTemplate('php_fpm_pool.conf.master');
 
-			$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('security_level',$web_config['security_level']);
-			$php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']);
-			$tpl->setVar('php_open_basedir', $php_open_basedir);
-			if($php_open_basedir != ''){
-				$tpl->setVar('enable_php_open_basedir', '');
-			} else {
-				$tpl->setVar('enable_php_open_basedir', ';');
-			}
+		if($data['new']['php_fpm_use_socket'] == 'y'){
+			$use_tcp = ';';
+			$use_socket = '';
+			if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
+		} else {
+			$use_tcp = '';
+			$use_socket = ';';
+		}
+		$tpl->setVar('use_tcp', $use_tcp);
+		$tpl->setVar('use_socket', $use_socket);
 			
-			// Custom php.ini settings
-			$final_php_ini_settings = array();
-			$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
-			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);
-				$ini_settings = explode("\n", $custom_php_ini_settings);
-				if(is_array($ini_settings) && !empty($ini_settings)){
-					foreach($ini_settings as $ini_setting){
-							list($key, $value) = explode('=', $ini_setting);
-							if($value){
-								$value = escapeshellcmd(trim($value));
-								$key = escapeshellcmd(trim($key));
-								switch (strtolower($value)) {
-									case 'on':
-									case 'off':
-									case '1':
-									case '0':
-										// PHP-FPM might complain about invalid boolean value if you use 0
-										$value = 'off';
-									case 'true':
-									case 'false':
-									case 'yes':
-									case 'no':
-										$final_php_ini_settings[] = array('ini_setting' => 'php_admin_flag['.$key.'] = '.$value);
-										break;
-									default:
-										$final_php_ini_settings[] = array('ini_setting' => 'php_admin_value['.$key.'] = '.$value);
-								}
+		$fpm_socket = $socket_dir.$pool_name.'.sock';
+		$tpl->setVar('fpm_socket', $fpm_socket);
+			
+		$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('security_level',$web_config['security_level']);
+		$php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']);
+		$tpl->setVar('php_open_basedir', $php_open_basedir);
+		if($php_open_basedir != ''){
+			$tpl->setVar('enable_php_open_basedir', '');
+		} else {
+			$tpl->setVar('enable_php_open_basedir', ';');
+		}
+			
+		// Custom php.ini settings
+		$final_php_ini_settings = array();
+		$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
+		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);
+			$ini_settings = explode("\n", $custom_php_ini_settings);
+			if(is_array($ini_settings) && !empty($ini_settings)){
+				foreach($ini_settings as $ini_setting){
+						list($key, $value) = explode('=', $ini_setting);
+						if($value){
+							$value = escapeshellcmd(trim($value));
+							$key = escapeshellcmd(trim($key));
+							switch (strtolower($value)) {
+								case 'on':
+								case 'off':
+								case '1':
+								case '0':
+									// PHP-FPM might complain about invalid boolean value if you use 0
+									$value = 'off';
+								case 'true':
+								case 'false':
+								case 'yes':
+								case 'no':
+									$final_php_ini_settings[] = array('ini_setting' => 'php_admin_flag['.$key.'] = '.$value);
+									break;
+								default:
+									$final_php_ini_settings[] = array('ini_setting' => 'php_admin_value['.$key.'] = '.$value);
 							}
-					}
+						}
 				}
 			}
+		}
 			
-			$tpl->setLoop('custom_php_ini_settings', $final_php_ini_settings);
+		$tpl->setLoop('custom_php_ini_settings', $final_php_ini_settings);
 			
-			file_put_contents($pool_dir.'/'.$pool_name.'.conf',$tpl->grab());
-			$app->log('Writing the PHP-FPM config file: '.$pool_dir.'/'.$pool_name.'.conf',LOGLEVEL_DEBUG);
-			unset($tpl);
-			//$reload = true;
-		//}
+		file_put_contents($pool_dir.$pool_name.'.conf',$tpl->grab());
+		$app->log('Writing the PHP-FPM config file: '.$pool_dir.$pool_name.'.conf',LOGLEVEL_DEBUG);
+		unset($tpl);
+		//$reload = true;
+
 		//if($reload == true) $app->services->restartService('php-fpm','reload');
 	}
 	
@@ -1163,12 +1188,13 @@
 	private function php_fpm_pool_delete ($data,$web_config) {
 		global $app;
 		
-		$pool_dir = $web_config['php_fpm_pool_dir'];
-		$pool_name = 'web'.$data['old']['domain_id'];
+		$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+		if(substr($pool_dir,-1) != '/') $pool_dir .= '/';
+		$pool_name = 'web'.$data['new']['domain_id'];
 		
-		if ( @is_file($pool_dir.'/'.$pool_name.'.conf') ) {
-			unlink($pool_dir.'/'.$pool_name.'.conf');
-			$app->log('Removed PHP-FPM config file: '.$pool_dir.'/'.$pool_name.'.conf',LOGLEVEL_DEBUG);
+		if ( @is_file($pool_dir.$pool_name.'.conf') ) {
+			unlink($pool_dir.$pool_name.'.conf');
+			$app->log('Removed PHP-FPM config file: '.$pool_dir.$pool_name.'.conf',LOGLEVEL_DEBUG);
 			//$app->services->restartService('php-fpm','reload');
 		}
 	}

--
Gitblit v1.9.1