Mis usuarios son inetOrgPerson. ¿Cuál sería el atributo para habilitar/deshabilitar usuarios? Estoy usando la biblioteca JNDI y estoy probando este código que es para el directorio activo pero obtengo LDAP: código de error 17 - userAccountControl: tipo de atributo indefinido. Si intento poner atributos.put("userAccountControl","0x0001"); Al crear el usuario, aparece el mismo error.
¿Alguna idea?
public void disableEnableUser(String user) throws Exception {
ModificationItem[] mods = new ModificationItem[1];
//To enable user
//int UF_ACCOUNT_ENABLE = 0x0001;
//mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userAccountControl",Integer.toString(UF_ACCOUNT_ENABLE)));
// To disable user
int UF_ACCOUNT_DISABLE = 0x0002;
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userAccountControl",Integer.toString(UF_ACCOUNT_DISABLE)));
connection.modifyAttributes("path to user", mods);
}
Respuesta1
userAccountControl
es un atributo AD, por lo que en openldap no lo encontrará (eldefinición de inerOrgPersonno tiene userAccountControl
). Si desea bloquear a sus usuarios, debe hacerlo de otra manera.
Una posibilidad es utilizar la superposición de Política de contraseñas (ppolicy). La política define un pwdAccountLockedTime
atributo que, si se establece en "00000101000000Z", indica un bloqueo administrativo. Para que esto funcione, debe incluir ppolicy en su árbol LDAP, lo que básicamente significa un archivo ldapadd
con el ppolicy.ldif
archivo.
Otra posibilidad es cambiar la contraseña del usuario por algo que indique bloqueo. Por ejemplo, cambiando el {SSHA}
prefijo de la contraseña a {SSHA}!
, podrás indicar fácilmente si el usuario está bloqueado. Como beneficio adicional, no necesita superposiciones adicionales y también evita que el usuario inicie sesión.