2017-01-27 4 views
0

Ich habe Probleme, die richtige Methode zum Verschieben einer Person in Active Directory zwischen Organisationseinheiten mit Spring LDAP zu finden.Spring LDAP-Fehler beim Ändern des definierten Namens

Ich benutze Spring LDAP 2.0.4.RELEASE. Ich habe vier verschiedene Möglichkeiten ausprobiert, um das distinguishedName auf dem Personenobjekt zu setzen, das ich zu verschieben versuche, und ich bekomme einen LDAP-Fehler in jeder Hinsicht.

1) Einstellen distinguishedName als String, einschließlich der dc Teil.

final Name currentDn = LdapNameBuilder.newInstance("CN=Some Person,OU=Old,OU=Domain Users").build(); 
final String newDn = "CN=Some Person,OU=New,OU=Domain Users,dc=my,dc=domain"; 

final Attribute attributeChange = new BasicAttribute("distinguishedName", newDn); 
final ModificationItem modificationItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attributeChange); 
ldapTemplate.modifyAttributes(currentDn, new ModificationItem[]{modificationItem}); 

Das gibt mir die folgende Fehlermeldung:

javax.naming.directory.InvalidAttributeValueException: [LDAP: error code 19 - 000020B1: AtrErr: DSID-030F052C, #1: 0: 000020B1: DSID-030F052C, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 31 (distinguishedName) ]; remaining name 'CN=Some Person,OU=Old,OU=Domain Users'

2) Einstellung distinguishedName als String, ohne der dc Teil.

final Name currentDn = LdapNameBuilder.newInstance("CN=Some Person,OU=Old,OU=Domain Users").build(); 
//the line below is the only line changed from (1) 
final String newDn = "CN=Some Person,OU=New,OU=Domain Users"; 

final Attribute attributeChange = new BasicAttribute("distinguishedName", newDn); 
final ModificationItem modificationItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attributeChange); 
ldapTemplate.modifyAttributes(currentDn, new ModificationItem[]{modificationItem}); 

Das gibt mir einen anderen Fehler:

org.springframework.ldap.UncategorizedLdapException: Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException: [LDAP: error code 80 - 00002089: UpdErr: DSID-031B0D38, problem 5012 (DIR_ERROR), data 5 ]; remaining name 'CN=Some Person,OU=Old,OU=Domain Users'

3) Einstellung distinguishedName als LdapName, einschließlich der dc Teil.

final Name currentDn = LdapNameBuilder.newInstance("CN=Some Person,OU=Old,OU=Domain Users").build(); 
final Name newDn = LdapNameBuilder.newInstance("CN=Some Person,OU=New,OU=Domain Users,dc=my,dc=domain").build(); 

final Attribute attributeChange = new BasicAttribute("distinguishedName", newDn); 
final ModificationItem modificationItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attributeChange); 
ldapTemplate.modifyAttributes(currentDn, new ModificationItem[]{modificationItem}); 

Dies gibt mir den gleichen Fehler wie (1).

4) Einstellen distinguishedName als LdapName, ohne die dc Teil.

final Name currentDn = LdapNameBuilder.newInstance("CN=Some Person,OU=Old,OU=Domain Users").build(); 
final Name newDn = LdapNameBuilder.newInstance("CN=Some Person,OU=New,OU=Domain Users").build(); 

final Attribute attributeChange = new BasicAttribute("distinguishedName", newDn); 
final ModificationItem modificationItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attributeChange); 
ldapTemplate.modifyAttributes(currentDn, new ModificationItem[]{modificationItem}); 

Dies gibt mir den gleichen Fehler wie (1).

Was fehlt mir? Ist das nicht die richtige Methode, um die distinguishedName für ein Active Directory-Personenobjekt mit Spring LDAP zu ändern? Die Fehlermeldungen sind überhaupt nicht sehr hilfreich.

Antwort

0

Anscheinend können Sie das distinguishedName Attribut nicht mit einer Änderungsoperation ändern. Die richtige Methode mit Spring LDAP ist die Verwendung der LdapTemplate.rename-Methode. Sie können die Objekte oldDn und newDn als String Objekte oder Name Objekte übergeben.

final Name oldDn = LdapNameBuilder.newInstance("CN=Some Person,OU=Old,OU=Domain Users").build(); 
final Name newDn = LdapNameBuilder.newInstance("CN=Some Person,OU=New,OU=Domain Users").build(); 

ldapTemplate.rename(oldDn, newDn); 
+0

Dies liegt daran, DN ist kein Attribut. Die zugehörige LDAP-Operation/Anfrage ist MODRDN und kein einfaches MODIFY –

Verwandte Themen