我一直试图查询LDAP目录服务器以检索tnsname条目。我有下面的代码工作,但它闻起来不对。这是因为它是错误的,还是因为查询ldap涉及几个级别的间接。
let identifier = LdapDirectoryIdentifier(server, port)
use connection = new LdapConnection (identifier)
connection.AuthType <- AuthType.Anonymous
let request = System.DirectoryServices.Protocols.SearchRequest(defaultAdminContext, "cn=" + sid, SearchScope.OneLevel, "orclnetdescstring")
let response = connection.SendRequest request :?> SearchResponse
Seq.init response.Entries.Count (fun i -> response.Entries.[i])
|> Seq.collect (fun entry ->
let value = entry.Attributes.["orclnetdescstring"]
Seq.init value.Count (fun i -> value.[i])
|> Seq.map (fun v -> Some (v :?> string))
)我本来希望有一个简单的调用,基本上可以“查询目录并返回结果”,但为了读取真正的值,我似乎需要做很多“事情”。
发布于 2011-06-23 13:17:59
一旦客户端连接到目录服务器,客户机就可以发出请求并读取响应。请求采取LDAP操作的形式,如绑定、搜索、添加、修改、删除等。
当目录服务器接受连接时,该连接(如果您愿意的话)具有匿名标识(RFC4513)。根据目录服务器的配置和请求的类型,客户端可能需要将连接绑定到授权标识--这是通过绑定请求完成的,该请求可以是“简单”类型,也可以是SASL类型。与目录服务器管理员进行对话,以确定客户端是否必须将连接绑定到授权标识--管理员可能不需要身份验证就允许某些请求,尽管这通常是一种不好的做法,也是不寻常的。
搜索数据需要下列参数:
还有其他参数是可选的,例如,大小限制(要返回的条目数量的限制)和时间限制(对搜索时间的限制),是否只返回属性,还是属性和值,以及其他一些参数。一般来说,所有搜索请求都应该提供一个时间限制,以确保搜索将超时--因为目录服务器可能不会配置来自客户端的LDAP请求的时间限制。
目录服务器对搜索请求的响应将始终包含结果代码。如果搜索成功,则此结果代码应为零(0),或者它可能是一段代码,指示可能返回的条目数超过允许返回的条目数(允许返回的条目数以搜索请求中的大小限制或服务器限制为上限),也可能是指示发生错误的结果代码。
假设错误代码为零,然后是一个SearchResultEntries或SearchResultReferences序列,最后是一个SearchResultDone --一个好的SearchResultDone将为客户端管理这个部分,并将返回的条目简单地表示为数组或列表。
最后,你的问题的答案是“是的,还有一些事情要做”才能读到条目。一个好的API将减少“东西”的数量,使之成为一种沉闷的咆哮。
https://stackoverflow.com/questions/5989051
复制相似问题