2017-01-27 5 views
0

Active Directory内の人をSpring LDAPを使用する組織単位間で移動する適切な方法を見つけるのに問題があります。Spring LDAPエラー識別名を変更する

私はSpring LDAP 2.0.4.RELEASEを使用しています。私は移動しようとしている人物オブジェクトにdistinguishedNameを設定する4つの異なる方法を試しましたが、それぞれの方法でLDAPエラーが発生します。

1)dc部分を含む、StringとしてdistinguishedNameを設定します。なしStringdc一部としてdistinguishedNameを設定

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)

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}); 

これは私に、次のエラーが発生します。

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)dc部分を含め、LdapNameとしてdistinguishedNameの設定:

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}); 

これは私に別のエラーが発生します。

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}); 

これは(1)と同じエラーです。

4)dc部分なしLdapNameとしてdistinguishedNameを設定します。

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}); 

これにより、(1)と同じエラーが表示されます。

私には何が欠けていますか?これは、Spring LDAPを使用してActive Directoryのpersonオブジェクト上のdistinguishedNameを変更する適切な方法ではありませんか?エラーメッセージはそれほど役に立ちません。

答えて

0

明らかに、変更操作でdistinguishedName属性を変更することはできません。 Spring LDAPでこれを行う適切な方法は、LdapTemplate.renameメソッドを使用することです。 oldDnnewDnStringオブジェクトまたはNameオブジェクトとして渡すことができます。

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

これは、DNが属性ではないためです。関連するLDAP操作/要求はMODRDNであり、単純なMODIFYではありません –

関連する問題