From 992797f73c92b413a7fecff02c27c61b7db55b43 Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Mon, 14 Oct 2013 09:54:49 -0400
Subject: [PATCH] Copied files from svn 3.0.5 stable branch (git migration)

---
 server/cron_daily.php |  275 ++++++++++++++++++++++++------------------------------
 1 files changed, 122 insertions(+), 153 deletions(-)

diff --git a/server/cron_daily.php b/server/cron_daily.php
index 029c4f3..3342cee 100644
--- a/server/cron_daily.php
+++ b/server/cron_daily.php
@@ -55,7 +55,7 @@
 foreach($records as $rec) {
 	if(@is_file($rec['maildir'].'/ispconfig_mailsize')) {
         $parse_mail_log = false;
-
+        
 		// rename file
 		rename($rec['maildir'].'/ispconfig_mailsize',$rec['maildir'].'/ispconfig_mailsize_save');
 
@@ -93,15 +93,15 @@
     $mailbox_traffic = array();
     $mail_boxes = array();
     $mail_rewrites = array(); // we need to read all mail aliases and forwards because the address in amavis is not always the mailbox address
-
+    
     function parse_mail_log_line($line) {
         //Oct 31 17:35:48 mx01 amavis[32014]: (32014-05) Passed CLEAN, [IPv6:xxxxx] [IPv6:xxxxx] <xxx@yyyy> -> <aaaa@bbbb>, Message-ID: <xxxx@yyyyy>, mail_id: xxxxxx, Hits: -1.89, size: 1591, queued_as: xxxxxxx, 946 ms
-
+        
         if(preg_match('/^(\w+\s+\d+\s+\d+:\d+:\d+)\s+[^ ]+\s+amavis.* <([^>]+)>\s+->\s+((<[^>]+>,)+) .*Message-ID:\s+<([^>]+)>.* size:\s+(\d+),.*$/', $line, $matches) == false) return false;
-
+        
         $timestamp = strtotime($matches[1]);
         if(!$timestamp) return false;
-
+        
         $to = array();
         $recipients = explode(',', $matches[3]);
         foreach($recipients as $recipient) {
@@ -109,15 +109,15 @@
             if(!$recipient || $recipient == $matches[2]) continue;
             $to[] = $recipient;
         }
-
+        
         return array('line' => $line, 'timestamp' => $timestamp, 'size' => $matches[6], 'from' => $matches[2], 'to' => $to, 'message-id' => $matches[5]);
     }
 
     function add_mailbox_traffic(&$traffic_array, $address, $traffic) {
         global $mail_boxes, $mail_rewrites;
-
+        
         $address = strtolower($address);
-
+        
         if(in_array($address, $mail_boxes) == true) {
             if(!isset($traffic_array[$address])) $traffic_array[$address] = 0;
             $traffic_array[$address] += $traffic;
@@ -147,17 +147,17 @@
             }
         }
     }
-
+    
     $state_file = dirname(__FILE__) . '/mail_log_parser.state';
     $prev_line = false;
     $last_line = false;
     $cur_line = false;
-
+    
     if(file_exists($state_file)) {
         $prev_line = parse_mail_log_line(trim(file_get_contents($state_file)));
         //if($prev_line) echo "continuing from previous run, log position: " . $prev_line['message-id'] . " at " . strftime('%d.%m.%Y %H:%M:%S', $prev_line['timestamp']) . "\n";
     }
-
+    
     if(file_exists('/var/log/mail.log')) {
         $fp = fopen('/var/log/mail.log', 'r');
         //echo "Parsing mail.log...\n";
@@ -167,7 +167,7 @@
             //if($l % 1000 == 0) echo "\rline $l";
             $cur_line = parse_mail_log_line($line);
             if(!$cur_line) continue;
-
+            
             if($prev_line) {
                 // check if this line has to be processed
                 if($cur_line['timestamp'] < $prev_line['timestamp']) {
@@ -179,7 +179,7 @@
                     continue;
                 }
             }
-
+            
             add_mailbox_traffic($mailbox_traffic, $cur_line['from'], $cur_line['size']);
             foreach($cur_line['to'] as $to) {
                 add_mailbox_traffic($mailbox_traffic, $to, $cur_line['size']);
@@ -189,7 +189,7 @@
         fclose($fp);
         //echo "\n";
     }
-
+    
     if($parse_mail_log == true && file_exists('/var/log/mail.log.1')) {
         $fp = fopen('/var/log/mail.log.1', 'r');
         //echo "Parsing mail.log.1...\n";
@@ -199,7 +199,7 @@
             //if($l % 1000 == 0) echo "\rline $l";
             $cur_line = parse_mail_log_line($line);
             if(!$cur_line) continue;
-
+            
             if($prev_line) {
                 // check if this line has to be processed
                 if($cur_line['timestamp'] < $prev_line['timestamp']) continue; // already processed
@@ -208,7 +208,7 @@
                     continue;
                 }
             }
-
+            
             add_mailbox_traffic($mailbox_traffic, $cur_line['from'], $cur_line['size']);
             foreach($cur_line['to'] as $to) {
                 add_mailbox_traffic($mailbox_traffic, $to, $cur_line['size']);
@@ -219,7 +219,7 @@
     }
     unset($mail_rewrites);
     unset($mail_boxes);
-
+    
     // Save the traffic stats in the sql database
     $tstamp = date('Y-m');
     $sql = "SELECT mailuser_id,email FROM mail_user WHERE server_id = ".$conf['server_id'];
@@ -239,7 +239,7 @@
             //echo $sql;
         }
     }
