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.
Dies liegt daran, DN ist kein Attribut. Die zugehörige LDAP-Operation/Anfrage ist MODRDN und kein einfaches MODIFY –