2010-12-09 20 views
6

Estoy tratando de cambiar la contraseña del usuario a través de JNDI pero me aparece el siguiente error.Cómo cambiar la contraseña LDAP a través de JNDI

javax.naming.directory.SchemaViolationException: [LDAP: código de error 65 - Uid de entrada = yiwei, ou = Administrador, o = SID, dc = QuizPortal no se puede modificar porque la entrada resultante habría violado el esquema del servidor: Entry uid = yiwei, ou = Administrator, o = SID, dc = QuizPortal infringe la configuración del esquema de Directory Server porque incluye una contraseña de usuario de atributo que no está permitida por ninguna de las clases de objetos definidas en esa entrada];

A continuación, mi código.

public class ModifyAtt 
{ 

    public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory"; 
    public static String MY_HOST = "ldap://KhooGP-Comp1:1389/dc=QuizPortal"; 
    public static String MGR_DN = "cn=Directory Manager"; 
    public static String MGR_PW = "password"; 

    public static void main(String[] args) 
    { 

     //Identify service provider to use 
     Hashtable env = new Hashtable(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX); 
     env.put(Context.PROVIDER_URL, MY_HOST); 
     env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
     env.put(Context.SECURITY_PRINCIPAL, MGR_DN); 
     env.put(Context.SECURITY_CREDENTIALS, MGR_PW); 

     try 
     { 
      // Create the initial directory context 
      InitialDirContext initialContext = new InitialDirContext(env); 
      DirContext ctx = (DirContext)initialContext; 

      System.out.println("Context Sucessfully Initialized"); 

      ModificationItem[] mods = new ModificationItem[1]; 

      Attribute mod0 = new BasicAttribute("user password", "a"); 

      mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, mod0); 

      ctx.modifyAttributes("uid=yiwei,ou=Administrator,o=SID", mods); 

     } 
     catch(Exception e) 
     { 
      System.err.println(e); 
     } 
    } 
} 

¿Alguna idea de por qué ?? Muchas gracias de antemano ..

Kevin

Respuesta

11

Ah .. no no debería ser ningún espacio para la contraseña de usuario.

necesitan cambiar

Attribute mod0 = new BasicAttribute("user password", "a"); 

a

Attribute mod0 = new BasicAttribute("userpassword", "a"); 
1

atributo debe ser una sola palabra sin ningún espacio.

+0

¿Puedes publicar un código de ejemplo adjunto a la respuesta? – Sachith

Cuestiones relacionadas