From c6c7fba9e77ee31ed391919621036a63eb5b12d1 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Thu, 23 Feb 2012 10:19:35 +0000 Subject: [PATCH] LMS-2612 ignore . files/folders, do not allow ' ', ',', '=' in plugin names SVN: 24534 --- .../shared/utils/CorePluginsInjector.java | 29 +++++++++++++++++-- .../shared/utils/CorePluginsInjectorTest.java | 22 ++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjector.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjector.java index dd07766a95e..451b9dc5b4e 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjector.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjector.java @@ -52,6 +52,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CorePlugin; */ class CorePluginsInjector { + private static final String UNALLOWED_PLUGIN_NAME_CHARACTERS = " ,="; + static final String CORE_PLUGINS_FOLDER_KEY = "core-plugins-folder"; static final String PLUGIN_PROPERTIES_FILE_NAME = "plugin.properties"; @@ -188,8 +190,17 @@ class CorePluginsInjector File file = new File(dssFolder, pluginType.getSubFolderName()); if (file.isDirectory()) { - for (File definingFolder : file.listFiles()) + File[] pluginFolders = file.listFiles(new FilenameFilter() + { + public boolean accept(File dir, String name) + { + return name.startsWith(".") == false; + } + }); + for (File pluginFolder : pluginFolders) { + String pluginName = pluginFolder.getName(); + assertValidPluginName(pluginName); Map<String, DssCorePlugin> map = typeToPluginsMap.get(pluginType); if (map == null) { @@ -197,8 +208,7 @@ class CorePluginsInjector typeToPluginsMap.put(pluginType, map); } DssCorePlugin plugin = - new DssCorePlugin(technology, pluginType, definingFolder); - String pluginName = definingFolder.getName(); + new DssCorePlugin(technology, pluginType, pluginFolder); if (pluginType.isUniquePluginNameRequired()) { if (pluginNames.contains(pluginName)) @@ -216,6 +226,19 @@ class CorePluginsInjector return typeToPluginsMap; } + private void assertValidPluginName(String pluginName) + { + for (int i = 0; i < UNALLOWED_PLUGIN_NAME_CHARACTERS.length(); i++) + { + char c = UNALLOWED_PLUGIN_NAME_CHARACTERS.charAt(i); + if (pluginName.contains(Character.toString(c))) + { + throw new EnvironmentFailureException("Plugin name contains '" + c + "': " + + pluginName); + } + } + } + /** * Load plugin properties file where all references to script names are replaced by script paths. */ diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjectorTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjectorTest.java index f8d75f9aabf..3e98dc5bbd8 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjectorTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjectorTest.java @@ -107,6 +107,28 @@ public class CorePluginsInjectorTest extends AbstractFileSystemTestCase context.assertIsSatisfied(); } + @Test + public void testInvalidPluginNameAndIgnoringDotFilesAndFolders() throws IOException + { + File alpha = new File(corePluginsFolder, "screening/1/dss/drop-boxes/a b"); + alpha.mkdirs(); + new File(alpha.getParentFile(), ".svn").mkdirs(); + new File(alpha.getParentFile(), ".blabla").createNewFile(); + Properties properties = createProperties(); + properties.setProperty(INPUT_THREAD_NAMES, "a, b"); + + try + { + injector.injectCorePlugins(properties); + fail("EnvironmentFailureException expected."); + } catch (EnvironmentFailureException ex) + { + assertEquals("Plugin name contains ' ': a b", ex.getMessage()); + } + + context.assertIsSatisfied(); + } + @Test public void testPluginIsNotAFolder() throws IOException { -- GitLab