From 2856a6ba43b1bbb51612c878991f05180286435f Mon Sep 17 00:00:00 2001 From: Luke Taylor Date: Sun, 11 Nov 2007 16:10:30 +0000 Subject: [PATCH] Allow configuration of embedded ldap server port through ldap namespace configuration. Changed default port from 3389 to avoid conflict with windows remote desktop (as reported by Ray Krueger in dev list). --- .../config/LdapBeanDefinitionParser.java | 24 +++++++++++++------ .../security/config/spring-security-2.0.rnc | 18 +++++++++++--- .../security/config/spring-security-2.0.xsd | 23 ++++++++++++++++-- .../ldap/ldapIntegrationTestContext.xml | 4 ++-- 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/org/springframework/security/config/LdapBeanDefinitionParser.java b/core/src/main/java/org/springframework/security/config/LdapBeanDefinitionParser.java index 316839b9ca..7f80ed4b2b 100644 --- a/core/src/main/java/org/springframework/security/config/LdapBeanDefinitionParser.java +++ b/core/src/main/java/org/springframework/security/config/LdapBeanDefinitionParser.java @@ -49,6 +49,10 @@ public class LdapBeanDefinitionParser extends AbstractBeanDefinitionParser { */ public static final String LDIF_FILE_ATTRIBUTE = "ldif"; + /** Defines the port the LDAP server should run on */ + public static final String PORT_ATTRIBUTE = "port"; + public static final String DEFAULT_LDAP_PORT = "33389"; + // Defaults private static final String DEFAULT_ROOT_SUFFIX = "dc=springframework,dc=org"; private static final String DEFAULT_PROVIDER_BEAN_ID = "_ldapAuthenticationProvider"; @@ -146,15 +150,20 @@ public class LdapBeanDefinitionParser extends AbstractBeanDefinitionParser { partition.setSuffix(suffix); } catch (NamingException e) { // TODO: What exception should we be throwing here ? - - logger.error("Failed to set root name suffix to " + suffix, e); + parserContext.getReaderContext().error("Failed to set root name suffix to " + suffix, element, e); } HashSet partitions = new HashSet(1); partitions.add(partition); - //TODO: Allow port configuration - configuration.setLdapPort(3389); + String port = element.getAttribute(PORT_ATTRIBUTE); + + if (!StringUtils.hasText(port)) { + port = DEFAULT_LDAP_PORT; + } + + configuration.setLdapPort(Integer.parseInt(port)); + // We shut down the server ourself when the app context is closed so we don't need // the extra shutdown hook from apache DS itself. configuration.setShutdownHookEnabled(false); @@ -162,7 +171,8 @@ public class LdapBeanDefinitionParser extends AbstractBeanDefinitionParser { configuration.setContextPartitionConfigurations(partitions); RootBeanDefinition initialDirContextFactory = new RootBeanDefinition(DefaultInitialDirContextFactory.class); - initialDirContextFactory.getConstructorArgumentValues().addIndexedArgumentValue(0, "ldap://127.0.0.1:3389/" + suffix); + initialDirContextFactory.getConstructorArgumentValues().addIndexedArgumentValue(0, + "ldap://127.0.0.1:" + port + "/" + suffix); initialDirContextFactory.getPropertyValues().addPropertyValue("managerDn", "uid=admin,ou=system"); initialDirContextFactory.getPropertyValues().addPropertyValue("managerPassword", "secret"); @@ -172,8 +182,8 @@ public class LdapBeanDefinitionParser extends AbstractBeanDefinitionParser { apacheDSStartStop.getConstructorArgumentValues().addGenericArgumentValue(initialDirContextFactory); if (parserContext.getRegistry().containsBeanDefinition("_apacheDSStartStopBean")) { - //TODO: Appropriate exception - throw new IllegalArgumentException("Only one embedded server bean is allowed per application context"); + parserContext.getReaderContext().error("Only one embedded server bean is allowed per application context", + element); } parserContext.getRegistry().registerBeanDefinition("_apacheDSStartStopBean", apacheDSStartStop); diff --git a/core/src/main/resources/org/springframework/security/config/spring-security-2.0.rnc b/core/src/main/resources/org/springframework/security/config/spring-security-2.0.rnc index d9aa294a82..69ba62e11d 100644 --- a/core/src/main/resources/org/springframework/security/config/spring-security-2.0.rnc +++ b/core/src/main/resources/org/springframework/security/config/spring-security-2.0.rnc @@ -6,11 +6,21 @@ datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" default namespace = "http://www.springframework.org/schema/security" +start = http | ldap + # targetNamespace="http://www.springframework.org/schema/security" path-type = ## Defines the type types of pattern used to specify URL paths. Defaults to "ant" [ a:defaultValue = "ant" ] attribute pathType {"regex" | "ant"} + +port = + ## Specifies an IP port number. Used to configure an embedded LDAP server, for example. + attribute port { xsd:integer } + +url = + ## Specifies a URL. + attribute url { xsd:string } autoconfig = ## Provides automatic security configration for a application @@ -21,10 +31,12 @@ ldap = ## Sets up an ldap authentication provider, optionally with an embedded ldap server element ldap {ldap.attlist, empty} ldap.attlist &= - ## Specifies the ldap server Url. If omitted, an embedded server will be created - attribute url { xsd:string }? + ## The url indicates the server location. If omitted, an embedded server will be + ## started, optionally with the configured port number. + (url | port)? + ldap.attlist &= - ## Explicitly specify an ldif file resource to load + ## Explicitly specify an ldif file resource to load into the embedded server [ a:defaultValue = "classpath:*.ldif" ] attribute ldif { xsd:string }? intercept-methods = diff --git a/core/src/main/resources/org/springframework/security/config/spring-security-2.0.xsd b/core/src/main/resources/org/springframework/security/config/spring-security-2.0.xsd index 86e2654988..e20053556a 100644 --- a/core/src/main/resources/org/springframework/security/config/spring-security-2.0.xsd +++ b/core/src/main/resources/org/springframework/security/config/spring-security-2.0.xsd @@ -14,6 +14,20 @@ + + + + Specifies an IP port number. Used to configure an embedded LDAP server, for example. + + + + + + + Specifies a URL. + + + Provides automatic security configration for a application @@ -31,12 +45,17 @@ - Specifies the ldap server Url. If omitted, an embedded server will be created + Specifies a URL. + + + + + Specifies an IP port number. Used to configure an embedded LDAP server, for example. - Explicitly specify an ldif file resource to load + Explicitly specify an ldif file resource to load into the embedded server diff --git a/core/src/test/resources/org/springframework/security/ldap/ldapIntegrationTestContext.xml b/core/src/test/resources/org/springframework/security/ldap/ldapIntegrationTestContext.xml index f904fe92e0..6103b0e9dc 100644 --- a/core/src/test/resources/org/springframework/security/ldap/ldapIntegrationTestContext.xml +++ b/core/src/test/resources/org/springframework/security/ldap/ldapIntegrationTestContext.xml @@ -5,12 +5,12 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd"> - + - +