mirror of
https://github.com/webmin/webmin.git
synced 2025-07-20 16:48:46 +00:00
73 lines
1.7 KiB
Perl
Executable File
73 lines
1.7 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# save_cron.cgi
|
|
# Create, update or delete a cron job for fetchmail
|
|
|
|
require './fetchmail-lib.pl';
|
|
&foreign_require("cron", "cron-lib.pl");
|
|
$can_cron || &error($text{'cron_ecannot2'});
|
|
&error_setup($text{'cron_err'});
|
|
&ReadParse();
|
|
|
|
@jobs = &cron::list_cron_jobs();
|
|
($job) = grep { $_->{'user'} eq $cron_user &&
|
|
$_->{'command'} =~ /^$cron_cmd/ } @jobs;
|
|
|
|
# Validate inputs
|
|
$cmd = $cron_cmd;
|
|
if ($in{'output'} == 0) {
|
|
$cmd .= " --null";
|
|
}
|
|
elsif ($in{'output'} == 1) {
|
|
$in{'file'} =~ /^\/.+$/ || &error($text{'cron_efile'});
|
|
$cmd .= " --file ".quotemeta($in{'file'});
|
|
}
|
|
elsif ($in{'output'} == 2) {
|
|
$in{'mail'} =~ /^\S+$/ || &error($text{'cron_efile'});
|
|
$cmd .= " --mail ".quotemeta($in{'mail'});
|
|
}
|
|
elsif ($in{'output'} == 3) {
|
|
$cmd .= " --output";
|
|
}
|
|
elsif ($in{'output'} == 4) {
|
|
$cmd .= " --owner";
|
|
}
|
|
if ($in{'errors'}) {
|
|
$cmd .= " --errors";
|
|
}
|
|
if ($cron_user eq "root" && $fetchmail_config) {
|
|
defined(getpwnam($in{'user'})) || &error($text{'cron_euser'});
|
|
$cmd .= " --user $in{'user'}";
|
|
}
|
|
|
|
if ($job && $in{'enabled'}) {
|
|
# Update cron job
|
|
$job->{'command'} = $cmd;
|
|
&cron::parse_times_input($job, \%in);
|
|
&lock_file(&cron::cron_file($job));
|
|
&cron::change_cron_job($job);
|
|
$what = "update";
|
|
}
|
|
elsif (!$job && $in{'enabled'}) {
|
|
# Create job
|
|
$job = { 'user' => $cron_user,
|
|
'command' => $cmd,
|
|
'active' => 1 };
|
|
&cron::parse_times_input($job, \%in);
|
|
&lock_file($cron_cmd);
|
|
&lock_file(&cron::cron_file($job));
|
|
&cron::create_cron_job($job);
|
|
$what = "create";
|
|
}
|
|
elsif ($job && !$in{'enabled'}) {
|
|
# Delete job
|
|
&lock_file(&cron::cron_file($job));
|
|
&cron::delete_cron_job($job);
|
|
$what = "delete";
|
|
}
|
|
&cron::create_wrapper($cron_cmd, $module_name, "check.pl");
|
|
&unlock_all_files();
|
|
&webmin_log($what, "cron");
|
|
&redirect("");
|
|
|
|
|