【问题标题】:How to get only the most specific objectClass from AD server using openLdap?如何使用 openLdap 从 AD 服务器获取最具体的 objectClass?
【发布时间】:2011-12-04 15:43:10
【问题描述】:

当使用ldap_search 从广告服务器获取用户时,我会为每个条目获取多个objectClasses。

我只对类层次结构中最具体的objectClass 感兴趣。 如何获得?

例如:对于条目

name: user1
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user

我只想获取“用户”objectClass

我注意到在程序化的ldap_search 中,最具体的类在值数组的最后一个单元格中返回,它是从ldap_get_values(ld, entry, "objectClass") 函数调用返回的。这是偶然的,还是一种既定的行为? (换句话说,我可以依靠它永远是真的吗?)

感谢您的帮助!

【问题讨论】:

    标签: active-directory openldap


    【解决方案1】:

    当然,您不能指望继承顺序。您的解决方案是在您的 ldap 搜索过滤器中指定 objectClass 属性,并与 objectCategory 交叉以消除例如计算机。

    (&(objectClass=user)(objectCategory=person))
    

    您将在此处收到 userinetOrgPerson 类的所有对象(它们也是 user)。

    (&(objectClass=inetOrgPerson)(objectCategory=person))
    

    您将在此处收到所有 inetOrgPerson 类的对象(但不是那些唯一的 user)。

    【讨论】:

    • 如果我只需要分隔用户、计算机和组,objectCategory 是否足够?
    • 是的,这个属性是一种横向属性。对于用户和 inetOrgPerson objectCategory 是人,对于计算机是计算机,对于组是组。
    【解决方案2】:

    我不知道您可以指望从目录返回的任何继承顺序。据我所知,目录结果永远不能保证按特定顺序排列。很可能按照添加期间指定的顺序返回值。 Objectclass 可能是一种特殊情况,它会在 RFC 中指定。您必须注意的另一件事是,当一个对象有一个与之混合的辅助类时。另外,辅助类可以引入其他一些父类。您可以查询目录的架构并从中计算出继承结构并将其存储起来,如果您是在自己的程序中完成这一切。

    【讨论】:

      【解决方案3】:

      对于通用方法,您不能依赖 objectClass 值的顺序,因为标准不能保证它,并且因为 objectclass 可能派生自两个或多个直接超类(多重继承)。

      要获得实例化的 objetcclass,通常需要架构信息和一些额外的代码来分析对象类链。

      话虽如此,我还应该说我已经看到了在 Active Directory 的情况下仅依赖于 objectClass 值顺序的代码。 Active Directory 不支持多重继承,并且似乎总是按顺序或继承返回 objectClass。这种方法更容易实施,但并非 100% 可靠。

      【讨论】:

        猜你喜欢
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        • 2020-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多