diff --git a/changelog.txt b/changelog.txt index bfad5323..9362714b 100644 --- a/changelog.txt +++ b/changelog.txt @@ -10,6 +10,7 @@ http://www.ietf.org/rfc/rfc2254.txt http://www.ietf.org/rfc/rfc2255.txt http://www.ietf.org/rfc/rfc2256.txt http://www.ietf.org/rfc/rfc2696.txt +http://www.ietf.org/rfc/rfc2829.txt Changes in version 1.3.1 (October 2010) ------------------------------------------- @@ -46,6 +47,10 @@ Changes in version 1.3.1 (October 2010) * Authentication methods now log problems at level INFO rather than ERROR. (LDAP-170) +* DIGEST-MD5 SASL authentication mechanism is now supported, as specified by + RFC 2829 (see http://www.ietf.org/rfc/rfc2829.txt, section 4). (LDAP-173) + Contributed by Marvin S. Addison. + * DefaultDirObjectFactory calls a Java5 version of the IllegalArgumentException constructor. (LDAP 196). diff --git a/core/src/main/java/org/springframework/ldap/core/support/DigestMd5DirContextAuthenticationStrategy.java b/core/src/main/java/org/springframework/ldap/core/support/DigestMd5DirContextAuthenticationStrategy.java new file mode 100644 index 00000000..575d1033 --- /dev/null +++ b/core/src/main/java/org/springframework/ldap/core/support/DigestMd5DirContextAuthenticationStrategy.java @@ -0,0 +1,54 @@ +/* + * Copyright 2005-2009 the original author or authors. + * + * 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 org.springframework.ldap.core.support; + +import java.util.Hashtable; + +import javax.naming.Context; +import javax.naming.directory.DirContext; + +/** + * Authentication strategy for LDAP DIGEST-MD5 SASL mechanism. + * + * @author Marvin S. Addison + */ +public class DigestMd5DirContextAuthenticationStrategy implements DirContextAuthenticationStrategy { + + /** Authentication type for DIGEST-MD5 auth */ + private static final String DIGEST_MD5_AUTHENTICATION = "DIGEST-MD5"; + + + /* + * (non-Javadoc) + * @see org.springframework.ldap.core.support.DirContextAuthenticationStrategy#processContextAfterCreation(javax.naming.directory.DirContext, + * java.lang.String, java.lang.String) + */ + public DirContext processContextAfterCreation(DirContext ctx, String userDn, String password) { + return ctx; + } + + /* + * (non-Javadoc) + * @see org.springframework.ldap.core.support.DirContextAuthenticationStrategy#setupEnvironment(java.util.Hashtable, + * java.lang.String, java.lang.String) + */ + public void setupEnvironment(Hashtable env, String userDn, String password) { + env.put(Context.SECURITY_AUTHENTICATION, DIGEST_MD5_AUTHENTICATION); + // userDn should be a bare username for DIGEST-MD5 + env.put(Context.SECURITY_PRINCIPAL, userDn); + env.put(Context.SECURITY_CREDENTIALS, password); + } +} diff --git a/pom.xml b/pom.xml index 30532b0f..5450fb20 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,9 @@ Paul Harvey + + Marvin S. Addison + The Spring LDAP Framework