c# - 在 LDAP 搜索中转义值
问题描述
我有以下代码,可让我按其搜索组SamAaccountName
:
public static DirectoryEntry GetGroup(string groupSamName)
{
string sFilter = "(&(objectClass=group)" +
"(objectCategory=Group)" +
"(SAMAccountName=" + groupSamName + "))";
// find group
SearchResult srGroup = SearchOne(sFilter, null);
if (srGroup == null)
{
throw new Exception("AD Group '" + groupSamName + "' not found.");
}
DirectoryEntry deGroup = srGroup.GetDirectoryEntry();
return deGroup;
}
private static SearchResult SearchOne(string sFilter, string[] propertiesToLoad)
{
DirectoryEntry deDomain = GetADDomain();
// create directory searcher
DirectorySearcher dsSearch = new DirectorySearcher(deDomain);
dsSearch.CacheResults = false;
dsSearch.Filter = sFilter;
if (propertiesToLoad != null && propertiesToLoad.Length > 0)
{
dsSearch.PropertiesToLoad.AddRange(propertiesToLoad);
}
SearchResult sr = dsSearch.FindOne();
return sr;
}
如果我想按SamAccountName
of进行搜索__Test (Test Group) - Restricted
,它实际上可以工作,而我原本预计括号会破坏搜索语法。
什么我需要逃避,什么我不需要逃避?
解决方案
它之所以有效,是因为您有左括号和右括号,并且它可以确定整个事物是条件的一部分。但是,如果你只有一个左括号或右括号,像这样:
(&(objectClass=group)(objectCategory=group)(sAMAccountName=__Test (Test Group - Restricted))
它会破裂。
为避免这种情况,您可以在所有情况下转义括号。这篇文章,在“特殊字符”标题下,描述了应该转义哪些字符以及如何转义。在您的情况下,您将替换(
为\28
和:)
\29
(&(objectClass=group)(objectCategory=group)(sAMAccountName=__Test \28Test Group\29 - Restricted))
推荐阅读
- sql - SQL-员工休假日期跟踪
- python - Python - NameError:名称“引擎”未定义/未找到驱动程序
- reactjs - 无法从孩子执行第二个 setState
- c# - 在这种情况下,如何将数据从视图中的 HTML 表发送到 POST 方法?
- c# - Html.GetEnumSelectList 和预选值(编辑页面)
- go - 如何增加光线投射渲染距离?
- java - 如何在 Spring Batch 中强制停止工作?
- php - 如何在 XCRUD 中将接收数据的时区更改为 AET?
- javascript - 如何在包含必须使用双引号的 JSON 字符串的数据设置值周围添加单引号?
- html - 当它所在的元素在悬停时设置为较低的值时,如何使工具提示的不透明度为 1