/** * */ package org.ovirt.engine.core.bll.adbroker; import javax.naming.directory.SearchControls; import org.springframework.ldap.core.NameClassPairCallbackHandler; import org.springframework.ldap.core.support.DirContextAuthenticationStrategy; import org.springframework.ldap.core.support.LdapContextSource; import org.springframework.ldap.core.support.SimpleDirContextAuthenticationStrategy; /** * */ public class SimpleLdapTemplateWrapper extends LDAPTemplateWrapper { /** * @param contextSource */ public SimpleLdapTemplateWrapper(LdapContextSource contextSource, String userName, String password, String path) { super(contextSource, userName, password, path); // TODO Auto-generated constructor stub } @Override public void search(String baseDN, String filter, String displayFilter, SearchControls searchControls, NameClassPairCallbackHandler handler) { searchControls.setCountLimit(1000); //SIMPLE mode will limit have a limitation of 1000 results - as this is used //only by development, this is a reasonable limitation pagedSearch(baseDN,filter, displayFilter, searchControls, handler); } @Override protected DirContextAuthenticationStrategy buildContextAuthenticationStategy() { return new SimpleDirContextAuthenticationStrategy(); } @Override public void adjustUserName(LdapProviderType ldapProviderType) { StringBuilder userDNSb = new StringBuilder(); if ( ldapProviderType.equals(LdapProviderType.activeDirectory) ) { userDNSb.append("CN=").append(userName).append(",CN=Users"); } else if (ldapProviderType.equals(LdapProviderType.rhds)) { userDNSb.append("uid=").append(userName).append(",ou=People"); } else { userDNSb.append("uid=").append(userName).append(",cn=Users").append(",cn=Accounts"); } if (!baseDN.isEmpty()) { String dcDN = getDcDN(baseDN); if (!dcDN.isEmpty()) { userDNSb.append(",").append(dcDN); } } userName = userDNSb.toString(); } @Override protected void setCredentialsOnContext() { contextSource.setUserDn(userName); contextSource.setPassword(password); } private String getDcDN(String baseDN) { if (!baseDN.isEmpty()) { int dcIndex = baseDN.toLowerCase().indexOf("dc="); if ( dcIndex == -1 ) { dcIndex = 0; } return baseDN.substring(dcIndex); } else { return ""; } } }