Здравствуйте!
On Mon, May 31, 2004 at 10:36:38AM +0400, Alexander V Alekseev wrote:
> > Почему SEARCH-то? К Вам приходят и говорят "Я Вася, у меня то-то и то-то".
> > Вы что, действительно будете искать Васю по всем сусекам, или просто
> > подойдете к шкафу с надписью "Васи", откроете его, и вытащите карточку с
> > надписью "Вася"?
> >
> > Откуда тут берется какой-то SEARCH?!
> Вот только что посмотрел RFC-2251 . Нашел там операции > BIND, UNBIND, SEARCH, Modify, Add, Delete, Compare, Abandon и > ExtendedRequest. Если SEARCH пользоваться нельзя, то как получить > данные? (Что DN однозначно определяет одну запись - это понятно.)
Не надо получать данные.
Вам надо сделать идентификацию пользователя, это boolean операция, она возвращает либо "да", либо "нет" - нет возврата данных. У ldap тоже самое делает ldap_bind*. То есть надо в n итераций набрать достаточно данных для вызова того или иного ldap_bind*:
int ldap_bind(ld, who, cred, method) int ldap_bind_s(ld, who, cred, method) int ldap_simple_bind(ld, who, passwd) int ldap_simple_bind_s(ld, who, passwd) int ldap_kerberos_bind_s(ld, who) int ldap_kerberos_bind1(ld, who) int ldap_kerberos_bind1_s(ld, who) int ldap_kerberos_bind2(ld, who) int ldap_kerberos_bind2_s(ld, who)
( у меня достаточно старая библиотека от openldap непомнюверсии :) ), позвать этот ldap_bind и вернуть cgp/пользователю результат операции: если успешно, то считает пользователь идентифицированным, если не успешно, то не идентифицированным.
Далее, если все ldap_bind отработал успешно ( мы идентифицировали пользователя ) - надо не забыть позвать ldap_unbind*, чтобы не плодить возможного memory leak в ldapd сервисе.
Если мы не собираетесь реализовывать ldap ( ПРОТОКОЛ ) самостоятельно, то читать надо не только/сколько rfs по протолоку, а еще и rfc по c-binding: 1823. Можно читать сам rfc, можно читать документацию от Вашей ldap библиотеки.
С уважением,
Михаил Кулаков
Получено Mon May 31 07:10:01 2004
Этот архив был сгенерирован hypermail 2.1.8 : Tue 21 Feb 2006 - 03:15:01 MSK