From 95436347e5a469add5db5dd4a2851909c72a1d0e Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Thu, 11 Jul 2024 00:25:26 +0200 Subject: [PATCH] Resolve #1660 --- .../v/0.0.0/app/libraries/MailSo/Base/Utils.php | 15 +++++++++++++++ .../app/libraries/MailSo/Cache/Drivers/File.php | 1 + .../0.0.0/app/libraries/RainLoop/Actions/Pgp.php | 4 +--- .../app/libraries/RainLoop/Actions/SMime.php | 4 +--- .../RainLoop/Providers/Files/FileStorage.php | 4 +--- .../RainLoop/Providers/Storage/FileStorage.php | 5 +---- .../app/libraries/snappymail/file/temporary.php | 8 +------- .../v/0.0.0/app/libraries/snappymail/upgrade.php | 1 + 8 files changed, 22 insertions(+), 20 deletions(-) diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php b/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php index 014f5c1b6..5cf2f68ca 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php @@ -722,4 +722,19 @@ abstract class Utils $aParts[] = $sDomain; return \implode('@', $aParts); } + + public static function mkdir(string $directory) : void + { + if (!\is_dir($directory)) { + if (!\mkdir($directory, 0700, true)) { + throw new \RuntimeException("Failed to create directory {$directory}"); + } + \clearstatcache(); + } +/* + if (!\is_writable($directory)) { + throw new \Exception("Failed to access directory {$directory}"); + } +*/ + } } diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Cache/Drivers/File.php b/snappymail/v/0.0.0/app/libraries/MailSo/Cache/Drivers/File.php index 3dbf37ca8..ab427131c 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Cache/Drivers/File.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Cache/Drivers/File.php @@ -25,6 +25,7 @@ class File implements \MailSo\Cache\DriverInterface function __construct(string $sCacheFolder) { $this->sCacheFolder = \rtrim(\trim($sCacheFolder), '\\/').'/'; + \MailSo\Base\Utils::mkdir($this->sCacheFolder); // http://www.brynosaurus.com/cachedir/ $tag = $this->sCacheFolder . 'CACHEDIR.TAG'; diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Pgp.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Pgp.php index f70d9a021..939610695 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Pgp.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Pgp.php @@ -59,9 +59,7 @@ trait Pgp \RainLoop\Providers\Storage\Enumerations\StorageType::ROOT ), '/') . '/.gnupg'; - if (!\is_dir($homedir)) { - \mkdir($homedir, 0700, true); - } + \MailSo\Base\Utils::mkdir($homedir); if (!\is_writable($homedir)) { throw new \Exception("gpg homedir '{$homedir}' not writable"); } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/SMime.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/SMime.php index 9c229361e..124f3c974 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/SMime.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/SMime.php @@ -22,9 +22,7 @@ trait SMime \RainLoop\Providers\Storage\Enumerations\StorageType::ROOT ), '/') . '/.smime'; - if (!\is_dir($homedir)) { - \mkdir($homedir, 0700, true); - } + \MailSo\Base\Utils::mkdir($homedir); if (!\is_writable($homedir)) { throw new \Exception("smime homedir '{$homedir}' not writable"); } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Files/FileStorage.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Files/FileStorage.php index c781d06a8..ded1e1c4d 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Files/FileStorage.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Files/FileStorage.php @@ -147,9 +147,7 @@ class FileStorage implements \RainLoop\Providers\Files\IFiles .($sSubEmail ? '/'.\MailSo\Base\Utils::SecureFileName($sSubEmail) : '') .'/.files/'.\sha1($sKey); - if ($bMkDir && !\is_dir(\dirname($sFilePath)) && !\mkdir(\dirname($sFilePath), 0700, true)) { - throw new \RuntimeException('Can\'t make storage directory "'.$sFilePath.'"'); - } + $bMkDir && \MailSo\Base\Utils::mkdir(\dirname($sFilePath)); return $sFilePath; } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php index 5a3a7830f..0a8c10466 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php @@ -143,10 +143,7 @@ class FileStorage implements \RainLoop\Providers\Storage\IStorage } } - if ($bMkDir && !empty($sFilePath) && !\is_dir($sFilePath) && !\mkdir($sFilePath, 0700, true)) - { - throw new \RuntimeException('Can\'t make storage directory "'.$sFilePath.'"'); - } + $bMkDir && !empty($sFilePath) && \MailSo\Base\Utils::mkdir($sFilePath); return $sFilePath; } diff --git a/snappymail/v/0.0.0/app/libraries/snappymail/file/temporary.php b/snappymail/v/0.0.0/app/libraries/snappymail/file/temporary.php index 8b604f020..f466c2474 100644 --- a/snappymail/v/0.0.0/app/libraries/snappymail/file/temporary.php +++ b/snappymail/v/0.0.0/app/libraries/snappymail/file/temporary.php @@ -10,13 +10,7 @@ class Temporary { $tmpdir = \sys_get_temp_dir() . '/snappymail'; // if (\RainLoop\Utils::inOpenBasedir($tmpdir) && - \is_dir($tmpdir) || \mkdir($tmpdir, 0700); - if (!\is_dir($tmpdir)) { - throw new \Exception("Failed to create directory {$tmpdir}"); - } - if (!\is_writable($tmpdir)) { -// throw new \Exception("Failed to access directory {$tmpdir}"); - } + \MailSo\Base\Utils::mkdir($tmpdir); if ($prefix) { $this->filename = @\tempnam($tmpdir, $name); } else { diff --git a/snappymail/v/0.0.0/app/libraries/snappymail/upgrade.php b/snappymail/v/0.0.0/app/libraries/snappymail/upgrade.php index 5f9051cbf..d2ef030b6 100644 --- a/snappymail/v/0.0.0/app/libraries/snappymail/upgrade.php +++ b/snappymail/v/0.0.0/app/libraries/snappymail/upgrade.php @@ -17,6 +17,7 @@ abstract class Upgrade $sNewDir = $sDataPath .'/'.\MailSo\Base\Utils::SecureFileName($sDomain ?: 'unknown.tld') .'/'.\MailSo\Base\Utils::SecureFileName(\implode('@', $aEmail) ?: '.unknown'); +// \MailSo\Base\Utils::mkdir($sNewDir) if (\is_dir($sNewDir) || \mkdir($sNewDir, 0700, true)) { foreach (\glob("{$sDomainDir}/*") as $sItem) { $sName = \basename($sItem);