- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我不久前写了一个 ldap-authentication-class(使用 Active Directory),最近为另一个部门创建了一个新的 Web 应用程序,它使用了这个身份验证类。
基本上用户输入他们的凭据,我的脚本与 AD 绑定(bind)并检查用户是否是某个组的成员。密码验证每次都有效,但只有在用户不在名称中带有 & 符号的 OU 中或以下时,检查组成员资格才有效。
问题似乎是,部门名称包含一个符号,因此组织单位也包含一个符号。尽管我在 AD 中拥有更改名称的权限,但很可能其他应用程序通过名称访问该 OU,因此我无法更改它(我也不知道是否有其他 OU 的名称中带有&符号,其中以后可能会出现同样的问题)。
有趣的是:如果我在 Windows 下使用 ldp.exe,我可以毫无问题地使用完全相同的搜索过滤器,所以我猜这是符号本身正确传输的问题(我的应用程序使用 UTF-8 和从 AD 中提取并打印时,& 符号显示正确,所以我认为这不是编码问题)
我用来创建过滤器的行是:
$filter = "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=".$userdn."))";
这里userdn是从另一个ldap_search来的,这里我成功验证了用户密码。
我真的被迷住了,因为我实际上从事件目录中提取了用于组查询的 DN(而且它似乎已正确转义),但不能在另一个 ldap_search 中使用它。
我已经尝试用一些替代品转义/替换 &-Symbol:
\&
&
%26
还有很多变体,但它们都返回相同的“错误过滤器”错误。
(PHP 版本 5.3.2-1ubuntu4.17)
谁能告诉我我做错了什么?
最佳答案
我终于弄明白了(又过了几个小时)——问题毕竟不是与号,而是一个转义问题——我的用户的 DN 也包含一个逗号,它已经被转义了(所以我没有不要真的去想它)。
实际上我必须将转义符号 () 转换为 chr(0x5c)。这篇文章 (krivokuca.net/2012/08/…) 提供了解决方案。
有趣的是:我已经有了一个转义函数,它可以将“\”转换为“\5c”,但是那个函数对解决这个特殊问题没有帮助。
感谢您为我提供的帮助 :)
关于PHP/LDAP : Bad Search Filter (OU with Ampersand),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31588729/
我想输出测试 OU 中的所有 OU。 my $mesg = $ldap->search( base => "OU=test,OU=company,DC=example,DC=com",
我正在寻找一个 PowerShell 脚本,它可以帮助我: OU 的名称 每个OU 中 AD 用户的数量。 我发现了这个: (Get-ADUser -Filter * -SearchBase “ou=
是否有任何简单的方法可以获取位于给定 OU 下一层的所有 OU 的列表? 即我有一个名为“客户端”的 OU,在这个 OU 下的一个级别有多个 OU,每个客户端一个。即 CAS、ADI、PMA 我想获得
我想使用 C# 将 Active Directory 用户从一个组织单位移动到另一个组织单位。 我已经引用了以下链接 http://forums.asp.net/t/932664.aspx?Movin
我从我们的Exchange服务器获得一个带有标识值的脚本输出: 身份:Domain.com/OU/GivenName姓 如何从值中删除Domain.com/OU/? 正则表达式不是我的优势! :/ 非
我有以下代码: Get-ADUser -SearchBase ‘OU=test,OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM’ -Filter * | F
我有以下代码: Get-ADUser -SearchBase ‘OU=test,OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM’ -Filter * | F
我必须处理的事件目录是这样布置的:域包含许多 OU。这些 OU 之一被命名为“主 OU”。在这个 OU 中,有几个以全局办事处位置命名的 OU(即“芝加哥”“巴黎”)。 任何实际有血有肉的用户帐户都被
刚刚编写了一个脚本来禁用帐户,将其移动到禁用的 OU 并更改用户对象的描述,但我想让它更高效。 我的工作 AD 结构包含根帐户 OU 下的所有用户,以及该帐户 OU 下的 50 个左右的部门 OU。
我正在尝试在用户目录中搜索用户(ou=users,ou=system),但我没有得到结果,请帮助我。以下是我搜索用户目录的代码 public void search(String uid) {
我有一个 Active-Directory 结构,其中用户对象驻留在 OU 中,例如 IT、技术、人力资源、帐户等。我想编写一个 PHP 脚本,使用 AD 对用户进行身份验证,并根据他们的组提供适当的
我必须获取不属于组 OU="Google app User"和 OU=Contacts 的用户的数据,我不知道创建搜索过滤字符串。代码如下--- public SearchResult getUser
使用 PrincipalContext pc = new PrincipalContext(ContextType.Domain, "me.com", "OU=Menetwork OU=Users O
我正在尝试编写一个 PowerShell 脚本,该脚本将查找 AD 中六个月未登录的所有用户,并且不包括 Terminated Users OU 或 Terminated Users\vendors
我需要使用 REGEX 从我的专有名称中提取“OU”部分。 例如: "CN=DAVID Jean Louis (a),OU=Coiffeur,OU=France,DC=Paris,DC=France"
我正在尝试在创建 OU 之前检查它是否存在。我的问题是我有 2 个母 OU“USER BY SITE”和“GROUP BY SITE”,我需要在这 2 个 OU 中拥有完全相同的 OU,1 个用于存储
我正在尝试获取我们整个 OU 受人尊敬的机器上管理员组中所有用户帐户的列表。我找到了一个在单台计算机上显示此内容的脚本,但我想调用计算机名称的 CSV 文件,然后将结果输出到另一个 CSV 文件。这是
function NyChildOU { $overOU = Read-Host "Type in the name of the parrent OU" $oucheck = [adsi]:
这是我的一些示例代码,用于查找 OU 中的所有计算机对象。当我打印出属性字段时,我得到一个 System.__ComObject 用于多个值,例如 lastLogon、lastLogonTimesta
我有一个代码来获取域中的 OU 列表。 现在这只是列出了所有的 OU,并没有给出任何区分 OU 和子 OU 的方法。 DirectoryEntry entry = new DirectoryEntry
我是一名优秀的程序员,十分优秀!