Modificacion de Password con LDAP

kenn
15 de Octubre del 2008

Hola a tod@s

Estoy realizando la autenticacion de un sitio web por medio del active directory de la empresa, el cual esta montado sobre windows server 2003. Estoy utilizando la libreria openldap(JLDAP) para acceder al active directory, actualmente mi componente logra la autenticacion al active directory y calcula el tiempo de expiracion del password de un usuario, sin embargo, debo permitir qe el usuario modifiqe su contraseña cuando esta por expirar o ha expirado, lo cual desafortunadamente no he logrado.

Estoy utilizando el codigo que viene en los programas ejemplo incluidos en la misma libreria (novell-jldap-devel-2008[1].03.01-1netware_windows.zip), pero no me ha funcionado, basicamente es el siguiente:

LDAPModification[] modifications=new LDAPModification[2];

System.out.println("OldPswd: "+oldPwd);
LDAPAttribute deletePassword = new LDAPAttribute("userPassword",oldPwd);
modifications[0]=new LDAPModification( LDAPModification.DELETE, deletePassword);

System.out.println("NewPswd: "+newPwd);
LDAPAttribute addPassword = new LDAPAttribute( "userPassword",newPwd);
modifications[1]=new LDAPModification( LDAPModification.ADD, addPassword);

try
{
System.out.println("Modifying password for user: "+user);
conn.modify(user,modifications);
System.out.println("Password modified successfully");
}
catch(LDAPException lexc)
{
log.error("Error al modificar el password del usuario",lexc);
System.out.println("Error al modificar el password del usuario: "+lexc);
res=-8;
}

el valor de user es: cn=ADMINISTRATOR,cn=users,dc=sfaweb,dc=com

En este momento ya no recuerdo ni que error me mandaba con estas instrucciones, puesto qe tambien probe modificar algun otro atributo como la descripcion del usuario y tampoco funciono. Modifique el codigo para utilizar una operacion REPLACE en vez de las operaciones DELETE y ADD, y de esta forma logre modificar el valor del campo description, pero cuando intente modificar el campo userPassword, el sistema no arrojo ningun error, sin embargo un nuevo atributo userPassword se agrego al registro de mi usuario, pero el password para autenticarse sigue siendo el mismo.

Debido a esto se me ocurrio que ese campo no fuera el que se utiliza para autenticarse en el active directory, investigando en internet me encontre con otro campo (unicodePwd), al hacer pruebas para modificar este atributo me encontre con la siguiente excepcion:

LDAPException: Poco Dispuesto Realizarse (53) Poco Dispuesto Realizarse
LDAPException: Server Message: 0000001F: SvcErr: DSID-031A0FC0, problem 5003 (WILL_NOT_PERFORM), data 0

He regresado el codigo para utilizar las operaciones DELETE y ADD y obtengo el mismo error.

No se que es lo que me este faltando, o exactamente cual sea el atributo qe deba modificar, o las politicas de modificacion del mismo, por lo que agradecere inmensamente si alguien puede apoyarme con esto

Gracias
Ciao

Alyer
15 de Octubre del 2008
Hola kenn, necesito tu ayuda me han dejado lo mismo que tu haces con el active directory pero yo no puedo conectarme con el no se si me podrias facilitar tu codigo fuente donde trabajas con el active directory si lo puedes dejar el codigo en el foro. gracias