package com.asolutions.scmsshd.authenticators;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.asolutions.scmsshd.ldap.ILDAPAuthLookupProvider;
import com.asolutions.scmsshd.ssl.PromiscuousSSLSocketFactory;
public class JavaxNamingLDAPAuthLookupProvider implements
ILDAPAuthLookupProvider {
protected final Logger log = LoggerFactory.getLogger(getClass());
public Object provide(String url, String username, String password,
boolean promiscuous) throws NamingException {
InitialDirContext context = new InitialDirContext(getProperties(url, username, password, promiscuous));
SearchControls searchCtls = new SearchControls();
//Specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
//specify the LDAP search filter
String searchFilter = "(objectClass=user)";
//initialize counter to total the results
// Search for objects using the filter
NamingEnumeration<SearchResult> answer = context.search(username, searchFilter, searchCtls);
return (answer.next());
}
public Properties getProperties(String url, String username, String password, boolean promiscuous)
{
Properties properties = new Properties();
properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
properties.setProperty(Context.PROVIDER_URL, url);
properties.setProperty(Context.SECURITY_PRINCIPAL, username);
properties.setProperty(Context.SECURITY_CREDENTIALS, password);
if (promiscuous){
properties.setProperty("java.naming.ldap.factory.socket", PromiscuousSSLSocketFactory.class.getName());
}
return properties;
}
}