Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.18;
Скачать: CL | DM;

Вниз

Как улучшить поиск в LDAP? Есть такая конструкция, которая   Найти похожие ветки 

 
EgorovAlex ©   (2006-03-22 10:58) [0]

сначала возвращает путь пользователя, а потом по этому пути получает самого пользователя:

Connection := CreateOleObject("ADODB.Connection");
Command := CreateOleObject("ADODB.Command");
try
 Connection.Provider := "ADsDSOObject";
 Connection.Open("Active Directory Provider");
 Command.ActiveConnection := Connection;
 Command.Properties("Page Size") := 1000;
 Command.Properties("Searchscope") := ADS_SCOPE_SUBTREE;
 Command.CommandText := "SELECT distinguishedName FROM ""LDAP://" + UserDomain + """ WHERE objectCategory=""group"" AND sAMAccountName=""" + GrpName + """";
 try
   Res := Command.Execute;
   if not Res.EOF then
     AdsPath := Res.Fields[0].Value;
 except
 end;
 Res := NULL;
finally
 Command := NULL;
 Connection.Close;
 Connection := NULL;
end;
ADsGetObject(PWideChar("LDAP://" + AdsPath), IADsGroup, Group);

Так вот вопрос: как мне сразу после поиска в Res получить группу, а не путь для неё? Т.к. в данном случае делается лишний вызов ADsGetObject.
На vbs скрипте видел, что такое возможно.


 
Alex Konshin ©   (2006-03-22 11:56) [1]

Занятно... А я и не знал, что оно и SQL синтаксис поддерживает.
Насколько я понял тебе нужно выбрать объекты, у которых objectClass=person и memberOf=<DN_нужной_группы>. Сам думай, как оно в твоем случае будет выглядеть.
Сходи любым LDAP броузером на свой домен контролер, все становится понятно.
Единственная хитрость - узнать свой собственный DN чтобы приконнектится. Например, у меня дома CN=Alex Konshin,CN=Users,DC=home
Для меня откровением было, что в первом токене нужно не логин указывать, а полное имя.


 
EgorovAlex ©   (2006-03-22 13:02) [2]

Нет, мне не пользователи нужны, а нужно мне интерфейс группы из домена получить по её имени. Я не знаю как запрос построить и как потом результат в Group: IADsGroup загнать.


 
EgorovAlex ©   (2006-03-22 15:20) [3]

Ещё нашёл описание для интерфейса IADsNameTranslate - для получения LDAP пути. Но не могу на делфи это переделать:

" Determine DNS domain name from RootDSE object.
Set objRootDSE = G("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")

" Use the NameTranslate object to find the NetBIS domain name from the
" DNS domain name.
Set objTrans = C("NameTranslate")
objTrans.Init 3, strDNSDomain
objTrans.Set 1, strDNSDomain
strNetBISDomain = objTrans.Get(3)
" Remove trailing backslash.
strNetBISDomain = Left(strNetBISDomain, Len(strNetBISDomain) - 1)

" Use the NameTranslate object to convert the NT user name to the
" Distinguished Name required for the LDAP provider.
objTrans.Init 1, strNetBISDomain
objTrans.Set 3, strNetBISDomain & "\" & strNTName
strUserDN = objTrans.Get(1)

" Bind to the user object in Active Directory with the LDAP provider.
Set objUser = G("LDAP://" & strUserDN)



Страницы: 1 вся ветка

Текущий архив: 2006.06.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.038 c
1-1146845274
Grihan
2006-05-05 20:07
2006.06.18
String to Date


2-1148884353
DesperadO666
2006-05-29 10:32
2006.06.18
Прошу помощи по RegEnumValue


1-1147371417
GanibalLector
2006-05-11 22:16
2006.06.18
TMethod


15-1148220731
DillerXX
2006-05-21 18:12
2006.06.18
type AString = array [1..maxInput] of string;


2-1148826660
Галинка
2006-05-28 18:31
2006.06.18
Вопрос к TUser и остальным знатокам ООП (навеяно соседней веткой)