-
+    
     unset($mailbox_traffic);
     if($last_line) file_put_contents($state_file, $last_line);
 }
@@ -279,7 +279,7 @@
 foreach($records as $rec) {
 	//$yesterday = date('Ymd',time() - 86400);
 	$yesterday = date('Ymd',strtotime("-1 day", time()));
-
+	
     $log_folder = 'log';
     if($rec['type'] == 'vhostsubdomain') {
         $tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($rec['parent_domain_id']));
@@ -331,7 +331,7 @@
 foreach($records as $rec) {
 	//$yesterday = date('Ymd',time() - 86400);
 	$yesterday = date('Ymd',strtotime("-1 day", time()));
-
+	
     $log_folder = 'log';
     if($rec['type'] == 'vhostsubdomain') {
         $tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($rec['parent_domain_id']));
@@ -453,7 +453,7 @@
 
 	//* create traffic statistics based on yesterdays access log file
 	$yesterday = date('Ymd',time() - 86400);
-
+	
     $log_folder = 'log';
     if($rec['type'] == 'vhostsubdomain') {
         $tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($rec['parent_domain_id']));
@@ -462,7 +462,7 @@
         $log_folder .= '/' . $subdomain_host;
         unset($tmp);
     }
-
+    
     $logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log';
 	$total_bytes = 0;
 
@@ -647,10 +647,10 @@
 #########
 function send_notification_email($template, $placeholders, $recipients) {
     global $conf;
-
+    
     if(!is_array($recipients) || count($recipients) < 1) return false;
     if(!is_array($placeholders)) $placeholders = array();
-
+    
     if(file_exists($conf['rootpath'].'/conf-custom/mail/' . $template . '_'.$conf['language'].'.txt')) {
         $lines = file($conf['rootpath'].'/conf-custom/mail/' . $template . '_'.$conf['language'].'.txt');
     } elseif(file_exists($conf['rootpath'].'/conf-custom/mail/' . $template . '_en.txt')) {
@@ -660,7 +660,7 @@
     } else {
         $lines = file($conf['rootpath'].'/conf/mail/' . $template . '_en.txt');
     }
-
+    
     //* get mail headers, subject and body
     $mailHeaders = '';
     $mailBody = '';
@@ -681,12 +681,12 @@
         }
     }
     $mailBody = trim($mailBody);
-
+    
     //* Replace placeholders
     $mailHeaders = strtr($mailHeaders, $placeholders);
     $mailSubject = strtr($mailSubject, $placeholders);
     $mailBody = strtr($mailBody, $placeholders);
-
+    
     for($r = 0; $r < count($recipients); $r++) {
         mail($recipients[$r], $mailSubject, $mailBody, $mailHeaders);
     }
