具有从属引用的 LDAP 分页查询未正确处理
09/14/2020
本文内容
本文提供了一些方法来避免使用从属引用的 LDAP 分页查询未正确处理的问题。
原始产品版本: Windows 8
原始 KB 编号: 2561166
症状
你有一个应用程序,使用 ldap_search_ext 或 ldap_search_ext_s,通过分页搜索来搜索 Active Directory,并且它设置为追踪引荐。 当从域 NC 的根目录搜索时,分页搜索在首页之后提前结束。
在应用程序中,它收到的分页 Cookie 为空,因此应用程序将结束查询。 在网络跟踪中,您可以验证分页查询是否返回非空 Cookie 以及一个或多个引用。 大多数查询在结果集引用时将看不到任何内容,因为通常在域 NC 中搜索的对象不在从属 NC 中,除非它们也是域 NC。
应用程序也可能在首页后收到"操作错误"。
域控制器返回以下命名上下文的从属引用:
搜索林根时:配置 NC (后跟架构 NC 引用)
搜索林根目录时:ForestDnsZones NC
DomainDnsZones NC
所有子域。 并递归所有子域下整个域树。
原因
分页查询期间引用引用时存在多个问题:
当对位于同一台服务器上的命名上下文进行 (请参阅 1.,也可能是 2。 和 3。 上述) ,同一 LDAP 会话上发生查询,擦除在客户端 LDAP 运行时的主查询中返回的分页 Cookie。
当所引用的最后一个引用也超过页面大小时,从上一个 NC 接收到的引荐 Cookie 将用于继续主搜索。 这会导致 LDAP 搜索失败,出现"操作错误",因为 Cookie 不符合服务器有关搜索的索引和索引位置的知识。
当使用不带 SSL 的简单绑定完成主要搜索时,引用的查询将失败并出现"操作错误",因为 LDAP 客户端设计为在引用引用时不发送纯文本凭据。
解决方案
此问题目前尚未解决。
可以在应用程序中使用以下方法避免这些问题:
使用避免服务器返回从属引用的基本 DN,例如,搜索域根对象下的 OU。
搜索全局编录,而不是林根域 NC。 你需要确保所需的所有属性都存在于 GC 中,并且确实希望整个林而不是之前搜索的域树。
如果你不希望自动追踪引荐:由于默认情况下会追踪引荐,请使用带标志ldap_set_option LDAP_OPT_REFERRALS关闭引荐查询。 完成主查询后,始终可以手动追踪引用。
在搜索时LDAP_SERVER_DOMAIN_SCOPE_OID,它将在搜索域根时关闭延续引用。