summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/etc/inc/services.inc17
-rw-r--r--src/etc/inc/upgrade_config.inc8
-rw-r--r--src/usr/local/www/system_advanced_firewall.php6
-rw-r--r--src/usr/local/www/system_advanced_misc.php14
4 files changed, 28 insertions, 17 deletions
diff --git a/src/etc/inc/services.inc b/src/etc/inc/services.inc
index 8831e07..036b594 100644
--- a/src/etc/inc/services.inc
+++ b/src/etc/inc/services.inc
@@ -2817,11 +2817,12 @@ function upnp_start() {
}
}
-function install_cron_job($command, $active = false, $minute = "0", $hour = "*", $monthday = "*", $month = "*", $weekday = "*", $who = "root") {
+function install_cron_job($command, $active = false, $minute = "0", $hour = "*", $monthday = "*", $month = "*", $weekday = "*", $who = "root", $write_config = true) {
global $config, $g;
$is_installed = false;
$cron_changed = true;
+ $change_message = "";
if (!is_array($config['cron'])) {
$config['cron'] = array();
@@ -2850,24 +2851,30 @@ function install_cron_job($command, $active = false, $minute = "0", $hour = "*",
$cron_item['command'] = $command;
if (!$is_installed) {
$config['cron']['item'][] = $cron_item;
- write_config(sprintf(gettext("Installed cron job for %s"), $command));
+ $change_message = "Installed cron job for %s";
} else {
if ($config['cron']['item'][$x] == $cron_item) {
$cron_changed = false;
- log_error(sprintf(gettext("Checked cron job for %s, no change needed"), $command));
} else {
$config['cron']['item'][$x] = $cron_item;
- write_config(sprintf(gettext("Updated cron job for %s"), $command));
+ $change_message = "Updated cron job for %s";
}
}
} else {
if ($is_installed == true) {
unset($config['cron']['item'][$x]);
- write_config(sprintf(gettext("Removed cron job for %s"), $command));
+ $change_message = "Removed cron job for %s";
}
}
if ($cron_changed) {
+ /* Optionally write the configuration if this function made changes.
+ * Performing a write_config() in this way can have unintended side effects. See #7146
+ * Base system instances of this function do not need to write, packages may.
+ */
+ if ($write_config) {
+ write_config(sprintf(gettext($change_message), $command));
+ }
configure_cron();
}
}
diff --git a/src/etc/inc/upgrade_config.inc b/src/etc/inc/upgrade_config.inc
index 41b4e3a..6019c3b 100644
--- a/src/etc/inc/upgrade_config.inc
+++ b/src/etc/inc/upgrade_config.inc
@@ -3320,7 +3320,8 @@ function upgrade_098_to_099() {
function upgrade_099_to_100() {
require_once("/etc/inc/services.inc");
- install_cron_job("/usr/bin/nice -n20 newsyslog", false);
+ /* See #7146 for detail on why the extra parameters are needed for the time being. */
+ install_cron_job("/usr/bin/nice -n20 newsyslog", false, null, null, null, null, null, null, false);
}
function upgrade_100_to_101() {
@@ -4867,8 +4868,9 @@ function upgrade_151_to_152() {
// Remove these cron jobs on full install if not using ramdisk.
if (!isset($config['system']['use_mfs_tmpvar'])) {
- install_cron_job("/etc/rc.backup_rrd.sh", false);
- install_cron_job("/etc/rc.backup_dhcpleases.sh", false);
+ /* See #7146 for detail on why the extra parameters are needed for the time being. */
+ install_cron_job("/etc/rc.backup_rrd.sh", false, null, null, null, null, null, null, false);
+ install_cron_job("/etc/rc.backup_dhcpleases.sh", false, null, null, null, null, null, null, false);
}
}
diff --git a/src/usr/local/www/system_advanced_firewall.php b/src/usr/local/www/system_advanced_firewall.php
index c5a9d36..3fc3b10 100644
--- a/src/usr/local/www/system_advanced_firewall.php
+++ b/src/usr/local/www/system_advanced_firewall.php
@@ -335,15 +335,15 @@ if ($_POST) {
if ($_POST['bogonsinterval'] != $config['system']['bogons']['interval']) {
switch ($_POST['bogonsinterval']) {
case 'daily':
- install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "*", "*", "*");
+ install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "*", "*", "*", "root", false);
break;
case 'weekly':
- install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "*", "*", "0");
+ install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "*", "*", "0", "root", false);
break;
case 'monthly':
// fall through
default:
- install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "1", "*", "*");
+ install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "1", "*", "*", "root", false);
}
$config['system']['bogons']['interval'] = $_POST['bogonsinterval'];
}
diff --git a/src/usr/local/www/system_advanced_misc.php b/src/usr/local/www/system_advanced_misc.php
index 6e997a0..9665a6e 100644
--- a/src/usr/local/www/system_advanced_misc.php
+++ b/src/usr/local/www/system_advanced_misc.php
@@ -263,13 +263,15 @@ if ($_POST) {
// Remove the cron jobs on full install if not using RAM disk.
// Add the cron jobs on all others if the periodic backup option is set. Otherwise the cron job is removed.
if (!isset($config['system']['use_mfs_tmpvar'])) {
- install_cron_job("/etc/rc.backup_rrd.sh", false);
- install_cron_job("/etc/rc.backup_dhcpleases.sh", false);
- install_cron_job("/etc/rc.backup_logs.sh", false);
+ /* See #7146 for detail on why the extra parameters are needed for the time being. */
+ install_cron_job("/etc/rc.backup_rrd.sh", false, null, null, null, null, null, null, false);
+ install_cron_job("/etc/rc.backup_dhcpleases.sh", false, null, null, null, null, null, null, false);
+ install_cron_job("/etc/rc.backup_logs.sh", false, null, null, null, null, null, null, false);
} else {
- install_cron_job("/etc/rc.backup_rrd.sh", ($config['system']['rrdbackup'] > 0), $minute="0", "*/{$config['system']['rrdbackup']}");
- install_cron_job("/etc/rc.backup_dhcpleases.sh", ($config['system']['dhcpbackup'] > 0), $minute="0", "*/{$config['system']['dhcpbackup']}");
- install_cron_job("/etc/rc.backup_logs.sh", ($config['system']['logsbackup'] > 0), $minute="0", "*/{$config['system']['logsbackup']}");
+ /* See #7146 for detail on why the extra parameters are needed for the time being. */
+ install_cron_job("/etc/rc.backup_rrd.sh", ($config['system']['rrdbackup'] > 0), $minute="0", "*/{$config['system']['rrdbackup']}", null, null, null, null, false);
+ install_cron_job("/etc/rc.backup_dhcpleases.sh", ($config['system']['dhcpbackup'] > 0), $minute="0", "*/{$config['system']['dhcpbackup']}", null, null, null, null, false);
+ install_cron_job("/etc/rc.backup_logs.sh", ($config['system']['logsbackup'] > 0), $minute="0", "*/{$config['system']['logsbackup']}", null, null, null, null, false);
}
write_config();
OpenPOWER on IntegriCloud