@@ -695,7 +695,7 @@
     unset($mailHeaders);
     unset($mailBody);
     unset($lines);
-
+    
     return true;
 }
 
@@ -707,7 +707,7 @@
 if ($app->dbmaster == $app->db) {
 
 	$global_config = $app->getconf->get_global_config('mail');
-
+	
 	$current_month = date('Y-m');
 
 	//* Check website traffic quota
@@ -740,19 +740,19 @@
 			if($web_traffic_quota > 0 && $web_traffic > $web_traffic_quota) {
 				$app->dbmaster->datalogUpdate('web_domain', "traffic_quota_lock = 'y',active = 'n'", 'domain_id', $rec['domain_id']);
 				$app->log('Traffic quota for '.$rec['domain'].' exceeded. Disabling website.',LOGLEVEL_DEBUG);
-
+				
 				//* Send traffic notifications
 				if($rec['traffic_quota_lock'] != 'y' && ($web_config['overtraffic_notify_admin'] == 'y' || $web_config['overtraffic_notify_client'] == 'y')) {
                     
-					$placeholders = array('{domain}' => $rec['domain'],
+                    $placeholders = array('{domain}' => $rec['domain'],
                                           '{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'));
                     
 					$recipients = array();
-					//* send email to admin
+                    //* send email to admin
 					if($global_config['admin_mail'] != '' && $web_config['overtraffic_notify_admin'] == 'y') {
 						$recipients[] = $global_config['admin_mail'];
 					}
-
+					
 					//* Send email to client
 					if($web_config['overtraffic_notify_client'] == 'y') {
 						$client_group_id = $rec["sys_groupid"];
@@ -761,10 +761,11 @@
 							$recipients[] = $client['email'];
 						}
 					}
-
-					send_notification_email('web_traffic_notification', $placeholders, $recipients);
+                    
+                    send_notification_email('web_traffic_notification', $placeholders, $recipients);
 				}
-
+				
+				
 			} else {
 				//* unlock the website, if traffic is lower then quota
 				if($rec['traffic_quota_lock'] == 'y') {
@@ -791,7 +792,7 @@
 	$sql = "SELECT domain_id,sys_groupid,domain,system_user,last_quota_notification,DATEDIFF(CURDATE(), last_quota_notification) as `notified_before` FROM web_domain WHERE (type = 'vhost' OR type = 'vhostsubdomain')";
 	$records = $app->db->queryAllRecords($sql);
 	if(is_array($records) && !empty($records)) {
-
+	
 		$tmp_rec =  $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'harddisk_quota' ORDER BY created DESC");
 		$monitor_data = array();
 		if(is_array($tmp_rec)) {
@@ -799,18 +800,18 @@
 				$monitor_data = array_merge_recursive($monitor_data,unserialize($app->db->unquote($tmp_mon['data'])));
 			}
 		}
-
+		
 		foreach($records as $rec) {
 
 			//$web_hd_quota = $rec['hd_quota'];
 			$domain = $rec['domain'];
-
+			
 			$username = $rec['system_user'];
 			$rec['used'] = $monitor_data['user'][$username]['used'];
 			$rec['soft'] = $monitor_data['user'][$username]['soft'];
 			$rec['hard'] = $monitor_data['user'][$username]['hard'];
 			$rec['files'] = $monitor_data['user'][$username]['files'];
-
+				
 			if (!is_numeric($rec['used'])){
 				if ($rec['used'][0] > $rec['used'][1]){
 					$rec['used'] = $rec['used'][0];
@@ -821,22 +822,22 @@
 			if (!is_numeric($rec['soft'])) $rec['soft']=$rec['soft'][1];
 			if (!is_numeric($rec['hard'])) $rec['hard']=$rec['hard'][1];
 			if (!is_numeric($rec['files'])) $rec['files']=$rec['files'][1];
-
+				
 			// used space ratio
 			if($rec['soft'] > 0){
 				$used_ratio = $rec['used']/$rec['soft'];
 			} else {
 				$used_ratio = 0;
 			}
-
+			
 			$rec['ratio'] = number_format($used_ratio * 100, 2, '.', '').'%';
-
+		
 			if($rec['used'] > 1024) {
 				$rec['used'] = round($rec['used'] / 1024,2).' MB';
 			} else {
 				if ($rec['used'] != '') $rec['used'] .= ' KB';
 			}
-
+		
 			if($rec['soft'] > 1024) {
 				$rec['soft'] = round($rec['soft'] / 1024,2).' MB';
 			} elseif($rec['soft'] == 0){
@@ -844,7 +845,7 @@
 			} else {
 				$rec['soft'] .= ' KB';
 			}
-
+		
 			if($rec['hard'] > 1024) {
 				$rec['hard'] = round($rec['hard'] / 1024,2).' MB';
 			} elseif($rec['hard'] == 0){
@@ -852,12 +853,12 @@
 			} else {
 				$rec['hard'] .= ' KB';
 			}
-
+			
 			// send notifications only if 90% or more of the quota are used
 			if($used_ratio < 0.9) {
                 // reset notification date
                 if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('web_domain', "last_quota_notification = NULL", 'domain_id', $rec['domain_id']);
-
+                
                 // send notification - everything ok again
                 if($rec['last_quota_notification'] && $web_config['overquota_notify_onok'] == 'y' && ($web_config['overquota_notify_admin'] == 'y' || $web_config['overquota_notify_client'] == 'y')) {
                     $placeholders = array('{domain}' => $rec['domain'],
@@ -868,12 +869,12 @@
                                           '{ratio}' => $rec['ratio']);
 
                     $recipients = array();
-
+                    
                     //* send email to admin
                     if($global_config['admin_mail'] != '' && $web_config['overquota_notify_admin'] == 'y') {
                         $recipients[] = $global_config['admin_mail'];
                     }
-
+                    
                     //* Send email to client
                     if($web_config['overquota_notify_client'] == 'y') {
                         $client_group_id = $rec["sys_groupid"];
@@ -884,19 +885,19 @@
                     }
                     send_notification_email('web_quota_ok_notification', $placeholders, $recipients);
                 }
-
+                
                 continue;
             }
-
+            
             // could a notification be sent?
             $send_notification = false;
             if(!$rec['last_quota_notification']) $send_notification = true; // not yet notified
             elseif($web_config['overquota_notify_freq'] > 0 && $rec['notified_before'] >= $web_config['overquota_notify_freq']) $send_notification = true;
-
+            
 			//* Send quota notifications
 			if(($web_config['overquota_notify_admin'] == 'y' || $web_config['overquota_notify_client'] == 'y') && $send_notification == true) {
 				$app->dbmaster->datalogUpdate('web_domain', "last_quota_notification = CURDATE()", 'domain_id', $rec['domain_id']);
-
+                
                 $placeholders = array('{domain}' => $rec['domain'],
                                       '{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'),
                                       '{used}' => $rec['used'],
@@ -905,12 +906,12 @@
                                       '{ratio}' => $rec['ratio']);
 
                 $recipients = array();
-
+                
                 //* send email to admin
                 if($global_config['admin_mail'] != '' && $web_config['overquota_notify_admin'] == 'y') {
                     $recipients[] = $global_config['admin_mail'];
                 }
-
+                
                 //* Send email to client
                 if($web_config['overquota_notify_client'] == 'y') {
                     $client_group_id = $rec["sys_groupid"];
@@ -939,7 +940,7 @@
 	$sql = "SELECT mailuser_id,sys_groupid,email,name,quota,last_quota_notification,DATEDIFF(CURDATE(), last_quota_notification) as `notified_before` FROM mail_user";
 	$records = $app->db->queryAllRecords($sql);
 	if(is_array($records) && !empty($records)) {
-
+	
 		$tmp_rec =  $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'email_quota' ORDER BY created DESC");
 		$monitor_data = array();
 		if(is_array($tmp_rec)) {
@@ -953,24 +954,24 @@
 				}
 			}
 		}
-
+		
 		foreach($records as $rec) {
 
 			$email = $rec['email'];
-
+		
 			$rec['used'] = isset($monitor_data[$email]['used']) ? $monitor_data[$email]['used'] : array(1 => 0);
-
+		
 			if (!is_numeric($rec['used'])) $rec['used']=$rec['used'][1];
-
+				
 			// used space ratio
 			if($rec['quota'] > 0){
 				$used_ratio = $rec['used']/$rec['quota'];
 			} else {
 				$used_ratio = 0;
 			}
-
+			
 			$rec['ratio'] = number_format($used_ratio * 100, 2, '.', '').'%';
-
+			
 			if($rec['quota'] > 0){
 				$rec['quota'] = round($rec['quota'] / 1048576,4).' MB';
 			} else {
@@ -981,8 +982,8 @@
 				$rec['used'] = round($rec['used'] / 1024,4).' KB';
 			} else {
 				$rec['used'] = round($rec['used'] / 1048576,4).' MB';
-			}
-
+			} 
+			
 			// send notifications only if 90% or more of the quota are used
 			if($used_ratio < 0.9) {
                 // reset notification date
@@ -996,13 +997,13 @@
                               '{name}' => $rec['name'],
                               '{quota}' => $rec['quota'],
                               '{ratio}' => $rec['ratio']);
-
+        
                     $recipients = array();
                     //* send email to admin
                     if($global_config['admin_mail'] != '' && $mail_config['overquota_notify_admin'] == 'y') {
                         $recipients[] = $global_config['admin_mail'];
                     }
-
+                    
                     //* Send email to client
                     if($mail_config['overquota_notify_client'] == 'y') {
                         $client_group_id = $rec["sys_groupid"];
@@ -1011,35 +1012,35 @@
                             $recipients[] = $client['email'];
                         }
                     }
-
+                    
                     send_notification_email('mail_quota_ok_notification', $placeholders, $recipients);
                 }
 
                 continue;
             }
-
+				
 			//* Send quota notifications
             // could a notification be sent?
             $send_notification = false;
             if(!$rec['last_quota_notification']) $send_notification = true; // not yet notified
             elseif($mail_config['overquota_notify_freq'] > 0 && $rec['notified_before'] >= $mail_config['overquota_notify_freq']) $send_notification = true;
-
+            
             if(($mail_config['overquota_notify_admin'] == 'y' || $mail_config['overquota_notify_client'] == 'y') && $send_notification == true) {
 				$app->dbmaster->datalogUpdate('mail_user', "last_quota_notification = CURDATE()", 'mailuser_id', $rec['mailuser_id']);
-
+                
                 $placeholders = array('{email}' => $rec['email'],
                           '{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'),
                           '{used}' => $rec['used'],
                           '{name}' => $rec['name'],
                           '{quota}' => $rec['quota'],
                           '{ratio}' => $rec['ratio']);
-
+    
                 $recipients = array();
                 //* send email to admin
                 if($global_config['admin_mail'] != '' && $mail_config['overquota_notify_admin'] == 'y') {
                     $recipients[] = $global_config['admin_mail'];
                 }
-
+                
                 //* Send email to client
                 if($mail_config['overquota_notify_client'] == 'y') {
                     $client_group_id = $rec["sys_groupid"];
@@ -1048,9 +1049,9 @@
                         $recipients[] = $client['email'];
                     }
                 }
-
+                
                 send_notification_email('mail_quota_notification', $placeholders, $recipients);
-			}
+			}	
 		}
 	}
 }
