Pregunta

Estoy tratando de añadir una entrada a un servidor LDAP usando JNDI. Podía leer con éxito las entradas desde el servidor LDAP. Pero cuando intento agregar una nueva entrada que estoy consiguiendo los errores. Revisé varias maneras, pero no pude.

    private String getUserAttribs (String searchAttribValue) throws NamingException{
    SearchControls ctls = new SearchControls();
    ctls.setSearchScope(SearchControls.OBJECT_SCOPE);

    Attributes matchAttrs = new BasicAttributes(true);
    matchAttrs.put(new BasicAttribute("uid", searchAttribValue));
    NamingEnumeration answer = ctx.search("ou=People,ou=ABCLdapRealm,dc=abcdomain",matchAttrs);

    SearchResult item =(SearchResult) answer.next();
    // uid userpassword description objectclass wlsmemberof sn cn
    return item.toString();
}

Esto funcionó correctamente.

Luego me dio un paso hacia adelante y trató de añadir una entrada. El código es como sigue.

    public static void bindEntry(DirContext dirContext)throws Exception{
    Attributes matchAttrs = new BasicAttributes(true);
    // uid userpassword description objectclass wlsmemberof sn cn
    matchAttrs.put(new BasicAttribute("uid", "defaultuser"));
    matchAttrs.put(new BasicAttribute("userpassword", "password"));
    matchAttrs.put(new BasicAttribute("description", "defaultuser"));
    matchAttrs.put(new BasicAttribute("cn", "defaultuser"));
    matchAttrs.put(new BasicAttribute("sn", "defaultuser"));

    matchAttrs.put(new BasicAttribute("objectclass", "top"));
    matchAttrs.put(new BasicAttribute("objectclass", "person"));
    matchAttrs.put(new BasicAttribute("objectclass", "organizationalPerson"));
    matchAttrs.put(new BasicAttribute("objectclass","inetorgperson"));
    matchAttrs.put(new BasicAttribute("objectclass", "wlsUser"));
    String name="uid=defaultuser";
    InitialDirContext iniDirContext = (InitialDirContext)dirContext;
    iniDirContext.bind(name,dirContext,matchAttrs);
}

Pero con esto me estoy haciendo una excepción.?

Exception in thread "main" javax.naming.OperationNotSupportedException: [LDAP: error code 53 - Unwilling To Perform]; remaining name 'uid=defaultuser'

Definitivamente estoy violando algo. Cualquier idea sobre esto?

¿Fue útil?

Solución

LDAP 53, desean cumplir, por lo general significa lo que dice. Ha intentado hacer algo 'ilegal' desde la perspectiva de los servidores LDAP.

En primer lugar conjetura, aunque poco probable, que están apuntando a NDS? Si es así, añadiendo sn es importante ya que es obligatorio en el esquema de eDirectory para proporcionar un valor Apellido a crear tiempo. En cuyo caso, es probable que obtener un error ligeramente diferente, más como un error 608 o 611.

En segundo lugar conjetura, que está a punto de Active Directory, en cuyo caso fullName es un atributo obligatorio. Pero en ese caso, también se consigue generalmente un diferente código de resultado slightlty. Debería haber más en el error. (Aunque esto podría ser el regreso de JNDI en comparación con las herramientas que estoy acostumbrado demasiado).

En tercer lugar conjetura, que están apuntando a alguien vigilara servidor LDAP y usted ha perdido un atributo obligatorio en el esquema.

De hecho, tal vez es una cuestión de clase de objeto. WlsUser es una clase auxiliar, o una clase de verdad? Inetorgperson es una clase real (estoy de supresión en el nombre para este tipo de clase, hay aux, estructural, y algo más) en su directorio?

Mi suposición básica es que usted ha omitido un atributo obligatorio y están violando esquema en el directorio de destino, y espero que los posibles ejemplos de falta obligatoria ha mencionado anteriormente es útil.

Otros consejos

Este es el error que se obtiene cuando se trata de establecer la contraseña en Active Directory a través de una conexión no SSL. Probar su código de nuevo sin la línea de contraseña.

Hola utilizando el código de abajo soy capaz de insertar una persona en LDAP del programa jndi

Attributes attributes=new BasicAttributes();
Attribute objectClass=new BasicAttribute("objectClass");
objectClass.add("inetOrgPerson");
attributes.put(objectClass);

Attribute sn=new BasicAttribute("sn");
Attribute cn=new BasicAttribute("cn");

sn.add("sahul");
cn.add("vetcha");

attributes.put(sn);
attributes.put(cn);
attributes.put("title","software engg")
ctx.createSubcontext("uid=sahul,ou=some organization7,o=some company7,ou=system",attributes);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top