gpt4 book ai didi

.net - 带有排序规则的 LDAP 排序失败

转载 作者:行者123 更新时间:2023-12-04 02:29:06 24 4
gpt4 key购买 nike

我正在尝试对 AD LDS 进行 ldap 查询,以使用户按 cn 属性进行排序。排序规则不应该是默认的英语,而是应该按照瑞典语进行排序。我正在使用 .Net 中的 System.DirectoryServices.Protocols API 执行此操作。

为了重现,我安装了一个监听端口 389 的 AD LDS 实例,并安装了用户对象类。

使用以下代码(base 是从 Performing a Simple Search 复制的)。订购规则取自 here .

public class LdapSorter
{

public void SearchUsersSorted()
{
string hostOrDomainName = "localhost";
string targetOu = "cn=Test";

// create a search filter to find all objects
string ldapSearchFilter = "(objectClass=user)";

// establish a connection to the directory
LdapConnection connection = new LdapConnection(hostOrDomainName);
connection.SessionOptions.ProtocolVersion = 3;

Console.WriteLine("\r\nPerforming a simple search ...");

try
{
SearchRequest searchRequest = new SearchRequest
(targetOu,
ldapSearchFilter,
SearchScope.OneLevel,
null);

searchRequest.Controls.Add(new SortRequestControl("cn", "1.2.840.113556.1.4.1594", false));
//searchRequest.Controls.Add(new SortRequestControl("cn", false));
//searchRequest.Controls.Add(new SortRequestControl("cn", true));

// cast the returned directory response as a SearchResponse object
SearchResponse searchResponse =
(SearchResponse)connection.SendRequest(searchRequest);

Console.WriteLine("\r\nSearch Response Entries:{0}",
searchResponse.Entries.Count);

// enumerate the entries in the search response
foreach (SearchResultEntry entry in searchResponse.Entries)
{
Console.WriteLine("{0}:{1}",
searchResponse.Entries.IndexOf(entry),
entry.DistinguishedName);
}
}
catch (DirectoryOperationException e)
{
Console.WriteLine("\nUnexpected exception occured:\n\t{0}\n{1}",
e, e.Response.ErrorMessage);
var control = e.Response.Controls.First(c => c is SortResponseControl) as SortResponseControl;
if (control != null)
{
Console.WriteLine("\nControl result: " + control.Result);
}
}
}
}

这是输出:
Performing a simple search ...

Unexpected exception occured:
System.DirectoryServices.Protocols.DirectoryOperationException: The server does not support the control. The control is critical.
at System.DirectoryServices.Protocols.LdapConnection.ConstructResponse(Int32 messageId, LdapOperation operation, ResultAll resultType, TimeSpan requestTimeOut, Boolean exceptionOnTimeOut)
at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout)
at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request)
at Sort.LdapSorter.SearchUsersSorted() in C:\Source\slask\DotNetSlask\Sort\LdapSorter.cs:line 41
00000057: LdapErr: DSID-0C090A3D, comment: Error processing control, data 0, v3839

Control result: InappropriateMatching

如果使用被注释掉的两个排序请求控件之一,则它可以工作,但使用英文排序顺序。

最佳答案

所以,我对它可能是什么有两个主要猜测。首先,(看起来你已经有了一些)看看这篇文章。

How to resolve "The server does not support the control. The control is critical." Active Directory error

可能想尝试 auth 部分,看看它是否对你有任何改变。

其次,您用于排序的 OID 用于瑞典语(可能是故意的),但服务器可能无法在没有瑞典语语言包的情况下以瑞典语进行排序(或类似的东西)。您可以尝试“英语(美国)”选项 (1.2.840.113556.1.4.1499),看看是否会给您带来不同的结果。

编辑:没关系,我想我错过了您帖子的最后一句话:) 我假设您正在连接到 Windows Server 以运行这些 LDAP 查询?如果是这样,我的猜测是服务器没有安装瑞典语语言包,但我没有 LDAP 和外语的经验,所以不能保证会修复它。

关于.net - 带有排序规则的 LDAP 排序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com