У меня есть стороннее веб-приложение, которое выполняет запрос LDAP, чтобы определить, существует ли адрес электронной почты пользователя в AD. Запрос выглядит следующим образом:
(&(objectClass=user)(proxyAddresses=SMTP:foouser@example.co.uk))
Значение атрибута proxyAddresses
в AD выглядит следующим образом:
X500:/o=foo/ou=foo Group (ABC123)/cn=Foo3/cn=foouser (blah)123; SIP:foouser@example.co.uk; smtp:foouser@sub1.example.co.uk; smtp:foouser@sub2.example.co.uk; SMTP:foouser@example.co.uk
Веб-приложение возвращает пустые результаты. Я вижу аналогичный результат, когда проверяю с помощью AD Explorer. Кроме того, когда я смотрю на необработанный вывод в AD Explorer, он помещает все значение атрибута в одну строку вместо того, чтобы отображать каждую запись SMTP и X500 в отдельной строке.
Все это заставляет меня думать, что значение может быть неправильно разграничено.
Когда я сравнивал атрибут с другой средой, в другой среде не было пробелов между значениями.
Например ... моя:
X500:/o=foo/ou=foo Group (ABC123)/cn=Foo3/cn=foouser (blah)123; SIP:foouser@example.co.uk; smtp:foouser@sub1.example.co.uk; smtp:foouser@sub2.example.co.uk; SMTP:foouser@example.co.uk
Другая среда:
X500:/o=foo/ou=foo Group (ABC123)/cn=Foo3/cn=foouser (blah)123;SIP:foouser@example.co.uk;smtp:foouser@sub1.example.co.uk;smtp:foouser@sub2.example.co.uk;SMTP:foouser@example.co.uk
Итак, мой вопрос:
Допускаются ли точки с запятой С пробелами в качестве разделителя для значения атрибута Active Directory DirectoryString?
С точки зрения запроса, разделитель на самом деле является всего лишь косметической опцией для представления данных. Различные инструменты будут отображать несколько значений разными способами. Убедитесь, что вы используете одну и ту же версию одного и того же инструмента в обоих окружениях.
Вкладка атрибутов
в DSA.MSC
использует полудвоеточия с пробелами, но откройте этот атрибут для редактирования с помощью DSA, и вы получите список с каждым атрибутом в новой строке. Некоторые другие методы можно запросить и отобразить: CSVDE
сгенерирует файл, использующий полустолбцы. Get-Aduser
будет использовать ", " в общем запросе, но затем использовать новые строки при расширении атрибута.
csvde -r "(samaccountname=roadRunner)" -f this.csv -l proxyaddresses
get-aduser -ldapfilter "(samaccountname=roadRunner)" -prop proxyaddresses
(get-aduser -ldapfilter "(samaccountname=roadRunner)" -prop proxyaddresses).proxyaddresses
Найден ли пользователь при выполнении того же самого запроса? get-aduser -ldapfilter "(&(objectClass=user)(proxyAddresses=SMTP:foouser@example.co.uk))"
Я думаю, что не существует такой вещи, как разделитель или разделитель для многозначных атрибутов.
Если вы импортируете или экспортируете данные с использованием файлов ldif, формат выглядит следующим образом:
dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example
description: This is the first description value
description: This is the second description value
И если я запрашиваю моя учетная запись с использованием стандартного инструмента dsquery. Я также получаю этот формат
dsquery * "cn=my user name,ou=whatever,dc=sub,dc=domain,dc=tld" -scope base -attr * | findstr /i
proxyAddresses: smtp:aaa@bbb.cd
proxyAddresses: SMTP: AAA@bbbb.cccc
...
Использование ldapsearch с хоста Linux дает мне тот же формат ldif. Поэтому я предполагаю, что приложение неправильно анализирует результат фильтра, оно должно перебирать возвращенный список значений. Если это не так, то мне кажется, что в их коде есть ошибка.
Согласно msdn атрибут Proxy-Addresses не является однозначным, а его синтаксис - string unicode . Кроме того, в msdn есть небольшая запись о различиях между однозначными и многозначными атрибутами msdn , но в ней ничего не говорится о разделителях или форматах (только записи не могут быть пустыми).