【问题标题】:Ldap error code 32LDAP 错误代码 32
【发布时间】:2012-05-15 19:55:56
【问题描述】:

我正在尝试将 OpenLDAP 和 Active Directory 同步在一起。为此,我使用了一个名为 LSC-Project 的程序,它被指定用于执行此类操作。

我已经尽可能地配置了程序,但是我找不到摆脱以下错误的方法:

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

这是程序运行的配置文件:

############################### 
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])

我怀疑它与源配置部分中的Task配置的baseDn有关。

操作系统是 ubuntu 10.04 和 Windows2K3

有人建议我在它们之间进行手动同步,但我没有找到任何这样做的指南。并且这个程序几乎是唯一可以说可以免费完成此类工作的程序。

【问题讨论】:

    标签: active-directory ldap synchronization openldap


    【解决方案1】:

    baseDn 应该是搜索的基础对象的可分辨名称,例如,ou=users,dc=domname,dc=com

    另见

    【讨论】:

    • 我这样做了,但它给出了一个截然不同的错误:javax.naming.NameNotFoundException: [LDAP: error code 32 - No such Object];剩余名称 'ou=users,dc=domname,dc=com' 为空或不存在源
    • 你解决过这个问题吗?我遇到了同样的问题。请告诉我。谢谢。
    • @Terry Gardner LDAP:搜索最佳实践链接已损坏。请更新。
    • 我已经解决了我的类似问题,方法是让用户进行 cn 查找并将用户分组为 ou 查找。此外,组必须位于与用户不同的容器中。任何其他组合都会导致列出的错误(然而,实际上功能正常,只是在日志中抛出一堆错误)。
    【解决方案2】:

    NameNotFoundException 的主要原因是您正在搜索的对象不存在 或者您正在搜索的容器 不存在正确

    【讨论】:

    • 不知道这个否决票。到目前为止,这是一个正确的答案。
    • 可能是因为它没有提示如何修复它。
    【解决方案3】:

    在 Spring-ldap 的情况下,当我们在上下文文件(LdapContextSource bean)中指定 baseDn 以及在 createUser 代码中构建 userDn 时,我们会收到此错误。我们无需在 buildUserDn() 中再次指定 dc

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

    【讨论】:

      【解决方案4】:

      在 Active Directory 中:Users 目录是 container 类,而不是 OrganizationalUnit,因此您应该使用:cn=users,dc=domname,dc=com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-22
        • 2011-12-31
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        • 2020-07-21
        相关资源
        最近更新 更多