#!/usr/bin/perl # backup_db.cgi # Do the actual backup require './mysql-lib.pl'; &ReadParse(); if ($in{'all'}) { @alldbs = grep { &supports_backup_db($_) } &list_databases(); @dbs = grep { &can_edit_db($_) } @alldbs; @alldbs == @dbs || &error($text{'dbase_ecannot'}); } else { &can_edit_db($in{'db'}) || &error($text{'dbase_ecannot'}); } $access{'edonly'} && &error($text{'dbase_ecannot'}); $access{'buser'} || &error($text{'dbase_ecannot'}); &error_setup($text{'backup_err'}); # Cannot download all the DBs if ($in{'dest'} == 1 && $in{'all'}) { &error($text{'backup_edownloadall'}); } if ($in{'dest'} == 1 && ($in{'sched'} || $in{'save'})) { &error($text{'backup_edownloadsave'}); } if (!$in{'save'} || $in{'sched'}) { if ($in{'all'}) { -d $in{'file'} || -d &date_subs($in{'file'}) || $in{'mkdir'} || &error($text{'backup_efile2'}); } else { $in{'dest'} || $in{'file'} =~ /^\/\S+$/ || &error($text{'backup_efile'}); } $in{'where_def'} || $in{'where'} || &error($text{'backup_ewhere'}); $in{'charset_def'} || $in{'charset'} =~ /^\S+$/ || &error($text{'backup_echarset'}); $ccmd = $in{'compress'} == 1 ? "gzip" : $in{'compress'} == 2 ? "bzip2" : undef; !$ccmd || &has_command($ccmd) || &error(&text('backup_eccmd', "<tt>$ccmd</tt>")); if (!$in{'dest'} && !&is_under_directory($access{'bpath'}, $in{'file'})) { &error($text{'backup_epath'}."<br>". &text('backup_eunder', "<tt>$access{'bpath'}</tt>")); } if (!$in{'all'} && !$in{'tables_def'}) { @tables = split(/\0/, $in{'tables'}); @tables || &error($text{'backup_etables'}); } } @compat = $in{'compatible_def'} ? ( ) : ( $in{'compatible'} ); push(@compat, split(/\0/, $in{'options'})); $cron = !$module_info{'usermin'} && $access{'buser'} eq 'root' && !$access{'user'} && &foreign_installed("cron"); $cmode = 0; if ($cron) { $config{'backup_before_'.$in{'db'}} = $in{'before'}; $config{'backup_after_'.$in{'db'}} = $in{'after'}; if ($in{'all'}) { $config{'backup_cmode_'.$in{'db'}} = $in{'cmode'}; $cmode = $in{'cmode'}; } $config{'backup_email_'.$in{'db'}} = $in{'email'}; $config{'backup_notify_'.$in{'db'}} = $in{'notify'}; &foreign_require("cron"); @jobs = &cron::list_cron_jobs(); $cmd = $in{'all'} ? "$cron_cmd --all" : "$cron_cmd $in{'db'}"; ($job) = grep { $_->{'command'} eq $cmd } @jobs; $oldjob = $job; $job ||= { 'command' => $cmd, 'user' => 'root', 'active' => 1 }; &cron::parse_times_input($job, \%in); } # Save choices for next time the form is visited (and for the cron job) if ($module_info{'usermin'}) { if (!$in{'dest'}) { $userconfig{'backup_'.$in{'db'}} = $in{'file'}; } $userconfig{'backup_where_'.$in{'db'}} = $in{'where_def'} ? undef : $in{'where'}; $userconfig{'backup_charset_'.$in{'db'}} = $in{'charset_def'} ? undef : $in{'charset'}; $userconfig{'backup_compatible_'.$in{'db'}} = $in{'compatible_def'} ? undef : $in{'compatible'}; $userconfig{'backup_options_'.$in{'db'}} = join(" ", split(/\0/, $in{'options'})); $userconfig{'backup_compress_'.$in{'db'}} = $in{'compress'}; $userconfig{'backup_drop_'.$in{'db'}} = $in{'drop'}; $userconfig{'backup_single_'.$in{'db'}} = $in{'single'}; $userconfig{'backup_quick_'.$in{'db'}} = $in{'quick'}; $userconfig{'backup_parameters_'.$in{'db'}} = $in{'parameters'}; $userconfig{'backup_tables_'.$in{'db'}} = join(" ", @tables); if ($in{'save'}) { &save_user_module_config(); } } else { if (!$in{'dest'}) { $config{'backup_'.$in{'db'}} = $in{'file'}; $config{'backup_prefix_'.$in{'db'}} = $in{'prefix'}; $in{'prefix'} =~ /\// && &error($text{'backup_eprefix'}); } $config{'backup_mkdir_'.$in{'db'}} = $in{'mkdir'}; $config{'backup_where_'.$in{'db'}} = $in{'where_def'} ? undef : $in{'where'}; $config{'backup_charset_'.$in{'db'}} = $in{'charset_def'} ? undef : $in{'charset'}; $config{'backup_compatible_'.$in{'db'}} = $in{'compatible_def'} ? undef : $in{'compatible'}; $config{'backup_options_'.$in{'db'}} = join(" ", split(/\0/, $in{'options'})); $config{'backup_compress_'.$in{'db'}} = $in{'compress'}; $config{'backup_drop_'.$in{'db'}} = $in{'drop'}; $config{'backup_single_'.$in{'db'}} = $in{'single'}; $config{'backup_quick_'.$in{'db'}} = $in{'quick'}; $config{'backup_parameters_'.$in{'db'}} = $in{'parameters'}; $config{'backup_tables_'.$in{'db'}} = join(" ", @tables); if ($in{'save'}) { &save_module_config(); } } if ($in{'dest'}) { my $mt; my $fn = "backup.sql"; if ($in{'compress'} == 1) { $mt = "application/x-gzip"; $fn .= ".gz"; } elsif ($in{'compress'} == 2) { $mt = "application/x-bzip2"; $fn .= ".bz2"; } else { $mt = "text/plain"; } print "Content-Type: $mt\n"; print "Content-Disposition: Attachment; filename=\"$fn\"\n"; print "\n"; } else { &ui_print_header(undef, $text{'backup_title'}, ""); } if (!$in{'save'}) { # Actually execute the backup now @dbs = $in{'all'} ? @alldbs : ( $in{'db'} ); if ($cmode == 1) { # Run and check before-backup command (for all DBs) $bok = &execute_before(undef, STDOUT, 1, $in{'file'}, undef); if (!$bok) { print "$main::whatfailed : ", $text{'backup_ebefore'},"<p>\n"; goto donebackup; } } foreach $db (@dbs) { my $deletefile = 0; if ($in{'all'}) { # File in a directory $dir = &date_subs($in{'file'}); $prefix = &date_subs($in{'prefix'}); &make_dir($dir, 0755) if ($in{'mkdir'}); $file = $dir."/".$prefix.$db.".sql". ($in{'compress'} == 1 ? ".gz" : $in{'compress'} == 2 ? ".bz2" : ""); $deletefile = 1; } elsif (!$in{'dest'}) { # Single file $file = &date_subs($in{'file'}); $deletefile = 1; } else { # Temp file for download $file = &transname(); if ($access{'buser'} && $access{'buser'} ne 'root') { # Need to pre-create file owned by user who # will be doing the writing &open_tempfile(FILE, ">$file", 0, 1); &close_tempfile(FILE); &set_ownership_permissions($access{'buser'}, undef, undef, $file); } } if (-d $file) { print &text('backup_eisdir', &html_escape($file)),"<p>\n"; next; } if ($cron && $cmode == 0) { # Run and check before-backup command (for one DB) $bok = &execute_before($db, STDOUT, 1, $file, $in{'all'} ? undef : $db); if (!$bok) { print $text{'backup_ebefore'},"<p>\n"; next; } } &unlink_file($file) if ($deletefile); local $err = &backup_database($db, $file, $in{'compress'}, $in{'drop'}, $in{'where_def'} ? undef : $in{'where'}, $in{'charset_def'} ? undef : $in{'charset'}, \@compat, \@tables, $access{'buser'}, $in{'single'}, $in{'quick'}, undef, $in{'parameters'}); if ($err) { print &text('backup_ebackup', "<pre>".&html_escape($err)."</pre>"),"<p>\n"; } elsif (!$in{'dest'}) { @st = stat($file); print &text('backup_done', "<tt>$db</tt>", "<tt>$file</tt>", int($st[7])),"<p>\n"; } &execute_after($db, STDOUT, 1, $file, $in{'all'} ? undef : $db) if ($cron && $cmode == 0); if ($in{'dest'}) { # Sent to browser open(OUT, "<$file"); while(<OUT>) { print $_; } close(OUT); &unlink_file($file); } } &execute_after(undef, STDOUT, 1, $in{'file'}, undef) if ($cmode == 1); donebackup: } if ($cron) { &lock_file($cron_cmd); &cron::create_wrapper($cron_cmd, $module_name, "backup.pl"); &unlock_file($cron_cmd); &lock_file(&cron::cron_file($job)); if ($in{'sched'} && !$oldjob) { &cron::create_cron_job($job); $what = "backup_ccron"; } elsif (!$in{'sched'} && $oldjob) { # Need to delete cron job &cron::delete_cron_job($job); $what = "backup_dcron"; } elsif ($in{'sched'} && $oldjob) { # Need to update cron job &cron::change_cron_job($job); $what = "backup_ucron"; } else { $what = "backup_ncron"; } &unlock_file(&cron::cron_file($job)); # Tell the user what was done print $text{$what},"<p>\n" if ($what && !$in{'dest'}); } &webmin_log("backup", undef, $in{'all'} ? "" : $in{'db'}, \%in); if (!$in{'dest'}) { if ($in{'all'}) { &ui_print_footer("", $text{'index_return'}); } else { &ui_print_footer( "edit_dbase.cgi?db=$in{'db'}", $text{'dbase_return'}, &get_databases_return_link($in{'db'}), $text{'index_return'}); } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
help | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
lang | Folder | 0755 |
|
|
CHANGELOG | File | 8.12 KB | 0644 |
|
acl_security.pl | File | 4.43 KB | 0755 |
|
backup.pl | File | 4.17 KB | 0755 |
|
backup_config.pl | File | 1.01 KB | 0755 |
|
backup_db.cgi | File | 8.07 KB | 0755 |
|
backup_form.cgi | File | 6.78 KB | 0755 |
|
cgi_args.pl | File | 577 B | 0755 |
|
config | File | 522 B | 0644 |
|
config-AlmaLinux-7.0-ALL | File | 418 B | 0644 |
|
config-Amazon-Linux-2-ALL | File | 403 B | 0644 |
|
config-CentOS-Linux-7.0-ALL | File | 418 B | 0644 |
|
config-CentOS-Stream-Linux-8.0-ALL | File | 418 B | 0644 |
|
config-CloudLinux-8.0-ALL | File | 418 B | 0644 |
|
config-Oracle-Linux-8.0-ALL | File | 418 B | 0644 |
|
config-Redhat-Enterprise-Linux-7.0-ALL | File | 418 B | 0644 |
|
config-Rocky-Linux-7.0-ALL | File | 418 B | 0644 |
|
config-Scientific-Linux-7.0-ALL | File | 403 B | 0644 |
|
config-Ubuntu-Linux-16.04-17.99 | File | 453 B | 0644 |
|
config-Ubuntu-Linux-18.04-ALL | File | 420 B | 0644 |
|
config-aix | File | 479 B | 0644 |
|
config-cobalt-linux | File | 417 B | 0644 |
|
config-coherent-linux | File | 419 B | 0644 |
|
config-debian-linux | File | 416 B | 0644 |
|
config-debian-linux-10.0-ALL | File | 420 B | 0644 |
|
config-debian-linux-2.2-9.0 | File | 436 B | 0644 |
|
config-freebsd | File | 479 B | 0644 |
|
config-freebsd-8-ALL | File | 516 B | 0644 |
|
config-gentoo-linux | File | 413 B | 0644 |
|
config-mandrake-linux | File | 399 B | 0644 |
|
config-mandrake-linux-10.1-ALL | File | 401 B | 0644 |
|
config-msc-linux | File | 421 B | 0644 |
|
config-netbsd | File | 431 B | 0644 |
|
config-open-linux | File | 417 B | 0644 |
|
config-openSUSE-Linux-15.0-ALL | File | 403 B | 0644 |
|
config-openmamba-linux | File | 417 B | 0644 |
|
config-pardus-linux | File | 346 B | 0644 |
|
config-redhat-linux | File | 417 B | 0644 |
|
config-redhat-linux-24.0 | File | 421 B | 0644 |
|
config-redhat-linux-25.0-ALL | File | 418 B | 0644 |
|
config-redhat-linux-7.0-23.0 | File | 419 B | 0644 |
|
config-slackware-linux-8.0-ALL | File | 449 B | 0644 |
|
config-sol-linux | File | 455 B | 0644 |
|
config-solaris-10 | File | 440 B | 0644 |
|
config-solaris-11-ALL | File | 490 B | 0644 |
|
config-solaris-9 | File | 498 B | 0644 |
|
config-suse-linux | File | 409 B | 0644 |
|
config-suse-linux-7.1-ALL | File | 407 B | 0644 |
|
config-syno-linux | File | 528 B | 0755 |
|
config-trustix-linux | File | 407 B | 0644 |
|
config-turbo-linux | File | 417 B | 0644 |
|
config-united-linux | File | 407 B | 0644 |
|
config-windows | File | 568 B | 0644 |
|
config.info | File | 1.58 KB | 0644 |
|
config.info.bg | File | 2.74 KB | 0644 |
|
config.info.ca | File | 1.7 KB | 0644 |
|
config.info.cs | File | 1.46 KB | 0644 |
|
config.info.de | File | 1.62 KB | 0644 |
|
config.info.es | File | 813 B | 0644 |
|
config.info.fi | File | 0 B | 0644 |
|
config.info.fr | File | 1.85 KB | 0644 |
|
config.info.hu | File | 1.32 KB | 0644 |
|
config.info.it | File | 1.54 KB | 0644 |
|
config.info.ja | File | 1.7 KB | 0644 |
|
config.info.nl | File | 1.67 KB | 0644 |
|
config.info.no | File | 1.54 KB | 0644 |
|
config.info.pl | File | 808 B | 0644 |
|
config.info.pt_BR | File | 1.68 KB | 0644 |
|
config.info.ru | File | 1.27 KB | 0644 |
|
config.info.sv | File | 677 B | 0644 |
|
config.info.tr | File | 1.13 KB | 0644 |
|
config.info.uk | File | 1.31 KB | 0644 |
|
config.info.zh | File | 320 B | 0644 |
|
config.info.zh_TW | File | 891 B | 0644 |
|
config_info.pl | File | 575 B | 0755 |
|
cpan_modules.pl | File | 84 B | 0755 |
|
create_table.cgi | File | 1.02 KB | 0755 |
|
csv.cgi | File | 2.26 KB | 0755 |
|
csv_form.cgi | File | 1.67 KB | 0755 |
|
defaultacl | File | 85 B | 0644 |
|
delete_cprivs.cgi | File | 1.15 KB | 0755 |
|
delete_dbs.cgi | File | 1.04 KB | 0755 |
|
delete_fields.cgi | File | 665 B | 0755 |
|
delete_hosts.cgi | File | 1018 B | 0755 |
|
delete_tprivs.cgi | File | 1.1 KB | 0755 |
|
delete_users.cgi | File | 941 B | 0755 |
|
download.cgi | File | 1.07 KB | 0755 |
|
drop_dbase.cgi | File | 1.86 KB | 0755 |
|
drop_dbases.cgi | File | 1.39 KB | 0755 |
|
drop_table.cgi | File | 1.27 KB | 0755 |
|
drop_tables.cgi | File | 1.75 KB | 0755 |
|
edit_cnf.cgi | File | 2.92 KB | 0755 |
|
edit_cpriv.cgi | File | 2.34 KB | 0755 |
|
edit_db.cgi | File | 1.73 KB | 0755 |
|
edit_dbase.cgi | File | 6.46 KB | 0755 |
|
edit_field.cgi | File | 4.99 KB | 0755 |
|
edit_host.cgi | File | 1.48 KB | 0755 |
|
edit_index.cgi | File | 1.83 KB | 0755 |
|
edit_manual.cgi | File | 952 B | 0755 |
|
edit_ssl.cgi | File | 1.59 KB | 0755 |
|
edit_table.cgi | File | 2.85 KB | 0755 |
|
edit_tpriv.cgi | File | 2.21 KB | 0755 |
|
edit_user.cgi | File | 4.64 KB | 0755 |
|
edit_view.cgi | File | 2.17 KB | 0755 |
|
exec.cgi | File | 1.53 KB | 0755 |
|
exec_file.cgi | File | 2.48 KB | 0755 |
|
exec_form.cgi | File | 3.63 KB | 0755 |
|
import.cgi | File | 1.99 KB | 0755 |
|
index.cgi | File | 10.83 KB | 0755 |
|
install_check.pl | File | 549 B | 0755 |
|
kill_procs.cgi | File | 385 B | 0755 |
|
list_cprivs.cgi | File | 2.21 KB | 0755 |
|
list_dbs.cgi | File | 1.89 KB | 0755 |
|
list_hosts.cgi | File | 1.76 KB | 0755 |
|
list_procs.cgi | File | 1.42 KB | 0755 |
|
list_tprivs.cgi | File | 2.03 KB | 0755 |
|
list_users.cgi | File | 2.73 KB | 0755 |
|
list_vars.cgi | File | 1.72 KB | 0755 |
|
log_parser.pl | File | 3.25 KB | 0755 |
|
login.cgi | File | 819 B | 0755 |
|
module.info | File | 190 B | 0644 |
|
module.info.af | File | 0 B | 0644 |
|
module.info.af.auto | File | 131 B | 0644 |
|
module.info.ar | File | 0 B | 0644 |
|
module.info.ar.auto | File | 211 B | 0644 |
|
module.info.be | File | 0 B | 0644 |
|
module.info.be.auto | File | 204 B | 0644 |
|
module.info.bg | File | 0 B | 0644 |
|
module.info.bg.auto | File | 215 B | 0644 |
|
module.info.ca | File | 127 B | 0644 |
|
module.info.ca.auto | File | 14 B | 0644 |
|
module.info.cs | File | 34 B | 0644 |
|
module.info.cs.auto | File | 103 B | 0644 |
|
module.info.da | File | 0 B | 0644 |
|
module.info.da.auto | File | 127 B | 0644 |
|
module.info.de | File | 127 B | 0644 |
|
module.info.de.auto | File | 14 B | 0644 |
|
module.info.el | File | 0 B | 0644 |
|
module.info.el.auto | File | 226 B | 0644 |
|
module.info.es | File | 40 B | 0644 |
|
module.info.es.auto | File | 110 B | 0644 |
|
module.info.eu | File | 0 B | 0644 |
|
module.info.eu.auto | File | 134 B | 0644 |
|
module.info.fa | File | 0 B | 0644 |
|
module.info.fa.auto | File | 198 B | 0644 |
|
module.info.fi | File | 0 B | 0644 |
|
module.info.fi.auto | File | 140 B | 0644 |
|
module.info.fr | File | 43 B | 0644 |
|
module.info.fr.auto | File | 138 B | 0644 |
|
module.info.he | File | 0 B | 0644 |
|
module.info.he.auto | File | 167 B | 0644 |
|
module.info.hr | File | 0 B | 0644 |
|
module.info.hr.auto | File | 153 B | 0644 |
|
module.info.hu | File | 35 B | 0644 |
|
module.info.hu.auto | File | 113 B | 0644 |
|
module.info.it | File | 33 B | 0644 |
|
module.info.it.auto | File | 102 B | 0644 |
|
module.info.ja | File | 43 B | 0644 |
|
module.info.ja.auto | File | 128 B | 0644 |
|
module.info.ko | File | 40 B | 0644 |
|
module.info.ko.auto | File | 128 B | 0644 |
|
module.info.lt | File | 0 B | 0644 |
|
module.info.lt.auto | File | 172 B | 0644 |
|
module.info.lv | File | 0 B | 0644 |
|
module.info.lv.auto | File | 133 B | 0644 |
|
module.info.ms | File | 142 B | 0644 |
|
module.info.ms.auto | File | 14 B | 0644 |
|
module.info.mt | File | 0 B | 0644 |
|
module.info.mt.auto | File | 137 B | 0644 |
|
module.info.nl | File | 30 B | 0644 |
|
module.info.nl.auto | File | 98 B | 0644 |
|
module.info.no | File | 29 B | 0644 |
|
module.info.no.auto | File | 98 B | 0644 |
|
module.info.pl | File | 34 B | 0644 |
|
module.info.pl.auto | File | 103 B | 0644 |
|
module.info.pt | File | 40 B | 0644 |
|
module.info.pt.auto | File | 116 B | 0644 |
|
module.info.pt_BR | File | 0 B | 0644 |
|
module.info.pt_BR.auto | File | 166 B | 0644 |
|
module.info.ro | File | 0 B | 0644 |
|
module.info.ro.auto | File | 155 B | 0644 |
|
module.info.ru | File | 47 B | 0644 |
|
module.info.ru.auto | File | 165 B | 0644 |
|
module.info.sk | File | 0 B | 0644 |
|
module.info.sk.auto | File | 141 B | 0644 |
|
module.info.sl | File | 0 B | 0644 |
|
module.info.sl.auto | File | 135 B | 0644 |
|
module.info.sv | File | 28 B | 0644 |
|
module.info.sv.auto | File | 104 B | 0644 |
|
module.info.th | File | 0 B | 0644 |
|
module.info.th.auto | File | 292 B | 0644 |
|
module.info.tr | File | 35 B | 0644 |
|
module.info.tr.auto | File | 110 B | 0644 |
|
module.info.uk | File | 0 B | 0644 |
|
module.info.uk.auto | File | 210 B | 0644 |
|
module.info.ur | File | 0 B | 0644 |
|
module.info.ur.auto | File | 229 B | 0644 |
|
module.info.vi | File | 0 B | 0644 |
|
module.info.vi.auto | File | 184 B | 0644 |
|
module.info.zh | File | 33 B | 0644 |
|
module.info.zh.auto | File | 92 B | 0644 |
|
module.info.zh_TW | File | 36 B | 0644 |
|
module.info.zh_TW.auto | File | 98 B | 0644 |
|
mysql-lib.pl | File | 51.37 KB | 0755 |
|
newdb.cgi | File | 1.07 KB | 0755 |
|
newdb_form.cgi | File | 1.45 KB | 0755 |
|
postinstall.pl | File | 192 B | 0644 |
|
prefs.info | File | 69 B | 0644 |
|
root_form.cgi | File | 855 B | 0755 |
|
save_cnf.cgi | File | 2.83 KB | 0755 |
|
save_cpriv.cgi | File | 2.67 KB | 0755 |
|
save_db.cgi | File | 2.68 KB | 0755 |
|
save_field.cgi | File | 4.72 KB | 0755 |
|
save_host.cgi | File | 2.35 KB | 0755 |
|
save_index.cgi | File | 1.39 KB | 0755 |
|
save_manual.cgi | File | 526 B | 0755 |
|
save_root.cgi | File | 1.04 KB | 0755 |
|
save_ssl.cgi | File | 2.03 KB | 0755 |
|
save_sync.cgi | File | 454 B | 0755 |
|
save_tpriv.cgi | File | 2.6 KB | 0755 |
|
save_user.cgi | File | 4.85 KB | 0755 |
|
save_vars.cgi | File | 755 B | 0755 |
|
save_view.cgi | File | 1.84 KB | 0755 |
|
search_form.cgi | File | 1.38 KB | 0755 |
|
start.cgi | File | 218 B | 0755 |
|
stop.cgi | File | 203 B | 0755 |
|
syslog_logs.pl | File | 1.11 KB | 0755 |
|
table_form.cgi | File | 1.95 KB | 0755 |
|
useradmin_update.pl | File | 2.6 KB | 0755 |
|
view-lib.pl | File | 3.56 KB | 0755 |
|
view_table.cgi | File | 15.06 KB | 0755 |
|