@@ -1076,17 +1077,12 @@
 
 }
 
-#######################################################################################################
-// Create website backups
-#######################################################################################################
-function formatBytes($size, $precision = 2) {
-	$base=log($size)/log(1024);
-	$suffixes=array('','k','M','G','T');
-    	return round(pow(1024,$base-floor($base)),$precision).$suffixes[floor($base)];
-}
-
-$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
-$backup_dir = $server_config['backup_dir'];
+#######################################################################################################
+// Create website backups
+#######################################################################################################
+
+$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
+$backup_dir = $server_config['backup_dir'];
 $backup_mode = $server_config['backup_mode'];
 if($backup_mode == '') $backup_mode = 'userzip';
 
@@ -1139,7 +1135,7 @@
 					$web_backup_file = 'web'.$web_id.'_'.date('Y-m-d_H-i').'.tar.gz';
 					exec('tar pczf '.escapeshellarg($web_backup_dir.'/'.$web_backup_file).' --exclude=backup\* --directory '.escapeshellarg($web_path).' .', $tmp_output, $retval);
 				}
-				if($retval == 0){
+				if($retval == 0 || $backup_mode != 'userzip'){ // tar can return 1 (due to harmless warings) and still create valid backups
 					chown($web_backup_dir.'/'.$web_backup_file, 'root');
 					chgrp($web_backup_dir.'/'.$web_backup_file, 'root');
 					chmod($web_backup_dir.'/'.$web_backup_file, 0750);
@@ -1153,7 +1149,7 @@
 				} else {
 					if(is_file($web_backup_dir.'/'.$web_backup_file)) unlink($web_backup_dir.'/'.$web_backup_file);
 				}
-
+				
 				//* Remove old backups
 				$backup_copies = intval($rec['backup_copies']);
 
@@ -1187,7 +1183,7 @@
 				//* Remove backupdir symlink and create as directory instead
 				$app->uses('system');
 				$app->system->web_folder_protection($web_path,false);
-
+				
 				if(is_link($web_path.'/backup')) {
 					unlink($web_path.'/backup');
 				}
@@ -1196,9 +1192,8 @@
 					chown($web_path.'/backup', $rec['system_user']);
 					chgrp($web_path.'/backup', $rec['system_group']);
 				}
