From 3ee39be0bdc245c0aba35b4430fb0b71027d2ea3 Mon Sep 17 00:00:00 2001
From: mcramer <m.cramer@pixcept.de>
Date: Wed, 21 Nov 2012 15:14:46 +0000
Subject: [PATCH] FS#2546 - Update all custom php.ini files for webs on main
 php.ini change  - added configuration options to server config (web tab, php
 section)  - do not update custom php.inis if md5sum file does not exist

---
 install/tpl/server.ini.master                    |  1 +
 interface/web/admin/form/server_config.tform.php | 11 +++++++++++
 .../web/admin/lib/lang/de_server_config.lng      |  3 +++
 .../web/admin/lib/lang/en_server_config.lng      |  5 ++++-
 .../admin/templates/server_config_web_edit.htm   |  4 ++++
 .../plugins-available/webserver_plugin.inc.php   | 16 +++++++++++++---
 6 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index fdaab8e86c..9b55ef78a9 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -81,6 +81,7 @@ add_web_users_to_sshusers_group=y
 connect_userid_to_webid=n
 connect_userid_to_webid_start=10000
 web_folder_protection=y
+php_ini_check_minutes=1
 
 [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 1e5b06e256..0025d99833 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -686,6 +686,17 @@ $form["tabs"]['web'] = array(
 			'width' => '40',
 			'maxlength' => '4000'
 		),
+		'php_ini_check_minutes' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '1',
+			'validators' => array(0 => array('type' => 'NOTEMPTY',
+					'errmsg' => 'php_ini_check_minutes_error_empty'),
+			),
+			'value' => '',
+			'width' => '10',
+			'maxlength' => '255'
+		),
 		'nginx_cgi_socket' => 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 bcbab19199..e0864f18f0 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -170,4 +170,7 @@ $wb['enable_ip_wildcard_txt'] = 'IP Adressen Wildcard (*) aktivieren';
 $wb['web_folder_protection_txt'] = 'Webverzeichnis unveränderlich machen (erweiterte Attribute)';
 $wb['overtraffic_notify_admin_txt'] = 'Ãœberschreiten des Transfer Limits an den Administrator senden';
 $wb['overtraffic_notify_client_txt'] = 'Ãœberschreiten des Transfer Limits an den Kunden senden';
+$wb['php_ini_check_minutes_txt'] = 'Pr&uuml;fe System php.ini Dateien auf &Auml;nderungen alle';
+$wb['php_ini_check_minutes_info_txt'] = 'Minute(n) (0 deaktiviert diese Funktion)';
+$wb['php_ini_check_minutes_error_empty'] = 'Der Wert f&uuml;r die Einstellung der php.ini Pr&uuml;fung ist ung&uuml;ltig.';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index dbaf39e16e..e94c4d3a08 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -172,5 +172,8 @@ $wb["overtraffic_notify_admin_txt"] = 'Send overtraffic notification to admin';
 $wb["overtraffic_notify_client_txt"] = 'Send overtraffic notification to client';
 $wb["v6_prefix_txt"] = 'IPv6 Prefix';
 $wb["vhost_rewrite_v6_txt"] = 'Rewrite IPv6 on Mirror';
-$wb["v6_prefix_wrong"] = 'Invalid v6 Netmask format.';
+$wb["v6_prefix_wrong"] = 'Invalid v6 Netmask format.';
+$wb["php_ini_check_minutes_txt"] = 'Check system php.ini files for changes each';
+$wb["php_ini_check_minutes_info_txt"] = 'minutes (0 disables checking)';
+$wb['php_ini_check_minutes_error_empty'] = 'Invalid value for php.ini checking.';
 ?>
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index 7211f8d68a..3b19161891 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -195,6 +195,10 @@
                     <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" />
                 </div>
+                <div class="ctrlHolder">
+                    <label for="php_ini_check_minutes">{tmpl_var name='php_ini_check_minutes_txt'}</label>
+                    <input name="php_ini_check_minutes" id="php_ini_check_minutes" value="{tmpl_var name='php_ini_check_minutes'}" size="40" type="text" class="textInput" /> {tmpl_var name='php_ini_check_minutes_info_txt'}
+                </div>
             </div>
             <div class="subsectiontoggle"><span></span>{tmpl_var name='apps_vhost_settings_txt'}<em></em></div>
             <div style="display:none;">
diff --git a/server/plugins-available/webserver_plugin.inc.php b/server/plugins-available/webserver_plugin.inc.php
index f7d888b0a9..5678444559 100644
--- a/server/plugins-available/webserver_plugin.inc.php
+++ b/server/plugins-available/webserver_plugin.inc.php
@@ -79,6 +79,11 @@ class webserver_plugin {
         $web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
         $fastcgi_config = $app->getconf->get_server_config($conf['server_id'], 'fastcgi');
         
+        if($web_config['php_ini_check_minutes'] == 0 || @date('i') % $web_config['php_ini_check_minutes'] != 0) {
+            $app->log('Info: php.ini change checking not enabled or not in this minute: ' . $web_config['php_ini_check_minutes'],LOGLEVEL_DEBUG);
+            return; // do not process
+        }
+        
         //** add default php.ini files to check
         $check_files[] = array('file' => $web_config['php_ini_path_apache'],
                                'mode' => 'mod',
@@ -118,7 +123,12 @@ class webserver_plugin {
         $new_php_ini_md5 = array();
         $php_ini_md5 = array();
         $php_ini_changed = false;
-        if(file_exists(SCRIPT_PATH . '/php.ini.md5sum')) $php_ini_md5 = unserialize(base64_decode(trim($app->system->file_get_contents(SCRIPT_PATH . '/php.ini.md5sum'))));
+        $rewrite_ini_files = false;
+        
+        if(file_exists(SCRIPT_PATH . '/temp/php.ini.md5sum')) {
+            $rewrite_ini_files = true;
+            $php_ini_md5 = unserialize(base64_decode(trim($app->system->file_get_contents(SCRIPT_PATH . '/temp/php.ini.md5sum'))));
+        }
         if(!is_array($php_ini_md5)) $php_ini_md5 = array();
         
         $processed = array();
@@ -139,14 +149,14 @@ class webserver_plugin {
                 
                 $app->log('Info: PHP.ini changed: ' . $file_path . ', mode ' . $file['mode'] . ' vers ' . $file['php_version'] . '.',LOGLEVEL_DEBUG);
                 // raise action for this file
-                $app->plugins->raiseAction('php_ini_changed', $file);
+                if($rewrite_ini_files == true) $app->plugins->raiseAction('php_ini_changed', $file);
             }
             
             $new_php_ini_md5[$file_path] = $file_md5;
         }
         
         //** write new md5 sums if something changed
-        if($php_ini_changed == true) $app->system->file_put_contents(SCRIPT_PATH . '/php.ini.md5sum', base64_encode(serialize($new_php_ini_md5)));
+        if($php_ini_changed == true) $app->system->file_put_contents(SCRIPT_PATH . '/temp/php.ini.md5sum', base64_encode(serialize($new_php_ini_md5)));
         unset($new_php_ini_md5);
         unset($php_ini_md5);
         unset($processed);
-- 
GitLab