@@ -50,10 +50,13 @@ public function onRunJob() {
5050 global $ app , $ conf ;
5151
5252 $ server_config = $ app ->getconf ->get_server_config ($ conf ['server_id ' ], 'server ' );
53+ $ mail_config = $ app ->getconf ->get_server_config ($ conf ['server_id ' ], 'mail ' );
54+
5355 $ backup_dir = $ server_config ['backup_dir ' ];
56+ $ backup_dir_permissions =0750 ;
57+
5458 $ backup_mode = $ server_config ['backup_mode ' ];
5559 if ($ backup_mode == '' ) $ backup_mode = 'userzip ' ;
56- $ backup_dir_permissions =0750 ;
5760
5861 if ($ backup_dir != '' ) {
5962 //* mount backup directory, if necessary
@@ -67,32 +70,35 @@ public function onRunJob() {
6770 }
6871 }
6972
70- $ mail_config = $ app ->getconf ->get_server_config ($ conf ['server_id ' ], 'mail ' );
71-
72- if (!is_dir ($ backup_dir )) {
73- mkdir (escapeshellcmd ($ backup_dir ), $ backup_dir_permissions , true );
74- } else {
75- chmod (escapeshellcmd ($ backup_dir ), $ backup_dir_permissions );
76- }
77-
78- $ sql ="SELECT * FROM mail_user JOIN mail_domain ON (mail_domain.active='y' AND mail_user.email like concat('%',mail_domain.domain)) WHERE mail_user.server_id= " .$ conf ['server_id ' ]." AND maildir <> '' ORDER BY mail_domain.domain_id " ;
73+ $ sql = "SELECT * FROM mail_user WHERE server_id = ' " .intval ($ conf ['server_id ' ])."' AND maildir <> '' " ;
7974 $ records = $ app ->db ->queryAllRecords ($ sql );
75+
8076 if (is_array ($ records ) && $ run_backups ) {
77+ if (!is_dir ($ backup_dir )) {
78+ mkdir (escapeshellcmd ($ backup_dir ), $ backup_dir_permissions , true );
79+ } else {
80+ chmod (escapeshellcmd ($ backup_dir ), $ backup_dir_permissions );
81+ }
82+
8183 foreach ($ records as $ rec ) {
8284 //* Do the mailbox backup
8385 if ($ rec ['backup_interval ' ] == 'daily ' or ($ rec ['backup_interval ' ] == 'weekly ' && date ('w ' ) == 0 ) or ($ rec ['backup_interval ' ] == 'monthly ' && date ('d ' ) == '01 ' )) {
84- $ mail_backup_dir = $ backup_dir .'/mail ' .$ rec ['domain_id ' ];
86+ $ sql = "SELECT * FROM mail_domain WHERE domain = ' " .$ app ->db ->quote (explode ("@ " ,$ rec ['email ' ])[1 ])."' " ;
87+ $ domain_rec =$ app ->db ->queryOneRecord ($ sql );
8588
89+ $ mail_backup_dir = $ backup_dir .'/mail ' .$ domain_rec ['domain_id ' ];
8690 if (!is_dir ($ mail_backup_dir )) mkdir ($ mail_backup_dir , 0750 );
8791 chmod ($ mail_backup_dir , $ backup_dir_permissions );
8892
93+ $ mail_backup_file = 'mail ' .$ rec ['mailuser_id ' ].'_ ' .date ('Y-m-d_H-i ' );
94+
8995 $ domain_dir =explode ('/ ' ,$ rec ['maildir ' ]);
9096 $ _temp =array_pop ($ domain_dir );unset($ _temp );
9197 $ domain_dir =implode ('/ ' ,$ domain_dir );
92- $ source_dir =array_pop (explode ('/ ' ,$ rec ['maildir ' ]));
9398
94- $ mail_backup_file = ' mail ' . $ rec ['mailuser_id ' ]. ' _ ' . date ( ' Y-m-d_H-i ' );
99+ $ source_dir = array_pop ( explode ( ' / ' , $ rec ['maildir ' ]) );
95100
101+ //* create archives
96102 if ($ backup_mode == 'userzip ' ) {
97103 $ mail_backup_file .='.zip ' ;
98104 exec ('cd ' .$ rec ['homedir ' ].' && zip -b /tmp -r ' .$ mail_backup_dir .'/ ' .$ mail_backup_file .' ' .$ source_dir .' > /dev/nul ' );
@@ -106,7 +112,7 @@ public function onRunJob() {
106112 chgrp ($ mail_backup_dir .'/ ' .$ mail_backup_file , 'root ' );
107113 chmod ($ mail_backup_dir .'/ ' .$ mail_backup_file , 0640 );
108114 /* Insert mail backup record in database */
109- $ sql = "INSERT INTO mail_backup (server_id,parent_domain_id,mailuser_id,backup_mode,tstamp,filename,filesize) VALUES ( " .$ conf ['server_id ' ].", " .$ rec ['domain_id ' ].", " .$ rec ['mailuser_id ' ].",' " .$ backup_mode ."', " .time ().",' " .$ app ->db ->quote ($ mail_backup_file )."',' " .$ app ->functions ->formatBytes (filesize ($ mail_backup_dir .'/ ' .$ mail_backup_file ))."') " ;
115+ $ sql = "INSERT INTO mail_backup (server_id,parent_domain_id,mailuser_id,backup_mode,tstamp,filename,filesize) VALUES ( " .$ conf ['server_id ' ].", " .$ domain_rec ['domain_id ' ].", " .$ rec ['mailuser_id ' ].",' " .$ backup_mode ."', " .time ().",' " .$ app ->db ->quote ($ mail_backup_file )."',' " .$ app ->functions ->formatBytes (filesize ($ mail_backup_dir .'/ ' .$ mail_backup_file ))."') " ;
110116 $ app ->db ->query ($ sql );
111117 if ($ app ->db ->dbHost != $ app ->dbmaster ->dbHost ) $ app ->dbmaster ->query ($ sql );
112118 } else {
@@ -128,7 +134,7 @@ public function onRunJob() {
128134 for ($ n = $ backup_copies ; $ n <= 10 ; $ n ++) {
129135 if (isset ($ files [$ n ]) && is_file ($ mail_backup_dir .'/ ' .$ files [$ n ])) {
130136 unlink ($ mail_backup_dir .'/ ' .$ files [$ n ]);
131- $ sql = "DELETE FROM mail_backup WHERE server_id = " .$ conf ['server_id ' ]." AND parent_domain_id = " .$ rec ['domain_id ' ]." AND filename = ' " .$ app ->db ->quote ($ files [$ n ])."' " ;
137+ $ sql = "DELETE FROM mail_backup WHERE server_id = " .$ conf ['server_id ' ]." AND parent_domain_id = " .$ domain_rec ['domain_id ' ]." AND filename = ' " .$ app ->db ->quote ($ files [$ n ])."' " ;
132138 $ app ->db ->query ($ sql );
133139 if ($ app ->db ->dbHost != $ app ->dbmaster ->dbHost ) $ app ->dbmaster ->query ($ sql );
134140 }
@@ -139,7 +145,7 @@ public function onRunJob() {
139145 /* Remove inactive backups */
140146 if ($ rec ['backup_interval ' ] == 'none ' ) {
141147 /* remove backups from db */
142- $ sql = "DELETE FROM mail_backup WHERE server_id = " .$ conf ['server_id ' ]." AND parent_domain_id = " .$ rec ['domain_id ' ]." AND mailuser_id = " .$ rec ['mailuser_id ' ];
148+ $ 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 ' ];
143149 $ app ->db ->query ($ sql );
144150 if ($ app ->db ->dbHost != $ app ->dbmaster ->dbHost ) $ app ->dbmaster ->query ($ sql );
145151 /* remove archives */
0 commit comments