-
+				
 				$app->system->web_folder_protection($web_path,true);
-
 			}
 
 			/* If backup_interval is set to none and we have a
@@ -1232,73 +1227,34 @@
 				chown($db_backup_dir, 'root');
 				chgrp($db_backup_dir, 'root');
 
-				//* Do the mysql database backup with mysqldump or mongodump
+				//* Do the mysql database backup with mysqldump
 				$db_id = $rec['database_id'];
 				$db_name = $rec['database_name'];
+				$db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i').'.sql';
+				//$command = "mysqldump -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
+				$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
+				exec($command, $tmp_output, $retval);
 
-				if ($rec['type'] == 'mysql') {
-					$db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i').'.sql';
-					//$command = "mysqldump -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
-					$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
-					exec($command, $tmp_output, $retval);
+				//* Compress the backup with gzip
+				if($retval == 0) exec("gzip -c '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file)."' > '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file).".gz'", $tmp_output, $retval);
+				
+				if($retval == 0){
+					chmod($db_backup_dir.'/'.$db_backup_file.'.gz', 0750);
+					chown($db_backup_dir.'/'.$db_backup_file.'.gz', fileowner($db_backup_dir));
+					chgrp($db_backup_dir.'/'.$db_backup_file.'.gz', filegroup($db_backup_dir));
 
-					//* Compress the backup with gzip
-					if($retval == 0) exec("gzip -c '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file)."' > '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file).".gz'", $tmp_output, $retval);
+					//* Insert web backup record in database
+					//$insert_data = "(server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')";
+					//$app->dbmaster->datalogInsert('web_backup', $insert_data, 'backup_id');
+					$sql = "INSERT INTO web_backup (server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')";
+					$app->db->query($sql);
+					if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
 
-					if($retval == 0){
-						chmod($db_backup_dir.'/'.$db_backup_file.'.gz', 0750);
-						chown($db_backup_dir.'/'.$db_backup_file.'.gz', fileowner($db_backup_dir));
-						chgrp($db_backup_dir.'/'.$db_backup_file.'.gz', filegroup($db_backup_dir));
-
-						//* Insert web backup record in database
-						//$insert_data = "(server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')";
-						//$app->dbmaster->datalogInsert('web_backup', $insert_data, 'backup_id');
-						$sql = "INSERT INTO web_backup (server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')";
-						$app->db->query($sql);
-						if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
-
-					} else {
-						if(is_file($db_backup_dir.'/'.$db_backup_file.'.gz')) unlink($db_backup_dir.'/'.$db_backup_file.'.gz');
-					}
-					//* Remove the uncompressed file
-					if(is_file($db_backup_dir.'/'.$db_backup_file)) unlink($db_backup_dir.'/'.$db_backup_file);
-				} else if ($rec['type'] == 'mongo') {
-					$db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i');
-
-					try {
-						$connection = new MongoClient("mongodb://root:123456@127.0.0.1:27017/admin");
-						$db = $connection->selectDB($db_name);
-						// exclude not supported by mongodump, only get user collections
-						$collections = $db->getCollectionNames(false);
-
-						foreach ($collections as $collection) {
-							// mongodump -h 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -d <db> -c <table> -o /tmp/test
-							$command = "mongodump -h 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -d ".escapeshellcmd($db_name)." -c ".escapeshellcmd($collection)." -o ".escapeshellcmd($db_backup_dir.'/'.$db_backup_file);
-							exec($command);
-						}
-
-						if (is_dir(escapeshellcmd($db_backup_dir.'/'.$db_backup_file))) {
-							//* Compress the backup with gzip
-							exec("cd ".escapeshellcmd($db_backup_dir)." && tar -pczf ".escapeshellcmd($db_backup_dir.'/'.$db_backup_file).".tar.gz ".escapeshellcmd($db_backup_file));
-							chmod($db_backup_dir.'/'.$db_backup_file.'.tar.gz', 0750);
-							chown($db_backup_dir.'/'.$db_backup_file.'.tar.gz', fileowner($db_backup_dir));
-							chgrp($db_backup_dir.'/'.$db_backup_file.'.tar.gz', filegroup($db_backup_dir));
-
-							//* Insert web backup record in database
-							$sql = "INSERT INTO web_backup (server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mongodb','rootgz',".time().",'".$app->db->quote($db_backup_file).".tar.gz')";
-							$app->db->query($sql);
-
-							if ($app->db->dbHost != $app->dbmaster->dbHost) {
-								$app->dbmaster->query($sql);
-							}
-
-							//* Remove the uncompressed file
-							exec("rm -rf ".escapeshellcmd($db_backup_dir.'/'.$db_backup_file));
-						}
-					} catch (MongoConnnectionException $e) {
-						// connecting to MongoDB failed - cannot create backup
-					}
+				} else {
+					if(is_file($db_backup_dir.'/'.$db_backup_file.'.gz')) unlink($db_backup_dir.'/'.$db_backup_file.'.gz');
 				}
+				//* Remove the uncompressed file
+				if(is_file($db_backup_dir.'/'.$db_backup_file)) unlink($db_backup_dir.'/'.$db_backup_file);
 
 				//* Remove old backups
 				$backup_copies = intval($rec['backup_copies']);
@@ -1306,13 +1262,13 @@
 				$dir_handle = dir($db_backup_dir);
 				$files = array();
 				while (false !== ($entry = $dir_handle->read())) {
-					if($entry != '.' && $entry != '..' && (preg_match('/^db_(.*?)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql.gz$/', $entry, $matches) || preg_match('/^db_(.*?)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.tar.gz$/', $entry, $matches)) && is_file($db_backup_dir.'/'.$entry)) {
+					if($entry != '.' && $entry != '..' && preg_match('/^db_(.*?)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql.gz$/', $entry, $matches) && is_file($db_backup_dir.'/'.$entry)) {
                         if(array_key_exists($matches[1], $files) == false) $files[$matches[1]] = array();
 						$files[$matches[1]][] = $entry;
 					}
 				}
 				$dir_handle->close();
-
+                
                 reset($files);
                 foreach($files as $db_name => $filelist) {
                     rsort($filelist);
@@ -1339,6 +1295,19 @@
 		unset($clientdb_password);
 
 	}
+	
+	// remove non-existing backups from database
+	$backups = $app->db->queryAllRecords("SELECT * FROM web_backup WHERE server_id = ".$conf['server_id']);
+	if(is_array($backups) && !empty($backups)){
+		foreach($backups as $backup){
+			$backup_file = $backup_dir.'/web'.$backup['parent_domain_id'].'/'.$backup['filename'];
+			if(!is_file($backup_file)){
+				$sql = "DELETE FROM web_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = ".$backup['parent_domain_id']." AND filename = '".$backup['filename']."'";
+				$app->db->query($sql);
+				if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+			}
+		}
+	}
 }
 
 

--
Gitblit v1.9.1