import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.NoSuchAttributeException;
import javax.naming.directory.SearchControls;
public class VerifyPassword
{
public static void main( String[] args )
{
if (args.length != 5) {
usage();
}
String hostURL = args[0];
String loginDN = args[1];
String password = args[2];
String userDN = args[3];
String userPWD = args[4];
try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, hostURL);
env.put( Context.SECURITY_PRINCIPAL, loginDN );
env.put( Context.SECURITY_CREDENTIALS, password );
DirContext ctx = new InitialDirContext(env);
System.out.println();
System.out.println(" User DN: " + userDN );
System.out.println(" Verifying " + userDN + "'s passwod...");
SearchControls ctls = new SearchControls();
ctls.setSearchScope( SearchControls.OBJECT_SCOPE );
ctls.setReturningAttributes( new String[0] );
NamingEnumeration sre = ctx.search( userDN, "userPassword="
+ userPWD, ctls );
if ( sre != null && sre.hasMoreElements())
System.out.println(" password is correct");
else
System.out.println(" password is incorrect");
ctx.close();
}
catch( NoSuchAttributeException nae ) {
System.err.println("VerifyPassword example failed.");
nae.printStackTrace();
}
catch (NamingException e) {
System.err.println("VerifyPassword example failed.");
e.printStackTrace();
}
finally {
System.exit(0);
}
}
public static void usage() {
System.err.println("\n Usage: java VerifyPassword <host URL> "
+ "<login dn> <password> <user dn>\n <user password>\n");
System.err.println(" Example: java VerifyPassword ldap://Acme.com:389"
+ " \"cn=Admin,o=Acme\" secret"
+ "\n \"cn=JSmith,ou=sales,o=Acme\" userPWD");
System.exit(1);
}
}