diff options
author | jim-p <jimp@pfsense.org> | 2013-03-29 11:46:21 -0400 |
---|---|---|
committer | jim-p <jimp@pfsense.org> | 2013-03-29 11:46:21 -0400 |
commit | 155bc1fbd34ed53b0063c06285b891c59ec99f63 (patch) | |
tree | 2e508f22c3cc289d0bcb3f4bc165b900c7b8d747 /config/systempatches/patches.inc | |
parent | 651dd8c43c4aab0ec854f6b01cca8ab99fecce25 (diff) | |
download | pfsense-packages-155bc1fbd34ed53b0063c06285b891c59ec99f63.tar.gz pfsense-packages-155bc1fbd34ed53b0063c06285b891c59ec99f63.tar.bz2 pfsense-packages-155bc1fbd34ed53b0063c06285b891c59ec99f63.zip |
Add "auto apply" bit to system patches which will attempt to apply a patch during earlyshellcmd at boot time, to help patches survive across reboots and upgrades.
Diffstat (limited to 'config/systempatches/patches.inc')
-rw-r--r-- | config/systempatches/patches.inc | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/config/systempatches/patches.inc b/config/systempatches/patches.inc index e9bd2814..9b347620 100644 --- a/config/systempatches/patches.inc +++ b/config/systempatches/patches.inc @@ -34,6 +34,14 @@ $patch_suffix = ".patch"; $patch_dir = "/var/patches"; $patch_cmd = "/usr/bin/patch"; +function patch_package_install() { + patch_add_shellcmd(); +} + +function patch_package_deinstall() { + patch_remove_shellcmd(); +} + function patch_commit($patch, $action, $test=false, $fulldetail=false) { global $patch_dir, $patch_cmd, $patch_suffix; $directory = empty($patch['basedir']) ? "/" : $patch['basedir']; @@ -139,4 +147,55 @@ function is_github_url($url) { $urlbits = explode("/", $url); return (substr($urlbits[2], -10) == "github.com"); } + +function bootup_apply_patches() { + global $config; + + $a_patches = &$config['installedpackages']['patches']['item']; + + foreach ($a_patches as $patch) { + /* Skip the patch if it should not be automatically applied. */ + if (!isset($patch['autoapply'])) + continue; + /* If the patch can be reverted it is already applied, so skip it. */ + if (!patch_test_revert($patch)) { + /* Only attempt to apply if it can be applied. */ + if (patch_test_apply($patch)) { + patch_apply($patch); + } + } + } +} + +function patch_add_shellcmd() { + global $config; + $a_earlyshellcmd = &$config['system']['earlyshellcmd']; + if (!is_array($a_earlyshellcmd)) + $a_earlyshellcmd = array(); + $found = false; + foreach ($a_earlyshellcmd as $idx => $cmd) + if (stristr($cmd, "apply_patches.php")) + $found = true; + if (!$found) { + $a_earlyshellcmd[] = "/usr/local/bin/php -f /usr/local/bin/apply_patches.php"; + write_config("System Patches package added a shellcmd"); + } +} + +function patch_remove_shellcmd() { + global $config; + $a_earlyshellcmd = &$config['system']['earlyshellcmd']; + if (!is_array($a_earlyshellcmd)) + $a_earlyshellcmd = array(); + $removed = false; + foreach ($a_earlyshellcmd as $idx => $cmd) { + if (stristr($cmd, "apply_patches.php")) { + unset($a_earlyshellcmd[$idx]); + $removed = true; + } + } + if ($removed) + write_config("System Patches package removed a shellcmd"); +} + ?> |