aboutsummaryrefslogtreecommitdiffstats
path: root/config/systempatches/patches.inc
diff options
context:
space:
mode:
authorjim-p <jimp@pfsense.org>2013-03-29 11:46:21 -0400
committerjim-p <jimp@pfsense.org>2013-03-29 11:46:21 -0400
commit155bc1fbd34ed53b0063c06285b891c59ec99f63 (patch)
tree2e508f22c3cc289d0bcb3f4bc165b900c7b8d747 /config/systempatches/patches.inc
parent651dd8c43c4aab0ec854f6b01cca8ab99fecce25 (diff)
downloadpfsense-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.inc59
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");
+}
+
?>