diff options
author | Phil Davis <phil.davis@inf.org> | 2017-05-03 10:02:17 +0545 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2017-05-03 09:30:38 -0300 |
commit | af0f961b368f34bf90899c07cdfc796dd9c300f3 (patch) | |
tree | 2ad03f0a94f0dc09ee242eb81c27cf63c5530ae9 | |
parent | b3a32a59a8f9f904b32a0b6d0c5e082f6834d45a (diff) | |
download | pfsense-af0f961b368f34bf90899c07cdfc796dd9c300f3.zip pfsense-af0f961b368f34bf90899c07cdfc796dd9c300f3.tar.gz |
Fix #7508 stop write_config after reset_factory_defaults
(cherry picked from commit 3dcaae882cdfdd86826be4db9b38ce04389701ec)
-rw-r--r-- | src/etc/inc/config.lib.inc | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/etc/inc/config.lib.inc b/src/etc/inc/config.lib.inc index 5bafa65..00eadd9 100644 --- a/src/etc/inc/config.lib.inc +++ b/src/etc/inc/config.lib.inc @@ -560,6 +560,16 @@ function write_config($desc="Unknown", $backup = true, $write_config_only = fals session_commit(); } + if (isset($config['reset_factory_defaults'])) { + /* + We have put a default config.xml on disk and are about to reboot + or reload it. Do not let any system or package code try to save + state to config because that would overwrite the default config + with the running config. + */ + return false; + } + if ($backup) { backup_config(); } @@ -634,7 +644,7 @@ function write_config($desc="Unknown", $backup = true, $write_config_only = fals * integer - indicates completion ******/ function reset_factory_defaults($lock = false, $reboot_required = true) { - global $g; + global $config, $g; conf_mount_rw(); @@ -666,6 +676,17 @@ function reset_factory_defaults($lock = false, $reboot_required = true) { disable_security_checks(); + /* + Let write_config know that we are awaiting reload of the current config + to factory defaults. Either the system is about to reboot, throwing away + the current in-memory config as it shuts down, or the in-memory config + is about to be reloaded on-the-fly by parse_config. + + In both cases, we want to ensure that write_config does not flush the + in-memory config back to disk. + */ + $config['reset_factory_defaults'] = true; + /* call the wizard */ if ($reboot_required) { // If we need a reboot first then touch a different trigger file. |