Запрос LDAP для OU с * в заголовке. Как? - PullRequest
2 голосов
/ 15 апреля 2010

У меня возникли сложности с * персонажем в моем подразделении, когда я выполняю поиск. Группа подразделений называется Офисы по всему миру .

У меня есть циклический запрос, который возвращает всех пользователей, которые входят в данную группу. Поэтому я набираю имя группы, и это возвращает меня к группе. Затем я перебираю group.members.

Этими членами будут либо пользователь, либо другая группа. Так что, если это не пользователь, я бы снова просмотрел, чтобы проверить, является ли это группа. Члены группы всегда являются DistinguishedName, и это все, что мне нужно искать.

У меня есть текущий пользователь с DistinguishedName как CN = Smith \, John a., OU = Портативный компьютер, OU = Пользователи, OU = Лондонский округ Колумбия, OU = Великобритания, OU = Офисы по всему миру , DC = Наш домен, DC = ЛОКАЛЬНЫЙ.

Я делаю DirectorySearcher, и мой фильтр

Searcher.Filter = "(&(&(objectClass=user)(!(objectClass=computers)))(distinguishedName=CN=Smith\, John a.,OU=Laptop,OU=Users,OU=London DC,OU=UK,OU=*Worldwide Offices*,DC=OurDomain,DC=LOCAL))

Как вы видите, я думаю, что тот факт, что у нашего OU есть * в заголовке, является причиной, по которой он не находит пользователя. Кажется, работает любая другая OU, в которой нет *. Вот почему я считаю, что * это проблема.

Кто-нибудь знает, как обойти эту проблему, кроме переименования OU?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2010

Подстановочный знак работает только в том случае, если тип атрибута имеет строковый тип. (строка октета, строка юникода). если вы используете * против атрибута, такого как GivenName, displayName, то подстановочные знаки будут соблюдены. Но различающееся имя имеет тип «Отличительное имя», поэтому совпадение подстроки не будет включено сервером.

если вы используете * для объектной категории, имени, отличительного имени ... вы можете видеть, что подстановочный знак не работает.

Ваша логика должна быть изменена.

2 голосов
/ 15 апреля 2010
Searcher.Filter = "(&(&(objectClass=user)(!(objectClass=computers)))(distinguishedName=CN=Smith\, John a.,OU=Laptop,OU=Users,OU=London DC,OU=UK,OU=\2aWorldwide Offices\2a,DC=OurDomain,DC=LOCAL))

A * необходимо экранировать с \2a - см. MSDN "Синтаксис поискового фильтра" :

Если какой-либо из следующих специальных символы должны появляться в поиске фильтровать как литералы, они должны быть заменен перечисленным побегом последовательность.

* => \2a
( => \28
) => \29
\ => \5c
NUL => \00
/ => \2f

Простое экранирование с помощью \ также должно работать:

Searcher.Filter = "(&(&(objectClass=user)(!(objectClass=computers)))(distinguishedName=CN=Smith\, John a.,OU=Laptop,OU=Users,OU=London DC,OU=UK,OU=\*Worldwide Offices\*,DC=OurDomain,DC=LOCAL))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...