From f8a133d39e50c47dcda5685857baf465dea30104 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Wed, 13 Feb 2019 12:21:51 +0100 Subject: [PATCH] reject mounts with unsubstituted placeholders as incompletely configured Signed-off-by: Arthur Schiwon --- apps/files_external/lib/config.php | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 2078abc029..86be517bf0 100644 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -240,6 +240,20 @@ class OC_Mount_Config { } foreach ($options as &$option) { $option = self::substitutePlaceholdersInConfig($option); + if(!self::arePlaceholdersSubstituted($option)) { + \OC::$server->getLogger()->error( + 'A placeholder was not substituted: {option} for mount type {class}', + [ + 'app' => 'files_external', + 'option' => $option, + 'class' => $class, + ] + ); + throw new StorageNotAvailableException( + 'Mount configuration incomplete', + StorageNotAvailableException::STATUS_INCOMPLETE_CONF + ); + } } if (class_exists($class)) { try { @@ -264,6 +278,22 @@ class OC_Mount_Config { return StorageNotAvailableException::STATUS_ERROR; } + public static function arePlaceholdersSubstituted($option):bool { + $result = true; + if(is_array($option)) { + foreach ($option as $optionItem) { + if(is_array($optionItem)) { + $result = $result && self::arePlaceholdersSubstituted($option); + } + } + } else if (is_string($option)) { + if (strpos($option, '$') !== false) { + $result = false; + } + } + return $result; + } + /** * Read the mount points in the config file into an array *