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