Florian Schaal
2014-01-05 2e145303892b5014d6fa21d48aa5c8316c347ce2
added database-modifications for mail-backup
2 files modified
1 files added
44 ■■■■■ changed files
install/sql/incremental/upd_0060.sql 14 ●●●●● patch | view | raw | blame | history
install/sql/ispconfig3.sql 20 ●●●●● patch | view | raw | blame | history
server/lib/classes/cron.d/500-backup_mail.inc.php 10 ●●●● patch | view | raw | blame | history
install/sql/incremental/upd_0060.sql
New file
@@ -0,0 +1,14 @@
CREATE TABLE `mail_backup` (
  `backup_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `server_id` int(10) unsigned NOT NULL,
  `parent_domain_id` int(10) unsigned NOT NULL,
  `mailuser_id` int(10) unsigned NOT NULL,
  `backup_mode` varchar(64) NOT NULL DEFAULT  '',
  `tstamp` int(10) unsigned NOT NULL,
  `filename` varchar(255) NOT NULL,
  `filesize` VARCHAR(10) NOT NULL,
  PRIMARY KEY (`backup_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ALTER TABLE `mail_user` ADD `backup_interval` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `mail_user` ADD `backup_copies` INT NOT NULL DEFAULT '1';
install/sql/ispconfig3.sql
@@ -651,6 +651,24 @@
-- --------------------------------------------------------
--
-- Table structure for table  `mail_backup`
--
CREATE TABLE `mail_backup` (
  `backup_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `server_id` int(10) unsigned NOT NULL,
  `parent_domain_id` int(10) unsigned NOT NULL,
  `mailuser_id` int(10) unsigned NOT NULL,
  `backup_mode` varchar(64) NOT NULL DEFAULT  '',
  `tstamp` int(10) unsigned NOT NULL,
  `filename` varchar(255) NOT NULL,
  `filesize` VARCHAR(10) NOT NULL,
  PRIMARY KEY (`backup_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
-- 
-- Table structure for table  `mail_content_filter`
-- 
@@ -863,6 +881,8 @@
  `disablelda` enum('n','y') NOT NULL default 'n',
  `disabledoveadm` enum('n','y') NOT NULL default 'n',
  `last_quota_notification` date NULL default NULL,
  `backup_interval` VARCHAR( 255 ) NOT NULL,
  `backup_copies` INT NOT NULL DEFAULT '1',
  PRIMARY KEY  (`mailuser_id`),
  KEY `server_id` (`server_id`,`email`),
  KEY `email_access` (`email`,`access`)
server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -79,6 +79,9 @@
            $sql = "SELECT * FROM mail_user WHERE server_id = '".$conf['server_id']."' AND maildir <> ''";
            $records = $app->db->queryAllRecords($sql);
/*
            if(is_array($records) && $run_backups) {
*/
            if(is_array($records)) {
                foreach($records as $rec) {
                    //* Do the mailbox backup
@@ -100,7 +103,6 @@
                        if($backup_mode == 'userzip') {
                            $mail_backup_file.='.zip';
                            exec('cd '.$rec['homedir'].' && zip -b /tmp -r '.$mail_backup_dir.'/'.$mail_backup_file.' '.$source_dir.' > /dev/nul');
                            //exec('cd '.$rec['homedir'].' && zip -b /tmp -r '.$mail_backup_dir.'/'.$mail_backup_file.' '.$source_dir.' > /dev/nul');
                        } else {
                            /* Create a tar.gz backup */
                            $mail_backup_file.='.tar.gz';
@@ -117,7 +119,7 @@
                        } else {
                            /* Backup failed - remove archive */
                            if(is_file($mail_backup_dir.'/'.$mail_backup_file)) unlink($mail_backup_dir.'/'.$mail_backup_file);
                            $app->log($mail_backup_file.' NOK:'.$tmp_output, LOGLEVEL_DEBUG);
                            $app->log($mail_backup_file.' NOK:'.implode('',$tmp_output), LOGLEVEL_DEBUG);
                        }
                        /* Remove old backups */
                        $backup_copies = intval($rec['backup_copies']);
@@ -143,12 +145,14 @@
                    }
                    /* Remove inactive backups */
                    if($rec['backup_interval'] == 'none') {
                        $sql="SELECT * FROM mail_domain WHERE domain = '".$app->db->quote(explode("@",$rec['email'])[1])."'";
                        $domain_rec=$app->db->queryOneRecord($sql);
                        /* remove backups from db */
                        $sql = "DELETE FROM mail_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = ".$domain_rec['domain_id']." AND mailuser_id = ".$rec['mailuser_id'];
                        $app->db->query($sql);
                        if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
                        /* remove archives */
                        $mail_backup_dir = $backup_dir.'/mail'.$rec['sys_userid'];
                        $mail_backup_dir = $backup_dir.'/mail'.$domain_rec['domain_id'];
                        $mail_backup_file = 'mail'.$rec['mailuser_id'].'_*';
                        if(is_dir($mail_backup_dir)) {
                            foreach (glob($mail_backup_dir.'/'.$mail_backup_file) as $filename) {