System.DirectoryServices - как НЕ запрашивать Active Directory о свойствах, в которых установлен конфиденциальный бит - PullRequest
0 голосов
/ 09 августа 2011

Я использую DirectoryServices для запроса DirectoryEntries для человека или группы следующим образом:

var propsToLoad = new string {"sAMAccountName","objectClass", "memberOf", "distinguishedName", "manager","mail","name","objectCategory"};
DirectoryEntry dEntry = new DirectoryEntry("LDAP://<MyDomainController>/DC=foo,FC=com","user","pass");
DirectorySearcher dSearch = new DirectorySearcher(dEntry, "(&(|(objectClass=person)(objectClass=group))
(samAccountName=jsmith))", propsToLoad);
var searchResult = s.FindOne();
var searchResultDirEntry = result.GetDirectoryEntry();

Проблема, с которой я столкнулся, заключается в том, что вышеуказанный вызов для получения DirectoryEntry для SearchResult получает больше свойств, чем я запрашиваю.Если во время отладки я наведу указатель мыши на searchResult, он будет содержать только 8 свойств, к которым я обращался, но при вызове "GetDirectoryEntry()" для запросов searchResult получаем еще больше свойств (примерно на 77 - 80 больше значений свойств).

Реальная проблема заключается в том, что он также запрашивает свойства, для которых установлен « конфиденциальный бит », например 'UnixUserPassword' , вызывая сбои аудита на DC.

Есть ли способ указать НЕ запрашивать какие-либо свойства с установленным конфиденциальным битом ИЛИ result.GetDirectoryEntry(); уважать мой "propsToLoad" и извлекать только значения свойств для свойств, которые я указал в DirectorySearcher.

1 Ответ

0 голосов
/ 12 августа 2011

Нет, не совсем. Ваш массив propsToLoad передается в поиск LDAP. Когда вы вызываете API GetDirectoryEntry (), это совершенно другой путь кода. Если вы хотите этот уровень контроля, вам нужно идти против LDAP напрямую с S.DS.Protocols.

...