Reputation: 131
I have successfully authenticated one user.Now i want to change password for other user.My first user is just like Admin,so other users password should be changed or reset.
I am using following code:
LdapContext ctx = null;
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "username");
env.put(Context.SECURITY_CREDENTIALS, "password");
env.put(Context.PROVIDER_URL, "ldap://xx.xxx.xx.xxx:389");
ctx = new InitialLdapContext(env, null);
final DistinguishedName dn = usernameMapper.buildDn(username);
final ModificationItem[] passwordChange = new ModificationItem[]
{
new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
new BasicAttribute(passwordAttributeName, newPassword))
};
ctx.modifyAttributes(dn, passwordChange);
System.out.println("Password changed successfully");
ctx.close();
fields attributes values is here :
String passwordAttributeName = "userPassword";
static LdapUsernameToDnMapper usernameMapper
= new DefaultLdapUsernameToDnMapper("OU=DROID-TEST,DC=example,DC=com",
"cn");
private String username = "test01";
private String password = "test01";
private String newPassword = "123";
I am geting following exception :
javax.naming.NoPermissionException: [LDAP: error code 50 - 00002098: SecErr: DSID-03150A48, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0
Upvotes: 0
Views: 3883
Reputation: 53526
NoPermissionException means that the user you are connecting to LDAP with doesn't have access to replace that attribute. You need to give the user that you bind with higher level access.
Also, depending on the LDAP provider, you may need to be connecting over a secure ldaps connection rather than a basic ldap connection.
Upvotes: 2