Handle hostnames with upper-case letters
[webmin.git] / webmin / update_sched.cgi
1 #!/usr/local/bin/perl
2 # update_sched.cgi
3 # Schedule the auto-updating of webmin modules
4
5 require './webmin-lib.pl';
6 &foreign_require("cron", "cron-lib.pl");
7 &ReadParse();
8 &error_setup($text{'update_err'});
9
10 # Validate inputs
11 &lock_file("$module_config_directory/config");
12 if ($in{'source'} == 0) {
13         $config{'upsource'} = undef;
14         }
15 else {
16         @urls = ( );
17         foreach $url (split(/\r?\n/, $in{'other'})) {
18                 $url =~ /^http:\/\/([^:\/]+)(:(\d+))?(\/\S*)$/ ||
19                         &error($text{'update_eurl'});
20                 push(@urls, $url);
21                 }
22         @urls || &error($text{'update_eurl'});
23         $config{'upsource'} = join("\t", @urls);
24         }
25 $config{'update'} = $in{'enabled'};
26 if ($config{'cron_mode'} == 0) {
27         $in{'hour'} =~ /^\d+$/ && $in{'hour'} < 24 ||
28                 &error($text{'update_ehour'});
29         $config{'uphour'} = $in{'hour'};
30         $in{'mins'} =~ /^\d+$/ && $in{'mins'} < 60 ||
31                 &error($text{'update_emins'});
32         $config{'upmins'} = $in{'mins'};
33         $in{'days'} =~ /^\d+$/ ||
34                 &error($text{'update_edays'});
35         $config{'updays'} = $in{'days'};
36         }
37 $config{'upshow'} = $in{'show'};
38 $config{'upmissing'} = $in{'missing'};
39 $config{'upthird'} = $in{'third'};
40 $config{'upquiet'} = $in{'quiet'};
41 $config{'upchecksig'} = $in{'checksig'};
42 $config{'upemail'} = $in{'email'};
43 $config{'upuser'} = $in{'upuser'};
44 $config{'uppass'} = $in{'uppass'};
45 !$in{'show'} || $in{'email'} || &error($text{'update_eemail'});
46 &write_file("$module_config_directory/config", \%config);
47 &unlock_file("$module_config_directory/config");
48
49 # Setup the cron job
50 @jobs = &cron::list_cron_jobs();
51 $job = &find_cron_job(\@jobs);
52 &lock_file($cron_cmd);
53 if ($job) {
54         &cron::delete_cron_job($job);
55         unlink($cron_cmd);
56         }
57 if ($in{'enabled'}) {
58         # Create the program that cron calls
59         &cron::create_wrapper($cron_cmd, $module_name, "update.pl");
60
61         $njob = { 'user' => 'root', 'active' => 1,
62                   'command' => $cron_cmd };
63         if ($config{'cron_mode'} == 0) {
64                 # Setup the actual cron job, simply
65                 if ($in{'days'} == 1) {
66                         @days = ( "*" );
67                         }
68                 else {
69                         for($i=1; $i<=31; $i+=$in{'days'}) {
70                                 push(@days, $i);
71                                 }
72                         }
73                 $njob->{'mins'} = $in{'mins'};
74                 $njob->{'hours'} = $in{'hour'};
75                 $njob->{'days'} = join(",",@days);
76                 $njob->{'months'} = '*';
77                 $njob->{'weekdays'} = '*';
78                 }
79         else {
80                 # Create complex cron job
81                 &cron::parse_times_input($njob, \%in);
82                 }
83         &foreign_call("cron", "create_cron_job", $njob);
84         }
85 &unlock_file($cron_cmd);
86 &redirect("");
87
88