Ich versuche, OpenLDAP und Active Directory miteinander zu synchronisieren. Dazu verwende ich ein Programm namens LSC-Project, das für diese Art von Aufgaben spezifiziert ist.
Ich habe das Programm so konfiguriert, dass ich es am besten kann, aber ich kann keinen Weg finden, den folgenden Fehler abzuschütteln:
javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-
031001CD,
problem 2001 (NO_OBJECT), data 0, best match of:
'DC=domname,DC=com'
]; remaining name
'uid=user1,ou=Users'
May 09 15:19:25 - ERROR - Error while synchronizing ID uid=user1,ou=Users:
Java.lang.Exception:
Technical problem while applying modifications to directory
dn: uid=user1,ou=Users,dc=domname,dc=com
changetype: add
userPassword: 3+kU2th/WMo/v553A24a3SBw2kU=
objectClass: uid
Dies ist die Konfigurationsdatei, unter der das Programm ausgeführt wird:
###############################
Destination LDAP directory #
##############################
dst.Java.naming.provider.url = ldap://192.168.1.3:389/dc=Windows,dc=com
dst.Java.naming.security.authentication = simple
dst.Java.naming.security.principal = cn=Administrator,cn=Users,dc=Windows,dc=com
dst.Java.naming.security.credentials = 11111
dst.Java.naming.referral = ignore
dst.Java.naming.ldap.derefAliases = never
dst.Java.naming.factory.initial = com.Sun.jndi.ldap.LdapCtxFactory
dst.Java.naming.ldap.version = 3
dst.Java.naming.ldap.pageSize = 1000
#########################
Source LDAP directory
#########################
src.Java.naming.provider.url = ldap://192.168.1.2:389/dc=Linux,dc=com
src.Java.naming.security.authentication = simple
src.Java.naming.security.principal = uid=root,ou=users,dc=Linux,dc=com
src.Java.naming.security.credentials = 11111
src.Java.naming.referral = ignore
src.Java.naming.ldap.derefAliases = never
src.Java.naming.factory.initial = com.Sun.jndi.ldap.LdapCtxFactory
src.Java.naming.ldap.version = 3
#######################
Tasks configuration
#######################
lsc.tasks = Administrator
lsc.tasks.Administrator.srcService = org.lsc.jndi.SimpleJndiSrcService
lsc.tasks.Administrator.srcService.baseDn = ou=users
lsc.tasks.Administrator.srcService.filterAll = (&(objectClass=person))
lsc.tasks.Administrator.srcService.pivotAttrs = uid
lsc.tasks.Administrator.srcService.filterId = (&(objectClass=person)(uid={uid}))
lsc.tasks.Administrator.srcService.attrs = description uid userPassword
lsc.tasks.Administrator.dstService = org.lsc.jndi.SimpleJndiDstService
lsc.tasks.Administrator.dstService.baseDn = cn=Users
lsc.tasks.Administrator.dstService.filterAll = (&(cn=*)(objectClass=organizationalPerson))
lsc.tasks.Administrator.dstService.pivotAttrs = cn, top, person, user, organizationalPerson
lsc.tasks.Administrator.dstService.filterId = (&(objectClass=user) (sAMAccountName={cn}))
lsc.tasks.Administrator.dstService.attrs = description cn userPassword objectClass
lsc.tasks.Administrator.bean = org.lsc.beans.SimpleBean
lsc.tasks.Administrator.dn = "uid=" + srcBean.getAttributeValueById("uid") + ",ou=Users"
dn.real_root = dc=Domname,dc=com
#############################
Syncoptions configuration
#############################
lsc.syncoptions.Administrator = org.lsc.beans.syncoptions.PropertiesBasedSyncOptions
lsc.syncoptions.Administrator.default.action = M
lsc.syncoptions.Administrator.objectClass.action = M
lsc.syncoptions.Administrator.objectClass.force_value = srcBean.getAttributeValueById("cn").toUpperCase()
lsc.syncoptions.Administrator.userPassword.default_value = SecurityUtils.hash(SecurityUtils.HASH_SHA1, "defaultPassword")
lsc.syncoptions.Administrator.default.delimiter=;
lsc.syncoptions.Administrator.objectClass.force_value = "top";"user";"person";"organizationalPerson"
lsc.syncoptions.Administrator.userPrincipalName.force_value = srcBean.getAttributeValueById("uid") + "@Domname.com"
lsc.syncoptions.Administrator.userAccountControl.create_value = AD.userAccountControlSet ( "0", [AD.UAC_SET_NORMAL_ACCOUNT])
Ich vermute, dass dies etwas mit der baseDn der Task-Konfiguration im Teil der Quellkonfiguration zu tun hat.
Die Betriebssysteme sind Ubuntu 10.04 und Windows2K3
Jemand schlug mir vor, eine manuelle Synchronisierung zwischen ihnen durchzuführen, aber ich habe keine Anleitungen dazu gefunden. Und dieses Programm ist so ziemlich das einzige, was besagt, dass diese Art von Arbeit ohne Kosten ausgeführt wird.
Der Hauptgrund für NameNotFoundException
ist, dass das gesuchte Objekt nicht existiert oder der Container , in dem Sie suchen, nicht richtig ist.
Die Variable baseDn
sollte der definierte Name des Basisobjekts der Suche sein, z. B. ou=users,dc=domname,dc=com
.
Im Fall von Spring-ldap haben wir diesen Fehler erhalten, wenn wir den baseDn in der Kontextdatei (LdapContextSource Bean) und auch im createUser-Code zum Erstellen von userDn angegeben haben. Wir müssen den dc im buildUserDn()
nicht erneut angeben.
protected Name buildUserDn(String userName) {
DistinguishedName dn = new DistinguishedName();
//only cn is required as the base dn is already specified in context file
dn.add("cn", userName);
return dn;
}
In Active Directory: Users
catalog ist container
-Klasse, nicht OrganizationalUnit, daher sollten Sie Folgendes verwenden: cn=users,dc=domname,dc=com