From a104a1e39badbd0f506a2df7aab7857c60252d43 Mon Sep 17 00:00:00 2001 From: kohsuke Date: Thu, 27 Mar 2008 23:46:20 +0000 Subject: [PATCH] Added MailAddresResolver for LDAP. Needs to be tested before hooked online (issue #1475) git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@8048 71c3de6d-444a-0410-be80-ed276b4c234a Originally-Committed-As: d8a9a6fddb09a591879165ef495f4be5c1f9752a --- .../hudson/security/LDAPSecurityRealm.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/core/src/main/java/hudson/security/LDAPSecurityRealm.java b/core/src/main/java/hudson/security/LDAPSecurityRealm.java index 0ca0bba..409bdc8 100644 --- a/core/src/main/java/hudson/security/LDAPSecurityRealm.java +++ b/core/src/main/java/hudson/security/LDAPSecurityRealm.java @@ -3,8 +3,10 @@ package hudson.security; import com.sun.jndi.ldap.LdapCtxFactory; import groovy.lang.Binding; import hudson.Util; +import hudson.tasks.MailAddressResolver; import hudson.model.Descriptor; import hudson.model.Hudson; +import hudson.model.User; import hudson.util.FormFieldValidator; import hudson.util.spring.BeanBuilder; import net.sf.json.JSONObject; @@ -12,6 +14,7 @@ import org.acegisecurity.AuthenticationManager; import org.acegisecurity.userdetails.UserDetailsService; import org.acegisecurity.userdetails.UserDetails; import org.acegisecurity.userdetails.UsernameNotFoundException; +import org.acegisecurity.userdetails.ldap.LdapUserDetails; import org.acegisecurity.ldap.search.FilterBasedLdapUserSearch; import org.acegisecurity.ldap.LdapUserSearch; import org.kohsuke.stapler.DataBoundConstructor; @@ -143,6 +146,33 @@ public class LDAPSecurityRealm extends SecurityRealm { }); } + /** + * If the security realm is LDAP, try to pick up e-mail address from LDAP. + */ + public static final class MailAdressResolverImpl extends MailAddressResolver { + public String findMailAddressFor(User u) { + // LDAP not active + Hudson hudson = Hudson.getInstance(); + if(!(hudson.getSecurityRealm() instanceof LDAPSecurityRealm)) + return null; + try { + LdapUserDetails details = (LdapUserDetails) HudsonFilter.USER_DETAILS_SERVICE_PROXY.loadUserByUsername(u.getId()); + Attribute mail = details.getAttributes().get("mail"); + if(mail==null) return null; // not found + return (String)mail.get(); + } catch (UsernameNotFoundException e) { + LOGGER.log(Level.FINE, "Failed to look up LDAP for e-mail address",e); + return null; + } catch (DataAccessException e) { + LOGGER.log(Level.FINE, "Failed to look up LDAP for e-mail address",e); + return null; + } catch (NamingException e) { + LOGGER.log(Level.FINE, "Failed to look up LDAP for e-mail address",e); + return null; + } + } + } + public DescriptorImpl getDescriptor() { return DESCRIPTOR; }