do NOT allow to change backup_files config if backup is called outside of setup, as it can have a huge impact on the server

This commit is contained in:
Ralf Becker 2011-01-20 22:17:06 +00:00
parent d46605ecf7
commit 3afe73c701
2 changed files with 22 additions and 40 deletions

View File

@ -299,47 +299,29 @@ class db_backup
/** /**
* Save the housekeeping configuration in the database and update the local variables. * Save the housekeeping configuration in the database and update the local variables.
* *
* @param mincount Minimum number of backups to keep. * @param int $mincount Minimum number of backups to keep.
* @param boolean $backup_files include files in backup or not, default dont change!
*/ */
function saveConfig($config_values) function saveConfig($minCount,$backupFiles=null)
{ {
if (!is_array($config_values)) config::save_value('backup_mincount',$this->backup_mincount=(int)$minCount,'phpgwapi');
if (!is_null($backupFiles))
{ {
error_log(__METHOD__." unable to save backup config values, wrong type of parameter passed."); config::save_value('backup_files',$this->backup_files=(boolean)$backupFiles,'phpgwapi');
return false;
} }
//_debug_array($config_values);
$minCount = $config_values['backup_mincount'];
$backupFiles = (int)$config_values['backup_files'];
/* minCount */
$this->db->insert(
self::TABLE,
array(
'config_value' => $minCount,
),
array(
'config_app' => 'phpgwapi',
'config_name' => 'backup_mincount',
),
__LINE__,
__FILE__);
/* backup files flag */
$this->db->insert(self::TABLE,array('config_value' => $backupFiles),array('config_app' => 'phpgwapi','config_name' => 'backup_files'),__LINE__,__FILE__);
$this->backup_mincount = $minCount;
$this->backup_files = (bool)$backupFiles;
// Update session cache
if (is_a($GLOBALS['egw'],'egw')) $GLOBALS['egw']->invalidate_session_cache();
} }
/** /**
* Certain config settings NOT to restore (because they break a working system) * Certain config settings NOT to restore (because they break a working system)
* *
* @var array * @var array
*/ */
static $system_config = array( static $system_config = array(
'files_dir', 'files_dir',
'temp_dir', 'temp_dir',
'backup_dir', 'backup_dir',
'backup_files',
'webserver_url', 'webserver_url',
'aspell_path', 'aspell_path',
'hostname', 'hostname',
@ -364,9 +346,9 @@ class db_backup
{ {
@set_time_limit(0); @set_time_limit(0);
ini_set('auto_detect_line_endings',true); ini_set('auto_detect_line_endings',true);
$convert_to_system_charset = true; // enforce now utf-8 as system charset restores of old backups $convert_to_system_charset = true; // enforce now utf-8 as system charset restores of old backups
if ($protect_system_config) if ($protect_system_config)
{ {
$system_config = array(); $system_config = array();
@ -756,7 +738,7 @@ class db_backup
fwrite($f,implode(',',$row)."\n"); fwrite($f,implode(',',$row)."\n");
} }
} }
if(!$zippresent) // save without files if(!$zippresent) // save without files
{ {
if ($this->backup_files) if ($this->backup_files)
{ {

View File

@ -27,6 +27,7 @@ if (!is_object(@$GLOBALS['egw'])) // called from outside eGW ==> setup
$tpl_root = $GLOBALS['egw_setup']->html->setup_tpl_dir('setup'); $tpl_root = $GLOBALS['egw_setup']->html->setup_tpl_dir('setup');
$self = 'db_backup.php'; $self = 'db_backup.php';
$is_setup = true;
} }
$db_backup = new db_backup(); $db_backup = new db_backup();
$asyncservice = new asyncservice(); $asyncservice = new asyncservice();
@ -77,19 +78,15 @@ if ($_POST['save_backup_settings'])
$matches = array(); $matches = array();
preg_match('/^[1-9][0-9]*$/', $_POST['backup_mincount'], $matches); preg_match('/^[1-9][0-9]*$/', $_POST['backup_mincount'], $matches);
$minCount = $matches[0]; $minCount = $matches[0];
$filesBackup =false; $filesBackup = $_POST['backup_files'] === 'backup_files';
if ($_POST['backup_files']==='backup_files') $filesBackup = true;
if (empty($minCount)) if (empty($minCount))
{ {
$minCount = 0; $minCount = 0;
$setup_tpl->set_var('error_msg',htmlspecialchars(lang("'%1' must be integer", lang("backup min count")))); $setup_tpl->set_var('error_msg',htmlspecialchars(lang("'%1' must be integer", lang("backup min count"))));
} }
$configValues = array( $db_backup->saveConfig($minCount,$is_setup ? (boolean)$filesBackup : null);
'backup_mincount'=>$minCount,
'backup_files' =>$filesBackup, if (is_int($minCount) && $minCount > 0)
);
$db_backup->saveConfig($configValues);
if (is_int($minCount) && $minCount>0)
{ {
$cleaned_files = array(); $cleaned_files = array();
/* Remove old backups. */ /* Remove old backups. */
@ -128,7 +125,10 @@ $setup_tpl->set_var('backup_now_button','<input type="submit" name="backup" titl
$setup_tpl->set_var('upload','<input type="file" name="uploaded" /> &nbsp;'. $setup_tpl->set_var('upload','<input type="file" name="uploaded" /> &nbsp;'.
'<input type="submit" name="upload" value="'.htmlspecialchars(lang('upload backup')).'" title="'.htmlspecialchars(lang("uploads a backup to the backup-dir, from where you can restore it")).'" />'); '<input type="submit" name="upload" value="'.htmlspecialchars(lang('upload backup')).'" title="'.htmlspecialchars(lang("uploads a backup to the backup-dir, from where you can restore it")).'" />');
$setup_tpl->set_var('backup_mincount','<input type="text" name="backup_mincount" value="'.$db_backup->backup_mincount.'" size="3" maxlength="3"/>'); $setup_tpl->set_var('backup_mincount','<input type="text" name="backup_mincount" value="'.$db_backup->backup_mincount.'" size="3" maxlength="3"/>');
$setup_tpl->set_var('backup_files','<input type="checkbox" name="backup_files" value="backup_files"'.((bool)$db_backup->backup_files ? 'checked':'').'/>'); $setup_tpl->set_var('backup_files','<input type="checkbox" name="backup_files" value="backup_files"'.
($db_backup->backup_files ? ' checked="true"':'').
// do NOT allow to change "backup files" outside of setup
($is_setup ? '' : ' disabled="true" title="'.htmlspecialchars(lang('Can only be change via Setup!')).'"').'/>');
$setup_tpl->set_var('backup_save_settings','<input type="submit" name="save_backup_settings" value="'.htmlspecialchars(lang('save')).'" />'); $setup_tpl->set_var('backup_save_settings','<input type="submit" name="save_backup_settings" value="'.htmlspecialchars(lang('save')).'" />');
if ($_POST['upload'] && is_array($_FILES['uploaded']) && !$_FILES['uploaded']['error'] && if ($_POST['upload'] && is_array($_FILES['uploaded']) && !$_FILES['uploaded']['error'] &&