import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.NoSuchAttributeException;
public class ModifyPassword
{
public static void main( String[] args )
{
if (args.length != 4) {
usage();
}
String hostURL = args[0];
String loginDN = args[1];
String password = args[2];
String newPassword = args[3];
try {
Hashtable env = new Hashtable(5, 0.75f);
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);
ModificationItem[] mods = new ModificationItem[2];
mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE,
new BasicAttribute("userPassword", password));
mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE,
new BasicAttribute("userPassword", newPassword));
ctx.modifyAttributes(loginDN, mods);
System.out.println("\n\tModifyPassword example succeeded.\n");
}
catch( NoSuchAttributeException nae ) {
System.err.println("\n\tModifyPassword example failed.\n");
nae.printStackTrace();
}
catch (NamingException e) {
System.err.println("\n\tModifyPassword example failed.\n");
e.printStackTrace();
}
finally {
System.exit(0);
}
}
public static void usage() {
System.out.println("\n Usage: java ModifyPassword <host URL>"
+ " <login dn> <password>\n newPassword\n");
System.out.println(" Example: java ModifyPassword ldap://Acme.com:389"
+ " \"cn=James,o=Acme\" secret\n newPassword\n");
System.exit(1);
}
}