#!/usr/local/bin/perl
# save_env.cgi
# Save an existing environment variable, or create a new one
require './cron-lib.pl';
&error_setup($text{'env_err'});
&ReadParse();
@jobs = &list_cron_jobs();
if ($in{'new'}) {
$job = { };
}
else {
$oldjob = $jobs[$in{'idx'}];
$job->{'file'} = $oldjob->{'file'};
$job->{'line'} = $oldjob->{'line'};
}
@files = &unique((map { $_->{'file'} } @jobs),
"$config{'cron_dir'}/$in{'user'}");
foreach $f (@files) { &lock_file($f); }
# Check and parse inputs
if ($in{'name'} !~ /^\S+$/) {
&error($text{'save_ename'});
}
if (!$in{'user'}) {
&error($text{'save_euser'});
}
if (!defined(getpwnam($in{'user'}))) {
&error(&text('save_euser2', $in{'user'}));
}
$job->{'active'} = $in{'active'};
$job->{'name'} = $in{'name'};
$job->{'value'} = $in{'value'};
# Check if this user is allowed to execute cron jobs
&can_use_cron($in{'user'}) ||
&error(&text('save_eallow', $in{'user'}));
$job->{'user'} = $in{'user'};
# Check module access control
&can_edit_user(\%access, $in{'user'}) ||
&error(&text('save_ecannot', $in{'user'}));
if (!$in{'new'}) {
# Editing an existing variable
&can_edit_user(\%access, $oldjob->{'user'}) ||
&error(&text('save_ecannot', $oldjob->{'user'}));
if ($job->{'user'} eq $oldjob->{'user'}) {
# Not changing user
if ($in{'where'}) {
&delete_cron_job($job);
&insert_cron_job($job);
}
else {
&change_cron_job($job);
}
}
else {
# Changing user
&delete_cron_job($oldjob);
if ($in{'where'}) {
&insert_cron_job($job);
}
else {
&create_cron_job($job);
}
}
}
else {
# Creating a new variable
if ($in{'where'}) {
&insert_cron_job($job);
}
else {
&create_cron_job($job);
}
}
foreach $f (@files) { &unlock_file($f); }
if ($in{'new'}) {
&webmin_log("create", "env", $in{'user'}, \%in);
}
else {
&webmin_log("modify", "env", $in{'user'}, \%in);
}
&redirect("");
syntax highlighted by Code2HTML, v. 0.9.1