diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServer.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServer.java new file mode 100644 index 0000000000000000000000000000000000000000..e2e8627b49a8bfe51e1923d8298d1dbb96b60a36 --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServer.java @@ -0,0 +1,78 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.dss.generic.server.cifs; + +import java.io.StringReader; + +import org.alfresco.jlan.app.XMLServerConfiguration; +import org.alfresco.jlan.smb.server.SMBServer; +import org.apache.log4j.Logger; + +import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; +import ch.systemsx.cisd.common.logging.LogCategory; +import ch.systemsx.cisd.common.logging.LogFactory; +import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class CifsServer +{ + private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, CifsServer.class); + + private CifsServerConfig config; + + private SMBServer server; + + public CifsServer() + { + config = new CifsServerConfig(DssPropertyParametersUtil.loadServiceProperties()); + if (config.isEnabled()) + { + start(); + } + } + + private void start() + { + try + { + operationLog.info("Starting up CIFS server at port " + config.getPort()); + XMLServerConfiguration configuration = new XMLServerConfiguration(); + configuration.loadConfiguration(new StringReader(config.getServerXmlConfig())); + server = new SMBServer(configuration); + server.startServer(); + } catch (Exception ex) + { + throw CheckedExceptionTunnel.wrapIfNecessary(ex); + } + } + + /** + * called by spring IoC container when the application shuts down. + */ + public void stop() + { + if (server != null) + { + server.shutdownServer(true); + } + } + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerAuthenticator.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerAuthenticator.java new file mode 100644 index 0000000000000000000000000000000000000000..eef1d1f48c3adf51bd82b7724cd297e019251feb --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerAuthenticator.java @@ -0,0 +1,58 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.dss.generic.server.cifs; + +import org.alfresco.jlan.server.SrvSession; +import org.alfresco.jlan.server.auth.CifsAuthenticator; +import org.alfresco.jlan.server.auth.ClientInfo; +import org.alfresco.jlan.server.auth.UserAccount; +import org.alfresco.jlan.server.core.SharedDevice; + +/** + * @author Franz-Josef Elmer + */ +public class CifsServerAuthenticator extends CifsAuthenticator +{ + public CifsServerAuthenticator() + { + setAccessMode(USER_MODE); + } + + @Override + public int authenticateShareConnect(ClientInfo client, SharedDevice share, String pwd, SrvSession sess) + { + System.out.println("CifsServerAuthenticator.authenticateShareConnect() >"+client+ "< >" + pwd + "< >"+sess+"<"); + System.out.println(sess.getClientInformation()); + System.out.println(sess.getAuthenticationContext()); + System.out.println(client.getANSIPasswordAsString()); + System.out.println(client.getPasswordAsString()); + System.out.println(client.getUserName()); + return Writeable; + } + + @Override + public int authenticateUser(ClientInfo client, SrvSession sess, int alg) + { + System.out.println("CifsServerAuthenticator.authenticateUser() "+client+" "+sess+" "+alg); + System.out.println(sess.getClientInformation()); + System.out.println(sess.getAuthenticationContext()); + UserAccount userAcc = getUserDetails(client.getUserName()); + System.out.println("user account:"+userAcc); + return AUTH_ALLOW; + } + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerConfig.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..b7403752aa95ce4e0a0e7184263e85e776a4f8fe --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerConfig.java @@ -0,0 +1,134 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.dss.generic.server.cifs; + +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; + +import ch.systemsx.cisd.common.collection.MapBuilder; +import ch.systemsx.cisd.common.properties.PropertyParametersUtil; +import ch.systemsx.cisd.common.properties.PropertyUtils; +import ch.systemsx.cisd.common.string.Template; + +/** + * + * + * @author Franz-Josef Elmer + */ +class CifsServerConfig +{ + private static final String SECTION_NAME = "cifs.server"; + private static final Template CONFIG_TEMPLATE_XML = new Template("<jlanserver>\n" + + "<servers><SMB/></servers>\n" + + "<SMB>\n" + + " <host name='${host.name}' domain='${host.domain}'>\n" + + " <broadcast>${broadcast-mask}</broadcast>\n" + + " <smbdialects>${smb-dialects}</smbdialects>\n" + + " <tcpipSMB port='${smb-port}'/>\n" + + " </host>\n" + + " <authenticator>\n" + + " <class>ch.systemsx.cisd.openbis.dss.generic.server.cifs.CifsServerAuthenticator</class>\n" + + " <mode>USER</mode>\n" + + " </authenticator>\n" + + " <sessionDebug flags='${session-log-flags}'/>" + + "</SMB>\n" + + "<shares>\n" + + " <diskshare name='${share-name}'>\n" + + " <driver>\n" + + " <!--class>ch.systemsx.cisd.openbis.dss.generic.server.cifs.DataSetCifsView</class-->\n" + + " <class>org.alfresco.jlan.smb.server.disk.JavaFileDiskDriver</class>\n" + + " <LocalPath>/Users/felmer/tmp/playgrounds/unix</LocalPath>\n" + + " </driver>\n" + + " </diskshare>\n" + + "</shares>\n" + + "<debug>\n" + + " <output>\n" + + " <class>ch.systemsx.cisd.openbis.dss.generic.server.cifs.CifsServerLogger</class>\n" + + " <log-level>${log-level}</log-level>\n" + + " </output>\n" + + "</debug>\n" + + "<security>\n" + + " <JCEProvider>org.bouncycastle.jce.provider.BouncyCastleProvider</JCEProvider>\n" + + " <authenticator>\n" + + " <class>ch.systemsx.cisd.openbis.dss.generic.server.cifs.CifsServerAuthenticator</class>\n" + + " <mode>USER</mode>\n" + + " </authenticator>\n" + + " <users>\n" + + " <user name=\"jlansrv\">\n" + + " <password>jlan</password>\n" + + " <comment>System administrator</comment>\n" + + " <administrator/>\n" + + " </user>\n" + + " <user name=\"felmer\">\n" + + " <password>felmer</password>\n" + + " </user>\n" + + " <user name=\"normal\">\n" + + " <password>normal</password>\n" + + " </user>\n" + + " </users>\n" + + " </security>\n" + + "</jlanserver>\n" + + ""); + private static final String SMB_PORT_KEY = "smb-port"; + private static Map<String, String> CONFIG_PARAMS = new MapBuilder<String, String>() + .entry("host.name", "ETHZ") + .entry("host.domain", "OPENBIS") + .entry("broadcast-mask", "255.255.255.255") + .entry("smb-dialects", "LanMan,NT") + .entry(SMB_PORT_KEY, "1445") + .entry("session-log-flags", "Negotiate,Socket,Tree") + .entry("log-level", "INFO") + .entry("share-name", "STORE") + .getMap(); + + private final boolean enabled; + private final Properties serverProperties; + + public CifsServerConfig(Properties props) + { + serverProperties = PropertyParametersUtil.extractSingleSectionProperties(props, SECTION_NAME, false).getProperties(); + enabled = PropertyUtils.getBoolean(serverProperties, "enable", false); + } + + public boolean isEnabled() + { + return enabled; + } + + public String getPort() + { + return getProperty(SMB_PORT_KEY); + } + + private String getProperty(String key) + { + return serverProperties.getProperty(key, CONFIG_PARAMS.get(key)); + } + + public String getServerXmlConfig() + { + Template template = CONFIG_TEMPLATE_XML.createFreshCopy(); + for (Entry<String, String> entry : CONFIG_PARAMS.entrySet()) + { + String key = entry.getKey(); + template.bind(key, serverProperties.getProperty(key, entry.getValue())); + } + return template.createText(); + } + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerLogger.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerLogger.java new file mode 100644 index 0000000000000000000000000000000000000000..2caf5d14102f5bd7e2a8d324a60c3e64c0fa7bc9 --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerLogger.java @@ -0,0 +1,84 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.dss.generic.server.cifs; + +import org.alfresco.config.ConfigElement; +import org.alfresco.jlan.debug.DebugInterface; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; + +import ch.systemsx.cisd.common.logging.LogCategory; +import ch.systemsx.cisd.common.logging.LogFactory; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class CifsServerLogger implements DebugInterface +{ + private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, + CifsServerLogger.class); + + private Level level = Level.INFO; + private ThreadLocal<StringBuilder> messageBuilder = new ThreadLocal<>(); + + @Override + public void initialize(ConfigElement params) throws Exception + { + operationLog.info("init CIFS server logger:\n" + Utils.render(params)); + ConfigElement logLevel = params.getChild("log-level"); + if (logLevel != null) + { + logLevel.getValue(); + level = Level.toLevel(logLevel.getValue(), Level.INFO); + } + } + + @Override + public void debugPrint(String str) + { + StringBuilder builder = messageBuilder.get(); + if (builder == null) + { + builder = new StringBuilder(); + messageBuilder.set(builder); + } + builder.append(str); + } + + @Override + public void debugPrintln(String str) + { + StringBuilder builder = messageBuilder.get(); + if (builder == null) + { + operationLog.log(level, str); + } else + { + operationLog.log(level, builder.append(str).toString()); + builder.setLength(0); + } + } + + @Override + public void close() + { + operationLog.info("CifsServerLogger.close()"); + } + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java new file mode 100644 index 0000000000000000000000000000000000000000..0ed1b53024c32ddfc4340fd42bd7cf9416f85f6f --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java @@ -0,0 +1,242 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.dss.generic.server.cifs; + +import java.io.FileNotFoundException; +import java.io.IOException; + +import org.alfresco.config.ConfigElement; +import org.alfresco.jlan.server.SrvSession; +import org.alfresco.jlan.server.core.DeviceContext; +import org.alfresco.jlan.server.core.DeviceContextException; +import org.alfresco.jlan.server.filesys.DiskDeviceContext; +import org.alfresco.jlan.server.filesys.DiskInterface; +import org.alfresco.jlan.server.filesys.FileInfo; +import org.alfresco.jlan.server.filesys.FileName; +import org.alfresco.jlan.server.filesys.FileOpenParams; +import org.alfresco.jlan.server.filesys.NetworkFile; +import org.alfresco.jlan.server.filesys.SearchContext; +import org.alfresco.jlan.server.filesys.TreeConnection; +import org.apache.log4j.Logger; + +import ch.systemsx.cisd.common.logging.LogCategory; +import ch.systemsx.cisd.common.logging.LogFactory; +import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; +import ch.systemsx.cisd.openbis.generic.shared.IServiceForDataStoreServer; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class DataSetCifsView implements DiskInterface +{ + private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, DataSetCifsView.class); + + private IServiceForDataStoreServer openBisService; + private IGeneralInformationService generalInfoService; + + public DataSetCifsView() + { + } + + DataSetCifsView(IServiceForDataStoreServer openBisService, IGeneralInformationService generalInfoService) + { + this.openBisService = openBisService; + this.generalInfoService = generalInfoService; + } + + @Override + public DeviceContext createContext(String shareName, ConfigElement args) throws DeviceContextException + { + operationLog.info("create context for share " + shareName); + return new DiskDeviceContext(shareName); + } + + @Override + public void treeOpened(SrvSession sess, TreeConnection tree) + { + operationLog.info("DataSetCifsView.treeOpened()"); + } + + + @Override + public boolean isReadOnly(SrvSession sess, DeviceContext ctx) throws IOException + { + System.out.println("DataSetCifsView.isReadOnly() " + ctx); + return true; + } + + @Override + public FileInfo getFileInformation(SrvSession sess, TreeConnection tree, String path) throws IOException + { + String normalizedPath = FileName.buildPath(null, path, null, java.io.File.separatorChar); + System.out.println("DataSetCifsView.getFileInformation("+path+") "+normalizedPath); + System.out.println(sess.getClientInformation()); + if (normalizedPath.equals("/")) + { + System.out.println("ROOT"); + } + return new FileInfo(normalizedPath, 0, 0); + } + + @Override + public SearchContext startSearch(SrvSession sess, TreeConnection tree, String searchPath, int attrib) throws FileNotFoundException + { + System.out.println("DataSetCifsView.startSearch() "+searchPath+" "+attrib); + // TODO Auto-generated method stub + return null; + } + + @Override + public void treeClosed(SrvSession sess, TreeConnection tree) + { + operationLog.info("DataSetCifsView.treeClosed()"); + } + + @Override + public void closeFile(SrvSession sess, TreeConnection tree, NetworkFile param) throws IOException + { + System.out.println("DataSetCifsView.closeFile()"); + // TODO Auto-generated method stub + + } + + @Override + public void createDirectory(SrvSession sess, TreeConnection tree, FileOpenParams params) throws IOException + { + System.out.println("DataSetCifsView.createDirectory()"); + // TODO Auto-generated method stub + + } + + @Override + public NetworkFile createFile(SrvSession sess, TreeConnection tree, FileOpenParams params) throws IOException + { + System.out.println("DataSetCifsView.createFile()"); + // TODO Auto-generated method stub + return null; + } + + @Override + public void deleteDirectory(SrvSession sess, TreeConnection tree, String dir) throws IOException + { + System.out.println("DataSetCifsView.deleteDirectory()"); + // TODO Auto-generated method stub + + } + + @Override + public void deleteFile(SrvSession sess, TreeConnection tree, String name) throws IOException + { + System.out.println("DataSetCifsView.deleteFile()"); + // TODO Auto-generated method stub + + } + + @Override + public int fileExists(SrvSession sess, TreeConnection tree, String name) + { + System.out.println("DataSetCifsView.fileExists()"); + // TODO Auto-generated method stub + return 0; + } + + @Override + public void flushFile(SrvSession sess, TreeConnection tree, NetworkFile file) throws IOException + { + System.out.println("DataSetCifsView.flushFile()"); + // TODO Auto-generated method stub + + } + + @Override + public NetworkFile openFile(SrvSession sess, TreeConnection tree, FileOpenParams params) throws IOException + { + System.out.println("DataSetCifsView.openFile()"); + // TODO Auto-generated method stub + return null; + } + + @Override + public int readFile(SrvSession sess, TreeConnection tree, NetworkFile file, byte[] buf, int bufPos, int siz, long filePos) throws IOException + { + System.out.println("DataSetCifsView.readFile()"); + // TODO Auto-generated method stub + return 0; + } + + @Override + public void renameFile(SrvSession sess, TreeConnection tree, String oldName, String newName) throws IOException + { + System.out.println("DataSetCifsView.renameFile()"); + // TODO Auto-generated method stub + + } + + @Override + public long seekFile(SrvSession sess, TreeConnection tree, NetworkFile file, long pos, int typ) throws IOException + { + System.out.println("DataSetCifsView.seekFile()"); + // TODO Auto-generated method stub + return 0; + } + + @Override + public void setFileInformation(SrvSession sess, TreeConnection tree, String name, FileInfo info) throws IOException + { + System.out.println("DataSetCifsView.setFileInformation()"); + // TODO Auto-generated method stub + + } + + @Override + public void truncateFile(SrvSession sess, TreeConnection tree, NetworkFile file, long siz) throws IOException + { + System.out.println("DataSetCifsView.truncateFile()"); + // TODO Auto-generated method stub + + } + + @Override + public int writeFile(SrvSession sess, TreeConnection tree, NetworkFile file, byte[] buf, int bufoff, int siz, long fileoff) throws IOException + { + System.out.println("DataSetCifsView.writeFile()"); + // TODO Auto-generated method stub + return 0; + } + + private IServiceForDataStoreServer getServiceForDataStoreServer() + { + if (openBisService == null) + { + openBisService = ServiceProvider.getServiceForDSS(); + } + return openBisService; + } + + private IGeneralInformationService getGeneralInfoService() + { + if (generalInfoService == null) + { + generalInfoService = ServiceProvider.getGeneralInformationService(); + } + return generalInfoService; + } + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/Utils.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/Utils.java new file mode 100644 index 0000000000000000000000000000000000000000..25462e3eeb36ee39dd013e487654173e70489d75 --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/Utils.java @@ -0,0 +1,58 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.dss.generic.server.cifs; + +import java.util.List; +import java.util.Map; + +import org.alfresco.config.ConfigElement; + +/** + * + * + * @author Franz-Josef Elmer + */ +class Utils +{ + public static String render(ConfigElement element) + { + StringBuilder builder = new StringBuilder(); + render("", builder, element); + return builder.toString(); + } + + private static void render(String indentation, StringBuilder builder, ConfigElement element) + { + builder.append(indentation).append(element.getName()).append(" = ").append(element.getValue()); + Map<String, String> attributes = element.getAttributes(); + if (attributes != null) + { + builder.append(" ").append(attributes); + } + List<ConfigElement> children = element.getChildren(); + if (children != null) + { + for (ConfigElement child : children) + { + builder.append('\n'); + render(indentation + " ", builder, child); + } + } + } + + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ServiceProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ServiceProvider.java index 12df346683379d35089d07b8e09cb6aef33586a6..631c7e42823f419409a4d7f3e39bc5d5ed1c66d9 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ServiceProvider.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ServiceProvider.java @@ -29,6 +29,7 @@ import ch.ethz.sis.openbis.generic.server.dssapi.v3.DataStoreServerApiServer; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.openbis.dss.generic.shared.content.IContentCache; +import ch.systemsx.cisd.openbis.generic.shared.IServiceForDataStoreServer; import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService; import ch.systemsx.cisd.openbis.generic.shared.dto.OpenBISSessionHolder; @@ -107,6 +108,11 @@ public class ServiceProvider public static BeanFactory getApplicationContext() { return tryGetApplicationContext(true); + + } + public static IServiceForDataStoreServer getServiceForDSS() + { + return (IServiceForDataStoreServer) getApplicationContext().getBean("etl-lims-service"); } /** diff --git a/datastore_server/source/java/dssApplicationContext.xml b/datastore_server/source/java/dssApplicationContext.xml index 9a2ec6d7c5cf67e0455e3bbeeae730f1a3ddfe59..c95e13700d9a6f2c84aae9f9b0de1beb608730d5 100644 --- a/datastore_server/source/java/dssApplicationContext.xml +++ b/datastore_server/source/java/dssApplicationContext.xml @@ -278,6 +278,11 @@ <constructor-arg ref="general-information-service"/> <constructor-arg ref="adapted-ftp-user-manager"/> </bean> + + <!-- + Optionally starts an CIFS server. + --> + <bean id="cifs-server" class="ch.systemsx.cisd.openbis.dss.generic.server.cifs.CifsServer" destroy-method="stop"/> <bean id="jython-evaluator" class="ch.systemsx.cisd.common.jython.evaluator.JythonEvaluatorSpringComponent" > <constructor-arg ref="propertyConfigurer" />