3 # Save the details of a scheduled backup
5 require './fsdump-lib.pl';
6 &foreign_require("cron", "cron-lib.pl");
8 &error_setup($text{'save_err'});
10 # Create wrapper for ftp transfer script
11 &cron::create_wrapper($ftp_cmd, $module_name, "ftp.pl");
14 $dump = &get_dump($in{'id'});
15 $access{'edit'} && &can_edit_dir($dump) ||
16 &error($text{'dump_ecannot2'});
17 @jobs = &foreign_call("cron", "list_cron_jobs");
19 $job = $j if ($j->{'command'} eq "$cron_cmd $dump->{'id'}");
21 $oldenabled = $dump->{'enabled'};
24 $access{'edit'} || &error($text{'dump_ecannot1'});
28 # Just delete this dump
31 &lock_file($job->{'file'});
32 &foreign_call("cron", "delete_cron_job", $job);
33 &unlock_file($job->{'file'});
35 delete($dump->{'pass'});
36 &webmin_log("delete", undef, $dump->{'id'}, $dump);
39 elsif ($in{'restore'}) {
40 # Redirect to restore form
41 &redirect("restore_form.cgi?fs=$dump->{'fs'}&id=$in{'id'}");
44 # Validate and store inputs
45 if (&multiple_directory_support($in{'fs'})) {
46 $in{'dir'} =~ s/[\r\n]+/\t/g;
47 foreach $d (split(/\t+/, $in{'dir'})) {
48 -d $d || &error($text{'save_edir'});
49 if ($in{'fs'} ne 'tar') {
50 $fs = &directory_filesystem($d);
51 &same_filesystem($fs, $in{'fs'}) ||
52 &error($text{'save_efs'});
54 &can_edit_dir($d) || &error($text{'dump_ecannot3'});
56 $in{'dir'} || &error($text{'save_edir'});
57 $dump->{'tabs'} = 1; # tab used to split dirs
60 -d $in{'dir'} || &error($text{'save_edir'});
61 if ($in{'fs'} ne 'tar') {
62 $fs = &directory_filesystem($in{'dir'});
63 &same_filesystem($fs, $in{'fs'}) ||
64 &error($text{'save_efs'});
66 &can_edit_dir($in{'dir'}) || &error($text{'dump_ecannot3'});
68 $dump->{'dir'} = $in{'dir'};
69 $dump->{'fs'} = $in{'fs'};
70 $dump->{'email'} = $in{'email'};
71 $dump->{'subject'} = $in{'subject_def'} ? undef : $in{'subject'};
72 if ($access{'extra'}) {
73 $dump->{'extra'} = $in{'extra'};
75 if ($access{'cmds'}) {
76 $dump->{'before'} = $in{'before'};
77 $dump->{'after'} = $in{'after'};
78 $dump->{'beforefok'} = !$in{'beforefok'};
79 $dump->{'afterfok'} = !$in{'afterfok'};
81 $in{'file'} =~ s/^\s+//; $in{'file'} =~ s/\s+$//;
82 $in{'hfile'} =~ s/^\s+//; $in{'hfile'} =~ s/\s+$//;
84 $dump->{'reverify'} = $in{'reverify'} if (defined(&verify_dump));
85 $dump->{'enabled'} = $in{'enabled'};
86 $dump->{'follow'} = $in{'enabled'} == 2 ? $in{'follow'} : undef;
87 &foreign_call("cron", "parse_times_input", $dump, \%in);
89 # Create or update the dump and cron job
90 &lock_file($cron_cmd);
91 &cron::create_wrapper($cron_cmd, $module_name, "backup.pl");
92 &unlock_file($cron_cmd);
95 if ($dump->{'enabled'} == 1) {
96 # Create cron job and script
97 $job->{'user'} = 'root';
99 $job->{'special'} = $dump->{'special'};
100 $job->{'mins'} = $dump->{'mins'};
101 $job->{'hours'} = $dump->{'hours'};
102 $job->{'days'} = $dump->{'days'};
103 $job->{'months'} = $dump->{'months'};
104 $job->{'weekdays'} = $dump->{'weekdays'};
105 $job->{'command'} = "$cron_cmd $dump->{'id'}";
107 &lock_file(&cron::cron_file($job)) if ($job);
108 if ($dump->{'enabled'} == 1 && !$oldjob) {
109 # Create the cron job
110 &foreign_call("cron", "create_cron_job", $job);
112 elsif ($dump->{'enabled'} == 1 && $oldjob) {
113 # Update the cron job
114 &foreign_call("cron", "change_cron_job", $job);
116 elsif ($dump->{'enabled'} != 1 && $oldjob) {
117 # Delete the cron job
118 &foreign_call("cron", "delete_cron_job", $job);
120 &unlock_file(&cron::cron_file($job)) if ($job);
122 delete($dump->{'pass'});
123 &webmin_log($in{'id'} ? "modify" : "create", undef,
124 $dump->{'id'}, $dump);
125 if ($in{'savenow'}) {
126 &redirect("backup.cgi?id=$dump->{'id'}");