【发布时间】:2020-12-08 21:34:18
【问题描述】:
我遇到了一些问题,似乎应该有更好的解决方案来解决我的问题?
在围棋中:
我成功从组中检索 CN(也能够遍历嵌套组) 循环每个用户: 我虽然可以使用 CN 为该用户获取“sAMAccountName”
- 尝试 1:从 l.Search 我得到下面的响应“Example1” - 在“,”之前有一个“\” - 使用它会产生异常。
- 尝试 2:删除“\”(示例 2) - 返回 0 个条目
- 尝试 3:删除“,”(在名称中) - 返回 0 个条目
- 尝试 4:修改字符串以在名称周围添加“” - 返回 0 个条目
- 尝试 5:使用 ldap.EscapeFilter() 的类似尝试都失败,但有异常或 0 个回复条目。
(userAccountControl - 删除禁用的用户 - 也没有它测试)
import (
"gopkg.in/ldap.v2"
)
//First search for members in group
sr, err := l.Search(&ldap.SearchRequest{
BaseDN: "dc=ad,dc=some",
Scope: 2, // subtree
Filter: "(&(objectCategory=group)(cn=TheGroup)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))",
Attributes: []string{"member", "cn", "dn"},
})
//Looping through the users from the reply
Example1: user="CN=Some\, Name,OU=ABCD,OU=UsersInternal,OU=Users,OU=DEFG,OU=HIJ,DC=ad,DC=some"
Example2: user="CN=Some, Name,OU=ABCD,OU=UsersInternal,OU=Users,OU=DEFG,OU=HIJ,DC=ad,DC=some"
Example3: user=\"CN="Some, Name\",OU=ABCD,OU=UsersInternal,OU=Users,OU=DEFG,OU=HIJ,DC=ad,DC=some"
Example4: user="CN='Some, Name',OU=ABCD,OU=UsersInternal,OU=Users,OU=DEFG,OU=HIJ,DC=ad,DC=some"
filter:=fmt.Sprintf("(%s)", user)
result, err := l.Search(&ldap.SearchRequest{
BaseDN: "dc=ad,dc=some",
Scope: 2, // subtree
Filter: filter,
Attributes: []string{"sAMAccountName"},
})
解决问题的方法:
user = "Some Name"
filter := fmt.Sprintf("(&(anr=%s)(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))", user)
当前的解决方法是使用 anr - 但后来我无法将搜索与我最初搜索的组结合起来......
【问题讨论】:
标签: go ldap ldap-query