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 SetPassword
{
public static void main( String[] args )
{
if (args.length != 5) {
usage();
}
String hostURL = args[0];
String loginDN = args[1];
String password = args[2];
String modifyDN = args[3];
String newPassword = 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);
ModificationItem[] mod = new ModificationItem[1];
mod[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
new BasicAttribute("userPassword", newPassword));
ctx.modifyAttributes(modifyDN, mod);
System.out.println("\n\tSetPassword example succeeded.");
}
catch( NoSuchAttributeException na ) {
System.err.println( "\n Entry: " + modifyDN + " has no password");
System.err.println( " Error: " + na.toString() );
System.exit(1);
}
catch (NamingException e) {
System.err.println("\n\tSetPassword example failed.");
e.printStackTrace();
}
finally {
System.exit(0);
}
}
public static void usage() {
System.err.println("\n Usage: java SetPassword <host URL> <login dn>"
+ " <password> <modify obj dn>\n <new password>");
System.out.println("\n Example: java SetPassword ldap://Acme.com:389 "
+ "cn=admin,o=acme secret\n cn=james,o=acme newSecret");
System.exit(1);
}
}