From cdf414bf6a999788d4d70e997f8c413e96ef7bb1 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 10 Dec 2020 14:01:18 +0100 Subject: [sysconfig] CustomModule: Add check for file ownership, add "fix" option The fix option will change the owner/group of every file and directory in the archive to root:root Previously, the client changed the ownership of the config.tgz contents to root when extracting, but in some cases it's desired to deliver files with specific owner and group settings. The version of the CustomModule module has been bumped to 2, so we can automatically convert old modules when upgrading or importing a backup, to be compatible to the old "root everything on the client" logic. --- .../sysconfig/inc/configmodule/customodule.inc.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'modules-available/sysconfig/inc/configmodule/customodule.inc.php') diff --git a/modules-available/sysconfig/inc/configmodule/customodule.inc.php b/modules-available/sysconfig/inc/configmodule/customodule.inc.php index 3c10bada..8b968336 100644 --- a/modules-available/sysconfig/inc/configmodule/customodule.inc.php +++ b/modules-available/sysconfig/inc/configmodule/customodule.inc.php @@ -12,14 +12,27 @@ ConfigModule::registerModule( class ConfigModule_CustomModule extends ConfigModule { const MODID = 'CustomModule'; - const VERSION = 1; + const VERSION = 2; private $tmpFile = false; protected function generateInternal($tgz, $parent) { if (!$this->validateConfig()) { - return $this->archive() !== false && file_exists($this->archive()); // No new temp file given, old archive still exists, pretend it worked... + // No temp file given from wizard + // Old archive still exists? pretend it worked... + if ($this->archive() === false || !file_exists($this->archive())) + return false; + if ($this->currentVersion() == 1) { + // Need an upgrade + return Taskmanager::submit('RecompressArchive', array( + 'inputFiles' => [$this->archive() => false], + 'outputFile' => $tgz, + 'forceRoot' => true, // Force this for old modules for backward compat + )); + } + // Nothing to do + return true; } $task = Taskmanager::submit('MoveFile', array( 'source' => $this->tmpFile, @@ -42,6 +55,7 @@ class ConfigModule_CustomModule extends ConfigModule public function setData($key, $value) { + // Sets the temp file from the wizard, where it stored the processed archive if ($key !== 'tmpFile' || !file_exists($value)) return false; $this->tmpFile = $value; -- cgit v1.2.3-55-g7522