From 992702870c9653b9a5e82936637542d181eaf29c Mon Sep 17 00:00:00 2001 From: "Christoph Burchert (Chb)" Date: Thu, 15 Sep 2011 15:03:55 +0200 Subject: [PATCH] Fixed customer's backup directory (thanks to monotek and arnoldB), fixes #859 Signed-off-by: Christoph Burchert (Chb) --- actions/admin/settings/215.backup.php | 2 +- .../customer/extras/formfield.backup.php | 2 +- scripts/jobs/cron_backup.php | 28 +++++++++++-------- scripts/jobs/cron_tasks.php | 2 +- scripts/jobs/cron_traffic.php | 1 - 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/actions/admin/settings/215.backup.php b/actions/admin/settings/215.backup.php index 82302656..2b3e6ff1 100644 --- a/actions/admin/settings/215.backup.php +++ b/actions/admin/settings/215.backup.php @@ -38,7 +38,7 @@ return array( 'type' => 'string', 'string_type' => 'dir', 'default' => '/var/customers/backups/', - 'string_regexp' => '/^/.*/$/', + 'string_regexp' => '^/.*/$', 'save_method' => 'storeSettingField', ), 'backup_mysqldump_path' => array( diff --git a/lib/formfields/customer/extras/formfield.backup.php b/lib/formfields/customer/extras/formfield.backup.php index 6b1e8de0..ecf8cab5 100644 --- a/lib/formfields/customer/extras/formfield.backup.php +++ b/lib/formfields/customer/extras/formfield.backup.php @@ -25,7 +25,7 @@ return array( 'fields' => array( 'path' => array( 'label' => $lng['extras']['backup_create'], - 'desc' => $lng['extras']['backup_info'].'
'.($settings['system']['backup_bigfile'] == 1 ? $lng['extras']['backup_info_big'] : $lng['extras']['backup_info_sep']).'
'.$lng['extras']['backup_count_info'], + 'desc' => $lng['extras']['backup_info'].'
'.($settings['system']['backup_bigfile'] == 1 ? $lng['extras']['backup_info_big'] : $lng['extras']['backup_info_sep']).'
'.($settings['system']['backup_count'] == 1 ? $lng['extras']['backup_count_info'] : ''), 'type' => 'yesno', 'yesno_var' => $backup_enabled ) diff --git a/scripts/jobs/cron_backup.php b/scripts/jobs/cron_backup.php index 32141295..0cc5b5c5 100644 --- a/scripts/jobs/cron_backup.php +++ b/scripts/jobs/cron_backup.php @@ -40,39 +40,45 @@ if($settings['system']['backup_enabled'] == '1'){ $ftp_row = mysql_fetch_array($ftp_result); // create backup dir an set rights - if(!file_exists($row['documentroot'] . $settings['system']['backup_dir'])){ - safe_exec('install -d ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . ' -o ' . escapeshellarg($ftp_row['uid']) . ' -g ' . escapeshellarg($ftp_row['gid']) . ' -m ' . '0500'); + if(!file_exists($settings['system']['backup_dir'] . $row['loginname']) { + safe_exec('install -d ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . ' -o ' . escapeshellarg($ftp_row['uid']) . ' -g ' . escapeshellarg($ftp_row['gid']) . ' -m ' . '0500'); } // create customers html backup - safe_exec('tar -C ' . escapeshellarg($row['documentroot']) . ' -c -z -f ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . '/' . escapeshellarg($row['loginname']) . 'html.tar.gz .'); + safe_exec('tar -C ' . escapeshellarg($row['documentroot']) . ' -c -z -f ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . '/' . escapeshellarg($row['loginname']) . 'html.tar.gz .'); // get customer dbs $dbs_result = $db->query("SELECT databasename FROM `" . TABLE_PANEL_DATABASES . "` WHERE `customerid` = '" . $db->escape($row['customerid']) . "';"); while($dbs_row = $db->fetch_array($dbs_result)){ // create customers sql backup - safe_exec(escapeshellarg($settings['system']['backup_mysqldump_path']) . ' --opt --force --allow-keywords -u ' . $sql_root[0]['user'] . ' -p' . $sql_root[0]['password'] . ' -h ' . $sql_root[0]['host'] . ' ' . escapeshellarg($dbs_row['databasename']) . ' -r ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . '/' . escapeshellarg($dbs_row['databasename']) . '.sql' ); + safe_exec(escapeshellarg($settings['system']['backup_mysqldump_path']) . ' --opt --force --allow-keywords -u ' . escapeshellarg($sql_root[0]['user']) . ' -p' . escapeshellarg($sql_root[0]['password']) . ' -h ' . $sql_root[0]['host'] . ' ' . escapeshellarg($dbs_row['databasename']) . ' -r ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . '/' . escapeshellarg($dbs_row['databasename']) . '.sql' ); // compress sql backup - safe_exec('tar -C ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . ' -c -z -f ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . '/' . escapeshellarg($dbs_row['databasename']) . '.tar.gz ' . escapeshellarg($dbs_row['databasename']) . '.sql'); + safe_exec('tar -C ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . ' -c -z -f ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . '/' . escapeshellarg($dbs_row['databasename']) . '.tar.gz ' . escapeshellarg($dbs_row['databasename']) . '.sql'); // remove uncompresed sql files - safe_exec('rm ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . '/' . escapeshellarg($dbs_row['databasename']) . '.sql'); + safe_exec('rm ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . '/' . escapeshellarg($dbs_row['databasename']) . '.sql'); } // create 1 big file with html & db if($settings['system']['backup_bigfile'] == 1){ - safe_exec('tar -C ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . '/' . ' --exclude=' . escapeshellarg($row['loginname']) . '.tar.gz -c -z -f ' . $settings['system']['backup_dir'] . $row['loginname'] . '/' . escapeshellarg($row['loginname']) . '.tar.gz .'); + safe_exec('tar -C ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . '/' . ' --exclude=' . escapeshellarg($row['loginname']) . '.tar.gz -c -z -f ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . '/' . escapeshellarg($row['loginname']) . '.tar.gz .'); // remove separated files $tmp_files = scandir($settings['system']['backup_dir'] . $row['loginname']); foreach ($tmp_files as $tmp_file){ if(preg_match('/.*(html|sql|aps).*\.tar\.gz$/', $tmp_file) && !preg_match('/^' . $row['loginname'] . '\.tar\.gz$/', $tmp_file)){ - safe_exec('rm ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . '/' . $tmp_file . ''); + safe_exec('rm ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . '/' . escapeshellarg($tmp_file) . ''); } } } + else { + //remove big file if separated backups are used + if (file_exists($settings['system']['backup_dir'] . $row['loginname'] . '/' . $row['loginname'] . '.tar.gz')) { + safe_exec('rm ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . '/' . escapeshellarg($row['loginname']) . '.tar.gz'); + } + } // chown & chmod files to prevent manipulation - safe_exec('chown ' . escapeshellarg($row['guid']) . ':' . escapeshellarg($row['guid']) . ' ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . '/*'); - safe_exec('chmod 0400 ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . '/*'); + safe_exec('chown ' . escapeshellarg($row['guid']) . ':' . escapeshellarg($row['guid']) . ' ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . '/*'); + safe_exec('chmod 0400 ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . '/*'); // create ftp backup user $user_result = $db->query("SELECT username, password FROM `" . TABLE_FTP_USERS . "` WHERE `customerid` = '" . $db->escape($row['customerid']) . "' AND `username` = '" . $db->escape($row['loginname']) . "';"); @@ -111,7 +117,7 @@ if($settings['system']['backup_enabled'] == '1'){ $files = scandir($settings['system']['backup_dir'] . $row['loginname'] . '/'); foreach ($files as $file){ if(preg_match('/.*\.tar\.gz$/', $file)){ - safe_exec('rm ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . '/' . $file . ''); + safe_exec('rm ' . escapeshellarg($settings['system']['backup_dir']) . escapeshellarg($row['loginname']) . '/' . escapeshellarg($file) . ''); } } } diff --git a/scripts/jobs/cron_tasks.php b/scripts/jobs/cron_tasks.php index 1d75d0ec..74504559 100644 --- a/scripts/jobs/cron_tasks.php +++ b/scripts/jobs/cron_tasks.php @@ -264,7 +264,7 @@ while($row = $db->fetch_array($result_tasks)) elseif ($row['type'] == '5') { $cronlog->logAction(CRON_ACTION, LOG_INFO, 'Creating new FTP-home'); - $result_directories = $db->query('SELECT `f`.`homedir`, `f`.`uid`, `f`.`gid`, `c`.`documentroot` AS `customerroot` FROM `' . TABLE_FTP_USERS . '` `f` LEFT JOIN `' . TABLE_PANEL_CUSTOMERS . '` `c` USING (`customerid`) '); + $result_directories = $db->query('SELECT `f`.`homedir`, `f`.`uid`, `f`.`gid`, `c`.`documentroot` AS `customerroot` FROM `' . TABLE_FTP_USERS . '` `f` LEFT JOIN `' . TABLE_PANEL_CUSTOMERS . '` `c` USING (`customerid`) WHERE `f`.`username` NOT LIKE \'%_backup\''); while($directory = $db->fetch_array($result_directories)) { diff --git a/scripts/jobs/cron_traffic.php b/scripts/jobs/cron_traffic.php index 7e830138..3133f709 100644 --- a/scripts/jobs/cron_traffic.php +++ b/scripts/jobs/cron_traffic.php @@ -408,7 +408,6 @@ while($row = $db->fetch_array($result)) * Total Usage */ - $diskusage = floatval($webspaceusage + $emailusage + $mysqlusage); if($settings['system']['backup_count'] == 0 && file_exists($settings['system']['backup_dir'] . $row['loginname'])){ $backupsize = exec('du -s ' . escapeshellarg($settings['system']['backup_dir']) . $row['loginname'] . ''); $diskusage = floatval($webspaceusage + $emailusage + $mysqlusage - $backupsize);