From 1b604fde797d4ac73646beee10361894bccfc1e2 Mon Sep 17 00:00:00 2001 From: brinn <brinn> Date: Wed, 4 May 2011 19:05:54 +0000 Subject: [PATCH] add: configuration option ldap.queryTemplate to service.properties to make it easy to adapt the ldap configuration to OpenLDAP servers SVN: 21136 --- .../ldap/LDAPDirectoryConfiguration.java | 33 +++++++++------ .../ldap/LDAPDirectoryConfigurationTest.java | 41 +++++++++++++++++++ openbis/dist/server/service.properties | 9 ++++ 3 files changed, 70 insertions(+), 13 deletions(-) create mode 100644 authentication/sourceTest/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfigurationTest.java diff --git a/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfiguration.java b/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfiguration.java index d44d6ffa48e..3b7304bc038 100644 --- a/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfiguration.java +++ b/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfiguration.java @@ -37,6 +37,9 @@ import org.apache.commons.lang.StringUtils; public final class LDAPDirectoryConfiguration { + static final String DEFAULT_QUERY_TEMPLATE = "(&(objectClass=organizationalPerson)(objectCategory=person)" + + "(objectClass=user)(%s))"; + private String userIdAttributeName = "uid"; private String lastNameAttributeName = "sn"; @@ -58,8 +61,7 @@ public final class LDAPDirectoryConfiguration private String referral = "follow"; private String queryTemplate = - "(&(objectClass=organizationalPerson)(objectCategory=person)" - + "(objectClass=user)(%s))"; + DEFAULT_QUERY_TEMPLATE; private String securityPrincipalDistinguishedName; @@ -77,7 +79,7 @@ public final class LDAPDirectoryConfiguration public void setUserIdAttributeName(String userIdAttributeName) { - if (StringUtils.isNotBlank(userIdAttributeName)) + if (isResolved(userIdAttributeName)) { this.userIdAttributeName = userIdAttributeName; } @@ -93,7 +95,7 @@ public final class LDAPDirectoryConfiguration public void setLastNameAttributeName(String lastNameAttributeName) { - if (StringUtils.isNotBlank(lastNameAttributeName)) + if (isResolved(lastNameAttributeName)) { this.lastNameAttributeName = lastNameAttributeName; } @@ -109,7 +111,7 @@ public final class LDAPDirectoryConfiguration public void setFirstNameAttributeName(String firstNameAttributeName) { - if (StringUtils.isNotBlank(firstNameAttributeName)) + if (isResolved(firstNameAttributeName)) { this.firstNameAttributeName = firstNameAttributeName; } @@ -125,7 +127,7 @@ public final class LDAPDirectoryConfiguration public void setEmailAttributeName(String emailAttributeName) { - if (StringUtils.isNotBlank(emailAttributeName)) + if (isResolved(emailAttributeName)) { this.emailAttributeName = emailAttributeName; } @@ -141,7 +143,7 @@ public final class LDAPDirectoryConfiguration */ public void setEmailAliasesAttributeName(String emailAliasesAttributeName) { - if (StringUtils.isNotBlank(emailAliasesAttributeName)) + if (isResolved(emailAliasesAttributeName)) { this.emailAliasesAttributeName = emailAliasesAttributeName; } @@ -159,7 +161,7 @@ public final class LDAPDirectoryConfiguration */ public void setQueryEmailForAliases(String queryEmailForAliases) { - if (StringUtils.isNotBlank(queryEmailForAliases)) + if (isResolved(queryEmailForAliases)) { this.queryEmailForAliases = queryEmailForAliases; } @@ -177,7 +179,7 @@ public final class LDAPDirectoryConfiguration */ public void setEmailAttributePrefix(String emailAttributePrefix) { - if (StringUtils.isNotBlank(emailAttributePrefix)) + if (isResolved(emailAttributePrefix)) { this.emailAttributePrefix = emailAttributePrefix; } @@ -200,7 +202,7 @@ public final class LDAPDirectoryConfiguration */ public void setSecurityProtocol(String securityProtocol) { - if (StringUtils.isNotBlank(securityProtocol)) + if (isResolved(securityProtocol)) { this.securityProtocol = securityProtocol; } @@ -258,7 +260,7 @@ public final class LDAPDirectoryConfiguration */ public void setSecurityAuthenticationMethod(String securityAuthenticationMethod) { - if (StringUtils.isNotBlank(securityAuthenticationMethod)) + if (isResolved(securityAuthenticationMethod)) { this.securityAuthenticationMethod = securityAuthenticationMethod; } @@ -279,7 +281,7 @@ public final class LDAPDirectoryConfiguration */ public void setReferral(String referral) { - if (StringUtils.isNotBlank(referral)) + if (isResolved(referral)) { this.referral = referral; } @@ -300,7 +302,7 @@ public final class LDAPDirectoryConfiguration */ public void setQueryTemplate(String queryTemplate) { - if (StringUtils.isNotBlank(queryTemplate)) + if (isResolved(queryTemplate)) { this.queryTemplate = queryTemplate; } @@ -321,4 +323,9 @@ public final class LDAPDirectoryConfiguration this.serverUrl = ldapUrl; } + private static boolean isResolved(String name) + { + return StringUtils.isNotBlank(name) && name.startsWith("${") == false; + } + } diff --git a/authentication/sourceTest/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfigurationTest.java b/authentication/sourceTest/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfigurationTest.java new file mode 100644 index 00000000000..358ff52d13b --- /dev/null +++ b/authentication/sourceTest/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfigurationTest.java @@ -0,0 +1,41 @@ +/* + * Copyright 2011 ETH Zuerich, CISD + * + * 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.authentication.ldap; + +import static org.testng.AssertJUnit.assertEquals; + +import org.testng.annotations.Test; + +/** + * Test cases for {@link LDAPDirectoryConfiguration} + * + * @author Bernd Rinn + */ +public class LDAPDirectoryConfigurationTest +{ + + @Test + public void testLDAPDirectoryConfigurationUnresolvedVariableQueryTemplate() + { + final LDAPDirectoryConfiguration config = new LDAPDirectoryConfiguration(); + config.setQueryTemplate(" "); + assertEquals(LDAPDirectoryConfiguration.DEFAULT_QUERY_TEMPLATE, config.getQueryTemplate()); + config.setQueryTemplate("${ldap.queryTemplate}"); + assertEquals(LDAPDirectoryConfiguration.DEFAULT_QUERY_TEMPLATE, config.getQueryTemplate()); + } + +} diff --git a/openbis/dist/server/service.properties b/openbis/dist/server/service.properties index 911b63a1f56..390a220d668 100644 --- a/openbis/dist/server/service.properties +++ b/openbis/dist/server/service.properties @@ -62,6 +62,15 @@ ldap.attributenames.first.name = ldap.attributenames.last.name = # Set to true to also query for email aliases ldap.queryEmailForAliases = true +# The query template, needs to contain %s which will be filled with the query term, e.g. uid=username +# The default is: +# ldap.queryTemplate = (&(objectClass=organizationalPerson)(objectCategory=person)(objectClass=user)(%s)) +# which is known to work for many Active Directory installations. +# For OpenLDAP, replace by: +# ldap.queryTemplate = (&(objectClass=organizationalPerson)(objectClass=user)(%s)) +# For restriction to BSSE accounts in OpenLDAP, set to: +# ldap.queryTemplate = (&(objectClass=bssePosixAccount)(%s)) +ldap.queryTemplate = # The database instance local unique identifier. Used when the new database is created. database-instance = TEST -- GitLab