@@ -65,63 +65,78 @@ public function backup_action($action_name, $data) {
6565
6666 if (is_array ($ backup )) {
6767
68- $ app ->uses ('ini_parser,file,getconf ' );
68+ $ app ->uses ('ini_parser,file,getconf,system ' );
6969
7070 $ web = $ app ->db ->queryOneRecord ("SELECT * FROM web_domain WHERE domain_id = " .$ backup ['parent_domain_id ' ]);
7171 $ server_config = $ app ->getconf ->get_server_config ($ conf ['server_id ' ], 'server ' );
7272 $ backup_dir = $ server_config ['backup_dir ' ].'/web ' .$ web ['domain_id ' ];
73-
74- //* Make backup available for download
75- if ($ action_name == 'backup_download ' ) {
76- //* Copy the backup file to the backup folder of the website
77- if (file_exists ($ backup_dir .'/ ' .$ backup ['filename ' ]) && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], '.. ' ) && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], 'etc ' )) {
78- copy ($ backup_dir .'/ ' .$ backup ['filename ' ], $ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ]);
79- chgrp ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ], $ web ['system_group ' ]);
80- $ app ->log ('cp ' .$ backup_dir .'/ ' .$ backup ['filename ' ].' ' .$ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ], LOGLEVEL_DEBUG );
73+
74+ //* mount backup directory, if necessary
75+ $ backup_dir_is_ready = true ;
76+ $ server_config ['backup_dir_mount_cmd ' ] = trim ($ server_config ['backup_dir_mount_cmd ' ]);
77+ if ($ server_config ['backup_dir_is_mount ' ] == 'y ' && $ server_config ['backup_dir_mount_cmd ' ] != '' ){
78+ if (!$ app ->system ->is_mounted ($ backup_dir )){
79+ exec (escapeshellcmd ($ server_config ['backup_dir_mount_cmd ' ]));
80+ sleep (1 );
81+ if (!$ app ->system ->is_mounted ($ backup_dir )) $ backup_dir_is_ready = false ;
8182 }
8283 }
8384
84- //* Restore a mysql backup
85- if ($ action_name == 'backup_restore ' && $ backup ['backup_type ' ] == 'mysql ' ) {
86- //* Load sql dump into db
87- include 'lib/mysql_clientdb.conf ' ;
88-
89- if (file_exists ($ backup_dir .'/ ' .$ backup ['filename ' ])) {
90- //$parts = explode('_',$backup['filename']);
91- //$db_name = $parts[1];
92- preg_match ('@^db_(.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql\.gz$@ ' , $ backup ['filename ' ], $ matches );
93- $ db_name = $ matches [1 ];
94- $ command = "gunzip --stdout " .escapeshellarg ($ backup_dir .'/ ' .$ backup ['filename ' ])." | mysql -h ' " .escapeshellcmd ($ clientdb_host )."' -u ' " .escapeshellcmd ($ clientdb_user )."' -p' " .escapeshellcmd ($ clientdb_password )."' ' " .$ db_name ."' " ;
95- exec ($ command );
96- }
97- unset($ clientdb_host );
98- unset($ clientdb_user );
99- unset($ clientdb_password );
100- $ app ->log ('Restored MySQL backup ' .$ backup_dir .'/ ' .$ backup ['filename ' ], LOGLEVEL_DEBUG );
101- }
102-
103- //* Restore a web backup
104- if ($ action_name == 'backup_restore ' && $ backup ['backup_type ' ] == 'web ' ) {
105- if ($ backup ['backup_mode ' ] == 'userzip ' ) {
106- if (file_exists ($ backup_dir .'/ ' .$ backup ['filename ' ]) && $ web ['document_root ' ] != '' && $ web ['document_root ' ] != '/ ' && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], '.. ' ) && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], 'etc ' )) {
107- if (file_exists ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ])) rename ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ], $ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ].'.bak ' );
85+ if ($ backup_dir_is_ready ){
86+ //* Make backup available for download
87+ if ($ action_name == 'backup_download ' ) {
88+ //* Copy the backup file to the backup folder of the website
89+ if (file_exists ($ backup_dir .'/ ' .$ backup ['filename ' ]) && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], '.. ' ) && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], 'etc ' )) {
10890 copy ($ backup_dir .'/ ' .$ backup ['filename ' ], $ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ]);
10991 chgrp ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ], $ web ['system_group ' ]);
110- //chown($web['document_root'].'/backup/'.$backup['filename'],$web['system_user']);
111- $ command = 'sudo -u ' .escapeshellarg ($ web ['system_user ' ]).' unzip -qq -o ' .escapeshellarg ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ]).' -d ' .escapeshellarg ($ web ['document_root ' ]).' 2> /dev/null ' ;
112- exec ($ command );
113- unlink ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ]);
114- if (file_exists ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ].'.bak ' )) rename ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ].'.bak ' , $ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ]);
115- $ app ->log ('Restored Web backup ' .$ backup_dir .'/ ' .$ backup ['filename ' ], LOGLEVEL_DEBUG );
92+ $ app ->log ('cp ' .$ backup_dir .'/ ' .$ backup ['filename ' ].' ' .$ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ], LOGLEVEL_DEBUG );
11693 }
11794 }
118- if ($ backup ['backup_mode ' ] == 'rootgz ' ) {
119- if (file_exists ($ backup_dir .'/ ' .$ backup ['filename ' ]) && $ web ['document_root ' ] != '' && $ web ['document_root ' ] != '/ ' && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], '.. ' ) && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], 'etc ' )) {
120- $ command = 'tar xzf ' .escapeshellarg ($ backup_dir .'/ ' .$ backup ['filename ' ]).' --directory ' .escapeshellarg ($ web ['document_root ' ]);
95+
96+ //* Restore a mysql backup
97+ if ($ action_name == 'backup_restore ' && $ backup ['backup_type ' ] == 'mysql ' ) {
98+ //* Load sql dump into db
99+ include 'lib/mysql_clientdb.conf ' ;
100+
101+ if (file_exists ($ backup_dir .'/ ' .$ backup ['filename ' ])) {
102+ //$parts = explode('_',$backup['filename']);
103+ //$db_name = $parts[1];
104+ preg_match ('@^db_(.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql\.gz$@ ' , $ backup ['filename ' ], $ matches );
105+ $ db_name = $ matches [1 ];
106+ $ command = "gunzip --stdout " .escapeshellarg ($ backup_dir .'/ ' .$ backup ['filename ' ])." | mysql -h ' " .escapeshellcmd ($ clientdb_host )."' -u ' " .escapeshellcmd ($ clientdb_user )."' -p' " .escapeshellcmd ($ clientdb_password )."' ' " .$ db_name ."' " ;
121107 exec ($ command );
122- $ app ->log ('Restored Web backup ' .$ backup_dir .'/ ' .$ backup ['filename ' ], LOGLEVEL_DEBUG );
108+ }
109+ unset($ clientdb_host );
110+ unset($ clientdb_user );
111+ unset($ clientdb_password );
112+ $ app ->log ('Restored MySQL backup ' .$ backup_dir .'/ ' .$ backup ['filename ' ], LOGLEVEL_DEBUG );
113+ }
114+
115+ //* Restore a web backup
116+ if ($ action_name == 'backup_restore ' && $ backup ['backup_type ' ] == 'web ' ) {
117+ if ($ backup ['backup_mode ' ] == 'userzip ' ) {
118+ if (file_exists ($ backup_dir .'/ ' .$ backup ['filename ' ]) && $ web ['document_root ' ] != '' && $ web ['document_root ' ] != '/ ' && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], '.. ' ) && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], 'etc ' )) {
119+ if (file_exists ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ])) rename ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ], $ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ].'.bak ' );
120+ copy ($ backup_dir .'/ ' .$ backup ['filename ' ], $ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ]);
121+ chgrp ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ], $ web ['system_group ' ]);
122+ //chown($web['document_root'].'/backup/'.$backup['filename'],$web['system_user']);
123+ $ command = 'sudo -u ' .escapeshellarg ($ web ['system_user ' ]).' unzip -qq -o ' .escapeshellarg ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ]).' -d ' .escapeshellarg ($ web ['document_root ' ]).' 2> /dev/null ' ;
124+ exec ($ command );
125+ unlink ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ]);
126+ if (file_exists ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ].'.bak ' )) rename ($ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ].'.bak ' , $ web ['document_root ' ].'/backup/ ' .$ backup ['filename ' ]);
127+ $ app ->log ('Restored Web backup ' .$ backup_dir .'/ ' .$ backup ['filename ' ], LOGLEVEL_DEBUG );
128+ }
129+ }
130+ if ($ backup ['backup_mode ' ] == 'rootgz ' ) {
131+ if (file_exists ($ backup_dir .'/ ' .$ backup ['filename ' ]) && $ web ['document_root ' ] != '' && $ web ['document_root ' ] != '/ ' && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], '.. ' ) && !stristr ($ backup_dir .'/ ' .$ backup ['filename ' ], 'etc ' )) {
132+ $ command = 'tar xzf ' .escapeshellarg ($ backup_dir .'/ ' .$ backup ['filename ' ]).' --directory ' .escapeshellarg ($ web ['document_root ' ]);
133+ exec ($ command );
134+ $ app ->log ('Restored Web backup ' .$ backup_dir .'/ ' .$ backup ['filename ' ], LOGLEVEL_DEBUG );
135+ }
123136 }
124137 }
138+ } else {
139+ $ app ->log ('Backup directory not ready. ' , LOGLEVEL_DEBUG );
125140 }
126141
127142 } else {
0 commit comments