From b2bb49709d6d1cb845f2c7caf40bebe375ecb2d7 Mon Sep 17 00:00:00 2001 From: jim-p Date: Fri, 20 Jan 2017 13:58:22 -0500 Subject: Add a parameter to install_cron_job to stop it from performing its own write_config. Adjust base system calls to match. Ticket #7146 Packages may still need the old behavior but need tested individually. Once all function calls are confirmed to work without the write, the write_config parameter and call can be removed from this function for good. --- src/etc/inc/services.inc | 17 ++++++++++++----- src/etc/inc/upgrade_config.inc | 8 +++++--- src/usr/local/www/system_advanced_firewall.php | 6 +++--- src/usr/local/www/system_advanced_misc.php | 14 ++++++++------ 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(); -- cgit v1.1